Ir al contenido

Detección de servicios y sistema operativo

Por

Madurezreviewed
Última revisión
Publicado
Última actualización

Descubrir un puerto abierto responde que una aplicación aceptó cierta interacción. Todavía no dice cuál. Cuando Nmap muestra 80/tcp http sin detección de versiones, el nombre puede proceder únicamente de la asociación convencional de nmap-services. Es una pista obtenida del número, no una conversación con el listener.

La detección activa intenta cerrar esa distancia. Envía probes, reconoce banners o respuestas binarias y aplica reglas de coincidencia. El resultado sigue siendo una inferencia, pero ahora se apoya en comportamiento observado. Producto, versión, tipo de dispositivo y Common Platform Enumeration (CPE) tienen fuentes y niveles de confianza distintos, por lo que deben conservarse por separado.

-sV usa nmap-service-probes. Cada probe define payload, rareza, puertos candidatos, reglas de coincidencia y fallback. Nmap puede devolver protocolo, producto, versión, hostname, tipo de dispositivo, familia de sistema operativo y CPE:

Sondear puertos ya descubiertos
sudo nmap -sV -n -Pn -p PORT_LIST --reason \
-oA scans/08-services TARGET_IP

--version-light reduce la intensidad. --version-all intenta todos los probes apropiados. Más probes aumentan conexiones, bytes, tiempo y registros, pero no convierten la firma en certeza. Un producto que personaliza su banner puede producir una coincidencia exacta falsa. Un proxy que responde por varios backends puede producir una identificación correcta del frontal e irrelevante para el sistema que se intenta modelar.

--version-trace explica probes y coincidencias sobre un puerto aislado:

Depurar el reconocimiento de un servicio
sudo nmap -sV --version-trace -n -Pn -p PORT TARGET_IP

Conserva el output cuando una identificación depende de un match o softmatch. Revisa el archivo de probes de la instalación si necesitas conocer el payload exacto.

La detección excluye normalmente TCP 9100 porque algunas impresoras imprimen los probes recibidos. --allports elimina esa exclusión. La decisión cambia estado físico y consumo de papel si el listener es una impresora, por lo que identifica antes el dispositivo.

TLS, proxies y middleboxes pueden ocultar o sustituir banners. Un servicio puede ofrecer protocolos distintos mediante ALPN, SNI, STARTTLS o negociación inicial. Nmap puede reconocer el frontal sin identificar el backend.

El siguiente paso depende del protocolo:

  • Ncat o Netcat para un banner que habla primero
  • openssl s_client para TLS y STARTTLS
  • curl para HTTP
  • dig para DNS
  • smbclient o librerías SMB para dialectos y shares
  • swaks para SMTP

Una conexión TCP silenciosa no refuta el servicio. Puede esperar una petición, TLS o framing binario. Captura la negociación y compara la respuesta con la especificación o documentación oficial. Si Nmap identifica ssl/unknown, prueba Server Name Indication (SNI) y Application-Layer Protocol Negotiation (ALPN) antes de buscar otro puerto. Si devuelve un softmatch, trata la familia de protocolo como orientación y busca el intercambio que produzca una coincidencia más específica.

Un diagnóstico útil modifica una sola capa. Primero confirma que TCP conecta. Después prueba TLS. Luego añade el nombre esperado y, por último, habla el protocolo. Este orden permite distinguir un listener silencioso de un handshake TLS fallido, un certificado por defecto o un virtual host desconocido.

-O envía pruebas TCP/IP y compara respuestas con nmap-os-db. El fingerprint mejora cuando existe al menos un puerto TCP abierto y uno cerrado. --osscan-limit omite hosts que no ofrecen condiciones razonables:

Estimar el sistema operativo
sudo nmap -O --osscan-limit -n -Pn \
-p OPEN_AND_CLOSED_PORTS TARGET_IP

La estimación puede verse alterada por:

  • NAT y port forwarding
  • balanceadores y proxies
  • firewalls que normalizan flags y opciones TCP
  • virtualización y plantillas compartidas
  • pérdida, retransmisiones o falta de un puerto cerrado
  • dispositivos que responden en nombre del host

No conviertas una línea OS details en un hecho sin cruzarla con TTL, banners, protocolos, TLS, SMB, SSH, comportamiento HTTP y acceso local cuando exista. Un match amplio como «Linux 4.x or 5.x» orienta compatibilidad y siguientes probes. No justifica atribuir una distribución ni una versión de kernel concreta.

-A activa detección de sistema operativo, versiones, scripts default y traceroute:

-A = -O + -sV + -sC + --traceroute

No es un «escaneo completo». Puede omitir puertos no seleccionados y ejecutar interacciones que no habías revisado. Úsalo solo cuando cada componente responda una pregunta y sobre un conjunto de puertos acotado.

Anota la base de datos usada, intensidad, puerto, origen y evidencia manual. Desde un pivot pueden cambiar RTT, MTU y visibilidad. Repite el fingerprint solo si la nueva posición puede resolver una incertidumbre.

Si la detección funciona desde el exterior y falla desde el pivot, comprueba antes la calidad del túnel y el soporte de la técnica. Si varios puertos devuelven el mismo banner inesperado, considera un proxy de autenticación, un honeypot o una página de bloqueo antes de inventariar múltiples copias del mismo producto. El patrón entre puertos puede explicar más que cada coincidencia aislada.