28 enero 2010

Análisis de procesos en sistemas RedHat (y derivados)

Hace tiempo que no publicamos un post linuxero y para no perder la costumbre hoy vamos a publicar algo relacionado con seguridad, análisis forense y procesos en linux.

El motivo real de este post es la próxima liberación de una nueva versión de Unhide así que, aprovechando el post, presento la nueva versión en sociedad y en rigurosa exclusiva (Ríete del Ipad!!).

Voy a dividir el post en dos tipos de procesos 'los que ves' y 'los que no ves'.

Los que ves: Hace tiempo, una de las cosas con las que mas frecuencia se recurría para atacar a los sistemas Windows desde acérrimos usuarios de Linux era la enorme cantidad de procesos que te podías encontrar en un sistema Windows frente a la simpleza de un sistema Linux. Esta situación ha cambiado drásticamente, véase un ejemplo de una workstation Linux:

$ ps ax | wc -l
228

No está mal, 228 procesos que, como es lógico, resultan poco manejables para averiguar que-es-que y si son legítimos o ilegítimos. Para este menester acude en nuestra ayuda rpm que es el gestor de paquetes en sistemas RedHat, Fedora, CentOS y derivados. Rpm implementa firma digital para verificar la autoría de los paquetes y, adicionalmente, tiene una base de datos con las firmas digitales de los ficheros de cada paquete. Y eso es realmente interesante, porque con un pequeño script en Perl, podemos interrogar a cada proceso en ejecución si pertenece a algún paquete y si ha sido alterado. El script lo podéis bajar de aquí y lo que hace básicamente es lanzar ps, buscar la ruta del ejecutable mirando en /proc/pid/exe (sorprendentemente, ps no lista bien la ruta de los ejecutables en *todos* los procesos) y lo interroga con rpm -Vf.

 $ perl procv.pl

El proceso [ 2936 /usr/bin/gnome-session ] ha sufrido modificaciones en su paquete base:
S.5....T    /usr/share/gnome/default.session                                           

El proceso [ 3227 /usr/bin/python ] ha sufrido modificaciones en su paquete base:
S.5....T    /usr/lib/python2.5/distutils/sysconfig.pyc                          

El proceso [ 9977 /opt/firefox/firefox-bin ] ha sufrido modificaciones en su paquete base:
el archivo /opt/firefox/firefox-bin no es propiedad de ningún paquete

Como se puede ver, en principio nada serio, procesos en cuyos paquetes se han modificado ficheros de configuración y un proceso que no corresponde a ningún rpm. Con esto se puede tener una idea aproximada de que es lo que está corriendo en el sistema.

Lo que no ves: En este punto entran en juego los famosos rootkits, tiempo atrás ya hable de Unhide así que no me voy copy-pastear a mi mismo, solo aprovechar para presentar la versión 20100201 disponible en el repo sbd de herramientas y que espero publicar en Febrero. Esta nueva versión incorpora un buen número de mejoras en fiabilidad y rendimiento además de un nuevo tipo de escaneo empleando hilos (threads). Si alguien encuentra algo-que-no-va-bien correito, por favor

UPDATE: Juan Galiana ha publicado en su blog un port del script para que funcione en sistemas Debian (y derivados) 

7 comments :

Seifreed dijo...

Hola!

Lo probaremos y comentaremos ya lo sabes :P

Un saludo

conexioninversa dijo...

Muy bueno!!. Que sepas que la tengo en mi caja de herramientas para sistemas Linux.

Anónimo dijo...

Alguna cosa parecida para sistemas tipo Debian?

Parece bastante útil, la verdad.

Newlog

Yago Jesus dijo...

@Seifreed Espero ansisoso tu feedback.

@mspedro Todo un honor, espero podamos coincidir en la rooted

@Newlog: Si te refieres al script en Perl, me temo que en debian no hay equivalencia http://packman.linux.is/ si te refieres a unhide, funciona perfectamente en cualquier distribución Linux (de hecho he visto hasta ports a FreeBSD) incluso puedes usar la versión antigua con apt-get install unhide

Santi Saez dijo...

Hola Yago,

El script me ha recordado a uno que tenía, localiza binarios que están en el $PATH y no pertenecen a ningún RPM.

Útil para localizar el típico top/find/ps, etc. hackeado que dejan en "/bin" en lugar de "/usr/bin" para que se ejecute antes ;)

Es muy muy sencillo, lo dejo en:

http://pastebin.com/f63fc8f12

Saludos

neofito dijo...

Buen post, lastima que solo sirva para RedHat y derivadas ;-)

Lo mas parecido que he encontrado al comando rpm de verificacion, pero para debian/ubuntu serian debsums y dscverify (dentro del paquete devscripts).

Saludos

Juan Galiana dijo...

Hola,


Para los que os interesa este script en sistemas Debian he publicado una versión para este sistema escrita en bash. Podeis encontrar los detalles en http://juangaliana.blogspot.com/2010/04/script-para-comprobar-la-integridad-de.html


Saludos