Simulación de un ataque Man-in-the-Middle (MitM) en Python
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.
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
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
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
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
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.
