O el análisis de los ataques por fuerza bruta recibidos por ssh. Después de un tiempo en mi nuevo hosting he estado revisando los ataques que me han estado haciendo para entrar por ssh. Unos con usuarios existentes en mi máquina y otros no. Unos con usuarios muy habituales y otros muy extraños. Vamos a analizar qué hacen los que quieren entrar dentro.
No había seguido del todo mi propia guía para securizar ssh en mi Debian, ya que aunque mis usuarios sólo entran con certificado, no había deshabilitado que pudiesen entrar con el par usuario/contraseña. Aunque no tuviera ningún usuario así, me estaba llamando mucho la atención todos los intentos de entrada, por lo que lo decidí dejarlo abierto y estudiar el resultado.
Metodología de la prueba
¿Cómo sé que hay alguien que está intentando entrar en mi máquina y no lo consigue? Respuesta básica: mirando los logs, en este caso auth.log
. (Si tienes Red Hat/CentOS el fichero es secure
) Este fichero escrito por rsyslogd
en /var/log
escribe mensajes relacionados con eventos de autorizaciones y de seguridad. Aquí hay un ejemplo de un intento de entrada por fuerza bruta:
Jul 10 23:58:17 inthenite sshd[56513]: Invalid user git from 115.159.25.136 port 40688
Jul 10 23:58:17 inthenite sshd[56513]: pam_unix(sshd:auth): check pass; user unknown
Jul 10 23:58:17 inthenite sshd[56513]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=115.159.25.136
Jul 10 23:58:19 inthenite sshd[56513]: Failed password for invalid user git from 115.159.25.136 port 40688 ssh2
En mi máquina tenía inicialmente estos 5 ficheros:
/var/log/auth.log /var/log/auth.log.1 /var/log/auth.log.2.gz /var/log/auth.log.3.gz /var/log/auth.log.4.gz
Cada fichero de log guarda datos durante una semana y después se rota el log y a partir del segundo lo comprime. Es la configuración por defecto de logrotate
. Esos ficheros son bastante interesantes para mí, así que me he guardado 10 ficheros, que corresponden a 10 semanas. Desde el 30 de mayo a las 00:00 hasta el 10 de julio a las 23:59
Las líneas que voy a analizar son las que indican que un usuario ha introducido una contraseña incorrecta:
Jun 27 00:13:20 inthenite sshd[39670]: Failed password for root from 109.104.151.112 port 36024 ssh2
Como anomalía para la prueba tengo fail2ban instalado, de tal forma que bloquea la dirección IP temporalmente. Vaya mensaje bueno que ponen los de fail2ban, ya lo decía yo también aquí:
# Fail2Ban filter for openssh
# If you want to protect OpenSSH from being bruteforced by password
# authentication then get public key authentication working before disabling
# PasswordAuthentication in sshd_config.
Resumen
A partir de esas líneas de log voy a intentar obtener cuáles son los nombres de usuario con los que intentan entrar, las direcciones IP de origen de los ataques y los ASN en los que se agrupan.
Datos para 10 semanas de análisis:
- 64359 intentos de entrada
- 7283 nombres de usuario diferente
- 5251 direcciones IP de origen de ataque
- 119 Países diferentes
- 1299 ip con nombre de host en dns y 3951 que no resuelven nombre de host
- 905 ASN diferentes
Análisis
Aunque las direcciones IP de donde provienen los ataques es bastante interesante para revisarlo, he decidido empezar por los usuarios. Estos son los que más ataques reciben:
Los usuarios como root, admin, user, test, pi, oracle, es, ubuntu, postgres, guest, deploy, git, nagios, ftpuser, tomcat, hadoop, mysql, support, server, web y www son los que más intentos de entrada por fuerza bruta han recibido. Al tercer intento erróneo desde la misma dirección ip fail2ban
la banea, por lo que seguramente el número de intentos y de usuarios hubiera sido mayor.
Podéis ver los 7283 nombres de usuario con el número de veces que han intentado entrar con ellos en este gist.
Analizando en detalle los usuarios con los que han intentado entrar podemos observar estos datos:
- El que más ataques se ha llevado ha sido root con 38730. Suma más intentos que entre todo el resto de usuarios.
- Hay muchos nombres de usuario chinos, como estos: zhou, zhaoyi, zhaowei, zhangjingxiao, zhanghao, zhangzicheng, zhangzhe, zhangqi, zhangky, zhangf, yczhang, zhangzhiyuan, zhangzhiqiang, zhangyue, zhangyi, zhangyan, zhangxw, zhangweikuo, zhangwd, ,zhangtq, zhangruochi, zhangrm, zhangql, zhangph, zhangpg, zhangpei, zhangmy, zhangm, zhanglei, zhanglan.
- Tener una raspberry pi en internet debe ser muy habitual y que te la hackeen también. El usuario pi está en el top 10, por algo será.
- De los 7283 nombres de usuario hay algunos muy extraños y con número de ocurrencias muy bajo, ya que parecían contraseñas como 123Admin, abc123, 0r4cl3, Google123, 123456qwerty, 1q2w3e4r5t6y, 1qaz@WSX3edc, abc@123456g o Aa1234!@#$.
- De entre los nombres de usuario también había 41 direcciones IP, claramente debería de ser otro fallo del script automatizado.
- Más nombres extraños de usuario «SSH-2.0-OpenSSH_6.7p1», parece que tiene alguna vulnerabilidad, pero no encuentro nada relevante.
- Y también han intentado entrar sin nombre de usuario en 68 ocasiones, no sé qué sentido tiene. Estoy entre fallo de script y vulnerabilidad.
Y analizando las direcciones IP obtenemos más datos curiosos:
- De las 5251 direcciones IP de origen diferentes, la mayoría y sumando más que entre el resto de los países son chinas: 2813 de China y 134 de Hong Kong (Esos nombres de usuario daban alguna pista). El segundo puesto se lo lleva Estados Unidos con 691 y a más distancia se quedan India con 204 y Alemania con 217.
- Si estudiamos las direcciones IP agrupadas por sus número de ASN (Sistema autónomo) la mayoría vienen de «AS45090 Shenzhen Tencent Computer Systems Company Limited» con 1250, pero el segundo es «AS14061 DigitalOcean, LLC» con 626.
- Del top de los ASN la mayoría empiezan por China, o aparece una ciudad china o Alibaba. También hay muchos ASN asiáticos como Korea, India o Vietnam.
- Hay 1299 direcciones ip que resuelven inversamente un nombre de host.
- Los países que más direcciones ip tienen nombre de host son Estados Unidos con 235, Alemania con 100, Francia con 87 y Brasil con 79.
- China sólo resuelve 63 ips y Hong Kong 21.
- 69 direcciones IP su nombre de host está relacionado con tor.
- La dirección ip que más me ha atacado con 237 veces es de Hangzhou (China), la segunda con 234 veces es de San Petersburgo (Rusia).
Aquí está el top de los ASN con el número de direcciones de cada uno que ha intentado entrar:
Conclusiones
Como resumen de estos intentos de ataque obtengo las siguientes conclusiones:
- root tiene que ser un usuario superprotegido. Recomiendo que root no pueda entrar por ssh.
- Sobre la gran cantidad de nombres de usuario chinos tenía dudas sobre si serán ellos quienes hagan la mayoría de los ataques o quienes más máquinas tengan. Lo revisaré con las direcciones IP (Spoiler: sí)
- Si tienes una raspberry pi en internet cambia la contraseña por defecto. La gran ventaja de instalar un sistema operativo simplemente grabando una imagen es su mayor inconveniente, las password hardcodeadas.
- Sobre usuarios que parecen contraseñas como 123Admin o abc@123456g, creo que no han debido de programar muy bien esos ataques automatizados. Son contraseñas
buenastriviales con lo básico para que sean aceptadas: números, mayúsculas, minúsculas y símbolos. Deberían de estar prohibidas. - Las direcciones IP que aparecían como usuario la mayoría corresponden a servicios de hosting/cloud/vps.
- Es un peligro usar el par usuario y contraseña, por fuerza bruta es posible que encuentren la contraseña de un usuario. Sin embargo si se entra con certificado sólo pueden entrar si disponen de éste. Aún así siguen intentando entrar, lo veo en el auth.log.
- Después de ver que tanto la mayoría de las IPs vienen de China he pensado en intentar aprovechar los rangos de las IP que tiene asignado cada ASN chino para crear una regla en iptables para que me haga un bloqueo completo. O quizás un script que lo haga de manera automática en mi lugar. O quizás modificar la configuración de fail2ban para que el bloqueo sea permanente.
- Menos del 2,9% de las direcciones IP chinas resuelven a un nombre de host. La mayoría de estas son ips residenciales.
- Y sobre el 97% de las direcciones IP chinas, es algo muy sospechoso, parece que se quieran ocultar. Obtener un nombre de host asociado a una ip es trivial, pero obtener el país de donde proviene no.
- Ninguna de las dos direcciones IP que más me han atacado resuelve inversamente su nombre de host.
- No me sorprende ver que el número 1 de las ASN es chino, pero de la lista de los top que he puesto la mitad son chinos. No me sorprende que vengan tantos ataques desde China.
- Pero aquí se ve con claridad que Digital Ocean tiene un problema serio. No puede ser que esté en la segunda posición de IPs atacantes. Voy a escribir a la dirección de abuse de digital ocean para comentarles que desde esas direcciones están haciendo ataques por fuerza bruta, cuando me respondan os escribiré por aquí.
- Las IPs de Digital Ocean son de estos países: 290 «US», 122 «SG», 86 «DE», 55 «NL», 55 «GB», 16 «CA», 2 «IN»
- Me he encontrado IPs de casi todos los proveedores habituales de cloud.
fail2ban
es un software obligatorio en una máquina con conexión a internet y así te evitas ataques por fuerza bruta, si ejecuto:iptables -nvL|grep REJECT |wc -l
me salen 1073 direcciones IP bloqueadas ahora.- La configuración por defecto de fail2ban es demasiado permisiva, hay que poner un tiempo superior de bloqueo.
Como penúltima conclusión quiero decir que me mosquea bastante todas estas cantidades de ataques procedentes de China, de las que sólo sé que vienen de Tencent, pero nada más porque no resuelven inversamente. ¿Bloqueo también a Rusia? Pero sólo para el puerto 22, que puedan visitar mi web.
Recuerda ssh es la puerta de entrada a tu casa y ayer intentaron abrírmela 1073 veces, ufff. Cierra bien la puerta.