Preciso de regras para soltar algumas conexões maliciosas do Apache

8

Eu derrubo todo o tráfego nas portas, exceto em 80 para o meu servidor da Web.

Eu tenho algumas regras como esta no iptables:

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

Alguém que tem mais pode compartilhar? Eu sei que os hackers ruins ainda estão atualizando, mas alguns deles sempre começam com o mesmo código. Eu preciso Soltar a conexão com base em alguns critérios. Aqui estão alguns log Apache (eu removo ips mas cada ataque vem do mesmo):

Ataque 1: Isso eu não sei o que estou tentando fazer, mas faço isso 50 vezes do mesmo 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: tente obter informações apenas sobre o servidor.

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: eles tentam acessar uma vulnerabilidade na página de login

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

Ataque 4: tente acessar um cgi no primeiro pedido, (veja minha primeira regra do iptables para soltar isso)

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

Sou muito novo com o servidor, esses 4 ataques são das últimas 12 horas ... Tenho milhares por semana.

    
por Javier Palmero 04.06.2017 / 18:28

1 resposta

15
  

Atualização: A resposta atual está completamente atualizada.

     

De acordo com esta discussão eu criei um GitHub   repositório chamado Assistente de Segurança da WWW . Existe um   ramo, chamado ask_ubuntu , dedicado a esta resposta.   Todas as referências, anteriormente disponíveis aqui , foram removidas devido ao limite de caracteres - elas estão disponíveis no GitHub.

Aqui estão algumas formas pouco exploradas, envolvidas em um mecanismo completo, como aumentar a segurança do Apache2 no Ubuntu 16.04.

Tabela de conteúdo:

  • Script do assistente de segurança da WWW (WSAS) ► Iptables
  • Iptables - Configuração básica - Salvar e restaurar
  • ModEvasive para Apache2
  • ModEvasive ► WSAS ► Iptables
  • ModSecurity 2.9 para Apache2
  • Conjunto de regras principais do OWASP do ModSecurity 3.x
  • ModSecurity Rules Whitelisting
  • Regras do ModSecurity ► WSAS ► Iptables
  • ModSecurity e arquivos de log do Apache
  • Arquivos de log do ModSecurity ► Fail2Ban ► Iptables
  • GuardianLog do ModSecurity ► HTTPD Guardian ► WSAS ► Iptables
  • ModSecurity GuardianLog ► Análise personalizada de HTTPD ► WSAS ► Iptables

Além disso, vamos sempre dizer que é bom usar HTTPS:


Script do Assistente de Segurança da WWW ► Iptables

Aqui é apresentado o script www-security-assistant.bash . Pode ajudá-lo com o tratamento dos endereços IP maliciosos. O script tem dois modos.

Modo automático

Quando um programa externo, como mod_security do Apache, fornece um endereço $IP malicioso. Nesse caso, a sintaxe que chama o script deve 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

Neste modo, o script fornece dois estágios de ação e, para cada ação, ele envia um email para o (s) administrador (es).

  • Primeiro estágio: para as primeiras 'transgressões' a fonte $IP será banida por um período de tempo igual ao valor de $BAN_TIME . Este modo usa o comando at .

  • Segundo estágio: quando o número de transgressões de determinado $IP for igual ao valor de $LIMIT , esse endereço $IP será banido permanentemente por meio de Iptables e será ser adicionado ao $BAN_LIST .

Modo manual

Este modo aceita as seguintes opções:

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

    Cria uma entrada no arquivo /var/www-security-assistant/iptables-DROP.list e gera uma regra como:

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

    Cria uma entrada no arquivo /var/www-security-assistant/iptables-DROP-CLEAR.list , remove a regra Iptables, remove o $IP do histórico e do $BAN_LIST :

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

    Cria apenas uma entrada no arquivo /var/www-security-assistant/iptables-ACCEPT.list .

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

    Cria uma entrada no arquivo /var/www-security-assistant/iptables-ACCEPT.list e gera uma regra como:

    iptables -A GUARDIAN -s $IP -j ACCEPT
    

Dependências

O script usa iptables-save.sh e iptables chain GUARDIAN , explicados na próxima seção. Ele criará e manterá alguns arquivos dentro do $WORK_DIR :

  • www-security-assistant.history - contém os dados das transgressões do IP anterior.
  • www-security-assistant.mail - o conteúdo do último e-mail enviado pelo script.
  • %código%; iptables-ACCEPT.list e iptables-DROP.list .

O script precisa de uma configuração mínima para enviar e-mails:

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 protected]

Se houver algum serviço HTTPS configurado, seu certificado TLS poderá ser usado no serviço Postfix.

Além disso, o script usa iptables-DROP-CLEAR.list : at .

Instalação

  • Crie um diretório de trabalho, vamos chamá-lo de sudo apt install at . Faça o download de /var/www-security-assistant e torne-o executável:

    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
    
  • Disponibilize www-security-assistant.bash como comando personalizado:

    sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
    
  • Conceda permissão a www-security-assistant.bash para executar www-data sem senha via www-security-assistant.bash . Use o seguinte comando para create e edite com segurança um novo arquivo com uma regra adicional ' sudo ':

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

    Adicione a seguinte linha dentro do arquivo - salve o arquivo e saia:

    www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
    
  • Ajuste sudoers . Altere pelo menos o valor da variável www-security-assistant.bash .

Check-up

  • Represente-se como $EMAIL_TO e verifique se o modo automático funciona corretamente:

    www-security-assistant.bash 192.168.1.177 Guardian
    

    Em seguida, verifique seu e-mail, digite $AGENT , revise os arquivos iptables -L GUARDIAN -n e www-security-assistant.history . Execute o comando acima 5 vezes e revise os arquivos www-security-assistant.mail e iptables-DROP.list .

  • Verifique se o Manual MODE funciona corretamente - adicione seu localhost à Lista Branca:

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

    Em seguida, verifique o arquivo iptables-CURRENT.conf .


  

A parte restante deste tutorial é como integrar o iptables-ACCEPT.list ao seu sistema.


Iptables - Configuração básica - Salvar e restaurar

Configuração básica

Por favor, leia este manual antes de adicionar as seguintes regras.

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 as próximas ações, abra uma nova conexão SSH e tente fazer login no sistema para verificar se tudo está funcionando bem.

Salvar e restaurar

Isso pode ser feito por meio de scripts personalizados, que salvam e restauram o www-security-assistant coning durante o processo de início de parada (ou reinicialização) do sistema. (Se estivermos usando o UFW para configurar as regras do Iptables, essa etapa não será necessária.)

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

Criar nova cadeia

Crie uma nova cadeia, chamada iptables e insira-a como número 3 na cadeia GUARDIAN :

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

Check-up

Reinicialize o sistema e verifique a configuração. Por favor use INPUT (não use a opção de força sudo systemctl reboot ). Quando o sistema está on-line novamente, podemos verificar se a cadeia recém-criada existe:

sudo iptables -L GUARDIAN -n


ModEvasive para Apache2

  

ModEvasive é um módulo de manobras evasivas para o Apache fornecer   ação evasiva no caso de um ataque HTTP DoS ou DDoS ou brute   ataque de força. Leia mais ...

Instalação

  • Instale e ative o módulo:

    sudo apt install libapache2-mod-evasive
    sudo a2enmod evasive
    
  • Crie o diretório de registro e torne-o acessível para reboot -f :

    sudo mkdir -p /var/log/apache2_mod_evasive
    sudo chown www-data /var/log/apache2_mod_evasive
    
  • Ajuste a configuração básica - descomente e edite certas diretivas no arquivo de configuração:

    /etc/apache2/mods-enabled/evasive.conf
    
  • Reinicie o Apache: www-data .

Check-up

  • Abra uma página da web no servidor e atualize a janela do navegador algumas vezes intensivamente (pressione sudo systemctl restart apache2.service ) - você deve receber a mensagem de erro 403 Forbidden . No diretório de log, será gerado um novo arquivo de bloqueio. Este arquivo deve ser excluído para posterior detecção de transgressões a partir deste endereço IP.


ModEvasive ► WSAS ► Iptables

Aqui, configuraremos F5 para falar com mod_evasive por meio do iptables , criado na seção acima.

  • Edite www-security-assistant.bash desta forma:

    <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>
    
  • Crie um arquivo de log e reinicie o Apache:

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

Para testar essa configuração, podemos simular o ataque DDOS por meio do método /etc/apache2/mods-available/evasive.conf , mencionado acima, ou podemos usar comandos como F5 , ab , etc.

Atenção: Tenha cuidado porque a regra hping3 , usada no WSAS, DROPARÁ todas as conexões novas da origem iptables , incluindo suas conexões SSH. É bom ter uma maneira de backup para se conectar ao servidor durante os testes. Você pode alterar essa regra para funcionar apenas com as portas HTTP / HTTPS.


ModSecurity 2.9 para Apache2

  

ModSecurity é um mecanismo de firewall de aplicativos da Web que oferece   pouca proteção por conta própria. Para se tornar útil, o ModSecurity   deve ser configurado com regras. Para permitir que os usuários aproveitem   Vantagem do ModSecurity, o Spider Labs da Trustwave é   fornecendo um conjunto de regras certificadas grátis ... Leia mais ...

Instalação

  • Instale e ative o módulo:

    sudo apt install libapache2-mod-security2
    sudo a2enmod security2
    
  • Criar arquivo de configuração:

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

    Leia e edite $IP cuidadosamente! Adicione ou altere pelo menos as seguintes diretivas:

    # -- 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
    
  • O arquivo /etc/modsecurity/modsecurity.conf envolve /etc/apache2/mods-enabled/security2.conf na configuração do Apache. Neste estágio, /etc/modsecurity/modsecurity.conf deve ser assim:

    <IfModule security2_module>
        SecDataDir /var/cache/modsecurity
        IncludeOptional /etc/modsecurity/*.conf
    </IfModule>
    
  • Criar diretório de registro:

    sudo mkdir -p /var/log/apache2_mod_security
    
  • Rotação do log de configuração. Primeiro crie o arquivo de configuração:

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

    Em seguida, edite o novo arquivo desta maneira:

    /var/log/apache2_mod_security/*.log { … }
    
  • Reinicie o Apache.

Check-up

  • Crie um arquivo de configuração adicional em security2.conf , chame-o por exemplo /etc/modsecurity e adicione a seguinte regra como seu conteúdo:

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

    Reinicie o servidor: z-customrules.conf . Abra seu navegador e digite sudo systemctl restart apache2.service . O resultado será: 403 Proibido . Verifique os arquivos de log em https://example.com/?abc=../ para mais detalhes.

  • Para tornar as coisas mais divertidas , coloque o script /var/log/apache2_mod_security em um local apropriado dentro do seu issues.php (aqui eu estou assumindo que este lugar é DocumentRoot ):

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

    Em seguida, modifique a regra acima da seguinte maneira:

    # 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 o Apache, abra seu navegador e digite /var/www/html ;-) A ideia é emprestada do script do SE https://example.com/?abc=../ .

  • Edite BotLovin.cs novamente e comente (desative) a regra - este foi apenas um exemplo de teste e é coberto pelo OWASP CRS, descrito na próxima seção.

  • Este é outro exemplo em que redirecionaremos todas as solicitações de páginas /etc/modsecurity/z-customrules.conf , mas exceto essas de determinados endereços IP (observe o wp-admin ):

    # 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"
    

    Aqui temos duas ações disruptivas: (1) chain e (2) deny, status:403 . Na verdade, não precisamos da ação redirect:'/issues.php' porque ela será substituída pela ação deny .


Conjunto de Regras Principais do ModSecurity OWASP 3.x

No Ubuntu 16.04 você pode instalar o CSR 2.x: redirect . Aqui vamos instalar o CSR 3.x , instruções detalhadas são fornecidas dentro do Manual de instalação ( apt install modsecurity-crs é obrigatório).

Instalação

  • Clone o CSR na pasta git :

    sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
    
  • Atualize e renove automaticamente o banco de dados GeoIP. (O banco de dados GeoIP não está mais incluído no CRS. Em vez disso, é recomendável fazer o download regularmente.) O script /usr/share/modsecurity-crs.3 traz essa funcionalidade. Você pode usá-lo da seguinte forma no cron - util/upgrade.py :

    0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2>&1
    
  • Crie arquivos de configuração:

    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,}
    

    Leia e edite esses arquivos com cuidado! Descomente pelo menos sudo crontab -e directive:

    SecGeoLookupDB util/geo-location/GeoIP.dat
    
  • Aplique a configuração do Apache. Edite SecGeoLookupDB desta forma:

    <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>
    

    Salve o arquivo e reinicie o Apache.


Regras de segurança do Mod Whitelisting

A lista branca de regras do ModSecurity pode ser feita através das seguintes diretivas do ModSec, que podem ser usadas em todo o sistema ou na configuração do host virtual, também globalmente, para diretórios específicos ou correspondências de localização:

SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById

Desative /etc/apache2/mods-available/security2.conf para o PhpMyAdmin. Altere mod_security2 desta forma:

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

Desativar regras específicas para determinado diretório:

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

Desative as regras globalmente. Para isso, devemos adicionar nossas diretivas em algum lugar nos arquivos de configuração do Apache: /etc/phpmyadmin/apache.conf é um bom lugar.

  • Desabilite as regras em toda a configuração do Apache:

    SecRuleRemoveById 973301 950907
    
  • Coloque na lista de permissões um endereço IP para poder passar pelo ModSecurity:

    SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
    
  • Desativar regras na correspondência de diretório:

    <Directory /var/www/mediawiki/core>
        SecRuleRemoveById 973301 950907
    </Directory>
    
  • Atualize a ação da regra por seu ID na correspondência de local:

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

Nos exemplos acima, assumimos que /etc/modsecurity/z-customrules.conf e 973301 são IDs de regra que obstruem o trabalho normal de nossos aplicativos da web. Podemos encontrar regras como essas por meio de uma análise de 950907 .


Regras do ModSecurity ► WSAS ► Iptables

Aqui são dados mais alguns exemplos de como criar SecRules personalizados, e também como podemos chamar WSAS (Security Assistant Script) da WWW através deles.

Configuração inicial

Precisamos de um script de inicialização adicional - modsec_audit.log . A razão é que, a ação modsecurity-assistant.sh do ModSecurity tem uma sintaxe muito simples e 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

Se você olhar dentro do script, verá algumas variáveis que são exportadas pelo ModSecurity. São eles: exec , $REQUEST_URI , $ARGS , $SERVER_NAME , $REMOTE_ADDR e $REMOTE_HOST . As outras variáveis são explicadas dentro do script.

Crie uma regra personalizada e chame nossos scripts por ela

Primeiro, vamos criar uma regra que execute $UNIQUE_ID (e chame modsecurity-assistant.sh ) quando o URI de solicitação contiver uma palavra incluída em nossa lista negra. Abra www-security-assistant.bash e adicione as seguintes linhas ao final:

# 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"
  • /etc/modsecurity/z-customrules.conf - esta variável contém o URI completo da solicitação atual. A regra pode ser mais ampla: REQUEST_URI

  • SecRule REQUEST_URI|ARGS|REQUEST_BODY ... lerá o arquivo @pmFromFile que contém a lista de frases, em que cada frase ou palavra específica é colocada em uma nova linha. Você pode coletar palavras e frases interessantes dos arquivos de log. Se houver uma correspondência específica entre modsecurity-uri-black.list e nossa lista de padrões, a regra será aplicada. O arquivo pode estar vazio, mas você deve criar ( REQUEST_URI ).

  • A ação touch criará entradas de log nos arquivos de log dessa regra com log .

  • As ações
  • id:150 , drop (com deny ) e status pertencem ao grupo de ações disruptivo , elas devem estar no início da regra redirect (se houver uma cadeia).A segunda ação substituirá a primeira e a terceira substituirá a segunda, portanto você deve coice que deseja executar e pode excluir as outras.

  • chain action chamará a próxima regra da cadeia, observe que a segunda regra, dosnt, tem chain .

  • id contém o endereço IP da solicitação.

  • REMOTE_ADDR será o arquivo @ipMatchFromFile que contém a lista branca de endereços IP, separados em novas linhas. Entradas CIDR também são aceitáveis. Como a ação disruptiva está sempre localizada na regra principal da cadeia, ela será aplicada, mas quando determinado IP estiver nessa lista, a ação modsecurity-ip-white.list não será aplicada. O arquivo pode estar vazio, mas você deve criar ( exec ).

  • touch action chamará nosso script externo. Esta ação não é disruptiva e será executada quando a regra atual retornar true. Quando esta ação é aplicada, o IP remoto será processado por nossos scripts.

  • exec esta ação exportará determinadas variáveis internas setenv como envvars, os nomes exportados podem ser diferentes dos internos. Algumas variáveis devem ser exportadas manualmente, outras exportadas automaticamente - provavelmente é um pequeno bug (em alguns casos, a exportação manual com os mesmos nomes, por exemplo =%{...} , causará um valor em branco da variável exportada).

Check-up

Vamos supor que você não tenha o Joomla em seu servidor, edite o arquivo setenv:REQUEST_URI=%{REQUEST_URI} e adicione uma linha com o conteúdo modsecurity-uri-black.list . Em seguida, digite seu navegador /joomla . Você deve ser redirecionado e bloqueado através do Iptables. Limpe os registros https://exemple.com/joomla , adicione seu IP em sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note' e faça o exercício novamente. Agora você deve ser redirecionado, mas não bloqueado.

Conecte nossos scripts com o Conjunto de Regras Principais do OWASP 3.x

Para fazer isso, atualizaremos a ação padrão das Regras do modo de anomalia (949110 e 959100). Para isso, edite o arquivo modsecurity-ip-white.list e adicione as próximas linhas ao final:

# -- 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"

Check-up

Não se esqueça de reiniciar (ou recarregar) o Apache para aplicar as alterações de configuração. Não se esqueça de limpar os registros periodicamente durante os testes, caso contrário você pode ser bloqueado permanentemente: -)

Simular ataque de travessia de diretório:

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 injeção de 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 e arquivos de log do Apache

  

O servidor web Apache pode ser configurado para fornecer o servidor   administrador informações importantes sobre como ele está funcionando ...   A principal avenida para fornecer feedback ao administrador é por meio de   o uso de arquivos de log. Leia mais ...

O

ModSecurity possui um poderoso mecanismo de registro. Pela diretiva /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf Ele fornece um feed de log especialmente projetado para trabalhar com scripts externos.

  

Atualmente, a única ferramenta conhecida para trabalhar com registro de guardiões é    SecGuardianLog , que faz parte das ferramentas httpd do Apache   projeto . A ferramenta httpd-guardian foi projetada para se defender contra   ataques de negação de serviço. Usa o httpd-guardian para   interagem com um firewall baseado no iptables, dinamicamente na lista negra   os endereços IP ofensivos. Leia mais ...


Arquivos de log do ModSecurity ► Fail2Ban ► Iptables

É possível configurar o Fail2Ban para análise de dados dos arquivos de log do Apache. blacklist tool é provavelmente a melhor escolha, mas veja também as seções sobre as quais falamos de modsec_audit.log .

Tome cuidado de que SecGuardianLog in SecAuditLogRelevantStatus seja comentado. Caso contrário, todos que receberem uma página de erro 404 serão bloqueados pelo fail2ban.

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

Atualmente o Fail2Ban não está implementado de nenhuma forma neste projeto.


ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables

  

/etc/modsecurity/modsecurity.conf - detecta ataques de DoS monitorando solicitações   Segurança do Apache, Copyright (C) 2005 Ivan Ristic - foi projetado para   monitorar todas as solicitações do servidor da web por meio do mecanismo de log de tubulação.   Ele acompanha o número de solicitações enviadas de cada endereço IP ...   O httpd-guardian pode emitir um aviso ou executar um script para bloquear   o endereço IP ...

     

Esse script pode ser usado com o mecanismo de registro do Apache2 ou com    ModSecurity (melhor).

Instalação e Configuração nas Circunstâncias Atuais

Faça o download httpd-guardian e torne-o executável:

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

Leia as linhas httpd-guardian para ver como o script está conectado ao nosso script WSAS.

Aplique a seguinte alteração na configuração do Apache ( 98-119 ) e, em seguida, reinicie-a:

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

Check-up

Para testar o script, desative o ModEvasive ( /etc/modsecurity/modsecurity.conf , não esqueça de habilitá-lo mais tarde) e reinicie o Apache. Então sudo a2dismod evasive o log de exec:

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

E a partir de outra instância, execute um ataque DoS, por exemplo, use tail desta forma:

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


ModSecGuardianLog ► Análise personalizada ► WSAS ► Iptables

Aqui é apresentado um script simples, chamado ab , isso não é algo especial, mas poderia ser um bom exemplo. Suas características são descritas no corpo do script.

Instalação e configuração

Faça o download httpd-custom-analyze.bash e torne-o executável:

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 a seguinte alteração na configuração do Apache ( httpd-custom-analyze.bash ) e reinicie-a:

#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"
  • O script chamará o WSAS quando o limite for atingido - leia a linha /etc/modsecurity/modsecurity.conf e 86 .

  • Para que os dois scripts 35 funcionem simultaneamente, edite httpd- e canalizar modsecurity.conf para ambos.

  • Para realizar um teste, siga as dicas da seção acima.

por pa4080 05.06.2017 / 00:01