Respuesta corta: No.
Respuesta larga: posiblemente. Depende.
Los enrutadores NAT funcionan al monitorear el tráfico saliente y al crear reglas sobre la marcha para enviar el tráfico entrante a donde debe ir.
Por ejemplo:
- La máquina interna (192.168.1.2) abre la conexión TCP (envía un TCP SYN) a una máquina externa: 13.37.10.20, puerto 80. La conexión está vinculada al puerto 54321 en la máquina interna.
- El enrutador NAT ve una nueva conexión TCP saliente, desde 192.168.1.2:54321 hasta 13.37.10.20:80, almacena el número de secuencia TCP y crea una regla que indica que cualquier tráfico entrante de 13.37.10.20:80 con el siguiente número de secuencia debe enrutarse a 192.168.1.2:54321 en la subred local.
- La máquina externa devuelve el paquete TCP con el conjunto de indicadores SYN + ACK, con su propio número de secuencia. El enrutador NAT ve que coincide con la regla anterior y la enruta a 192.168.1.2:54321, almacenando el número de secuencia. Ahora permite que los paquetes se envíen en ambas direcciones, siempre que la IP, el puerto y los números de secuencia coincidan con los valores de la regla.
- Los datos se intercambian a través de la conexión TCP.
- Un lado envía un FIN, el enrutador permite que el otro lado envíe y ACK y luego descarta la regla. La máquina externa no puede enviar más tráfico porque el enrutador NAT ya no tiene esa regla de reenvío.
El enrutador NAT elimina todo el resto del tráfico entrante.
En algunos casos, las máquinas en la red interna deben poder aceptar paquetes entrantes de la red externa, sin saber nada sobre la máquina externa de antemano. Por ejemplo, podría configurar un servidor web en 192.168.1.2:80, pero quiero que sea accesible desde la red externa. Esto se ve facilitado por el reenvío de puertos.
El reenvío de puertos agrega una regla permanente a las reglas de reenvío de NAT, de manera que el tráfico de todas las direcciones IP (o una lista preestablecida de) a un puerto específico se envía a una dirección IP interna. En el caso anterior, podría decir que cualquier cosa que llegue a mi enrutador en el puerto TCP 80 debe reenviarse a 192.168.1.2:80.
Esto no ofrece una vulnerabilidad en sí misma, pero conduce a una. Una gran cantidad de juegos y software de comunicaciones (por ejemplo, mensajería instantánea, VoIP, etc.) requieren que se acepten conexiones entrantes. Debido a que la mayoría de los consumidores no saben cómo configurar su enrutador, y se convierte en una molestia para ingresar manualmente las reglas de reenvío de puertos cada vez que instala un nuevo juego / programa, los enrutadores necesitan una API que permita la configuración automática de estas reglas. La API más popular para esto es UPnP (Universal Plug-n-Play).
UPnP permite que un programa le indique al enrutador que agregue una regla de reenvío de puerto UPnP. La mayoría de los enrutadores especifican algunas restricciones sobre esto, por ejemplo, tiempo máximo para que exista una regla antes de que el programa necesite renovarla, pero en general es bastante laxa.
La API funciona a través de HTTP, por lo que es relativamente fácil de implementar en la mayoría de los idiomas. Tampoco requiere ninguna autenticación más allá de "Tengo una dirección IP interna", lo que significa que AJAX entre sitios, HTML5 sockets e incluso iframes creados dentro de un navegador pueden tener la capacidad de configurar reglas de reenvío de puertos. Por lo general, esto requiere un error en la política del mismo origen del navegador, pero ciertamente es posible que un atacante aproveche esto para crear reglas de reenvío de puertos arbitrarias. Estos podrían ser utilizados para la huella digital de su red interna. También podrían usar sockets web para tomar huellas dactilares de su red interna directamente, haciendo que visite una página web. Por supuesto, la exploración se interrumpiría cuando cerrara la página. La respuesta de Symcbean muestra un ejemplo práctico de esto.
El otro problema es que UPnP a veces se implementa en el enrutador de forma bastante descuidada. Ciertos enrutadores permiten hacer cosas locas a través de UPnP sin autenticación, por ejemplo. apagar wifi, restablecer el dispositivo a la configuración de fábrica, parpadeo del firmware. Incluso encontré un enrutador que le indicaría el SSID y la contraseña de wifi en texto sin cifrar si enviaba una determinada solicitud UPnP. De hecho, en algunos casos, los enrutadores también permiten el acceso "limitado" a UPnP desde el lado orientado a Internet. Es una práctica de seguridad extraña y terrible.