19 octubre 2011

WinUnhide

Desde hace algún tiempo tenía en mente el portar Unhide a plataformas Windows, Unhide está muy ligado a plataformas Unix/Linux y el hacer un port a una plataforma como Windows suponía un reto interesante.

Finalmente he conseguido un port plenamente funcional sobre el que poder trabajar más adelante y añadir más funcionalidad.

Unhide es una herramienta orientada a detectar inconsistencias en el sistema operativo a la hora de mostrar los procesos que se están ejecutando y los puertos TCP/UDP que están en uso, este tipo de comportamiento suele estar asociado a sistemas troyanizados con 'rootkits'. Unhide consta de dos partes, una orientada a localizar procesos ocultos y otra para puertos TCP/UDP igualmente ocultados empleando algún tipo de rootkit.

La versión Unix de Unhide emplea el comando 'ps' para hacer un listado de procesos y ejecuta una serie de pruebas para discernir la fiabilidad de la información mostrada por ese comando. En el caso de Windows, existe una herramienta idéntica llamada 'tasklist' pero he preferido emplear la interface WMI para Windows con el comando 'wmic'.

En concreto estoy usando el comando 'wmic process get ProcessId' para hacer un listado de procesos visibles a través de este comando, posteriormente empleo openprocess() y Toolhelp para barrer un amplio espacio de PIDs intentando localizar procesos que sean accesibles mediante estas APIs pero no aparezcan con el comando wmic.

En el caso de Unhide-TCP, he preferido 'saltarme' la filosofía empleada en entornos Unix debido a que la idea de parsear el comando 'netstat' en Windows sin ayuda de sed / awk, me pareció bastante titánica. Probablemente usando pcre hubiese sido factible, pero me pareció complicar sobremanera el código así que usé otra aproximación al problema.

Lo que he hecho con WinUnhide-TCP es listar los puertos TCP/UDP visibles mediante las llamadas GetTcpTable() y GetUdpTable(), y luego emplear bind() sobre todo el espacio de puertos posible para detectar puertos que no aparecen listados con las llamadas anteriores y en los que no se puede hacer bind(), señal de que esas funciones han sido troyanizadas.

Existen herramientas 'anti-rootkits' para entornos Windows como por ejemplo GMER, que son bastante mas completas y complejas, mi idea es simplificar el concepto ejecutando una serie de tests que indiquen si el sistema se encuentra comprometido o no, en caso de encontrar indicios, sería el momento de entrar a usar herramientas más complejas para identificar exactamente el problema

13 comments :

fossie dijo...

Gracias, por fin algo para Windows :D
Siempre se dice que Windows es el sistema más inseguro (más que linux/unix) y pienso que por eso deberían existir más herramientas de este tipo para este SO y no tantas para linux/unix

Lo bueno de este tipo de herramientas no es si son más o menos completas y/o complejas sino que son "caseras" y somos conscientes, paso a paso de lo que hacen en todo momento. Es una muy buena forma de aprender.

Adrián dijo...

Atención, pregunta idiota. ¿Cómo puedo obtener información acerca de esos procesos ocultos? Nombre, ejecutable o ficheros que manejan...

Batmanclark dijo...

Gran trabajo, gracias

Patrick dijo...

el WinUnhide-tcp me detecta que es un troyano... esto a que se debe?

Yago Jesus dijo...

Llegado el caso, si encuentras evidencias de que algo raro sucede lo mas efectivo es que extraigas una copia en frio de ese Windows y lo analices con alguna herramienta forense como  sleuthkit o Autopsy

Yago Jesus dijo...

 Disculpa, no entiendo que quieres decir, que te detecta un troyano (puerto oculto) o que tu AV te detecta la herramienta como troyano ?

Taraete dijo...

Si que se detecta como troyano:
http://www.virustotal.com/file-scan/report.html?id=32fe8540bf57de0f686b48fd0dc031c8a953db720f7b3859f96e76cea0f0ebb4-1319052892
y en mi xp ha hecho saltar el firewall. de todas maneras estoy tranquilo, porque despues de mirar el codigo lo he compilado y sigue detectandose como troyano, pero el codigo no miente :)

Madrikeka dijo...

Je! Te lo detecta Norman....con ellos estuve trabajando hace un par de años XD, me gusta ese antivirus.

A mi la versión TCP me funciona, pero el winunhide se me cierra de golpe, de todas formas lo probaré mejor en casa, que aquí los equipos están cerrados como latas en conserva y siempre dan problemillas a aplicaciones de este tipo.

Muchas gracias por pasarlo a Windows!

Antonio Randallo dijo...

Lo más probable es que te falte el argumento "sys". Ej: WinUnhide sys

Sin Idea dijo...

Hola, no tengo ni pajolera del tema... en un win vista no se me abren los programas (aparecen y desaparecen de golpe). Lo unico que he llegado a ver (casi como en canal plus antiguo con las rayitas) son los puertos ocultos 2246, 2247...

hace pongo mi pc tuvo una infeccion del tipo recycler (o algo peor)...

De paso, perdonan el palique, tengo el controlador VgaSave en administrador de controladores no plug ang play, es normal?

Help.

Madrikeka dijo...

No te contesté que se me pasó este fin de semana, en mi casa funcionó perfectamente, de todas formas muchas gracias.

Cada vez que lo ejecutaba aquí, mi antivirus se ponía "colorado" XD.

funky dijo...

se echa en falta que una vez localice un PID o un puerto diga el nombre del proceso asociado o el que abre el socket.

Yago Jesus dijo...

En Linux es fácil gracias a /proc, en Windows cambia el tema, no obstante la idea es seguir avanzando y puliendo detalles