Comprobación de puertos en escucha para una auditoría de seguridad

LinuxBeginner
Practicar Ahora

Introducción

En la seguridad de servidores, la «superficie de ataque» es el número total de puntos por los que un usuario no autorizado puede intentar entrar o extraer datos. Gestionar los puertos de red es una parte fundamental para reducir esta superficie de ataque.

Cada puerto abierto puede ser un punto de entrada para un atacante. Si un servicio está escuchando en un puerto, está preparado para recibir datos. Si ese servicio es vulnerable o no debería estar accesible públicamente, el sistema está en riesgo.

Un puerto en escucha no significa automáticamente que exista un peligro, pero sí indica que hay exposición. Una auditoría de seguridad comienza por saber qué servicios son accesibles y si esa exposición es intencionada.

Por eso, la auditoría de puertos forma parte del endurecimiento básico del sistema. Una buena seguridad no consiste únicamente en aplicar parches al software, sino también en reducir la exposición innecesaria.

En este laboratorio realizará una auditoría de seguridad básica. Usted:

  1. Enumerará todos los puertos TCP en escucha mediante el comando ss.
  2. Identificará puertos sospechosos o no estándar.
  3. Investigará el proceso y el usuario responsables de abrir un puerto.

Enumerar los puertos TCP en escucha

Su primera tarea es obtener una visión completa del estado de la red. Utilizará el comando ss (Socket Statistics), un reemplazo moderno y más rápido de la herramienta antigua netstat.

Para realizar la auditoría, debe centrarse en los puertos TCP en escucha y en los procesos que los abrieron.

La información del proceso convierte una lista de sockets sin contexto en información útil para actuar. Un número de puerto por sí solo aporta pocos datos, pero asociarlo con un proceso y un usuario concretos permite evaluarlo y gestionarlo.

Ejecute el comando siguiente:

sudo ss -lntp

Significado de las opciones:

  • -l (listening): muestra únicamente los sockets que esperan conexiones.
  • -n (numeric): muestra las direcciones IP y los números de puerto en lugar de los nombres de host (es más rápido y claro).
  • -t (tcp): muestra únicamente los sockets TCP.
  • -p (processes): muestra el nombre del proceso y su PID (ID del proceso) que utiliza el socket.
    • Nota: necesita sudo para ver la información de los procesos pertenecientes a otros usuarios.

Debería ver un resultado similar al siguiente:

State    Recv-Q   Send-Q     Local Address:Port      Peer Address:Port   Process
LISTEN   0        4096       127.0.0.1:8080          0.0.0.0:*           users:(("node",pid=123,fd=18))
LISTEN   0        5          0.0.0.0:9999            0.0.0.0:*           users:(("python3",pid=456,fd=3))
LISTEN   0        128        0.0.0.0:22              0.0.0.0:*           users:(("sshd",pid=789,fd=3))

La columna Local Address:Port muestra dónde está escuchando el servicio. La columna Process identifica el programa responsable.

Otra pista importante es comprobar si la dirección es 127.0.0.1 o 0.0.0.0. Los servicios que solo están disponibles en localhost están expuestos únicamente en la propia máquina, mientras que 0.0.0.0 normalmente significa que el servicio escucha en todas las interfaces de red.

Identificar puertos sospechosos

Ahora analice el resultado para identificar cualquier elemento inusual.

Los servicios estándar suelen ejecutarse en los «puertos conocidos» (0-1023). Por ejemplo:

  • Puerto 22: SSH (Secure Shell)
  • Puerto 80: HTTP (servidor web)
  • Puerto 443: HTTPS (servidor web seguro)

En una auditoría de seguridad, busque puertos no estándar o servicios que no reconozca.

El objetivo no es alarmarse ante cada puerto desconocido, sino verificar su finalidad. Un servicio puede ser legítimo, temporal o haberse iniciado por accidente; auditar consiste en convertir una exposición desconocida en una exposición conocida.

Revise el resultado del paso 1. Debería ver un servicio escuchando en el puerto 9999. Este no es un puerto de sistema estándar y requiere una investigación adicional.

Aísle esta entrada mediante grep:

sudo ss -lntp | grep 9999

Resultado de ejemplo:

LISTEN 0      5            0.0.0.0:9999       0.0.0.0:*    users:(("python3",pid=289,fd=3))

Esto confirma que hay un proceso activo en el puerto 9999. A continuación averiguará exactamente de qué proceso se trata.

Investigar la propiedad del proceso

Saber que un puerto está abierto no es suficiente. Debe saber quién ejecuta el servicio. Un proceso sospechoso que se ejecuta como root representa una emergencia crítica, mientras que uno ejecutado por un usuario con permisos limitados podría ser menos grave, aunque seguiría siendo peligroso.

Encuentre el PID: consulte el resultado del comando anterior. En la sección users:, localice el valor pid=....

  • Ejemplo: users:(("python3",pid=289,fd=3)) -> El PID es 289.
  • Nota: su PID será diferente.

Inspeccione el proceso: utilice el comando ps para mostrar los detalles de este PID concreto. Sustituya <PID> por el número real que haya encontrado.

ps -f -p <PID>

Ejemplo, si el PID es 289:

ps -f -p 289

Analice el resultado:

UID          PID    PPID  C STIME TTY          TIME CMD
labex        289    189   0 10:00 pts/0    00:00:00 python3 -m http.server 9999
  • UID: el usuario que ejecuta el proceso, por ejemplo, labex.
  • CMD: el comando exacto que inició el proceso, por ejemplo, python3 -m http.server 9999.

Esto indica que el usuario labex inició un servidor HTTP de Python destinado claramente a escuchar en el puerto 9999. En un caso real, si usted no hubiera autorizado este proceso, debería terminarlo de inmediato.

Este último paso permite atribuir el origen: no se trata solo de saber «qué puerto está abierto», sino de identificar «qué comando, iniciado por qué usuario, creó esa exposición de red». Esto es lo que hace útil la auditoría para responder ante incidentes y reforzar la seguridad del sistema.

Resumen

En este laboratorio realizó correctamente una auditoría de seguridad de los puertos en escucha del sistema.

Conclusiones principales:

  1. Visibilidad: utilice sudo ss -lntp para ver exactamente qué servicios están escuchando conexiones.
  2. Identificación: reconozca los puertos estándar y marque los puertos no estándar, como 9999, para investigarlos.
  3. Atribución: utilice ps -f -p <PID> para determinar qué usuario y qué comando son responsables de un socket sospechoso.

Las auditorías periódicas ayudan a detectar servicios no autorizados, como puertas traseras o servidores web diversos, y a eliminarlos antes de que puedan ser aprovechados por un atacante.