Unhide: encontrar procesos y puertos ocultos en Linux

Unhide es una excelente herramienta forense de GNU/Linux que permite encontrar tanto procesos como puertos en escucha ocultos en el sistema. Este tipo de procesos y listeners suelen aparecer cuando el sistema ha sufrido algún tipo de ataque y ha sido infectada con un rootkit. También está disponible para Windows, ambas versiones se pueden descargar desde el sitio web www.unhide-forensics.info

Instalación

Para descargarla por repositorios en Debian y Ubuntu:

# apt-get install unhide

Para descargarla por repositorios en RHEL, CentOS, Fedora, etc utilizamos el repositorio de RepoForge (bajad el rpm según arquitectura):

# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm
# yum install rpmforge-release-0.5.3-1.el6.rf.i686.rpm 
# yum install unhide

unhide para procesos

Básicamente, unhide (modo ps)utiliza tres técnicas para encontrar los procesos:

Comparar la salida del comando /bin/ps con los datos que hay en el filesystem /proc. Para utilizar esta técnica ejecutamos el comando con el parámetro «proc»:

# $ unhide proc
Unhide 20100201
http://www.security-projects.com/?Unhide


[*]Searching for Hidden processes through /proc scanning

Comparar la información del comando /bin/ps con la información recolectada de syscalls (system call scanning). Para ello pasamos el parámetro «sys»:

$ unhide sys
Unhide 20100201
http://www.security-projects.com/?Unhide


[*]Searching for Hidden processes through kill(..,0) scanning

[*]Searching for Hidden processes through  comparison of results of system calls

[*]Searching for Hidden processes through getpriority() scanning

[*]Searching for Hidden processes through getpgid() scanning

[*]Searching for Hidden processes through getsid() scanning

[*]Searching for Hidden processes through sched_getaffinity() scanning

[*]Searching for Hidden processes through sched_getparam() scanning

[*]Searching for Hidden processes through sched_getscheduler() scanning

[*]Searching for Hidden processes through sched_rr_get_interval() scanning

[*]Searching for Hidden processes through sysinfo() scanning

HIDDEN Processes Found: 0

Y por última la técnica desesperada con el parámetro «brute», disponible sólo es kernels superiores a la versión 2.6. Esta técnica consiste en buscar por fuerza bruta en todos los PIDs del sistema.

# unhide brute

unhide para puertos y UDP en escucha

El modo TCP de unhide permite identificar los puertos que están escuchando (TCP y UDP) en nuestro sistema pero que por contra no aparecen al ejecutar el comando netstat:

# unhide-tcp