lunes, 3 de agosto de 2015

Una instancia a la deriva IV: WTF!!! LulzSeC y DDoS Perl IrcBot v1.0

Decidí darle una segunda oportunidad a "Una instancia a la deriva" porque la verdad que me interesó y me quedaron algunas cosas en el tintero. Así que hice unos ajustes para no caer en los mismos problemas que la vez anterior y volví a dejar la instancia corriendo con el password débil en el usuario ubuntu.

Ajustes nuevos:

  • Desactivé la rotación de logs en auditd, para no volver a perder logs.
  • Limité el flujo de conexiones SSH desde la instancia hacia el exterior con iptables. Solo se permiten 10 conexiones por minuto.
  • Detuve el envío por correo de los logs de auditd, porque no sirvió de nada.

Unas horas mas tarde

Mientras estaba en el trabajo, me llegaron 3 notificaciones que indicaban accesos exitosos al sistema:
  • 219.229.222.4 a las 01:20:58 del 2 Agosto, al 2do intento. De todas maneras siguió probando otros usuarios.
  • 85.127.193.17 a las 10:05:54 del 2 Agosto, 1 solo intento.
  • 91.81.221.168 a las 10:14:46 del 2 Agosto, 1 solo intento.
Al volver a casa la verdad que me moría de ganas de ver qué había pasado esta vez. A pesar de que no parecía haber nada raro, algo tenía que andar mal. Nadie anda por la vida probando contraseñas por SSH solo por la diversión. Así fue que me encontré con 3 procesos que se estaban literalmente deborando el CPU, se los presento:

root@ip-172-31-54-250:~# ps aux|grep ubuntu
ubuntu   16562 32.9  0.4  32948  4976 ?        R    10:15 146:11 /usr/sbin/sshd -i
ubuntu   16564 32.9  0.4  32948  4980 ?        R    10:15 146:11 /usr/sbin/sshd
ubuntu   16566 32.9  0.4  32944  4976 ?        R    10:15 146:11 /sbin/syslogd
root     20189  0.0  0.0  10436   928 pts/2    S+   17:39   0:00 grep --color=auto ubuntu
root@ip-172-31-54-250:~#

Tan sospechosos como es posible: PIDs similares, consumo de CPU altísimo, casi la misma cantidad de memoria, lanzados a la misma hora, sin embargo los nombres no coinciden...

Un mecanismo MUY básico de persistencia y ocultamiento es dar a los procesos nombres de otros procesos importantes/críticos de forma tal que nadie se atreva a matarlos.

Sin embargo, Ubuntu por defecto viene con rsyslog en lugar de syslogd, así que un administrador despierto debería intuir que algo raro pasa en su servidor ¿rsyslogd y syslogd corriendo conjuntos?:

root@ip-172-31-54-250:~# ps aux|grep sysl
syslog     809  0.0  0.8 260072  8560 ?        Ssl  Aug01   0:03 rsyslogd
ubuntu   16566 32.9  0.4  32944  4976 ?        R    10:15 147:16 /sbin/syslogd
root     20235  0.0  0.0  10436   924 pts/2    S+   17:42   0:00 grep --color=auto sysl
root@ip-172-31-54-250:~#

Así que me interesa ver ese binario o lo que fuera, por lo que fui a buscarlo y:

root@ip-172-31-54-250:~# ls /sbin/|grep syslog
root@ip-172-31-54-250:~#

nada, no existe tal archivo, esto ya se ponía interesante. Hice lo mismo para /usr/sbin/sshd y di con que este si existe pero parece ser el original que viene con la distribución y parece no haber sido modificado

root@ip-172-31-54-250:~# ll /usr/sbin/sshd
-rwxr-xr-x 1 root root 766784 May 12  2014 /usr/sbin/sshd*
root@ip-172-31-54-250:~#
 
Viendo las conexiones de red me llamaron la atención 3 conexiones establecidas, todas a la misma dirección y al mismo puerto:

root@ip-172-31-54-250:~# netstat -ntp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 172.31.54.250:60881     37.187.127.139:6667     ESTABLISHED 16562/sshd -i  
tcp        0      0 172.31.54.250:60882     37.187.127.139:6667     ESTABLISHED 16564/sshd     
tcp        0      0 172.31.54.250:60883     37.187.127.139:6667     ESTABLISHED 16566/syslogd  
root@ip-172-31-54-250:~#

claro que si, las conexiones parecían estar establecidas contra un servidor IRC (por el puerto 6667)!!! El IRC es muy utilizado para la administración de BOTNETs, básicamente los hosts corren un cliente IRC que se registra en uno o mas canales y a través de los cuales recibe ordenes de los admins y las ejecuta.

Dado que IRC por defecto se comunica sin ningún tipo de cifrado me fui de cabeza a ver las capturas de red. Luego de recorrer un par de ellas y solo ver cientos de conexiones SSH me encontré con una HTTP que captó mi atención. Parece haber sido desencadenada por el usuario conectado desde 91.81.221.168, uno de los usuarios autenticados correctamente con 1 intento:


 Se puede ver bien claro como descargan un supuesto archivo PDF de un sitio comprometido, pero que en realidad no se trata mas que de un script en perl (para otro post el análisis del script, tiene casi mil líneas). Particularmente se trata de un BOT irc para DDOS. Un poco mas abajo podemos ver en la variable $server el servidor de IRC donde el bot se reporta, que de momento resuelve en la IP que se pudo ver con netstat

También vemos por ejemplo la lista nicknames de donde se elegirá para unirse al canal.

Tan pronto como se terminó de descargar el archivo, el script fue ejecutado y 3 conexiones se establecieron contra el servidor IRC:


Diferentes usuarios y nicknames fueron utilizados pero todos se conectaron al mismo servidor y se metieron al mismo canal #Top. Una vez que el host ya se registró en el canal envía un mensaje muy simpático:

..4,1 [DDoS Perl Bot]. .9,1Hello, I`m Ready To Serve ... ..

La línea que envía este mensaje es la 372 del script, copiada a continuación:

sendraw("PRIVMSG $canal :^B^C4,1 [DDoS Perl Bot]^B ^C9,1Hello, I`m Ready To Serve ... ^C^B");

Debo admitir que la próxima imagen me dio cierto, como llamarlo... aah si,  cagaso:


Pareciera que dicho servidor IRC está controlado por los amigos de LulzSec. Sumado a este mensaje bastante gráfico, un poco mas arriba se encuentra la siguiente frase en claro Italino:

Chiunque voglia pu.. essere Anonymous e lavorare per una serie di obiettivi... Abbiamo un programma su cui tutti concordiamo, ci coordiniamo e agiamo, ma per la sua realizzazione tutti agiscono indipendentemente, senza volere alcun riconoscimento. Vogliamo solo raggiungere qualcosa che crediamo sia importante... ..

que según google translate significa:

Cualquier persona que lo desee puede ser anónimo .. y trabajar para una serie de objetivos ... Tenemos un programa todos estamos de acuerdo, coordinamos y actuar, pero para su realización todos actúan de forma independiente, sin querer ningún reconocimiento. Sólo queremos conseguir algo que creemos que es importante ... ..

Esta frase es el slogan de Anonymous Italia... La verdad que en este punto donde la ficción y la realidad se unen de una manera un tanto imprevista decidí terminar los procesos que mantenían las conexiones establecidas con el servidor de IRC. Los motivos?
  • mis conocimientos de IRC son muy básicos como para mantener esas conexiones corriendo.
  • aún no sabía qué estaba haciendo precisamente el sistema.
  • se qué es LulZSec y Anonymous.
  • y eso se parece a un arma xD.
Con los procesos detenidos y todas las conexiones cortadas seguí analizando las capturas de tráfico. Un poco mas adelante en la misma conexión se puede ver por ejemplo la cadena de donde se puede bajar el script que ejecuta el bot irc, básicamente parece describir los pasos para instalar el irc bot en un host (descargar, ejecutar y eliminar). Se aprovechan del hecho que PERL se encuentra instalado prácticamente en todos los hosts Linux del universo.



Durante un tiempo entran y salen nuevos bots del canal, hasta que comienza el show...


El usuario TopGun (usuario admin según la línea 144 del script) desencadena el ataque DDOS sobre el host 217.79.190.XXX mediante paquetes UDP con destino al puerto 65000 durante 300 segundos. Uno a uno los bots anuncian estar atacando el host y una cantidad exorbitante de paquetes UDP comienzan a salir de mi sistema. Al pasar los 300 segundos y terminar el ataque los bots esperan por un nuevo objetivo y nuevamente se produce el bombardeo de paquetes UDP, a veces a diferentes puertos (puerto 22 UDP) y a veces por mas tiempo (he viste ataques por 400 segundos).


Se pone mas y mas interesante. En este punto apagué el servidor y me fui a dormir porque me quedaban muchas cosas dando vuelta en la cabeza. Para la próxima un análisis un poco mas a fondo de las capturas que no llegaron por mail y los logs de auditd, para identificar todos los ataques lanzados y los bots. También me gustaría ver cómo desmantelar ese server IRC y comunicar a los infectados que lo están. Aunque no se hasta qué punto quiero involucrarme...

No hay comentarios:

Publicar un comentario