Por qué algunos puertos TCP y UDP son peligrosos y cómo protegerlos

Por qué algunos puertos TCP y UDP son peligrosos y cómo protegerlos

Sergio De Luz

En la capa de transporte del modelo TCP/IP, disponemos de dos tipos de protocolos: TCP y UDP. Ambos se utilizan constantemente por los diferentes programas y protocolos de la capa de aplicación, como el puerto 80 y 443 para navegar por la web, el puerto 22 para el protocolo SSH, o el popular puerto 1194 para las VPN con OpenVPN. Algunos de estos puertos son bastante peligrosos si no los filtramos correctamente con un firewall, porque podrían realizarnos diferentes tipos de ataques e incluso hackearnos nuestro equipo. Hoy en RedesZone os vamos a enseñar cuáles son los puertos que debemos proteger especialmente para evitar problemas.

¿Qué son los puertos TCP y UDP?

TCP y UDP hacen referencia al protocolo de la capa de transporte utilizado para la comunicación extremo a extremo entre dos host, los puertos forman parte del propio segmento TCP o datagrama UDP para que la comunicación se establezca correctamente. Podríamos decir que los «puertos» son algo así como las «puertas» hacia un determinado servicio, independientemente de si utilizamos TCP o UDP ya que ambos protocolos hacen uso de los puertos. Los puertos en sí mismos no son peligrosos, un puerto es un puerto y da lo mismo que sea el puerto 22 que el 50505, lo que más importante es el uso que se le da a un puerto, lo peligroso es tener un puerto abierto hacia un servicio de la capa de aplicación que no esté protegido, porque cualquiera se podría conectar a dicho servicio y explotar vulnerabilidades o hackearnos directamente. Por supuesto, siempre es necesario que si exponemos un puerto a Internet, controlemos el tráfico con un IDS/IPS para detectar posibles ataques, y tener el programa que está escuchando en este puerto actualizado.

Tanto en TCP como en UDP tenemos un total de 65535 puertos disponibles, tenemos una clasificación dependiendo del número de puerto a utilizar, ya que algunos puertos son los comúnmente llamados «conocidos», y que están reservados para aplicaciones específicas, aunque hay otros muchos puertos que se utilizan habitualmente por diferentes software para comunicarse tanto a nivel de red local o a través de Internet. También tenemos los puertos registrados, y los puertos efímeros.

Puertos conocidos

Los puertos conocidos (well-known en inglés) van desde el puerto 0 hasta al 1023, están registrados y asignados por la Autoridad de Números Asignados de Internet (IANA). Por ejemplo, en este listado de puertos está el puerto 20 de FTP-Datos, el puerto 21 de FTP-Control, el puerto 22 de SSH, puerto 23 de Telnet, puerto 80 y 443 para web (HTTP y HTTPS respectivamente), y también el puerto de correo entre otros muchos protocolos de la capa de aplicación.

Puertos registrados

Los puertos registrados van desde el puerto 1024 hasta al 49151. La principal diferencia de estos puertos, es que las diferentes organizaciones pueden hacer solicitudes a la IANA para que se le otorgue un determinado puerto por defecto, y se le asignará para su uso con una aplicación en concreto. Estos puertos registrados están reservados, y ninguna otra organización podrá registrarlos nuevamente, no obstante, normalmente están como «semireservados», porque si la organización deja de utilizarlo podrá reutilizarse por otra empresa. Un claro ejemplo de puerto registrado es el 3389, se utiliza para las conexiones RDP de Escritorio Remoto en Windows.

Puertos efímeros

Estos puertos van desde el 49152 hasta el 65535, este rango de puertos se utiliza por los programas del cliente, y están constantemente reutilizándose. Este rango de puertos normalmente se utiliza cuando está transmitiendo a un puerto conocido o reservado desde otro dispositivo, como en el caso de web o FTP pasivo. Por ejemplo, cuando nosotros visitamos una web, el puerto de destino siempre será el 80 o el 443, pero el puerto de origen (para que los datos sepan cómo volver) hace uso de un puerto efímetro.

¿Qué puertos debo proteger especialmente?

Todos los puertos que sirven para establecer comunicaciones remotas, ya sea para compartir archivos, control remoto vía consola, e incluso aplicaciones de escritorio remoto, email y otros servicios que sean susceptibles de ataques, debemos protegerlos adecuadamente. A continuación, tenéis un listado de puertos (TCP) que debéis proteger especialmente, y cerrar siempre que no lo vayamos a utilizar, porque en un futuro es posible que sí estén en uso y se nos haya olvidado protegerlo adecuadamente.

  • Puerto 21: es utilizado por el protocolo FTP de transferencia de ficheros.
  • Puerto 22: es utilizado por el protocolo SSH para administrar equipos de forma remota
  • Puerto 23: es utilizado por el protocolo Telnet para administrar equipos de forma remota (inseguro)
  • Puertos 80, 8080, 8088, 8888 y 443: todos los puertos orientado a web deberíamos cerrarlos si no tenemos un servidor web, y si lo tenemos, deberíamos vigilarlo correctamente para mitigar posibles ataques web como ataques de inyección SQL, XSS y otros.
  • Puerto 4444: este puerto se suele utilizar por parte de troyanos y malware en general, es recomendable tenerlo siempre bloqueado.
  • Puertos 6660-6669: estos puertos es usado por el popular IRC, si no lo usamos, no lo abrimos.
  • Puerto 161 UDP: se utiliza por el protocolo SNMP para visualizar la configuración y administrar diferentes equipos como routers, switches, y también servidores. Es recomendable cerrarlo si no vas a usarlo.
  • Puerto 53 UDP: el puerto que usa el protocolo DNS, este puerto se puede utilizar para exfiltrar información en las propias solicitudes DNS.

Por supuesto, todos estos puertos que os hemos explicado son los más básicos, pero siempre debemos seguir la política de bloquear todo excepto los que están en uso, de esta forma, no nos olvidaremos de ir cerrando los diferentes puertos. Si bloqueamos todo (excepto los que están en uso y permitidos), tendremos un sistema altamente protegido, ya que tener un puerto abierto es el primer paso para una intrusión.

¿Cómo debo proteger los puertos correctamente?

De manera predeterminada todos los puertos deberían estar cerrados, a no ser que estés utilizando un determinado servicio y lo tengas que abrir. Es muy importante tener siempre el menor número de servicios locales expuertos, ya que la superficie de ataque será menor. Los firewall nos van a permitir cerrar todos los puertos de forma automática, y abrir únicamente los que nosotros necesitemos.

El software utilizado que abre un socket TCP o UDP es fundamental que esté actualizado, de poco sirve tener todos los puertos cerrados excepto uno, si el servicio que hay corriendo en ese puerto está sin actualizar y tiene fallos de seguridad. Por este motivo, es tan importante la actualización de todo el software, es recomendable siempre utilizar software que se siga manteniendo, para recibir las diferentes actualizaciones.

Si para acceder a un determinado servicio se necesita autenticación, es necesario que las credenciales sean robustas, a ser posible, usad certificados digitales o claves SSH (si vas a autenticarte en un servidor SSH). Por ejemplo, siempre es recomendable cerrar el puerto 23 del Telnet, porque es un protocolo no seguro, y por tanto, es mejor no utilizarlo bajo ninguna circunstancia.

Es muy recomendable supervisar qué puertos TCP y UDP están en uso, para detectar posibles problemas de intrusiones o infección por troyanos. Es importante investigar cualquier tráfico extraño, o puertos que están abiertos cuando no deberían estarlo. Es también muy importante saber cómo se comporta un determinado servicio (que está escuchando en un determinado puerto) con un uso normal, para poder identificar el comportamiento inusual.

Por último, además de utilizar firewalls para cerrar todos los puertos que no usemos, también sería muy recomendable hacer uso de IDS/IPS para detectar comportamientos extraños a nivel de red, e incluso sería recomendable instalar en nuestro propio PC un IDS, para que detecte cualquier anomalía.