Um dos servidores que cuido parece estar participando de ataques de força bruta contra instalações do Wordpress.
Já recebi isso muitas vezes, por isso estou muito familiarizado com as medidas que podem ser tomadas para evitar isso. O que estou enfrentando, no entanto, é detectar ataques de saída. O servidor é um servidor Apache típico com vários vhosts - é aí que surge a complicação, é claro - se houvesse apenas um lá, não seria tão difícil!
Atualmente estou usando o tcpflow para registrar o tráfego de qualquer porta deste servidor para a porta 80 em qualquer outra máquina usando este comando:
tcpflow -i eth0 dst port 80 and src host <my_servers_ip> and port not 22
Achei isso preferível ao tcpdump. Examinar sua saída pode derreter um pouco o cérebro depois de um tempo :) O tcpflow coloca cada solicitação em um arquivo separado.
Aqui estão alguns resultados de um arquivo que acredito ser uma atividade suspeita:
POST /wp-login.php HTTP/1.1
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Host: somedomain.com
Accept: */*
Cookie: wordpress_test_cookie=WP+Cookie+check
Content-Length: 97
Content-Type: application/x-www-form-urlencoded
log=jacklyn&pwd=london&wp-submit=Log+In&redirect_to=http://somedomain.com/wp-admin/tes1a0&testcookie=1
Observe que ofusquei o "Host:" acima, acredito que seja o host que está sendo atacado (correto?).
Então, minha pergunta é: como faço para detectar o vhost que está gerando esse tráfego malicioso? Se eu puder fazer isso, poderei informar meu cliente e ele poderá tomar medidas para investigar o site e fazer as alterações necessárias para interrompê-lo.
Qualquer solução recebida com muito agradecimento :)
Responder1
Presumo, pelo que você disse, que você está em uma configuração em que não pode restringir o download de URLs de seus clientes com allow_url_fopen.
Nesse caso, é realmente muito difícil voltar ao script php de origem, pois o log do tcpflow que você mostra na verdade não incorpora essas informações.
Uma opção fácil a considerar seria forçar qualquer solicitação de saída a ter um agente de usuário revelador que você pudesse usar para identificar o cliente real que a fez.
Por exemplo, você pode adicionar à definição vhost do site client1 uma instrução
php_admin_value user_agent client1
Isso forçará qualquer solicitação http feita por esse site ao usuário do agente de usuário "client1", que aparecerá no seu log do tcpflow, permitindo que você saiba quem o originou.
Observe que se a privacidade for uma preocupação, você pode usar um user_agent que somente você pode mapear para o cliente real (como uma criptografia do nome do cliente).
No entanto, isso pode prejudicar a usabilidade, pois alguns sites serão exibidos de forma diferente dependendo do user_agent fornecido e esta configuração evita propositalmente qualquer tentativa feita pelo seu cliente de alterá-lo.