Después de escribir un análisis de los ataques recibidos por fuerza bruta a mi servicio ssh he dado un paso más. Publico la herramienta con la que he realizado el análisis, de tal forma que cualquiera puede revisar los ataques que tiene. Y también puedes ver el código fuente sobre cómo lo hace.
Tan fácil como ir a mi github, descargar el script y ejecutarlo en tu máquina. Para poder hacer un análisis sobre los paises, ASN y hostname de las direcciones IP usé ipinfo.io. Es un servicio gratuito que te da información de hasta 50000 direcciones IP mensuales, si no te registras te limita a 1000 direcciones IP diarias. Si tienes más de 1000 direcciones IP de ataques diferentes e introduces tu token, la herramienta te hará un análisis completo.
¿Qué hace la herramienta?
Primero de todo comprueba que se haya introducido un token de ipinfo correcto, así si se encuentra con más de 1000 direcciones IP las analizará.
Después busca el fichero de log donde se encuentran los ataques fallidos, bien en los ficheros secure
para máquinas tipo Red Hat o en los ficheros auth.log
para máquinas tipo Debian. Aquí extraerá todos los ataques para procesarlo más adelante.
De este fichero saca el número total de ataques fallidos, el número total de usuarios diferentes y te cuenta el número de veces que te ha intentado entrar con cada usuario. Como son muchos los usuarios con los que se intenta entrar finalmente presenta el top #5. Aunque si quieres consultarlos todos te dice en qué fichero los ha dejado.
Ahora toca el análisis de las direcciones IP diciendo el número total de direcciones IP diferentes que han atacado. Al igual que con los usuarios te muestra el top #5, junto con el fichero que tiene todas las direcciones y el número de ataques de cada una.
Llegado a este punto si hay menos de 1000 direcciones IP, o más pero con un token válido, la herramienta comenzará a descargarse información de cada dirección IP. Así será muy fácil presentar las direcciones IP agrupadas por sus ASN, el top #5 y el fichero con los ASN y el número de direcciones IP de cada ASN que han estado atacando.
A continuación mostrará de cuántas direcciones IP resuelven inversamente un nombre de host, me llama poderosamente la atención que sea una proporción muy pequeña y que las provenientes de China apenas tengan nombre de host.
Para finalizar mostrará de cuántos países diferentes nos han atacado, el top #5 de países y el fichero donde están los países junto con el número de direcciones IP por pais.
Ejemplo de salida
Esto sería lo que saldría:
# ./analisis_ssh.sh 123456789012
Comprobando el token
Token ipinfo ok
Inicio del análisis con el fichero de log auth.log
Usando fichero: /var/log/auth.log
Usando fichero: /var/log/auth.log.1
Usando fichero: /var/log/auth.log.2.gz
Usando fichero: /var/log/auth.log.3.gz
Usando fichero: /var/log/auth.log.4.gz
Número de intentos de entrada: 61149
Número de usuarios diferentes que han intentado entrar: 4077
Fichero con los usuarios y número de intentos: /tmp/27823.useruni
Top #5 de usuarios
338 oracle
377 test
740 user
1837 admin
40255 root
Número de direcciones ip diferentes: 5537
Fichero con las direcciones IP y número de intentos: /tmp/27823.ipuni
Top #5 de direcciones IP
128 2X2.1X6.42.13
128 2X2.1X7.238.136
134 222.1X7.239.109
141 2X1.1X1.165.56
158 2X1.1X1.185.198
Número de ASN diferentes: 945
Fichero con las ASN y número de IPs por ASN: /tmp/27823.asnuni
Top #5 de ASN
157 "AS4134 CHINANET-BACKBONE",
171 "AS38365 Beijing Baidu Netcom Science and Technology Co., Ltd.",
221 "AS53667 FranTech Solutions",
676 "AS14061 DigitalOcean, LLC",
1369 "AS45090 Shenzhen Tencent Computer Systems Company Limited",
De las 5537 direcciones IP sólo 1274 tienen nombre de host
Número total de países diferentes 119
Fichero países /tmp/27823.paises
Top #5 de países
165 "SG"
183 "DE"
206 "IN"
738 "US"
2332 "CN"
Espero que esta herramienta te sea útil. Pero recuerda que tienes que tener otras que paren los ataques, como fail2ban. el otro día creé una máquina en mi proveedor cloud con únicamente ssh abierto en el puerto 22 y sin fail2ban. El resultado fue catastrófico, ya que no quedaban bloqueados los atacantes al tercer intento erróneo y el los bots no se cansan.