Cómo atacar puertos abiertos y qué pueden hacer los ciberdelincuentes

Estamos seguros de que todos ustedes alguna vez han tenido que “abrir un puerto”, o mejor dicho, hacer un “reenvío de puertos” en el enrutador, ya que todos los equipos de la red local están detrás de la NAT. Para poder acceder a estos dispositivos que están en la red local desde Internet, tenemos que “abrir un puerto” o hacer “Port forwarding” en el router, de lo contrario, no podremos acceder a este servicio desde Internet ( servidor SSH, servidor FTP, servidor OpenVPN, etc.) Hoy en este artículo vamos a explicar qué significa que un puerto esté abierto, cómo podrían atacar los puertos abiertos y qué podrían hacer.

¿Qué significa que un puerto esté “abierto”?

Las comunicaciones a nivel de capa de transporte, utilizando principalmente los protocolos TCP y UDP, hacen uso de lo que se conoce como “socket de Internet”. Este socket constituye un mecanismo por el cual dos procesos (aplicaciones, por example) pueden intercambiar datos a través de la red local oa través de Internet. Cualquier flujo de datos que utilice TCP o UDP requiere al menos la siguiente información:

  • IP de origen
  • puerto de origen
  • IP de destino
  • Puerto de destino

En una red local, de forma totalmente automática y transparente, los diferentes procesos van abriendo y cerrando puertos continuamente para poder comunicarse con otros ordenadores. Para que dos procesos se comuniquen, es necesario que un proceso pueda “ubicar” al otro para obtener servicios o brindarle servicios.

Cuando definimos que un “puerto está abierto”, puede ser en dos escenarios muy diferentes:

  • Un puerto abierto en una computadora local , por example, en nuestro ordenador o en un servidor local. En principio, todos los puertos deberían estar cerrados porque el cortafuegos normalmente está configurado de forma restrictiva (todo bloqueado excepto lo que está específicamente permitido).
  • Un puerto abierto en el NAT del enrutador . Normalmente en el router no tenemos ningún puerto “abierto”, o mejor dicho, no tenemos en el apartado “Virtual Server” o “Port Forwarding” ningún puerto a ningún equipo. Por defecto en cualquier router esta tabla está vacía, sin embargo, podemos registrar diferentes reglas para abrir puertos a diferentes equipos.

¿Cuándo necesitamos abrir puertos localmente?

Si nuestra computadora local actúa como un servidor de “algo”, como, por ejemplo, example, un servidor FTP, un servidor web, un servidor SSH, un servidor VPN, un servidor de base de datos, y mucho más, tendremos que tener un puerto o varios puertos abiertos en él. firewall para que los diferentes equipos de la red local o de Internet puedan acceder a nuestros servicios, de lo contrario no podrán acceder porque el firewall bloqueará esta comunicación y no se establecerán conexiones.

Normalmente en un entorno doméstico, si configuramos Windows 10 o un sistema operativo basado en Linux como “Red privada” o “Red doméstica”, el firewall se desactiva y se permitirán todas las conexiones entrantes. Sin embargo, si la tenemos como “Red pública” el cortafuegos se activará y bloqueará todas las conexiones entrantes que no hayamos realizado previamente como salientes, por tanto, estamos ante un cortafuegos “restrictivo”.

¿Cuándo necesitamos abrir puertos en el NAT del enrutador?

Si tenemos un ordenador en la red local que actúa como servidor «para algo», como en el caso anterior, y queremos que estos servicios sean accesibles desde Internet, habrá que hacer un «port forwarding» o también conocidos como «puertos abiertos». De esta forma, si alguien abre un socket con la dirección IP pública y un puerto externo correspondiente, ese flujo de datos se reenviará automáticamente a la computadora para la que hemos “abierto los puertos”.

Cualquier enrutador por defecto no tiene ninguna regla para realizar el reenvío de puertos, tendremos que hacerlo específicamente. Además, un detalle muy importante es que si tu operador tiene CG-NAT, aunque abras un puerto en el router de forma externa, no podrás hacer nada para acceder a los recursos internos de la red local.

¿Cómo se ataca un puerto?

Realmente no se puede “atacar” un puerto, lo que se ataca es el servicio detrás de ese “puerto” que está escuchando para aceptar conexiones entrantes. Para example, si tenemos abierto el puerto 5555 y aquí está configurado un servidor FTP, lo que haremos será atacar el servicio FTP, pero no el puerto. El puerto sigue siendo una “puerta” a la información, lo que realmente se ataca son los servicios detrás de estos puertos.

El término atacar un puerto se usa comúnmente, cuando realmente debería decirse “hacer un escaneo de puertos” para verificar qué puertos están abiertos en una computadora determinada, para luego atacar los servicios detrás de este servicio específico. Para hacer un escaneo de puertos hay muchos métodos, pero, sin duda, el mejor que podemos utilizar es realizar un escaneo con Nmap, el programa de descubrimiento de hosts y escaneo de puertos por excelencia, además, también permitiría su explotación a través de NSE que es un complemento de Nmap con la posibilidad de crackear diferentes servicios y explotar vulnerabilidades conocidas.

Nmap es un programa muy fácil de usar, basta con instalarlo en cualquier sistema operativo basado en Linux para iniciar su funcionamiento, se encuentra en los repositorios oficiales de cada distribución, por lo tanto basta con ejecutar el siguiente comando:

sudo apt install nmap

Una vez instalado, tendremos que ejecutar el comando específico para ver si un puerto está abierto, filtrado o cerrado:

nmap -p PUERTO IP

También podríamos escanear un rango de puertos de la siguiente manera:

nmap -p PUERTOINICIAL-PUERTOFINAL IP

Para example, si tenemos un servidor web con HTTP y HTTPS funcionando, es completamente normal que tengamos abiertos los puertos 80 y 443, así:

Verificar puertos abiertos, filtrados o cerrados con Nmap es fácil, sin embargo, le recomendamos que lea la wiki completa de Nmap donde tenemos manuales detallados paso a paso de los diferentes tipos de escaneo de puertos que tenemos disponibles.

¿Qué puede hacer un ciberdelincuente con un puerto que está abierto?

Cuando tenemos un puerto abierto, puede haber varios casos en torno a lo que un ciberdelincuente puede o no hacer. Si tenemos un puerto abierto, pero no hay ningún servicio detrás de él escuchando, no podrá hacer nada en absoluto, sin embargo, el número de puerto abierto podría “guardarse” en caso de que pongamos un servicio para escuchar en el futuro. .

Si tenemos un puerto abierto y hay un servicio detrás de la escucha, podría realizar muchas acciones:

  • Hacer uso de una forma legítima de comprobar su funcionamiento
  • Si el servicio requiere autenticación, podría realizar un diccionario o un ataque de fuerza bruta para acceder al servicio.
  • Realice un ataque de denegación de servicio para que el servicio deje de funcionar correctamente y deje de proporcionar el servicio.
  • Explotar una vulnerabilidad de seguridad en el servicio, ya sea para acceder ilegítimamente a los recursos del servicio, para ingresar al sistema, e incluso para escalar privilegios y tomar el control total del servidor.

Como puede ver, con un puerto abierto y un servicio ejecutándose detrás de él, un ciberdelincuente puede realizar muchas acciones maliciosas, por lo tanto, es muy importante proteger los servicios detrás de este puerto, para protegerlos, es recomendable realizar las siguientes acciones :

  • Configurar correctamente el cortafuegos para permitir el acceso solo a quien realmente lo necesite, por example, puedes filtrar por países.
  • Para mitigar los ataques DoS, puede configurar reglas de firewall para denegar demasiadas conexiones simultáneas a la misma IP de origen.
  • Puede instalar un programa como fail2ban para detectar múltiples intentos de inicio de sesión y luego decirle al firewall que bloquee la IP de origen.
  • Reforzando el servicio que está escuchando, ya sea un servidor SSH, FTP o un servidor web, siempre hay configuraciones avanzadas en estos servicios para protegerlos aún más.
  • Fortalecer el sistema operativo que aloja el servicio, definir políticas de autenticación robustas, actualizar el sistema e incluso utilizar sistemas avanzados como SELinux, entre otros.

Son muchas las medidas de seguridad que podemos aplicar a un sistema y servicio para estar más seguro, pero debes tener en cuenta que la seguridad al 100% no existe, por tanto, debes estar preparado ante una incidencia y poder recuperar el sistema.

Related Posts