¿Por qué escanear puertos contribuye a la seguridad de tu sistema?
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.
Curiosidades sobre los puertos
A cada puerto se le asigna un número comprendido entre el 0 y el 65535. A este respecto, pueden diferenciarse tres áreas:
- Los puertos que van desde el número 0 al 1023 reciben la denominación de puertos estandarizados y la Internet Assigned Numbers Authority (IANA) asigna protocolos fijos y otros recursos a la mayoría de ellos. De esta manera, por ejemplo, se ha reservado el puerto 80 para las conexiones HTTP y, por lo tanto, este se convierte en el puerto decisivo para las solicitudes realizadas a través del servidor web.
- Los números de puerto que van desde el 1024 hasta el 49151 están destinados normalmente a servicios registrados, aunque se asignan también a clientes, en especial por parte de Linux.
- Los puertos comprendidos entre los números 49152 y 65535 son los que otorgan los sistemas operativos a los programas cliente de manera dinámica.
Para establecer una conexión a través de un puerto determinado este debe estar abierto, es decir, libre. Especialmente en lo referente a la transferencia de datos en Internet, esto indica, como es lógico, que hay un gran número de puertos abiertos, lo que lleva aparejado ciertos problemas: cada puerto abierto se convierte en un posible acceso para atacantes, en caso de que la aplicación correspondiente presente brechas de seguridad. Por este motivo, es necesario tener siempre en mente cuáles son los puertos que están abiertos en tu sistema y cuáles son las aplicaciones que hay detrás del tráfico de datos. Los escáneres de puertos son los mejores recursos con los que puedes detectar la presencia de puertos activos.
¿Qué es el escaneo de puertos?
Por escaneo de puertos 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 el sistema operativo que usa el equipo de destino, sobre el tiempo que hace que el PC permanece encendido o 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 y para filtrar sus posibles debilidades. En algunos casos determinados, 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.
¿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 escaneo de puertos, 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 (3-way handshake), 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 escáner de puertos 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 envias 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 y, por ejemplo, el navegador web también hace uso de ella para establecer la conexión con un servidor. Esta herramienta de escaneo no está implicada en el establecimiento de la conexión, sino que es el sistema operativo el encargado de ello, el cual puede o bien crear una conexión con éxito y confirmar, por lo tanto, que el puerto está abierto o fracasar en el intento e indicar que el puerto correspondiente es un puerto 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 utilizó este método de sondeo, pero no qué programas de filtrado se utilizan. 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 escaneo de puertos también se puede diferenciar entre los puertos abiertos y los cerrados. Para ello se pueden aplicar los dos principios básicos registrados en las RFC (Request For Comments) del TCP (793). Por un lado, un puerto cerrado siempre tiene que responder a los paquetes entrantes que no sean paquetes RST con un paquete RST propio. Por otro, 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 por su parte. 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, estos 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 envian 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, como por ejemplo el escaneo de puertos 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
se 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 escanear sistemas externos en lugar de localhost siempre y cuando conozcas el nombre del host o la dirección IP.
Análisis completo de la red con Nmap
Una herramienta fundamental y poderosa que, sobre todo, llama la atención por su función como escáner de puertos es Network Mapper, que nació en 1997 y que es más conocida por su abreviatura Nmap. 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 en particular, es decir, el reconocimiento del 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 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 |
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), que se encuentra en fase de desarrollo.
Por qué el escaneo de puertos no es siempre legal
Nmap no solo es popular entre los usuarios de ordenadores, sino también en el gremio de los directores de cine. Así es como por ejemplo Trinity, el personaje femenino principal de la trilogía Matrix, emplea la herramienta de red en la segunda parte de la saga de ciencia ficción para escanear los puertos del sistema informático de una central eléctrica. El personaje no está interesado en absoluto en optimizar la seguridad de la misma, sino que hace uso de los resultados del escaneo para conseguir acceder al sistema. Para ello recurre a un código de programa dañino que aprovecha una brecha de seguridad en el protocolo SSH que se ejecuta en el puerto 22. La escena muestra un ataque muy sencillo que se basa en un escaneo de puertos anterior, pero representa el valor que el escáner de puertos también puede tener para los criminales.
El control de los puertos no siempre se realiza de manera legal. Si se concluye en última instancia con un intento de ataque, como puede ser lo que se conoce en el lenguaje técnico como aprovechamiento de 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, esto puede ocasionar, entre otras consecuencias, el bloqueo del sistema.
Además, también es posible que los responsables del sistema de destino se den cuenta de los planes antes del fallo general y lo consideren como un primer paso para llevar a cabo el ataque. En este sentido, no pueden perderse de vista 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.