Unhide es una herramienta destinada a identificar anomalías en sistemas Unix / Linux, lo hace identificando procesos y puertos tcp/udp ocultos, que suele ser síntoma inequívoco de la presencia de un rootkit en nuestro sistema.
A diferencia de otras soluciones más al estilo anti-virus, Unhide no emplea firmas y se basa en los conceptos del tipo “detección de anomalías” contrastando diferentes fuentes de información y buscando inconsistencias entre ellas.
El software se divide en tres herramientas :
unhide: Para sistemas Unix genéricos (solaris, *BSD, linux antiguos)
Esta herramienta realiza dos tipos de “checks” en el sistema:
- /bin/ps contra /proc : se basa en comparar la salida del comando /bin/ps contra las entradas del directorio /proc. Si encuentra una entrada en /proc y no encuentra su correspondiente proceso en /bin/ps marca esa PID como “pid oculta”
- /bin/ps contra syscalls: el objetivo de este test es intentar deducir si existe algún proceso oculto interrogando directamente al Kernel mediante syscalls y comparando su salida contra /bin/ps
unhide-linux26: Para sistemas Linux kernel 2.6
Esta versión de unhide para sistemas linux modernos añade, ademas, otro método de detección consistente en “bruteforcear” el espacio de PIDs del sistema a base de múltiples forks() y comparar contra /bin/ps. Si el sistema, durante el proceso de forks(), no ha dado alguna PID que no aparece listada en /bin/ps es síntoma de que algo no marcha correctamente
unhide-tcp : Herramienta para detectar puertos TCP/UDP ocultos
Esta herramienta localiza puertos TCP o UDP que no aparecen listados en el comando netstat intentando realizar un bind() sobre el espacio de puertos disponibles en el sistema y compararlo contra netstat. Si un puerto en el que no se ha podido hacer bind() no aparece en netstat, ese puerto es cuanto menos, sospechoso
Para usar Unhide puedes descargarlo de la web y compilarlo de la siguiente forma (para compilar únicamente hace falta un gcc normalito) :
#gcc unhide-linux26.c -o unhide-linux26
#gcc unhide-tcp.c -o unhide-tcp
O bien, si eres usuario de Debian Sid/Lenny o Ubuntu puedes instalarlo directamente con apt-get
Para iniciar el scaneo de puertos ocultos únicamente debemos ejecutarlo de la siguiente forma:
#./unhide-tcp
Y para ejecutar los diversos checks de la herramienta unhide-linux26:
#./unhide-linux26 proc
#./unhide-linux26 sys
#./unhide-linux26 brute
Lo interesante sería ejecutar periódicamente la suite de herramientas en nuestros sistemas Unix como medida para detectar eventuales compromisos en el sistema.
El lanzamiento de la última versión estable(recién salida del horno) coincide con el lanzamiento en paralelo de su propio sitio web www.unhide-forensics.info
La novedad mas destacada es que Patrick Gouin, arquitecto senior en desarrollo de sistemas embebidos, se une al staff de forma estable, y de su mano han llegado bastantes de las novedades de esta versión.
Entre las novedades mas destacadas:
- Mayor granularidad a la hora de ejecutar tests: Hasta ahora existían ‘metatests’ que estaban compuestos en algunos casos por múltiples tareas, en esta versión se pueden seleccionar específicamente que tests ejecutar (por ejemplo un test con una syscall determinada)
- Añadido un nuevo e interesante test llamado ‘reverse’ para identificar sistemas en los que se haya comprometido /bin/ps para hacerle creer que existe un proceso en ejecución que realmente no lo esté
- Ampliados los test sobre procfs añadiendo chdir/readdir
- Posibilidad de volcar el resultado del scan a un fichero con la opción -f
- Posibilidad de ejecutar un test específico (-r) para Kernels cuyo planificador no sea el estándar (error detectado en sistemas cuyo kernel era una versión ‘pura’ de kernel.org)
- Mejor integración con rkhunter
Y muchas otras más que podrás ver reflejadas en la pagina man del proyecto.
Para descargar la última versión: www.unhide-forensics.info
UNHIDE no escanea el puerto 65535 entre otras cosas.