Todavía no he usado Nmap contra un sistema real — de momento me lo he ido preparando por mi cuenta, viendo vídeos y documentándome, precisamente para no llegar en blanco cuando toque usarlo de verdad en clase o en las certificaciones. Y de todo lo que he visto hasta ahora, esta es la primera diferencia que de verdad me hizo entender que Nmap no es “un comando”, es un conjunto de técnicas distintas con implicaciones muy diferentes según cuál elijas.
El mismo objetivo, dos formas de conseguirlo
Tanto -sS como -sT responden a la misma pregunta: ¿está abierto este puerto? Pero para averiguarlo, cada uno completa (o no completa) el saludo de tres pasos de TCP de una forma distinta — y esa diferencia, aparentemente pequeña, tiene consecuencias reales.
Cómo funciona un escaneo TCP connect (-sT)
-sT hace exactamente lo que haría cualquier programa normal para conectarse a algo: usa la función connect() del propio sistema operativo, la misma que usa un navegador para cargar una web. Eso significa que completa el saludo de tres pasos entero:
- El escáner manda un paquete SYN (quiero conectar).
- Si el puerto está abierto, el objetivo responde SYN-ACK (vale, adelante).
- El escáner completa la conexión con un ACK (confirmado).
Como la conexión llega a completarse del todo, es indistinguible de una conexión normal desde el punto de vista del sistema objetivo — y ahí está el problema: queda registrada como una conexión real, en los logs de la aplicación que escucha en ese puerto, no solo a nivel de red.
Cómo funciona un escaneo SYN (-sS)
-sS hace algo distinto, y es la técnica por defecto de Nmap cuando tienes privilegios suficientes para usarla. En vez de completar el saludo de tres pasos, se para a mitad:
- El escáner manda el SYN.
- Si el objetivo responde SYN-ACK, el puerto está abierto — y ya tiene la respuesta que necesitaba.
- En vez de completar la conexión con un ACK, el escáner manda un RST (reset), cortando la conexión antes de que se formalice del todo.
Por eso se le llama escaneo semiabierto (half-open scan): nunca llega a existir una conexión completa. Y esa es la razón por la que suele dejar menos rastro — muchas aplicaciones solo registran una conexión en sus propios logs cuando el saludo de tres pasos se completa; si nunca se completa, la aplicación en el puerto escaneado puede no llegar a enterarse siquiera, aunque el sistema operativo del objetivo sí vea el tráfico a nivel de red.
Por qué -sS necesita privilegios de root, y -sT no
Aquí está el porqué técnico de la pregunta del título. -sT usa la función connect() normal del sistema operativo — la misma API que usa cualquier programa para hacer una conexión de red corriente, sin ningún privilegio especial.
-sS, en cambio, necesita construir sus propios paquetes a mano, byte a byte, incluyendo el envío del RST manual en vez de dejar que el sistema operativo gestione la conexión de forma normal. Eso requiere acceso a raw sockets — una forma de enviar paquetes de red saltándose la gestión habitual del sistema operativo — y los sistemas operativos, por buenos motivos de seguridad, solo permiten esa capacidad a usuarios con privilegios de administrador (root en Linux, o ejecutar como administrador en Windows).
$ nmap -sS 192.168.1.1
# necesita sudo/root
$ sudo nmap -sS 192.168.1.1
# funciona
Si intentas -sS sin privilegios suficientes, Nmap no falla en silencio — directamente avisa de que no puede hacer ese tipo de escaneo y, en muchas versiones, cae automáticamente a -sT como alternativa.
Comparativa directa
-sT (TCP connect) | -sS (SYN) | |
|---|---|---|
| Completa la conexión TCP | Sí | No |
| Necesita privilegios de root/admin | No | Sí |
| Velocidad | Más lento | Más rápido |
| Rastro dejado | Aparece en logs de la aplicación | Menos visible para la aplicación (pero sigue siendo tráfico de red real) |
| Uso típico | Cuando no tienes privilegios elevados | Escaneo por defecto cuando sí los tienes |
Un matiz importante que no hay que perder de vista
Que -sS deje menos rastro en los logs de aplicación no significa que sea invisible. Un firewall o un sistema de detección de intrusiones (IDS) a nivel de red sigue viendo el tráfico SYN llegando y el patrón de puertos siendo probados uno tras otro — eso es justo lo que muchos IDS están configurados para detectar, independientemente de si la conexión llega a completarse o no. “Menos ruidoso para la aplicación” y “indetectable” son cosas muy distintas, y confundirlas es un error de principiante que conviene evitar desde el principio, antes incluso de tocar la herramienta de verdad.
Pon a prueba lo que has entendido
¿Por qué el escaneo -sS de Nmap necesita privilegios de root y el -sT no?
Resumen rápido
-sT completa el saludo de tres pasos de TCP usando la conexión normal del sistema operativo, sin privilegios especiales, pero queda registrado en los logs de la aplicación. -sS se detiene a mitad de camino (SYN → SYN-ACK → RST en vez de ACK), necesita raw sockets y por tanto privilegios de root, y dejar menos rastro en la aplicación no significa ser invisible para un firewall o un IDS. Una vez que sabes que un puerto está abierto, la siguiente pregunta lógica es qué hay exactamente detrás — que es justo lo que resuelve la detección de versión, en cómo detectar la versión de un servicio con Nmap y por qué un puerto abierto no te dice qué hay detrás.