Eu tenho um servidor com apache e recentemente instalei o mod_security2 porque sou muito atacado por isso:
Minha versão do apache é o apache v2.2.3 e eu uso o mod_security2.c
Estas foram as entradas do log de erros:
[Wed Mar 24 02:35:41 2010] [error]
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:47:31 2010] [error]
[client 202.75.211.90] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:47:49 2010] [error]
[client 95.228.153.177] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:48:03 2010] [error]
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
Aqui estão os erros do access_log:
202.75.211.90 - -
[29/Mar/2010:10:43:15 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - -
[29/Mar/2010:11:40:41 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - -
[29/Mar/2010:12:37:19 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
Eu tentei configurar mod_security2 assim:
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecFilterSelective REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"
A coisa no mod_security2 é que o SecFilterSelective não pode ser usado, isso me dá erros. Em vez disso, uso uma regra como esta:
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecRule REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"
Mesmo isso não funciona. Não sei mais o que fazer. Alguém tem algum conselho?
Atualização 1
Vejo que ninguém pode resolver esse problema usando o mod_security. Até agora, usar tabelas de ip parece ser a melhor opção para fazer isso, mas acho que o arquivo se tornará extremamente grande porque o ip muda de servidor vezes por dia.
Eu vim com duas outras soluções, alguém pode comentar sobre eles ser bom ou não.
A primeira solução que me vem à cabeça é excluir esses ataques dos meus logs de erro do apache. Isso tornará mais fácil para mim detectar outros erros urgentes à medida que ocorrem e não precisar cuspir em um longo registro.
A segunda opção é melhor, eu acho, e isso está bloqueando hosts que não são enviados da maneira correta. Neste exemplo, o ataque w00tw00t é enviado sem o nome do host, então acho que posso bloquear os hosts que não estão na forma correta.
Atualização 2
Após analisar as respostas, cheguei às seguintes conclusões.
Ter um log personalizado para o apache consumirá alguns recursos desnecessários e, se houver realmente um problema, você provavelmente desejará examinar o log completo sem que nada falte.
É melhor simplesmente ignorar as ocorrências e se concentrar em uma maneira melhor de analisar seus logs de erros. Usar filtros para seus logs é uma boa abordagem para isso.
Considerações finais sobre o assunto
O ataque mencionado acima não chegará à sua máquina se você tiver pelo menos um sistema atualizado; portanto, basicamente não há preocupações.
Pode ser difícil filtrar todos os ataques falsos dos reais depois de um tempo, porque os logs de erros e de acesso ficam extremamente grandes.
Impedir que isso aconteça de qualquer maneira custará recursos e é uma boa prática não desperdiçar seus recursos em coisas sem importância.
A solução que eu uso agora é o Linux logwatch . Ele me envia resumos dos logs e eles são filtrados e agrupados. Dessa forma, você pode facilmente separar o importante do sem importância.
Obrigado a todos pela ajuda, e espero que este post também possa ser útil para outra pessoa.
fonte
Filtrar IPs não é uma boa ideia. Por que não tente filtrar a string que você conhece?
Quero dizer:
fonte
Iv também começou a ver esses tipos de mensagens nos meus arquivos de log. Uma maneira de evitar esses tipos de ataques é configurar o fail2ban ( http://www.fail2ban.org/ ) e configurar filtros específicos para colocar na lista negra esses endereços IP nas regras do iptables.
A seguir, um exemplo de filtro que bloquearia o endereço IP associado à criação dessas mensagens
[Ter 16 de agosto 02:35:23 2011] [erro] [cliente] O arquivo não existe: /var/www/skraps/w00tw00t.at.blackhats.romanian.anti-sec :) === apache w00t w00t messages jail - Regex e filtro === Cadeia
Filtro
fonte
O w00tw00t.at.blackhats.romanian.anti-sec é uma tentativa de hacking e usa IPs falsificados, de modo que pesquisas como o VisualRoute reportem China, Polônia, Dinamarca etc. de acordo com o IP que está sendo destacado naquele momento. Portanto, a configuração de um Negar IP ou um nome de host resolvível é quase impossível, pois será alterada dentro de uma hora.
fonte
Eu, pessoalmente, escrevi um script Python para adicionar automaticamente regras de tabelas de IP.
Aqui está uma versão ligeiramente abreviada, sem log e outros itens indesejados:
fonte
Acredito que a razão pela qual mod_security não está funcionando para você é que o Apache não foi capaz de analisar as solicitações, elas estão fora da especificação. Não tenho certeza se você tem algum problema aqui - o apache está registrando coisas estranhas que estão acontecendo na rede; se não registrá-lo, você nem perceberá que isso está acontecendo. Os recursos necessários para registrar as solicitações provavelmente são mínimos. Entendo que é frustrante que alguém esteja preenchendo seus logs - mas será mais frustrante se você desativar o log apenas para descobrir que realmente precisa dele. Como se alguém invadisse seu servidor da web e você precisasse dos logs para mostrar como eles invadiram.
Uma solução é configurar o ErrorLogging através do syslog e, usando o rsyslog ou o syslog-ng, você pode filtrar e descartar especificamente essas violações de RFC relacionadas ao w00tw00t. Ou então, você pode filtrá-los em um arquivo de log separado, simplesmente para facilitar a leitura do ErrorLog principal. O Rsyslog é incrivelmente poderoso e flexível a esse respeito.
Portanto, no httpd.conf você pode:
então no rsyslog.conf você pode ter:
Esteja ciente de que esta abordagem realmente utilizará muito mais recursos do que o log originalmente usado diretamente em um arquivo. Se o seu servidor da web estiver muito ocupado, isso pode se tornar um problema.
É uma boa prática enviar todos os logs para um servidor de log remoto o mais rápido possível e isso será benéfico para você, caso seja invadido, pois é muito mais difícil apagar a trilha de auditoria do que foi feito.
O bloqueio de IPTables é uma ideia, mas você pode acabar com uma lista muito grande de bloqueios de iptables, que pode ter implicações de desempenho em si. Existe um padrão nos endereços IP ou é proveniente de uma grande botnet distribuída? Será necessário haver X% de duplicatas antes de você obter um benefício do iptables.
fonte
Você diz na atualização 2:
Da minha resposta anterior, concluímos que o Apache está retornando uma mensagem de erro devido a uma consulta HTML 1.1 mal formada. Todos os servidores da Web que suportam HTTP / 1.1 provavelmente devem retornar um erro quando receberem essa mensagem (não verifiquei duas vezes a RFC - talvez a RFC2616 nos diga).
Tendo w00tw00t.at.ISC.SANS.DFind: em seu servidor, em alguns lugares onde não significa misticamente "você está com problemas" ... Se você criar o arquivo w00tw00t.at.ISC.SANS.DFind: no DocumentRoot ou até mesmo DefaultDocumentRoot não importa ... o scanner está enviando uma solicitação HTTP / 1.1 quebrada e o apache está dizendo "não, isso é uma solicitação ruim ... adeus". Os dados no arquivo w00tw00t.at.ISC.SANS.DFind: não serão exibidos.
O uso de mod_security para este caso não é necessário, a menos que você realmente queira (sem motivo?) ... nesse caso, você pode fazer um patch manualmente (link em outra resposta).
Outra coisa que você poderia usar é o recurso RBL no mod_security. Talvez haja um RBL online em algum lugar que forneça IPs w00tw00t (ou outros IPs maliciosos conhecidos). No entanto, isso significa que o mod_security faz uma pesquisa de DNS para cada solicitação.
fonte
Que tal adicionar uma regra à modsecurity? Algo assim:
fonte
Vejo que a maioria das soluções já foi abordada acima, mas gostaria de salientar que nem todos os clientes enviaram solicitações HTTP / 1.1 sem ataques de nome de host , direcionados diretamente ao seu servidor. Existem muitas tentativas diferentes de obter impressões digitais e / ou explorar o sistema de rede que precede o servidor, ou seja, usando:
para direcionar os roteadores Linksys etc. Então, às vezes, ajuda a ampliar seu foco e dividir seus esforços de defesa entre todos os sistemas com um compartilhamento igual, por exemplo: implementar regras de roteador, implementar regras de firewall (espero que sua rede tenha uma), implementar tabela de firewall / IP do servidor regras e serviços relacionados, isto é, mod_security, fail2ban e assim por diante.
fonte
que tal agora ?
funciona bem para mim.
fonte
Se você usar
hiawatha
o servidor da Web como umareverse proxy
dessas verificações, elas serão automaticamente descartadas como lixo eclient
banidas. Também filtraXSS
eCSRF
explora.fonte