lunes, 17 de septiembre de 2012

Una historia de hackers [Parte III]

Nota: Esta es la tercera parte de un relato sobre una experiencia personal. Quizá quieras leer las partes I y II para comprendelo mejor.

---

¡Era Windows! El servidor era Windows ¿Cómo pude pasar por alto algo tan importante? Los comandos que encontré en los logs nunca pudieron haber funcionado. Esos eran comandos de Linux y el servidor era un Windows Server 2003. Había sido muy distraido por no considerarlo desde un principio. En parte creo, el llevar más de tres años como usuario de Linux hizo que todo me pareciera tan natural que olvidé por completo el contexto y por otra parte la emoción de encontrar algo sospechoso y seguirle la pista me hizo apresurar algunas conclusiones.

En un principio había supuesto que el fichero "config.inc.php" con la función "eval" había sido subido o modificado por el hacker mediante el FTP. De esa forma habría conseguido ejecutar cualquier cosa sin llamar mucho la atención. Siempre es más facil esconder la llamada a una sola función que tódo el código de una webshell. Pero esa suposición ya no tenía sentido, para qué iría a subir el hacker un fichero con una función eval y luego mandar a ejecutar comandos de Linux si él sabía que el servidor era un Windows.


Decidí echarle un vistazo al "config.inc.php", no esperaba encontrar nada revelador, pero uno nunca sabe. Según los logs, el fichero estaba en la ruta "/phpmyadmin/config/config.inc.php", así que abrí la carpeta "htdocs" y busqué el subdirectorio "phpmyadmin". No existía. Supuse entonces que "phpmyadmin" sería un alias que apuntaba a otro directorio fuera de htdocs. Efectivamente ese era el caso. El directorio al que hacía referencia era "C:/xampp/phpMyAdmin/". Dentro, busqué el directorio "config" pero nuevamente no existía y ahora tampoco se trataba de un alias ¿Sería que el hacker lo habría borrado para no dejar huellas?

Regresé a los logs. Esta vez no buscaría cadenas sospechosas sino que filtraría los resultados por la IP. Quería saber que solicitudes había hecho el hacker antes y después de intentar ejecutar comandos linux en un servidor windows. Empezaba a sospechar de que iba todo esto...

[XX/XXX/XXXX:03:12:10 -0500] "GET /muieblackcat HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:11 -0500] "GET /muieblackcat HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:12:14 -0500] "GET //admin/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:14 -0500] "GET //admin/pma/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:14 -0500] "GET //admin/phpmyadmin/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:16 -0500] "GET //index.php HTTP/1.1" 200 24047
[XX/XXX/XXXX:03:12:18 -0500] "GET //admin/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:12:18 -0500] "GET //admin/pma/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:12:18 -0500] "GET //dbadmin/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:19 -0500] "GET //myadmin/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:19 -0500] "GET //mysql/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:19 -0500] "GET //mysqladmin/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:20 -0500] "GET //typo3/phpmyadmin/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:20 -0500] "GET //phpadmin/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:20 -0500] "GET //phpMyAdmin/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:21 -0500] "GET //phpmyadmin/index.php HTTP/1.1" 200 8110
[XX/XXX/XXXX:03:12:30 -0500] "GET //web/phpMyAdmin/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:31 -0500] "GET //xampp/phpmyadmin/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:51 -0500] "GET //mysql/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:12:52 -0500] "GET //phpMyAdmin-2.2.3/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:52 -0500] "GET //phpMyAdmin-2.2.6/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:53 -0500] "GET //phpMyAdmin-2.5.1/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:53 -0500] "GET //phpMyAdmin-2.5.4/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:53 -0500] "GET //phpMyAdmin-2.5.5-rc1/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:54 -0500] "GET //phpMyAdmin-2.5.5-rc2/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:12:54 -0500] "GET //typo3/phpmyadmin/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:12:55 -0500] "GET //phpadmin/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:13:00 -0500] "GET //phpMyAdmin-2.5.6-rc1/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:13:00 -0500] "GET //phpMyAdmin-2.5.6-rc2/index.php HTTP/1.1" 404 1123
[XX/XXX/XXXX:03:13:15 -0500] "GET //phpMyAdmin/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:13:15 -0500] "GET //phpmyadmin/index.php HTTP/1.1" 200 8110
[XX/XXX/XXXX:03:13:26 -0500] "GET //phpmyadmin1/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:13:26 -0500] "GET //phpmyadmin2/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:13:26 -0500] "GET //pma/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:13:27 -0500] "GET //web/phpMyAdmin/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:13:27 -0500] "GET //xampp/phpmyadmin/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:13:27 -0500] "GET //web/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:13:28 -0500] "GET //php-my-admin/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:13:28 -0500] "GET //websql/index.php HTTP/1.1" 404 1128
[XX/XXX/XXXX:03:13:28 -0500] "GET //phpmyadmin/index.php HTTP/1.1" 200 8110
[XX/XXX/XXXX:03:13:48 -0500] "GET /phpmyadmin/setup/index.php HTTP/1.1" 404 1128

Evidentemente era una búsqueda automatizada. El hacker parecía interesando en encontrar instalaciones de "phpMyAdmin" ¿Para qué? Obvio, conocía alguna vulnerabilidad en phpMyAdmin y quería explotarla ¿Un 0day quizá? ¿Estaría frente al rastro de un exploit "in the wild"? Naaa... sería mucha suerte (para mí). Decidí revisar en exploit-db si había algo nuevo para phpMyAdmin. No encontré nada nuevo, pero sí esto:

http://www.exploit-db.com/exploits/17514/

Un exploit que aprovecha un bug en phpMyAdmin para colar un "eval" en el fichero "config/config.inc.php" y conseguir ejecución remota de código ¿Suena familiar?

En mi opinión el hacker debía tener un script que busque y explote de forma automatizada vulnerabilidades en software común como XAMPP o phpMyAdmin. El script no verificaba el SO del servidor y por ello el intento irracional de ejecutar comandos linux en windows.

Ya era hora de llamar al administrador.

- Buenas tardes, soy Cesar.
- Hola Cesar, sí... dime ¿Qué pasó con nuestro servidor?
- Bueno, al parecer el hacker estaba empleando un bot IRC escrito en perl para controlar el servidor. Pero, según me indican, ya hacen varias horas desde que el ataque se detuvo.
- Sí, debe ser por que reiniciamos el servidor.
- Es probable. Además vimos que el hacker también está explotando vulnerabilidades en phpMyAdmin, así que sería conveniente que no estubiera accesible desde internet.
- En phpMyAdmin dices ¿No? Ya, veremos eso...
- Listo, creo que eso sería todo... hasta luego.
- Muy bien, gracias... hasta luego.

...

Horas más tarde, ya en en "localhost", inicié mi cliente IRC y conecte con el canal que estaba en la configuración del bot. En la pantalla de mi ordenador un pequeño destacamento de poco más de treinta bots esperaban instrucciones.

Fig. 1 - Lista de bots.

Había tomado mi nick del valor de una variable que también estaba en la configuración: "Ciprian". Pero aún no tenía idea de cual era su función.

Aguardé unos minutos para notar si había actividad en el canal pero no sucedía nada. Quizá el hacker no estaba conectado en ese momento ¿Cómo haría el hacker para controlar los bots desde aquí? Tenía que analizar el código fuente, no había otra forma. A los pocos minutos encontré la función que servía para ejecutar ordenes en los bots, noté que empleaba un mecanismo de "delay" cada cierto número de lineas en la respuesta con la finalidad de evitar el flood pero no lograba entender que evento provocaba que se ejecute esa función...

"J" se ha conectado. Qué oportuno, "J" es un amigo con mucha experiencia en hacking y siempre me da buenos consejos al respecto. Estaba seguro que este tema le interesaría así que le comente lo sucedido...

J: Cesar que tal, como estas
Yo: hola, aca... me gané con una botnet irc xD
J: :O
Yo: quieres ver ?
J: como así la hiciste?
Yo: bueno...
J: a ver juega...

Así que le expliqué brevemente como descubrí la botnet y le pasé el código fuente por correo. Tiempo más tarde...

J: ...ya se como usarlo pero no puedo conectarme :(
Yo: como es ? ya no te deja conectar ? :S
J: por PRIV MSG
Yo: :O

J: nunca usaste irc antes no? xD es antigua esa shit, osea tu lo usabas pa la botnet nomas :P
Yo: si utilizaba, pero solo para el canal de backtrack-es en mis tiempos ya había messenger xD :P

...

J: my @adms=("Ciprian"); le hace caso a el nomas
Yo: a ya... yo me conecte con el nick de Ciprian
J: te pide pass?
Yo: no me di cuenta xD
J: xD

J: probamos?
Yo: si prueba nomas :)
J: ya :D soy su master
Yo: :o
J: dale un privado a cualquiera ./msg nick yaquicomandodelinux
Yo: no me hace caso
J: a xumas xD el nick ps :x cambiate el nick
Yo: ok
J: espera q me cambio yo
J: listo cambiate, no mandes nada en el canal
Yo: oh shiit!! funciona xD
J: jajajajaja
Yo: jajajaja
J: ya ahora falta saber los comandos globales...


Fig. 2 - Ejecución de comandos.

Esa noche la botnet nos dio algo de juego mientras tratábamos de aprender más sobre su funcionamiento e inventábamos algunas teorías sobre su creador y sus propósitos.

Continuará...

Saludos.

4 comentarios:

  1. tu eres uno de los mejores bro , sige asi queremos ver mas info sobre la botnet en irc , segun tengo entendido es mejor , porque no banean las ips

    ResponderEliminar