¿Utilizas contraseñas seguras? No seas víctima de Morto.

Desde finales del mes pasado, estamos detectando en nuestros Sistemas de Detección de Intrusos un aumento en los ataques dirigidos al puerto 3389 (servicio de Terminal Service). Se pensó que este aumento podía ser debido a una vulnerabilidad no conocida de este servicio, pero analizando el tráfico capturado, pudimos comprobar que se trataba de intentos de acceso utilizando el mismo usuario y un grupo de contraseñas débiles fijas.

Investigamos un poco y vimos que este aumento podría ser debido a un nuevo virus identificado como Morto. Se trata de un gusano que se propaga por la red aprovechándose de contraseñas débiles conocidas configuradas en los sistemas.

A continuación mostramos una gráfica donde se ve el aumento de “ataques” al servicio de Terminal Server; unas alertas relacionadas con el intento de login por protocolo RDP y otras específicas del Morto una vez se añadió la firma (el pico final es debido a un ataque desde múltiples orígenes que se acumularon y por eso dan ese valor tan alarmante).

El virus no tiene demasiado éxito, por el momento, ya que prueba con el usuario local “Administrator” y utiliza un lista de unas 30 contraseñas, por lo que la probabilidad de acierto es realmente baja. No obstante, ¿cómo podemos asegurarnos de que no somos vulnerables a este virus? O de forma genérica, ¿cómo podemos comprobar que no se utilizan contraseñas débiles en nuestros sistemas?

En esta entrada vamos a recoger un par de soluciones para comprobar que no seríamos vulnerables a este gusano, en caso de que atacase nuestros sistemas. La primera, utiliza la herramienta ncrack (de los mismos creadores de nmap) para escanear la red, cargando los usuarios y contraseñas de la lista anterior.


$ ncrack -vv -d7 --user administrator -P /home/user/morto.txt 192.168.26.137:3389,CL=2

rdp://192.168.26.137:3389 (EID 1) Login failed: 'administrator' 'admin'
rdp://192.168.26.137:3389 (EID 1) Attempts: total 1 completed 1 supported 1 --- rate 0.94
rdp://192.168.26.137:3389 (EID 2) Login failed: 'administrator' 'password'
rdp://192.168.26.137:3389 last: 0.00 current 0.50 parallelism 2

...

Discovered credentials on rdp://192.168.26.137:3389 'administrator' 'admin123'
rdp://192.168.26.137:3389 last: 0.02 current 0.01 parallelism 2
rdp://192.168.26.137:3389 Increasing connection limit to: 2
rdp://192.168.26.137:3389 (EID 30) Attempts: total 30 completed 30 supported 1 --- rate 1.62
rdp://192.168.26.137:3389 (EID 31) Login failed: 'administrator' '1234567890'
rdp://192.168.26.137:3389 finished.
rdp://192.168.26.137:3389 (EID 31) Attempts: total 31 completed 31 supported 1 --- rate 1.81

nsock_loop returned 3

Discovered credentials for rdp on 192.168.26.137 3389/tcp:
192.168.26.137 3389/tcp rdp: 'administrator' 'admin123'

Ncrack done: 1 service scanned in 18.00 seconds.
Probes sent: 31 timed-out: 0 prematurely-closed: 0

Ncrack finished.

La segunda es igual de fácil de utilizar, desde la consola de Mestasploit, msfconsole, como comentan en el blog de Rapid7.

$ msfconsole

Seleccionamos el módulo smb_login y cargamos el fichero especificando la variable USERPASS_FILE.

msf > use auxiliary/scanner/smb/smb_login
msf auxiliary(smb_login) > set USERPASS_FILE /tmp/morto.txt

Especificamos el objetivo y el número de pruebas concurrentes, así como deshabilitar el modo “verbose”.

msf auxiliary(smb_login) > set RHOSTS 192.168.0.0/24
msf auxiliary(smb_login) > set THREADS 128
msf auxiliary(smb_login) > set VERBOSE false

Únicamente configurados estos parámetros, pasamos a ejecutar el ataque.

msf auxiliary(smb_login) > run

[*] Scanned 026 of 256 hosts (010% complete)
[+] 192.168.0.141:445|WORKGROUP - SUCCESSFUL LOGIN (Windows 5.1) 'Administrator' : 'admin'
[*] Scanned 125 of 256 hosts (048% complete)
[*] Scanned 127 of 256 hosts (049% complete)
[*] Scanned 142 of 256 hosts (055% complete)
[*] Scanned 157 of 256 hosts (061% complete)
[*] Scanned 256 of 256 hosts (100% complete)
[*] Auxiliary module execution completed

Con estas herramientas podemos comprobar la autenticación de diversos servidores y con esta u otras listas de contraseñas conocidas. Existen numerosos diccionarios, y en infinidad de idiomas, con los que podemos probar nuestros servicios. Animamos a nuestros lectores a que prueben si sus sistemas son vulnerables a estos ataques de diccionario (más cuando se trata de listas tan pequeñas). Parece mentira que un ataque tan simple pueda tener tanto éxito (a escala de Internet), pero eso demuestra lo verde que estamos en materia de seguridad, ya que se incumplen varias recomendaciones: como sería la de no utilizar contraseñas débiles, no permitir accesos remotos como Administrador o no publicar este tipo de servicios directamente a Internet.

Así que ya saben, si detectan un aumento en el tráfico RDP puede que Morto esté llamando a su puerta, pero pueden estar tranquilos de que no pasará (al menos, este).

Comments

  1. Claro y conciso, buen post.

  2. Pero las pruebas que se hacen no son iguales… en uno se hace un bruteforce contra el puerto 445 (samba) y con ncrack contra el puerto de escritorio remoto.

    A lo mejor es pregunta de novato pero… no lo entiendo :)

  3. Efectivamente, las pruebas no son contra el mismo servicio como apuntas, pero sí contra la misma cuenta de Administrador local, que es lo que nos interesa en este caso concreto.

    Quizá lleve a confusión que se utilicen servicios diferentes.

  4. @nbelda, ¿entonces se trata de un proceso “combinado”? por llamarlo de algún modo. ¿Esto aumenta la probabilidad de éxito? Me perdí un poco en esa parte.