lunes, 10 de agosto de 2015

Una instancia a la deriva VI: destripando DDoS Perl IrcBot v1.0

Hoy tuve oportunidad de volver a sentarme un rato a analizar el bot IRC escrito en PERL del que les comenté en el post anterior. Lo mejor del caso es que está documentado con comentarios!!

Características principales:

  • Está compuesto por unas 1100 líneas de PERL puro y duro.
  • El código está divido en 5 partes:
    • Un gran comentario inicial a modo de "man" donde el autor explica cómo funciona, las opciones disponibles, etc. El inglés no parece ser la especialidad del autor... Buena parte del script parece estar escrito en portugues por palabras como: meunick, porta, pacote, etc.
    • Configuration: donde se definen variables como el nombre del servidor IRC al que se conecta, el nombre del proceso con el que se oculta el script en ejecución (apache2, sshd, httpd, cron, etc), nombre de usuario a utilizar en el canal IRC, etc.
    • Help module: permite consultar las opciones disponibles en el bot, a través del canal IRC.
Opciones: system, version, flood
    • Functions: en este segmento se agrupan todas las funcionalidades del script, como: 
      • die: mata al bot y termina su actividad.
      • join: une al bot a un canal de IRC, donde puede recibir nuevas ordenes.
      • portscan: lanza un scaneo de puertos contra un host.
      • download: descarga un archivo a partir de la orden recibida por IRC.
      • dns: el bot resuelve un dominio recibido como parámetro
      • port: intenta una conexión TCP a un puerto particular, y reporta si fue posible o no.
      • udp1: UDP flooding para DDOS, los paquetes son de tamaño variable y terminan con la cadena "Tr0x". El target, el puerto destino y la duración del ataque llegan como parámetros.
      • udp2: esta opción va un poco mas allá, hace uso de una función auxiliar llamada udpflooder. No solo hace flooding UDP, sino también TCP, IGMP e ICMP. Además envía paquetes al resto de los protocolos recorriendo los valores de 3 a 255 (excepto 6, TCP lista de valores/protocolos) en el campo protocol del header IP.
Función udpflooder
      • udp3: UDP flooding para DDOS, los paquetes son de tamaño fijo (0 bytes). El target, el puerto destino y la duración del ataque llegan como parámetros.
      • tcp: TCP flooding inicia conexiones con el fin de consumir los recursos del objetivo, no hay transferencia de información.
      • http: inicia conexiones TCP contra un servidor web y envía una petición GET.
      • cback: inicia una conexión a un host remoto y enlaza esa conexión con una shell local. Lo que comúnmente se conoce como reverse shell.
Funcíon cback para reverse shell
      • mail: esta función permite ordenar al bot el envío de correo electrónico.
Función para envío de correo (SPAM?)
    • Funciones auxiliares utilizadas para tareas particulares como escribir los sockets y demás.
  • El script sólo hace uso de unos pocos módulos de perl (Socket, IO::Socket, IO::Select) lo que lo hace extremadamente portable. Se  jactan de esto diciendo: "Teste on every system with PERL instlled"
  • De stealth el bot no tiene demasiado, solo el cambio del nombre del proceso antes de hacer el fork
Lista de nombres y elección
    • A continuación se puede ver como desactivan algunas señales y luego previo al fork asignan $process a $0.
Asignación del nombre a $0
    • El proceso gira eternamente en un loop while(1) a la espera de nuevas ordenes desde el canal. Este funcionamiento genera un consumo de CPU altísimo que no debería pasar desapercibido.
ubuntu@ip-172-31-54-250:~$ ps aux --sort=-pcpu|head
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ubuntu    8982 99.5  0.4  32836  4904 ?        R    18:39 190:14 /sbin/klogd -c 1 -x -x
root         1  0.0  0.2  33508  2876 ?        Ss   00:38   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    00:38   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    00:38   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   00:38   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    00:38   0:00 [kworker/u30:0]
root         7  0.0  0.0      0     0 ?        S    00:38   0:02 [rcu_sched]
root         8  0.0  0.0      0     0 ?        R    00:38   0:01 [rcuos/0]
root         9  0.0  0.0      0     0 ?        S    00:38   0:00 [rcuos/1]
ubuntu@ip-172-31-54-250:~$ 

  • En todo momento el bot reporta por IRC las respuestas a las órdenes recibidas, así como también la finalización de las mismas. Por ejemplo, en la primer imagen se ven cuando el bot recibe la orden de atacar al host 217.79.XXX.XXX mediante la función udp3 por 300 segundos al puerto UDP 65000; en la segunda imagen se ve cuando el host reporta el fin del ataque habiendo mandado 383790 Kbytes (374Mbytes en 300 segundos), bastante lejos de los 7Gbyte generados por los otros dos bots. Es decir que con solo estos 3 bots (había varios mas participando) se generaron mas o menos 14.6Gbytes de tráfico en 300 segundos, lo que da una tasa de casi 50Mbytes (~500Mbits) por segundo, not too bad, not too bad.
Azul (servidor), Rojo (bot)
Azul (bot), Rojo (servidor)

Estado actual:

Dado que pasaron unos días desde que se tomaron las capturas de red pensé que posiblemente el servidor de IRC ya habría sido desactivo y lo habrían movido a otro lugar, sin embargo:

juan@moon:~/Escritorio/$ host fuoriditesta.noip.me
fuoriditesta.noip.me has address 37.187.127.139
juan@moon:~/Escritorio/$


Sigue firme en el mismo host, en algún lugar de Francia, a pesar de haber sido reportado hace un par de días...:
test@moon:~/Escritorio/$ nc fuoriditesta.noip.me 6667
NOTICE AUTH :*** Looking up your hostname
NOTICE AUTH :*** Checking Ident
NOTICE AUTH :*** Couldn't look up your hostname

NICK latina
NOTICE AUTH :*** No ident response
PING :1209436948

USER mrbeauty 192.168.0.2 fuoriditesta.noip.me :poesj
PONG :1209436948

:Benvenuti.anonymous.x.it 001 latina :Welcome to the Internet Relay Network latina
:Benvenuti.anonymous.x.it 002 latina :Your host is Benvenuti.anonymous.x.it, running version beware1.5.7
:Benvenuti.anonymous.x.it 003 latina :This server was created Tue Jul 13 2004 at 20:36:17 GMT
:Benvenuti.anonymous.x.it 004 latina Benvenuti.anonymous.x.it beware1.5.7 dgikoswx biklmnoprstv
:Benvenuti.anonymous.x.it 005 latina MAP SILENCE=15 WHOX WALLCHOPS WALLVOICES USERIP CPRIVMSG CNOTICE MODES=6 MAXCHANNELS=10 MAXBANS=45 :are supported by this server
:Benvenuti.anonymous.x.it 005 latina NICKLEN=9 TOPICLEN=160 AWAYLEN=160 KICKLEN=160 CHANTYPES=#& PREFIX=(ov)@+ CHANMODES=b,k,l,rimnpst CASEMAPPING=rfc1459 :are supported by this server
:Benvenuti.anonymous.x.it 251 latina :There are 148 users and 2 invisible on 1 servers
:Benvenuti.anonymous.x.it 253 latina 1 :unknown connection(s)
:Benvenuti.anonymous.x.it 252 latina 3 :operator(s) online
:Benvenuti.anonymous.x.it 254 latina 3 :channels formed
:Benvenuti.anonymous.x.it 255 latina :I have 150 clients and 0 servers
:Benvenuti.anonymous.x.it NOTICE latina :Highest connection count: 185 (185 clients)
:Benvenuti.anonymous.x.it 375 latina :- Benvenuti.anonymous.x.it Message of the day
:Benvenuti.anonymous.x.it 372 latina :- 2015-4-8 23:48
:Benvenuti.anonymous.x.it 372 latina :- (IT)
:Benvenuti.anonymous.x.it 372 latina :- « 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... »
:Benvenuti.anonymous.x.it 372 latina :- . /$$                 /$$            /$$$$$$
:Benvenuti.anonymous.x.it 372 latina :- .| $$                | $$           /$$__  $$
:Benvenuti.anonymous.x.it 372 latina :- .| $$       /$$   /$$| $$ /$$$$$$$$| $$  \__/  /$$$$$$   /$$$$$$$
:Benvenuti.anonymous.x.it 372 latina :- .| $$      | $$  | $$| $$|____ /$$/|  $$$$$$  /$$__  $$ /$$_____/
:Benvenuti.anonymous.x.it 372 latina :- .| $$      | $$  | $$| $$   /$$$$/  \____  $$| $$$$$$$$| $$
:Benvenuti.anonymous.x.it 372 latina :- .| $$      | $$  | $$| $$  /$$__/   /$$  \ $$| $$_____/| $$
:Benvenuti.anonymous.x.it 372 latina :- .| $$$$$$$$|  $$$$$$/| $$ /$$$$$$$$|  $$$$$$/|  $$$$$$$|  $$$$$$.$
:Benvenuti.anonymous.x.it 372 latina :- .|________/ \______/ |__/|________/ \______/  \_______/ \_______/
:Benvenuti.anonymous.x.it 372 latina :-                          
...
:Benvenuti.anonymous.x.it 372 latina :-            by AnonPlus
:Benvenuti.anonymous.x.it 376 latina :End of /MOTD command.
:Benvenuti.anonymous.x.it NOTICE latina :on 1 ca 1(4) ft 10(10)

^[[H^C
test@moon:~/Escritorio/SH/Segunda_parte$


De hecho hasta parece tener mas usuarios que antes, si no me equivoco en las capturas analizadas se llegaron a ver 57 usuarios, en esta prueba había 148 (al día de hoy hay mas de 500).

Hay una nueva versión disponible del bot (descargable desde un nuevo lugar), el nuevo nombre es ntpd.pdf, y trae algunos cambios simples en el código, por ejemplo:
  • Nuevos admins
Top.pdf:my @admins = ("x","TopGun","anonplus");
ntpd.pdf:my @admins = ("Anonplus","AnonPIus","topgun");
  • Nuevo mensaje de bienvenida al unirse al canal:
Top.pdf:        sendraw("PRIVMSG $canal : 4,1 [DDoS Perl Bot] 9,1Hello, I`m Ready To Serve ... ");
ntpd.pdf:        sendraw("PRIVMSG $canal :  0,1 by nethackteam ... ");

entre otros menos importantes. El cambio de @admins no es menor, dado que es parte del mecanismo de validación utilizado para ejecutar comandos remotamente, por lo tanto los bots corriendo la versión vieja del código no aceptarían las órdenes de los nuevos admins. De todas maneras el script es capaz de actualizarse a partir de una orden enviada por el canal, donde básicamente se descarga la nueva versión del link pasado como parámetro y se ejecuta.


En fin... hay mucho mas para decir, pero por ahora corto acá.

    No hay comentarios:

    Publicar un comentario