Necesito reglas para desconectar alguna conexión maliciosa de Apache

10

Dejo caer todo el tráfico en los puertos, excepto en 80 para mi servidor web.

Tengo algunas reglas como esta en iptables:

iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP

Alguien que tiene más puede compartir? Sé que los piratas informáticos malos siguen actualizándose, pero algunos de ellos siempre comienzan con el mismo código. Necesito desconectar la conexión según algunos criterios. Aquí hay algunos registros de Apache (elimino ips pero cada ataque proviene de lo mismo):

Ataque 1: Esto no sé lo que estoy tratando de hacer, pero hazlo 50 veces desde la misma IP

GET / HTTP/1.1  301 224 -   Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
GET / HTTP/1.1  302 3387    -   Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22

Ataque 2: intenta obtener información sobre el servidor solamente.

GET / HTTP/1.1  301 224 http://myip:80/ Go-http-client/1.1
GET / HTTP/1.1  302 3228    http mywebsite  Go-http-client/1.1
GET /es/ HTTP/1.1   200 40947   https mywebsite Go-http-client/1.1

Ataque 3: intentan obtener acceso a una vulnerabilidad de página de inicio de sesión

GET /userlogin/login.aspx HTTP/1.1  302 186 -   -

Ataque 4: este intento de acceder a un cgi en la primera solicitud, (vea mi primera regla de iptables para descartar esto)

GET /hndUnblock.cgi HTTP/1.0    302 186 -   Wget(linux)
GET /tmUnblock.cgi HTTP/1.0 302 186 -   Wget(linux)

Soy muy nuevo con el servidor, estos 4 ataques son de solo las últimas 12 horas ... Tienen miles por semana.

Javier Palmero
fuente
No veo ningún patrón particular en estas solicitudes HTTP. ¿Cómo sabes que son maliciosos? No entiendo lo que estás tratando de lograr aquí. ¿Podría por favor editar su pregunta para aclarar? Gracias.
David Foerster
Hola David: Hace algún tiempo, cuando abro puertos como ftp, recibí el registro de la fuerza bruta, cuando veo que fail2ban en 24 horas tiene más de 100 ips en iptables. Cierro todos los puertos excepto el 80. Ahora trato de hacer reglas como fail2ban, pero para apache.
Javier Palmero
2
¿Conoces mod_security y mod_evasive para Apache?
pa4080
sí, ¿tienes reglas para compartir? o donde encontrar? Soy block ips de blocklist.de
Javier Palmero
He escrito casi todo lo que sé sobre la seguridad de Apache2.
pa4080

Respuestas:

18

Actualización: la respuesta actual se actualiza por completo.

De acuerdo con esta discusión , creé un repositorio de GitHub llamado WWW Security Assistant . Hay una rama, llamada ask_ubuntu, dedicada a esta respuesta. Todas las referencias, anteriormente disponibles aquí , se eliminan debido al límite de caracteres: están disponibles en GitHub.

A continuación, se analizan algunas formas, involucradas en un mecanismo completo, de cómo aumentar la seguridad de Apache2 en Ubuntu 16.04.

Tabla de contenidos:

  • WWW Security Assistant Script (WSAS) ► Iptables
  • Iptables - Configuración básica - Guardar y restaurar
  • ModEvasive para Apache2
  • ModEvasive ► WSAS ► Iptables
  • ModSecurity 2.9 para Apache2
  • ModSecurity OWASP Core Rule Set 3.x
  • Lista blanca de reglas de ModSecurity
  • Reglas de ModSecurity ► WSAS ► Iptables
  • ModSecurity y archivos de registro de Apache
  • Archivos de registro de ModSecurity ► Fail2Ban ► Iptables
  • ModSecurity GuardianLog ► HTTPD Guardian ► WSAS ► Iptables
  • ModSecurity GuardianLog ► Análisis personalizado HTTPD ► WSAS ► Iptables

Además, digamos que siempre es bueno usar HTTPS:


WWW Security Assistant Script ► Iptables

Aquí se presenta el guión www-security-assistant.bash. Podría ayudarlo a manejar las direcciones IP maliciosas. El guión tiene dos modos.

Modo automatico

Cuando un programa externo, como el de Apache mod_security, proporciona una $IPdirección maliciosa . En este caso, la sintaxis que invoca el script debe ser:

www-security-assistant.bash <ip-address> Guardian
www-security-assistant.bash <ip-address> ModSecurity
www-security-assistant.bash <ip-address> ModEvasive
www-security-assistant.bash <ip-address> a2Analyst

En este modo, el script proporciona dos etapas de acción y para cada acción enviará un correo electrónico a los administradores.

  • Primera etapa: durante las primeras 'transgresiones' la fuente $IPserá prohibida por un período de tiempo igual al valor de $BAN_TIME. Este modo usa el comando at.

  • Segunda etapa: cuando el número de transgresiones de ciertos $IPse iguala al valor de $LIMIT, esta $IPdirección se prohibirá permanentemente a través de Iptables y se agregará a $BAN_LIST.

Modo manual

Este modo acepta las siguientes opciones:

  • www-security-assistant.bash <ip-address> --DROP "log notes"

    Crea una entrada en el archivo /var/www-security-assistant/iptables-DROP.listy genera una regla como:

    iptables -A GUARDIAN -s $IP -j DROP
    
  • www-security-assistant.bash <ip-address> --DROP-CLEAR "log notes"

    Crea una entrada en el archivo /var/www-security-assistant/iptables-DROP-CLEAR.list, elimina la cierta regla de Iptables, elimina la $IPdel historial y de $BAN_LIST:

    iptables -D GUARDIAN -s $IP -j DROP
    
  • www-security-assistant.bash <ip-address> --ACCEPT "log notes"

    Crea solo una entrada en el archivo /var/www-security-assistant/iptables-ACCEPT.list.

  • www-security-assistant.bash <ip-address> --ACCEPT-CHAIN "log notes"

    Crea una entrada en el archivo /var/www-security-assistant/iptables-ACCEPT.listy genera una regla como:

    iptables -A GUARDIAN -s $IP -j ACCEPT
    

Dependencias

El script usa iptables-save.shy la iptablescadena GUARDIAN, explicada en la siguiente sección. Creará y mantendrá pocos archivos dentro de $WORK_DIR:

  • www-security-assistant.history - contiene los datos de las transgresiones de IP anteriores.
  • www-security-assistant.mail - el contenido del último correo electrónico enviado por el script.
  • iptables-ACCEPT.list; iptables-DROP.listy iptables-DROP-CLEAR.list.

El script necesita una configuración mínima para enviar correos electrónicos:

sudo apt install s-nail mutt mailutils postfix
sudo dpkg-reconfigure postfix  # For General type: Internet Site
echo 'Test passed.' | mail -s Test-Email email@example.com

Si hay algún servicio HTTPS configurado, su certificado TLS se puede usar dentro del servicio Postfix.

Además, el script usa at: sudo apt install at.

Instalación

  • Crear directorio de trabajo, llamémoslo /var/www-security-assistant. Descargar www-security-assistant.bashy hacerlo ejecutable:

    sudo mkdir /var/www-security-assistant
    sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/www-security-assistant.bash -O /var/www-security-assistant/www-security-assistant.bash
    sudo chmod +x /var/www-security-assistant/www-security-assistant.bash
  • Poner a www-security-assistant.bashdisposición como comando personalizado:

    sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
  • Conceder permiso para www-dataejecutar www-security-assistant.bashsin contraseña a través de sudo. Use el siguiente comando para crear y editar de forma segura un nuevo archivo con una sudoersregla adicional ' ':

    sudo visudo -f /etc/sudoers.d/www-security-assistant

    Agregue la siguiente línea dentro del archivo: guarde el archivo y salga:

    www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
  • Tweak www-security-assistant.bash. Cambie al menos el valor de la variable $EMAIL_TO.

Chequeo

  • Represéntese como $AGENTy verifique si el MODO automático funciona correctamente:

    www-security-assistant.bash 192.168.1.177 Guardian

    Luego revise su correo electrónico, escriba iptables -L GUARDIAN -n, revise los archivos www-security-assistant.historyy www-security-assistant.mail. Ejecute el comando anterior 5 veces y revise los archivos iptables-DROP.listy iptables-CURRENT.conf.

  • Compruebe si el MODO manual funciona correctamente; agregue su host local a la Lista blanca:

    www-security-assistant.bash 127.0.0.1 --ACCEPT "Server's localhost IP"

    Luego verifique el archivo iptables-ACCEPT.list.


El resto de este tutorial es cómo integrarse www-security-assistantcon su sistema.


Iptables - Configuración básica - Guardar y restaurar

Configuracion basica

Lea este manual antes de agregar las siguientes reglas.

sudo iptables -F

sudo iptables -I INPUT 1 -i lo -j ACCEPT
sudo iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# This rule may lock you out of the system!
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT

Antes de realizar las siguientes acciones, abra una nueva conexión SSH e intente iniciar sesión en su sistema para verificar si todo funciona bien.

Guardar y restaurar

Esto podría lograrse a través de scripts personalizados, que guardarán y restaurarán el iptablesconing durante el proceso de parada de arranque (o reinicio) del sistema. (Si usamos UFW para configurar las reglas de Iptables, este paso no es necesario).

printf '#!/bin/sh\n/sbin/iptables-save > /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-save.sh
printf '#!/bin/sh\n/sbin/iptables-restore < /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-restore.sh
sudo chmod +x /var/www-security-assistant/iptables-restore.sh /var/www-security-assistant/iptables-save.sh
sudo ln -s /var/www-security-assistant/iptables-save.sh /etc/network/if-post-down.d/iptables-save
sudo ln -s /var/www-security-assistant/iptables-restore.sh /etc/network/if-pre-up.d/iptables-restore

Crear nueva cadena

Cree una nueva cadena, llamada GUARDIANe insértela como número 3 en la INPUTcadena:

sudo iptables -N GUARDIAN
sudo iptables -I INPUT 3 -j GUARDIAN

Chequeo

Reinicie el sistema y verifique la configuración. Por favor, use sudo systemctl reboot(no use la opción de fuerza reboot -f). Cuando el sistema vuelve a estar en línea, podemos verificar si la cadena recién creada existe:

sudo iptables -L GUARDIAN -n


ModEvasive para Apache2

ModEvasive es un módulo de maniobras evasivas para Apache para proporcionar acciones evasivas en caso de un ataque HTTP DoS o DDoS o un ataque de fuerza bruta. Lee mas...

Instalación

  • Instalar y habilitar el módulo:

    sudo apt install libapache2-mod-evasive
    sudo a2enmod evasive
  • Cree un directorio de registros y hágalo accesible para www-data:

    sudo mkdir -p /var/log/apache2_mod_evasive
    sudo chown www-data /var/log/apache2_mod_evasive
  • Ajuste la configuración básica: descomente y edite ciertas directivas en el archivo de configuración:

    /etc/apache2/mods-enabled/evasive.conf
  • Reinicia Apache: sudo systemctl restart apache2.service.

Chequeo

  • Abra una página web desde su servidor y actualice la ventana del navegador varias veces de forma intensiva (presione F5): debe obtener un mensaje de error prohibido 403 . En el directorio de registro, se generará un nuevo archivo de bloqueo. Este archivo debe eliminarse para detectar más transgresiones de esta dirección IP.


ModEvasive ► WSAS ► Iptables

Aquí lo configuraremos mod_evasivepara hablar a iptablestravés de www-security-assistant.bash, creado en la sección anterior.

  • Edite /etc/apache2/mods-available/evasive.confde esta manera:

    <IfModule mod_evasive20.c>
        DOSHashTableSize    3097
        DOSPageCount        9
        DOSSiteCount        70
        DOSPageInterval     2
        DOSSiteInterval     2
        DOSBlockingPeriod   10
    
        #DOSEmailNotify     [email protected]
        DOSLogDir           "/var/log/apache2_mod_evasive"
        DOSSystemCommand    "sudo /var/www-security-assistant/www-security-assistant.bash %s 'ModEvasive' 'AutoMode' >> /var/www-security-assistant/www-security-assistant.execlog 2>&1"
    </IfModule>
  • Cree un archivo de registro y reinicie Apache:

    sudo touch /var/www-security-assistant/www-security-assistant.execlog && sudo chown www-data /var/www-security-assistant/www-security-assistant.execlog

Para probar esta configuración se puede simular ataque DDoS a través del F5método, mencionado anteriormente, o se puede utilizar una comandos como ab, hping3, etc.

Atención: tenga cuidado porque la iptablesregla, utilizada en WSAS, DROP todas las conexiones nuevas de la fuente $IP, incluidas sus conexiones SSH. Es bueno tener una forma de respaldo para conectarse al servidor durante las pruebas. Puede cambiar esta regla para que funcione solo con los puertos HTTP / HTTPS.


ModSecurity 2.9 para Apache2

ModSecurity es un motor de firewall de aplicaciones web que proporciona muy poca protección por sí solo. Para ser útil, ModSecurity debe configurarse con reglas. Con el fin de permitir a los usuarios aprovechar al máximo ModSecurity de fábrica, Trustwave's Spider Labs proporciona un conjunto de reglas certificado y gratuito ... Leer más ...

Instalación

  • Instalar y habilitar el módulo:

    sudo apt install libapache2-mod-security2
    sudo a2enmod security2
  • Crear archivo de configuración:

    sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

    ¡Lee y edita /etc/modsecurity/modsecurity.confcuidadosamente! Agregue o cambie al menos las siguientes directivas:

    # -- Rule engine initialization ----------------------------------------------
    SecRuleEngine On
    
    # -- Debug log configuration -------------------------------------------------
    SecDebugLogLevel 2
    SecDebugLog "/var/log/apache2_mod_security/modsec_debug.log"
    
    # -- Audit log configuration -------------------------------------------------
    SecAuditLog "/var/log/apache2_mod_security/modsec_audit.log"
    
    # -- Guardian log configuration -------------------------------------------------
    SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
  • El archivo /etc/apache2/mods-enabled/security2.confinvolucra /etc/modsecurity/modsecurity.confla configuración de Apache. En esta etapa security2.confse verá así:

    <IfModule security2_module>
        SecDataDir /var/cache/modsecurity
        IncludeOptional /etc/modsecurity/*.conf
    </IfModule>
  • Crear directorio de registro:

    sudo mkdir -p /var/log/apache2_mod_security
  • Configurar la rotación del registro. Primero cree el archivo de configuración:

    sudo cp /etc/logrotate.d/apache2 /etc/logrotate.d/apache2-modsec

    Luego edite el nuevo archivo de esta manera:

    /var/log/apache2_mod_security/*.log {  }
  • Reinicia Apache.

Chequeo

  • Cree un archivo de configuración adicional /etc/modsecurity, llámelo, por ejemplo z-customrules.conf, y agregue la siguiente regla como su contenido:

    # Directory traversal attacks
    SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109"

    Reiniciar el servidor: sudo systemctl restart apache2.service. Abre tu navegador y escribe https://example.com/?abc=../. El resultado será: 403 Prohibido . Consulte los archivos de registro /var/log/apache2_mod_securitypara obtener más detalles.

  • Para hacer las cosas más divertidas, coloque el script issues.phpen un lugar apropiado dentro de usted DocumentRoot(aquí supongo que este lugar es /var/www/html):

    sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/appendix/var/www/html/issues.php -O /var/www/html/issues.php

    Luego modifique la regla anterior de la siguiente manera:

    # Directory traversal attacks with redirection (or use URL instead of URI: redirect:'https://example.com/issues.php')
    SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109, redirect:'/issues.php'"

    Reinicie Apache, luego abra su navegador y escriba https://example.com/?abc=../;-) La idea está tomada del script del SE BotLovin.cs.

  • Edite /etc/modsecurity/z-customrules.confuna vez más y comente (desactive) la regla: este fue solo un ejemplo de prueba y está cubierto por OWASP CRS, que se describe en la siguiente sección.

  • Aquí hay otro ejemplo en el que redirigiremos todas las wp-adminsolicitudes de página, pero excepto estas de ciertas direcciones IP (tenga en cuenta la chain):

    # Block wp-admin access
    SecRule REQUEST_URI "^/wp-admin" "id:108, log, deny, status:403, t:lowercase, chain, redirect:'/issues.php'"
        SecRule REMOTE_ADDR "!@ipMatch 192.168.1.11,99.77.66.12"

    Aquí tenemos dos acciones disruptivas: (1) deny, status:403y (2) redirect:'/issues.php'. En realidad, no necesitamos la denyacción porque será anulada por la redirectacción.


ModSecurity OWASP Core Rule Set 3.x

En Ubuntu 16.04 puede instalar 2.x RSE: apt install modsecurity-crs. Aquí instalaremos CSR 3.x , se proporcionan instrucciones detalladas en el manual de instalación ( gites obligatorio).

Instalación

  • Clonar CSR en la carpeta /usr/share/modsecurity-crs.3:

    sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
  • Actualice y renueve automáticamente la base de datos GeoIP. (GeoIP DB ya no se incluye con el CRS. En su lugar, se recomienda descargarlo regularmente). El script util/upgrade.pyofrece esta funcionalidad. Puede usarlo de la siguiente manera en cron - sudo crontab -e:

    0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2>&1
  • Crear archivos de configuración:

    sudo cp /usr/share/modsecurity-crs.3/crs-setup.conf{.example,}
    sudo cp /usr/share/modsecurity-crs.3/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf{.example,}
    sudo cp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf{.example,}

    ¡Lea y edite estos archivos con cuidado! Descomente al menos la SecGeoLookupDBdirectiva:

    SecGeoLookupDB util/geo-location/GeoIP.dat
  • Aplica la configuración de Apache. Edite /etc/apache2/mods-available/security2.confde esta manera:

    <IfModule security2_module>
        SecDataDir /var/cache/modsecurity
        IncludeOptional /etc/modsecurity/*.conf
        IncludeOptional /usr/share/modsecurity-crs.3/crs-setup.conf
        IncludeOptional /usr/share/modsecurity-crs.3/rules/*.conf
    </IfModule>

    Guarde el archivo y luego reinicie Apache.


Lista blanca de reglas de ModSecurity

La inclusión en la lista blanca de las reglas de ModSecurity se puede realizar a través de las siguientes directivas de ModSec, que se pueden usar en todo el sistema o dentro de la configuración del host virtual, también globalmente, para directorios específicos o coincidencias de ubicación:

SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById

Deshabilitar mod_security2para PhpMyAdmin. Cambiar /etc/phpmyadmin/apache.confde esta manera:

<Directory /usr/share/phpmyadmin>
    <IfModule security2_module>
        SecRuleEngine Off
    </IfModule>
</Directory>

Deshabilitar reglas específicas para cierto directorio:

<Directory /var/www/html>
    <IfModule security2_module>
        SecRuleRemoveById 973301
    </IfModule>
</Directory>

Deshabilitar reglas a nivel mundial. Para este propósito, debemos agregar nuestras directivas en algún lugar de los archivos de configuración de Apache: /etc/modsecurity/z-customrules.confes un buen lugar.

  • Deshabilite las reglas dentro de toda la configuración de Apache:

    SecRuleRemoveById 973301 950907
  • Incluya en la lista blanca una dirección IP para que pueda pasar por ModSecurity:

    SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
  • Deshabilitar reglas dentro de la coincidencia de directorio:

    <Directory /var/www/mediawiki/core>
        SecRuleRemoveById 973301 950907
    </Directory>
  • Actualice la acción de la regla por su ID dentro de la coincidencia de ubicación:

    <LocationMatch "/index.php.*">
        SecRuleUpdateActionById 973301 "pass"
        SecRuleUpdateActionById 950907 "pass"
    </LocationMatch>

En los ejemplos anteriores asumimos eso 973301y 950907son ID de reglas que obstruyen el trabajo normal de nuestras aplicaciones web. Podemos encontrar reglas como estas mediante un análisis de modsec_audit.log.


Reglas de ModSecurity ► WSAS ► Iptables

Aquí se dan algunos ejemplos más de cómo crear SecRules personalizadas, y también cómo podemos llamar a WWW Security Assistant Script (WSAS) a través de ellas.

Configuración inicial

Necesitamos un script de inicio adicional modsecurity-assistant.sh. La razón es que la execacción de ModSecurity tiene una sintaxis demasiado simple y limitada.

sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/modsecurity-assistant.sh -O /var/www-security-assistant/modsecurity-assistant.sh
sudo chmod +x /var/www-security-assistant/modsecurity-assistant.sh

Si mira dentro del script, verá algunas variables que ModSecurity exporta. Estos son: $REQUEST_URI, $ARGS, $SERVER_NAME, $REMOTE_ADDR, $REMOTE_HOSTy $UNIQUE_ID. Las otras variables se explican dentro del script.

Crea una regla personalizada y llama a nuestros scripts a través de ella

Primero, creemos una regla que se ejecutará modsecurity-assistant.sh(y llamará www-security-assistant.bash) cuando el URI de solicitud contenga una palabra incluida en nuestra lista negra. Abra /etc/modsecurity/z-customrules.confy agregue las siguientes líneas en la parte inferior:

# REQUEST_URI words blacklist
#
SecRule REQUEST_URI "@pmFromFile /var/www-security-assistant/modsecurity-uri-black.list" \
    "id:150, log, t:lowercase, chain, \
    drop, deny, status:403, redirect:'/issues.php'"
    SecRule REMOTE_ADDR "!@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
        "setenv:REMOTE_HOST=%{REMOTE_HOST}, \
         setenv:ARGS=%{ARGS}, \
         exec:/var/www-security-assistant/modsecurity-assistant.sh"
  • REQUEST_URI- esta variable contiene el URI completo de la solicitud actual. La regla podría ser más amplia:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...

  • @pmFromFileleerá el archivo modsecurity-uri-black.listque contiene la lista de frases, donde cada frase o palabra específica se coloca en una nueva línea. Puede recopilar palabras y frases interesantes de los archivos de registro. Si hay una coincidencia particular entre REQUEST_URIy nuestra lista de patrones, se aplicará la regla. El archivo puede estar vacío, pero debe crearlo ( touch).

  • La logacción creará entradas de registro en los archivos de registro para esta regla con id:150.

  • drop, deny(con status) y las redirectacciones pertenecen al grupo de acciones disruptivas , deben estar al comienzo de la regla chain(si hay una cadena). La segunda acción anulará la primera y la tercera anulará la segunda, por lo que debe elegir qué desea realizar y puede eliminar las demás.

  • chainacción llamará a la siguiente regla de la cadena, tenga en cuenta que la segunda regla, no tiene id.

  • REMOTE_ADDR contiene la dirección IP de la solicitud.

  • @ipMatchFromFileaparecerá el archivo modsecurity-ip-white.listque contiene una lista blanca de direcciones IP, separadas en nuevas líneas. Las entradas CIDR también son aceptables. Debido a que la acción disruptiva siempre se encuentra en la regla principal de la cadena, se aplicará, pero cuando cierta IP está en esta lista blanca, la execacción no se aplicará. El archivo puede estar vacío, pero debe crearlo ( touch).

  • execaction llamará a nuestro script externo. Esta acción no es disruptiva y se ejecutará cuando la regla actual regrese verdadero. Cuando se aplica esta acción, la IP remota se procesará a través de nuestros scripts.

  • setenvesta acción exportará ciertas variables internas =%{...} como envvars, los nombres exportados pueden ser diferentes de los internos. Algunas variables deben exportarse manualmente, otras se exportan automáticamente, probablemente sea un pequeño error (en algunos casos, la exportación manual con los mismos nombres, por ejemplo setenv:REQUEST_URI=%{REQUEST_URI}, causará un valor en blanco de la variable exportada).

Chequeo

Supongamos que no tiene Joomla en su servidor, edite el archivo modsecurity-uri-black.listy agregue una línea con contenido /joomla. Luego escriba su navegador https://exemple.com/joomla. Debería ser redirigido y bloqueado a través de Iptables. Borre los registros sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note', agregue su IP modsecurity-ip-white.listy vuelva a hacer el ejercicio. Ahora debería ser redirigido, pero no bloqueado.

Conecte nuestros scripts con OWASP Core Rule Set 3.x

Para hacerlo, actualizaremos la acción predeterminada de las Reglas de modo de anomalía (949110 y 959100). Para este propósito, edite el archivo /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.confy agregue las siguientes líneas en la parte inferior:

# -- Anomaly Mode - Update actions by ID -----
#

SecRuleUpdateActionById 949110 "t:none, drop, deny, status:403, redirect:'/issues.php', \
     setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
     exec:/var/www-security-assistant/modsecurity-assistant.sh"

SecRuleUpdateActionById 959100 "t:none, drop, deny, status:403, redirect:'/issues.php', \
     setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
     exec:/var/www-security-assistant/modsecurity-assistant.sh"

# -- Anomaly Mode - Whitelist some URI and IP addresses -----
#

SecRule REQUEST_URI "^/wp-admin/admin-ajax.php*|^/index\.php\?title=.*&action=(submit|raw&ctype=text/javascript|raw&ctype=text/css)$" \
    "id:'999010', t:none, phase:1, pass, \
     ctl:ruleRemoveById=949110, \
     ctl:ruleRemoveById=959100"

SecRule REMOTE_ADDR "@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
    "id:'999020', t:none, phase:1, pass, \
     ctl:ruleRemoveById=949110, \
     ctl:ruleRemoveById=959100"

Chequeo

No olvide reiniciar (o volver a cargar) Apache para aplicar los cambios de configuración. No olvide borrar los registros periódicamente durante las pruebas, de lo contrario puede ser bloqueado permanentemente :-)

Simular el ataque transversal del directorio:

https://example.com/?abc=../../../                         # This should be redirected and blocked
https://example.com/wp-admin/admin-ajax.php?abc=../../../  # This should pass because of the whitelist rule

Simular ataque de inyección SQL:

https://example.com/?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%20'1
https://example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&password=foo


ModSecurity y archivos de registro de Apache

El servidor web Apache se puede configurar para brindarle al administrador del servidor información importante sobre cómo está funcionando ... La principal vía para proporcionar comentarios al administrador es mediante el uso de archivos de registro. Lee mas...

ModSecurity tiene un poderoso mecanismo de registro. Según la directiva SecGuardianLog, proporciona una fuente de registro especialmente diseñada para trabajar con scripts externos.

Actualmente, la única herramienta que se sabe que funciona con el registro de guardian es httpd-guardian, que forma parte del proyecto de herramientas httpd de Apache . La httpd-guardianherramienta está diseñada para defenderse contra ataques de denegación de servicio. Utiliza el blacklist toolpara interactuar con un cortafuegos basado en iptables ... y pone en una lista negra dinámicamente las direcciones IP infractoras. Lee mas...


Archivos de registro de ModSecurity ► Fail2Ban ► Iptables

Es posible configurar Fail2Ban para el análisis de datos de los archivos de registro de Apache. modsec_audit.loges probablemente la mejor opción, pero vea también las secciones de las que hablamos SecGuardianLog.

Tenga cuidado de que SecAuditLogRelevantStatusen /etc/modsecurity/modsecurity.confse comente. De lo contrario, todos los que reciban una página de error 404 serían bloqueados por fail2ban.

SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"

Actualmente Fail2Ban no está implementado de ninguna manera en este proyecto.


ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables

httpd-guardian- detectar ataques DoS mediante el monitoreo de solicitudes Apache Security, Copyright (C) 2005 Ivan Ristic - está diseñado para monitorear todas las solicitudes del servidor web a través del mecanismo de registro canalizado. Realiza un seguimiento de la cantidad de solicitudes enviadas desde cada dirección IP ... httpd-guardian puede emitir una advertencia o ejecutar un script para bloquear la dirección IP ...

Este script se puede usar con el mecanismo de registro de Apache2 o con ModSecurity (mejor).

Instalación y configuración dentro de las circunstancias actuales

Descargar httpd-guardiany hacerlo ejecutable:

sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-guardian.pl -O /var/www-security-assistant/httpd-guardian.pl
sudo chmod +x /var/www-security-assistant/httpd-guardian.pl

Lea las líneas 98-119para ver cómo se conecta el script con nuestro script WSAS.

Aplique el siguiente cambio dentro de la configuración de Apache ( /etc/modsecurity/modsecurity.conf), luego reinícielo:

#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"

Chequeo

Para probar el script, desactive ModEvasive ( sudo a2dismod evasiveno olvide habilitarlo más tarde) y reinicie Apache. Luego tailel registro ejecutivo:

tail -F /var/www-security-assistant/www-security-assistant.execlog

Y desde otra instancia, realice un ataque DoS, por ejemplo, use abde esta manera:

for i in {1..20}; do (ab -n 200 -c 10 https://example.com/ &); done


ModSecGuardianLog ► Análisis personalizado ► WSAS ► Iptables

Aquí se presenta un script simple, llamado httpd-custom-analyze.bash, que no es algo especial, pero podría ser un buen ejemplo. Sus características se describen dentro del cuerpo del script.

Instalación y configuración

Descargar httpd-custom-analyze.bashy hacerlo ejecutable:

sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-custom-analyze.bash -O /var/www-security-assistant/httpd-custom-analyze.bash
sudo chmod +x /var/www-security-assistant/httpd-custom-analyze.bash

Aplique el siguiente cambio dentro de la configuración de Apache ( /etc/modsecurity/modsecurity.conf) y reinícielo:

#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
#SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
SecGuardianLog "|/var/www-security-assistant/httpd-custom-analyze.bash"
  • El script llamará a WSAS cuando se alcance el umbral: lea la línea 86y 35.

  • Para que ambos httpd-scripts funcionen simultáneamente, edite modsecurity.confy canalice SecGuardianLoga ambos.

  • Para realizar una prueba, siga los consejos de la sección anterior.

pa4080
fuente
Por favor, no edite con frecuencia su publicación. La edición constante de su publicación muchas veces en un día mantiene esto en la página principal y también genera ruido para los moderadores. En su lugar, considere redactar su contenido en otra página o en un editor de texto , luego edítelo en masa, en lugar de editar los detalles individualmente. (Esta publicación está bloqueada durante una hora para limitar temporalmente la edición que se realiza aquí temporalmente)
Thomas Ward
1
Gracias por el comentario, @ThomasWard. ¡Lo recordare! ¿No es una buena idea tener algo como sandbox en la página Usuarios, junto a Editar perfil y configuración ?
pa4080
1
Ha sido propuesto y creo rechazado. Lo que sugeriría es que realice cambios sin guardar, y almacene una copia de su pregunta tal como está en un archivo de texto en su sistema, luego puede editar eso, copiarlo nuevamente cuando desee editar la publicación, y luego arreglo para rebajas y tal. Además, todos los tachados están ... haciendo que las cosas sean difíciles de leer. Considere simplemente eliminar esas secciones en su lugar. (El historial de revisión retendrá los datos)
Thomas Ward
Es ridículo que Stack Exchange no permita no subir las ediciones a la portada
Franck Dernoncourt
1

Me doy cuenta de que pa4080 dio una respuesta detallada y probablemente muy útil para ocuparse de todo esto por su cuenta. Si bien resolver los problemas por su cuenta puede sentirse bien, esto también puede llevar mucho tiempo .

  1. Familiarícese con Cloudflare ya que brindan protección DDoS gratuita.
  2. Si actualmente solo usa Apache, considere aprender cómo funciona NGINX para equilibrar su carga. NGINX es excelente para equilibrar la carga de Apache como se muestra aquí y aquí .
  3. Revise los consejos de Apache para seguridad en sus documentos .
Asfixia
fuente