5.8. Verificar cuáles puertos están escuchando

Una vez que haya configurado los servicios en la red, es importante poner atención sobre cuáles puertos estan escuchando en realidad en las interfaces de red del sistema. Cualquier puerto abierto puede ser una evidencia de una intrusión.

Existen dos soluciones básicas para listar cuales puertos están escuchando en la red. La solución menos confiable es consultar la pila de la red tipeando comandos tales como netstat -an o lsof -i. Este método es menos confiable puesto que estos programas no conectan a la máquina desde la red, sino más bien verifican qué está ejecutándose en el sistema. Por esta razón, estas aplicaciones son objetivos frecuentes de atacantes para reemplazarlas. De esta forma, los crackers intentan cubrir sus rastros si abren puertos no autorizados.

Una forma más confiable de verificar qué puertos están escuchando en la red es usar un escaner de puertos tal como nmap.

El comando siguiente ejecutado desde la consola, determina cuáles puertos están escuchando por conexiones TCP desde la red:

nmap -sT -O localhost

La salida de este comando es parecida a lo siguiente:

Starting nmap 3.55 ( http://www.insecure.org/nmap/ ) at 2004-09-24 13:49 EDT
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1653 ports scanned but not shown below are in state: closed)
PORT      STATE SERVICE
22/tcp    open  ssh
25/tcp    open  smtp
111/tcp   open  rpcbind
113/tcp   open  auth
631/tcp   open  ipp
834/tcp   open  unknown
2601/tcp  open  zebra
32774/tcp open  sometimes-rpc11
Device type: general purpose
Running: Linux 2.4.X|2.5.X|2.6.X
OS details: Linux 2.5.25 - 2.6.3 or Gentoo 1.2 Linux 2.4.19 rc1-rc7)
Uptime 12.857 days (since Sat Sep 11 17:16:20 2004)
 
Nmap run completed -- 1 IP address (1 host up) scanned in 5.190 seconds

Esta salida muestra que el sistema está ejecutando portmap debido a la presencia del servicio sunrpc. Sin embargo, existe también un servicio misterioso en el puerto 834. Para verificar si el puerto está asociado con la lista oficial de servicios conocidos, escriba:

cat /etc/services | grep 834

Este comando no devuelve ninguna salida. Esto indica que aunque el puerto está en el rango reservado (es decir del 0 al 1023) y requiere acceso root para ser abierto, no está asociado con un servicio conocido.

Luego, puede verificar por información sobre el puerto usando netstat o lsof. Para verificar el puerto 834 usando netstat, utilice el comando siguiente:

netstat -anp | grep 834

El comando devuelve la siguiente salida:

tcp   0    0 0.0.0.0:834    0.0.0.0:*   LISTEN   653/ypbind

La presencia de un puerto abierto en netstat es tranquilizante puesto que un maleante abriendo un puerto subrepticiamente en un sistema violado, posiblemente no se revelaría a través de este comando. Además, la opción [p] revela el id del proceso (PID) del servicio que abrió el puerto. En este caso, el puerto abierto pertenece a ypbind (NIS), que es un servicio RPC manejado en conjunto con el servicio portmap.

El comando lsof revela información similar puesto que es capaz de enlazar puertos abiertos a servicios:

lsof -i | grep 834

Abajo se encuentra la porción relevante de la salida de este comando:

ypbind      653        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      655        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      656        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      657        0    7u  IPv4       1319                 TCP *:834 (LISTEN)

Estas herramientas pueden revelar mucha información sobre el estado de los servicios ejecutándose en la máquina. Estas herramientas son flexibles y pueden proporcionar gran cantidad de información sobre los servicios de red y la configuración. Se recomienda la revisión de las páginas man para lsof, netstat, nmap, y services.