¿Qué es el port scanning?
Los puertos desempeñan una función destacada a la hora de que los paquetes de datos encuentren el camino para alcanzar los objetivos deseados. En este sentido, funcionan como interfaz entre ordenadores y servicios o programas del sistema y son usados por los protocolos de red como TCP y UDP. En combinación con la dirección IP, los puertos permiten al sistema operativo no solo saber a qué ordenador ha de enviar el flujo de datos sino también a qué aplicación ha de entregar los paquetes.
¿Qué es el port scanning?
Los sistemas operativos hacen uso de los puertos para poder dirigir los paquetes entrantes o salientes a las aplicaciones adecuadas. De este modo, los puertos actúan como interfaces entre los programas e Internet gestionadas por los sistemas operativos. Para que una aplicación se pueda comunicar a partir de un puerto, primero hay que habilitarlo, lo que acarrea una problemática: si la aplicación cuenta con brechas de seguridad, cada puerto liberado es también un punto de entrada posible para ataques. Para reducir el riesgo de ataques, debes tener constancia de los puertos abiertos en tu sistema y de las aplicaciones que esconde.
Por port scanning se entiende aquel procedimiento que tiene como objetivo analizar los puertos abiertos de un sistema informático con la ayuda de herramientas especiales. Para poder llevar a cabo dicho escaneo, no es necesario registrarse en el sistema de destino, sino solo estar conectado a él, por ejemplo, a través de una red local o de Internet. Con ayuda de los port scanners se envían, a modo de prueba, paquetes de datos especiales a los diferentes puertos y se obtienen las correspondientes respuestas o mensajes de error que la herramienta analiza y evalúa. Independientemente de la funcionalidad del programa de port scanning que se use, no solo se pueden obtener datos acerca de cuáles son los puertos abiertos o cerrados, sino también sobre los servicios o aplicaciones que utilizan los puertos correspondientes.
El port scanning representa un medio muy eficiente al que los administradores de sistemas pueden recurrir para controlar el tráfico de datos de una red. De este modo, se pueden filtrar las posibles debilidades y reducir la superficie de ataque. En algunos casos, también se pueden solucionar problemas de red concretos. Debido a que las herramientas no tienen una influencia significativa en la capacidad de rendimiento de los sistemas que se examinan, pueden utilizarse sin vacilaciones para dichas medidas de seguridad.
También en el ámbito doméstico puede ser de utilidad el método del escáner de puertos, y es que en cuanto se instalan y se usan aplicaciones que requieren una conexión a Internet, también se abren puertos automáticamente, siempre que el firewall no lo impida. El escaneo de puertos ayuda a mantener una visión general y muestra los puertos que ya han dejado de ser necesarios y que, en consecuencia, pueden cerrarse para minimizar los riesgos que pueden afectar a la seguridad.
- Protección contra el secuestro de datos
- Escaneos antivirus periódicos
- Copias de seguridad automáticas y restauraciones
¿Cómo funciona el port scanning exactamente?
Para escanear puertos existen normalmente diferentes métodos, la mayoría de los cuales gira en torno al protocolo de conexión TCP. Para comprender cuáles son los procesos básicos que tienen lugar mediante el port scanning, es de utilidad echar un vistazo a los aspectos generales del establecimiento de la conexión mediante el protocolo TCP:
- En el marco del proceso denominado negociación en tres pasos, el cliente envía, en primer lugar, un paquete SYN (synchronize = “sincronizar”) al puerto de destino correspondiente.
- Si este consigue llegar hasta una aplicación, recibe un paquete SYN/ACK combinado (synchronize acknowledge = “confirmar sincronización”) que confirma el establecimiento de la conexión.
- El cliente responde en el tercer y último paso con un paquete ACK (acknowledge = “confirmar”), por lo que se establece la conexión y ya puede comenzar el intercambio de datos.
Si se establece el contacto con un puerto cerrado, el cliente recibe en el segundo paso un paquete con el flag RST (reset = “restablecer”) como respuesta, por lo que se interrumpe la negociación.
Puesto que el intercambio de datos con las diversas aplicaciones resultaría, por un lado, muy costoso y, por otro, muy complejo, el port scanning solo está limitado a un sencillo intento de conexión, como ponen de relieve los métodos de escaneo que te presentamos a continuación.
TCP SYN
En el caso de TCP SYN se puede hablar de un escaneo medio abierto, ya que este no tiene como objetivo el establecimiento de una conexión TCP completa. En esta modalidad, se pueden enviar paquetes SYN habituales a cada uno de los puertos con el port scanner, tras lo que se espera una respuesta por parte del host de destino. Si este responde con un paquete SYN/ACK, esto indica que el puerto correspondiente está abierto y que es posible establecer la conexión. Si la respuesta consiste en un paquete RST, esto indicará que el puerto está cerrado. Si el host de destino no ha enviado todavía una respuesta, todo indica que se ha interpuesto un filtro de paquetes, como, por ejemplo, un firewall.
Los escaneos TCP SYN no son visibles para las aplicaciones revisadas y no generan, por lo tanto, datos de registro, de ahí que también reciben el nombre de stealth scans (“escaneos sigilosos”).
TCP connect
Si haces uso de tu port scanner para llevar a cabo un sondeo del tipo connect, en este caso no generas ni envías los paquetes de datos motu proprio, sino que recurres para ello a la llamada al sistema connect. Esta está disponible para casi todos los sistemas operativos.
Con la confirmación de que el puerto correspondiente está abierto, se considera que la conexión se ha realizado con éxito. Si la conexión falla, el puerto se marca como cerrado.
Si se establece la conexión por completo, en los archivos de registro de las aplicaciones con puertos abiertos se ve fácilmente si se ha utilizado este método de sondeo, pero no qué programas de filtrado se han utilizado. Sin embargo, si careces de los derechos para enviar paquetes de datos en bruto, el método del TCP connect es una alternativa útil al escaneo SYN.
TCP FIN, Xmas y Null
Con estos tres métodos de port scanning también se puede diferenciar entre los puertos abiertos y los cerrados. Para ello se pueden aplicar los dos principios básicos de TCP, registrados en la correspondiente RFC 793“):
- Un puerto cerrado siempre tiene que responder a los paquetes entrantes que no sean paquetes RST con un paquete RST propio.
- El puerto abierto tiene que ignorar todos los paquetes no marcados como SYN, RST o ACK.
Los tres métodos de escaneo anteriormente mencionados se hacen eco de esta situación a la hora de sondear sistemas de conformidad con las publicaciones Request For Comment con sus paquetes individuales:
- El escaneo Null no coloca ninguna marca especial.
- En el FIN, el port scanner envía paquetes FIN (finish= terminar).
- Los escaneos Xmas combinan las marcas FIN, PSH (push= empujar) y URG (urgent= urgente), por lo que “iluminan” el paquete del mismo modo en que lo hace un árbol de Navidad.
Estos tres métodos se comportan exactamente de la misma manera. Los paquetes de prueba que se envían se ocupan de que, a causa de las disposiciones de RFC, un puerto cerrado responda con un paquete RST y de que un puerto abierto no muestre ninguna reacción. No obstante, debido a que solo algunos routers transmiten mensajes de error cuando se filtra un puerto, también puede darse una ausencia de reacción en el caso de un puerto filtrado. Aunque estos procedimientos resultan más discretos que los escaneos SYN, tienen la desventaja de que no funcionan cuando los sistemas no se ciñen exactamente al protocolo RFC 793. Windows se constituiría en este caso como el representante más importante.
UDP
En los escaneos UDP se envían encabezados UDP vacíos y sin datos a todos los puertos de destino. Si un servicio responde con un paquete UDP, queda confirmado que el puerto que le pertenece está abierto. Si el router envía al port scanner el mensaje de error “Port unreachable” (Type 3, Code 3), este sabrá que el puerto está cerrado. Otros tipos de mensajes de error informan de que un filtro de paquetes bloquea el puerto. El gran problema que se deriva de escanear puertos con UDP es que requiere mucho tiempo, ya que en numerosos sistemas la tarea de emitir los correspondientes mensajes de error puede tardar mucho tiempo por motivos de seguridad y los puertos abiertos solo responden de forma muy irregular. El núcleo de Linux limita el número de mensajes a, por ejemplo, uno por segundo, lo que significa que se pueden escanear 65 535 puertos en unas 18 horas.
¿Qué tipos de port scanners hay?
Hoy en día existen escáneres muy diversos con funcionalidades muy variadas. Además, la mayoría de estas herramientas son gratis (freeware) o de código abierto (open source). En muchos casos se trata de programas de líneas de comandos que también pueden utilizarse a través de superficies gráficas separadas. Asimismo, la red ofrece numerosas soluciones con las que se pueden escanear puertos directamente en el navegador. A nivel funcional, este tipo de servicios está bastante limitado y solo ofrece, por ejemplo, el port scanning de DNStools, la posibilidad de examinar puertos por separado. Por este motivo, se convierten en una cómoda opción para realizar un análisis rápido en el ordenador de casa.
Netcat, la veterana de las herramientas de red
Netcat, cuya abreviatura es nc, fue publicada en 1996 de la mano de un desarrollador anónimo bajo el pseudónimo de “Hobbit”. Aunque fue diseñada originariamente para plataformas basadas en UNIX, hoy en día existen diversas opciones de portabilidad para otros sistemas como Windows, pero también se han desarrollado versiones como GNU Netcat, OpenBSD Netcat, Cryptcat o Netcat6 (también soporta IPv6), que, de manera habitual, pueden implementarse en numerosas distribuciones de Linux. La versión básica de la herramienta de línea de comandos está diseñada, en principio, para enviar o leer datos a través de las conexiones de red mediante protocolos como TCP o UDP, aunque también puede ser utilizada para llevar a cabo un port scanning simple. Así, por ejemplo, con un comando sencillo como
nc -zv localhost 20-30
bashse puede comprobar el estado de los puertos comprendidos entre los números 20 y 30 en el sistema que se está ejecutando. El control de los puertos UDP precisa del parámetro adicional –u, pero además puedes introducir los nombres del host o las direcciones IP de sistemas externos en lugar del localhost.
Análisis completo de la red con Nmap
Network Mapper (Nmap), nacida en 1997, es una herramienta fundamental y poderosa que, sobre todo, llama la atención por su función como escáner de puertos. El programa desarrollado para sistemas unixoides está sujeto a la licencia GPL y desde el año 2000 también está disponible para sistemas Windows, aunque con algunas limitaciones. De esta manera, el método TCP connect, por ejemplo, conlleva una cantidad de tiempo desproporcionada debido a la API de la red de Windows y el escaneo de los puertos del propio sistema solo es posible si se dan ciertos rodeos. Normalmente, Nmap puede manejarse a través de la línea de comandos. Sin embargo, con Zenmap existe una superficie gráfica de alto rendimiento con la que se puede utilizar la herramienta de red de un modo todavía más cómodo.
Tanto el inventor de Nmap, Gordon Lyon, como el equipo de desarrolladores de dicha herramienta, desarrollan el programa y sus funciones para escanear puertos de manera continua, lo que se convierte en el motivo principal que explica la gran cantidad de características que la identifican. Las técnicas como el OS fingerprinting (el reconocimiento de host de destino por parte del sistema operativo) y la lectura de los servicios ocultos tras un puerto convierten a Nmap en una de las soluciones de port scanning más populares. En los métodos de escaneo disponibles que te mostramos en la tabla que aparece a continuación se pone de manifiesto su gran diversidad:
Método de escaneo de puertos | Comando de Nmap | Descripción |
---|---|---|
TCP Connect | nmap -sT host | La opción clásica para aquellos que no son administradores |
TCP Syn | nmap -sS host | Método de comprobación para administradores rápido y que pasa desapercibido |
TCP FIN/XMAS/Null | nmap -sF host nmap -sX host nmap -sN host | Métodos capaces de evitar firewalls |
TCP Ping | nmap -sP host | Este no es un método de escaneo clásico y su función es ayudar a comprobar la accesibilidad de un host |
TCP ACK | nmap -sA host | Verifica puertos filtrados, pero no ofrece una diferenciación entre puertos abiertos y cerrados |
TCP Window | nmap -sW host | Comparable con el escaneo, puede verificar algunos puertos abiertos y cerrados |
TCP Maimon | nmap -sM host | Combinación entre FIN y ACK |
TCP Idle | nmap -sI Zombie-host | Este es el método para escanear puertos más discreto y complejo, pero también el más lento, se ejecuta en un tercer ordenador, denominado zombie |
UDP | nmap -sU host | Método de escaneo para los puertos UDP sin conexión |
SCTP Init | nmap -sY host | Escaneo de puertos con SCTP una alternativa a TCP y UDP |
Protocolo IP | nmap -sO host | No permite escanear puertos, sino que comprueba cuáles son los protocolos basados en direcciones IP soportados en el sistema de destino |
En la página web oficial de Nmap puedes descargar tanto Nmap como la interfaz Zenmap Nmap para el sistema operativo deseado. Para ello, puedes acceder tanto a la versión actual (stable) como a la versión beta (development).
Por qué el escaneo de puertos no es siempre legal
El control de los puertos no siempre se realiza de manera legal. Si se concluye en última instancia con un intento de ataque al aprovechar, por ejemplo, una brecha de seguridad, se puede incurrir en actos punibles.
Algo menos clara parece la situación legal cuando, por ejemplo, se paraliza un sistema informático debido a un port scanning intensivo. Ya que los métodos de control pueden suponer una gran carga para el sistema de destino debido a la alta frecuencia de peticiones de conexión, se puede producir el bloqueo del sistema. Es posible, incluso, que los responsables del sistema de destino se den cuenta de la sobrecarga antes del fallo general y lo consideren como un intento de ataque. En este caso, no se puede descartar la posibilidad de tener que hacer frente a las consecuencias legales.
En caso de provocar una sobrecarga en el sistema externo de manera intencionada, se hablaría de los famosos ataques DoS y DDoS, que casi con total seguridad pueden incurrir en un procesamiento penal.
De la información anteriormente expuesta se deduce que es conveniente asegurarse de que se tiene la autorización para realizar el denominado escaneo de puertos en el sistema correspondiente. También es aconsejable usar esta técnica únicamente por motivos de seguridad y no por pura curiosidad. Las medidas mostradas para poner en marcha el port scanning ponen de relieve la importancia de no perder de vista los puertos tanto del propio sistema o del ordenador de red como de los servicios a los que se puede acceder a través de ellos.