Destapando intrusos en nuestros sistemas con lsof

consola-linux-shell¿Os habéis preguntando alguna vez si vuestros sistemas han sido hackeados y no os habéis enterado? lsof es una herramienta versátil de rastreo de intrusos.

¿Cómo funciona? Recordemos que en Linux todo es un fichero. Prácticamente todas las actividades de un sistema giran alrededor de los ficheros abiertos, por lo tanto dichos ficheros son una fuente perfecta para obtener información de la actividad de nuestro sistema. lsof logra, de forma centralizada y sintetizada, recoletar toda esa información.

Cómo cualquier otro programa puede ser manipulable por los intrusos, por lo tanto lo recomendable, tras ser compilado el programa desde las fuentes, es ubicar el ejecutable en un algún medio protegido, que no se pueda escribir, como un CD.

Instalación

Lsof soporte prácticamente todos los sistemas basados en UNIX .

En Debian lo instalaremos de la manera más sencilla:

  1. apt-get -y install lsof

Una vez instalado, podemos ver la versión del programa, con lsof -v :

lsof-versionlsof tiene infinidad de variables y opciones, aquí mostramos unas cuantas:

  • lsof, sin parámetros, nos mostrará un resumen de la información, aunque es bastante extenso.
  • lsof /bin/bash, lista todos los procesos que utiliza bash.
  • lsof -p PID, Listará todos los ficheros abiertos por un proceso dado.
  • lsof +D /tmp, mostrará los ficheros abiertos en /tmp y en sus subdirectorios sin los enlaces simbólicos.
  • lsof -u usuario, listará todos los ficheros abiertos por el usuario.
  • lsof -i, mostrará los ficheros asociados a la red.
  • lsof -i | grep ‘ ->’, listará todas las conexiones activas.
  • lsof -a -i -u www-data, mostrará todos los ficheros abiertos por el usuario de apache2, www-data.

Tenemos que pensar que lsof está pensado para usarse desde root, si se usa desde cualquier otro usuario se recibiará mucha menos información.

lsof devuelve la información de forma tabular, por el siguiente orden:

  1. Nombre del proceso: COMMAND
  2. ID del proceso: PID
  3. Nombre de la cuenta del usuario: USER
  4. Descriptor del fichero: FD
  5. Tipo del fichero: TYPE
  6. Dispositivo: DEVICE
  7. Tamaño: SIZE
  8. Conexión: NODE
  9. Nombre completo: NAME

Aquí os dejo un ejemplo de la ejecución del comando lsof /bin/bash :

lsof-bin-bashSi sufrimos un ataque contra nuestro servidor web con LAMP, con el comando lsof -a -i -u www-data | grep listen, listará todos los sockets que haya abierto el usuario de apache, www-data, y los que están escuchando en busca de conexiones. Todos los resultados que no sean del puerto 80 (HTTP) y 443 (HTTPS) serán sospechosos.

Si queremos ver la actividad de unos puertos en concreto de nuestro sistema, lo haríamos con el comando lsof -i TCP:2000-3000.

También nos puede servir para resolver problemas del sistema:

¿Por qué no sale la bandeja del CD? Lo averiguamos con lsof /dev/cdrom

¿Quién está usando el administrador de audio? La respuesta la obtenemos con lsof /dev/audio

Espero que haya sido de interés el artículo, podéis obtener más información con el comando man, desde la consola de comandos.

Parte de la información la he obtenido de la revista «LINUX SHELL 2» , edición especial de la extinta revista Linux Magazine, en castellano.