Ejercicio: Simulación de un ataque Man-in-the-Middle (MitM)
En este ejercicio, vamos a simular un ataque Man-in-the-Middle (MitM) donde un proceso intercepta y modifica la comunicación entre dos otros procesos. Utilizaremos la comunicación bidireccional entre procesos en Python para realizar esta simulación.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import subprocess def mitm_ataque(): # Primer proceso: simula un cliente enviando datos proceso1 = subprocess.Popen(["echo", "Mensaje secreto del cliente"], stdout=subprocess.PIPE) salida1 = proceso1.communicate()[0] # Proceso intermedio: el atacante intercepta y modifica el mensaje proceso_intermedio = subprocess.Popen(["sed", "s/secreto/modificado/"], stdin=subprocess.PIPE, stdout=subprocess.PIPE) salida_intermedia = proceso_intermedio.communicate(input=salida1)[0] # Segundo proceso: simula un servidor recibiendo el mensaje proceso2 = subprocess.Popen(["cat"], stdin=subprocess.PIPE, stdout=subprocess.PIPE) salida2 = proceso2.communicate(input=salida_intermedia)[0] print("Mensaje interceptado y modificado:") print(salida2.decode()) mitm_ataque() |
Explicación
1. Primer proceso: simula un cliente enviando datos
1 2 |
proceso1 = subprocess.Popen(["echo", "Mensaje secreto del cliente"], stdout=subprocess.PIPE) salida1 = proceso1.communicate()[0] |
Este primer proceso simula un cliente enviando un mensaje secreto. El comando echo
genera el mensaje «Mensaje secreto del cliente» y lo redirige a la salida estándar.
2. Proceso intermedio: el atacante intercepta y modifica el mensaje
1 2 |
proceso_intermedio = subprocess.Popen(["sed", "s/secreto/modificado/"], stdin=subprocess.PIPE, stdout=subprocess.PIPE) salida_intermedia = proceso_intermedio.communicate(input=salida1)[0] |
El proceso intermedio simula al atacante que intercepta el mensaje del cliente. Utiliza el comando sed
para buscar y reemplazar la palabra «secreto» con «modificado». La entrada estándar de este proceso es la salida del primer proceso.
3. Segundo proceso: simula un servidor recibiendo el mensaje
1 2 |
proceso2 = subprocess.Popen(["cat"], stdin=subprocess.PIPE, stdout=subprocess.PIPE) salida2 = proceso2.communicate(input=salida_intermedia)[0] |
El segundo proceso simula un servidor que recibe el mensaje modificado por el atacante. Utiliza el comando cat
para mostrar el mensaje recibido.
4. Mostrar el mensaje interceptado y modificado
1 2 |
print("Mensaje interceptado y modificado:") print(salida2.decode()) |
Finalmente, el programa imprime el mensaje que ha sido interceptado y modificado, mostrando el resultado final del ataque MitM.
Resumen
Este ejercicio demuestra cómo un atacante puede interceptar y modificar la comunicación entre dos procesos. Utilizando la comunicación bidireccional entre procesos en Python, hemos simulado un ataque Man-in-the-Middle en el que un mensaje secreto enviado por un cliente es interceptado y modificado por un atacante antes de ser recibido por un servidor.
