Banco de Dados

19 fev, 2015

Filtrando em SQL pelo tamanho da contagem

Publicidade

Mantenho o maravilhoso e ultra moderno encurtador eri.cx, que agora passou a sofrer ataques constantes. Chato? É, mas ataque na Internet já virou lugar comum, então, temos de estar preparados. Sempre! O foco só mudou, pois antes esse tipo de ataque vinha por e-mail, com os SPAMs.

Entre os muitos scripts que tenho, tem um que verifica por alguns padrões de palavras como “cialis”, “tramadol”, “xanax” e “taladafil”. Não tenho ideia do que sejam – Aliás o “xanax” dá uma certa ideia… rs

O que me faz pensar que esses links não são legítimos? Perfil de tráfego. São links em que o número de cliques aumenta muito rápido. Com isso, eu tenho uns scripts que fazem algumas verificações, inclusive com palavras chaves como essas. Se o link entra nesse perfil, eu removo para uma tabela chamada “quarantine”, salvando exatamente o formato de entrada. Em seguida, eu troco para o meu próprio site. É uma propaganda subversiva, mas é mais legítimo que permitir que as pessoas caiam nesse truques.

Hoje eu resolvi dar uma olhada nos ataques, aliás nos logs dos ataques, e procurar um perfil. Então eu precisava pegar os IPs e procurar um padrão. Basicamente pegar via SQL os IPs, e fazer um count() na quantidade de vezes que apareciam e apenas mostrar aqueles que um padrão acima do normal.

O resultado foi esse aqui:

mysql> select ip, count(ip) as ip_count from quarantine group by ip having count(ip) > 10 order by count(ip) desc;
+---------------+----------+
| ip            | ip_count |
+---------------+----------+
| 173.44.37.250 |      168 |
| 96.47.224.50  |      139 |
| 173.44.37.226 |      136 |
| 173.44.37.242 |      121 |
| 96.47.224.42  |      118 |
| 96.47.225.82  |      117 |
| 173.44.37.234 |      115 |
| 96.47.225.74  |      112 |
| 96.47.225.66  |      110 |
| 96.47.224.58  |      100 |
| 213.5.66.88   |       89 |
| 96.47.225.162 |       71 |
| 96.47.225.170 |       69 |
| 96.47.225.186 |       69 |
| 96.47.225.178 |       67 |
+---------------+----------+
15 rows in set (0.01 sec)

Com isso foi fácil ver um padrão claro de ataque de apenas alguns ranges IPs.  Bastou uma pequena adição ao iptables pra acabar com a farra.