Implementar un ataque de tipo "Man in the middle" (Ejemplo CNG)

En el ejemplo de comunicación segura de criptografía de próxima generación (CNG) se muestra un ataque de tipo "Man in the middle" en el que una tercera persona (Mallory) se infiltra entre dos extremos de la comunicación (Alice y Bob).

En el ejemplo CNG se utilizan canalizaciones con nombre para proporcionar la comunicación entre procesos.Alice siempre actúa como servidor de la canalización con nombre, mientras que Bob siempre actúa como cliente.Mallory asume una función de cliente con Alice (es decir, suplanta a Bob) y una función de servidor con Bob (es decir, suplanta a Alice).Es lo que se denomina sustitución, que es un clásico ataque de tipo "Man in the middle".

Para obtener información detallada sobre este escenario, vea Intercambio de mensajes y claves paso a paso (Ejemplo CNG).

En el ejemplo CNG, la palabra "suplantación" se utiliza para referirse a la sustitución de Bob o Alice por parte de Mallory.Sin embargo, la suplantación también tiene un significado concreto que hace referencia a las canalizaciones con nombre, tal y como se explica en la documentación del método NamedPipeServerStream.RunAsClient(PipeStreamImpersonationWorker).

Firmas digitales

Las firmas digitales suelen utilizarse para evitar los ataques de tipo "Man in the middle".Normalmente, la infraestructura de clave pública (PKI) proporciona y mantiene las claves de firma .La PKI en raras ocasiones es específica del equipo.Por lo general, está secundada por un grupo de seguridad o administración o por una entidad de certificación.El uso de este tipo de infraestructuras está fuera del ámbito de este ejemplo.En cambio, en el ejemplo se muestra cómo se utilizan las clases CNG para crear claves de firma digital locales.

Puntos de inserción

Un ataque de tipo "Man in the middle" requiere un punto de inserción en la cadena de señales.Esto puede producirse cuando los dispositivos físicos del hardware que controlan la mensajería se ven comprometidos.Por ejemplo, las conexiones pueden intercambiarse o reenrutarse y puede penetrarse en los servidores de telecomunicaciones y reconfigurarlos eléctricamente.Sin embargo, una técnica más probable consiste en la reconfiguración del software que mantiene la red.Por ejemplo, los puertos se pueden reasignar o reenrutar y se puede establecer un punto de inserción del software en la aplicación de comunicación.

Un pequeño escape

Cuando un archivo se abre en modo de escritura, se bloquea su uso en otras aplicaciones.De igual forma, cuando un cliente de la canalización se conecta a un servidor de la canalización, la canalización se bloquea para uso exclusivo del cliente y permanece bloqueada hasta que el cliente se desconecta.

Es muy difícil penetrar en un canal cliente/servidor establecido.Sin embargo, en el ejemplo CNG, Mallory puede interceptar y cambiar los mensajes entre Alice y Bob con facilidad.De hecho, Mallory no penetra en el canal establecido,sino que aprovecha un pequeño escape que se pasó por alto en los protocolos de comunicaciones de la compañía.

A Alice y Bob se les indicó que debían utilizar la canalización PublicChannel para compartir el nombre de un canal privado y que, a continuación, debían utilizar ese canal privado para los contactos de ventas.De este modo, Mallory puede hacerse con el nombre del canal privado y colarse entre Alice y Bob.En las dos secciones siguientes se explica cómo.

Control de tiempo

A menudo, que un ataque de tipo "Man in the middle" logre su objetivo depende de un detalle sutil, como el control de tiempo.En el ejemplo CNG se ilustra esta idea.

Mallory sabe que el nuevo software de mensajería instantánea (IM) que la compañía ha desarrollado se basa en canalizaciones con nombre.Sabe también que Alice y Bob abrirán una canalización con nombre PublicChannel.Además, sabe que Alice enviará el nombre de una segunda canalización a Bob.Alice y Bob cerrarán la canalización PublicChannel y, a continuación, abrirán y utilizarán la segunda canalización para intercambiar información sobre los contactos de ventas.

Para robar la información de estos contactos, Mallory tiene que conseguir el nombre de la segunda canalización de Alice y evitar que Bob lo obtenga.Para lograr esto, todo lo que tiene que hacer es abrir el cliente de la canalización PublicChannel antes de que Bob lo haga.

El código fuente utiliza una espera de 200 milisegundos en la instrucción System.Threading.Thread.Sleep(200) del método Run de Bob para permitir esta interceptación.La instrucción wait es deliberada y muy visible porque el propósito del ejemplo es mostrar un ataque de tipo "Man in the middle".En el mundo real, los escenarios de seguridad son mucho más difíciles de analizar.Contienen una mezcla de aplicaciones de software, protocolos de transmisión, autenticación de red, cuentas de usuario, registros, permisos, cursos de usuarios, supervisión del tráfico y otras técnicas de análisis.

A pesar de estos sofisticados métodos, un simple retraso en la propagación de 200 milisegundos de un servidor de red fácilmente podría pasar desapercibido durante meses.Esta es la razón por la que se crearon cinco versiones distintas del ejemplo CNG antes de que finalmente se consiguieran detener las interceptaciones.

Sustitución

Al interceptar el nombre de la segunda canalización (AliceAndBobChannel), Mallory puede espiar las comunicaciones entre Alice y Bob y cambiar los mensajes que se envían.En este punto es cuando lleva a cabo la sustitución:

  1. Alice abre la canalización PublicChannel en modo de servidor y espera a que Bob se conecte.

  2. Mallory se conecta a la canalización PublicChannel en modo de cliente y recibe el nombre de la segunda canalización (AliceAndBobChannel) de Alice.

  3. Alice y Mallory cierran la canalización PublicChannel.

  4. Alice abre la canalización AliceAndBobChannel en modo de servidor y Mallory se conecta en modo de cliente.

  5. Mallory se conecta con Bob como servidor a través de la canalización PublicChannel, mientras que Bob se conecta como cliente.

  6. Mallory envía a Bob el nombre de la canalización AliceAndBobChannel1 (es decir, cambia el nombre ligeramente).Bob cree que está recibiendo esta información de Alice.

  7. Mallory y Bob se desconectan de la canalización PublicChannel.

  8. Mallory abre la canalización AliceAndBobChannel1 como servidor y Bob se conecta como cliente.

Mallory ha logrado colarse entre Alice y Bob.

Mallory sigue actuando como cliente frente a Alice (a través de la canalización AliceAndBobChannel) y como servidor frente a Bob (a través de la canalización AliceAndBobChannel1).Ahora puede leer, cambiar y retransmitir los mensajes a su antojo.Ni Alice ni Bob se dan cuenta de que alguien está interceptando y cambiando sus mensajes.

Un ataque de tipo "Man in the middle" correcto suele ser sutil.Para que no le detecten, Mallory trata de pasar desapercibido y solo cambia ligeramente los contactos de ventas.No quiere que sus cambios sean evidentes.

Conclusión

Detectar un ataque de tipo "Man in the middle" necesita tiempo, paciencia y sumo cuidado.En este ejemplo, se realiza una única espera de 200 milisegundos.La quinta parte de un segundo resulta suficiente para comprometer a todo un departamento de ventas.

Vea también

Conceptos

Servicios criptográficos

Modelo de criptografía de .NET Framework

Servicios criptográficos

Otros recursos

Tareas criptográficas