¿Esteganografía usando todos los puertos TCP / UDP?

1

Acabo de tener una idea, y normalmente cuando se me ocurre una, resulta que ya estaba inventada, así que ...

¿Hay algún estándar que consista en que varias partes detecten todas sus conexiones TCP / UDP que enviarían mensajes a través de números de puerto en lugar de (o adicionalmente) datos enviados a través de los puertos? ¿Un sofisticado sistema de detonación de puertos? ¿Tal sistema haría más difícil detectar un intento de ocultar la conexión real?

    
pregunta d33tah 08.01.2013 - 21:25
fuente

1 respuesta

6

La detección de puertos es lenta: debe enviar un montón de paquetes y usar un tiempo de espera para saber qué puertos están abiertos y cuáles no. Además, es muy raro que la lista de puertos abiertos en un servidor cambie cada 2 minutos. La esteganografía no puede existir si implica configuraciones inusuales; se esfuerza en la discreción.

Lo que podría hacer es ocultar los datos en puertos de origen . Cada vez que envía un paquete UDP a un servidor de destino, el paquete se etiqueta con el puerto de destino (que a menudo es bien conocido, por ejemplo, 53 para una solicitud de DNS) y un puerto de origen . El puerto de origen está abierto momentáneamente en el cliente y está destinado a recibir la respuesta, en caso de que se envíe una respuesta (de nuevo, esta es una situación normal con DNS). En condiciones normales, el puerto de origen es elegido al azar por el cliente; Las aplicaciones no necesitan preocuparse por ello, ya que está asignada por el núcleo. Pero la aplicación podría elegir el puerto de origen (es una cuestión de una llamada al sistema bind() antes de enviar el paquete) y, por lo tanto, transmitir información al servidor de forma encubierta.

De esa manera, puede enviar información encubierta al servidor bajo la apariencia de solicitudes de DNS de aspecto inocente. Para imitar la asignación de puertos aleatoria normal como lo realizan los sistemas operativos, tendría que limitarse a aproximadamente el mismo rango, de modo que pueda enviar, por ejemplo, alrededor de 12 bits de información por solicitud. Para hacer que la transferencia encubierta no sea detectable, tendría que cifrar los datos (los puertos de origen deben "parecer aleatorios" y nada parece más aleatorio que los datos cifrados).

Es una propiedad genérica: siempre que un protocolo de datos incluya elementos que el servidor debe elegir al azar, se puede subvertir a un canal de datos secreto. Esto generalmente se considera un problema de seguridad, ya que permite que el remitente filtre datos críticos a terceros sin que el receptor se dé cuenta. Un ejemplo es el relleno de datos de registro en SSL 3.0 (sección 5.2.3.2), cuando se usa un cifrado de bloque: el El valor de los bytes de relleno puede ser elegido arbitrariamente por el remitente. Esto se solucionó en TLS 1.0 , donde se aplica el valor de los bytes de relleno:

  

Cada uint8 en los datos de relleno          el vector debe rellenarse con el valor de longitud de relleno.

No conozco ningún estándar para hacer esteganografía a través de números de puerto. Cuando llegas a eso, parece bastante inútil. Además, por naturaleza, la "esteganografía" no se combina bien con los "estándares".

    
respondido por el Thomas Pornin 08.01.2013 - 22:09
fuente

Lea otras preguntas en las etiquetas