Tarea 2: Cripto Aplicaciones

Publicado el 05/06/2020 ‐ Lectura de 3 mins

En esta auxiliar se replicar谩 el esp铆ritu del ataque CRIME, pero sin intervenir conexiones ni ejecutar solicitudes web.

La replicaci贸n se har谩 de una forma muy parecida a la de la tarea 1, por lo que pueden reutilizar c贸digo de esa tarea si lo desean.

Para entender como funciona CRIME, ver este anexo. Al final hay un c贸digo en Python que puede servirles de inspiraci贸n para entender la implementaci贸n.

Parte 1: Servidor (1 punto)

Deber谩n crear un programa en python que reciba conexiones y texto por el puerto 5327/TCP y devuelva una versi贸n comprimida con gzip, cifrada (con AES-CBC, llave e IV pueden variar luego de cada llamada) y codificada en hexstring del siguiente texto (se marcan los saltos de l铆nea como \n expl铆citamente):

GET <URL> HTTP/1.1\n
Cookie: Secret=<SECRET>\n
Host: cc5325.dcc\n
\n

El par谩metro <URL> es el texto completo que se recibe por el socket, mientras que el par谩metro <SECRET> es un texto alfanum茅rico (may煤sculas, min煤sculas, n煤meros) de 32 caracteres que se configura por un archivo de configuraci贸n o como argumento en el programa servidor.

El programa servidor deber谩 registrar las acciones realizadas mediante un log, de tal forma que se muestre en cada linea: * Fecha del log * Texto en request recibida * IP en request recibida * Largo de respuesta no comprimida * Largo de respuesta comprimida con gzip y luego cifrada (largo del hexstring / 2)

Adjunte un “README.txt” que explique c贸mo ejecutar el programa.

  • (1 punto) Programar el Servidor con las especificaciones anteriores.

Parte 2: Cliente (3 puntos)

Deber谩n crear un programa en Python que se conecte a una IP definida como argumento o configuraci贸n y al puerto 5327/TCP. El programa debe ejecutar el ataque CRIME definido en el anexo enlazado al inicio de esta p谩gina.

El programa cliente deber谩 registrar las acciones realizadas mediante un log, de tal forma que se muestre en cada linea: * Fecha del log * Texto en request enviada * Largo de texto en request * lista de posibles valores de Secret

Adjunte un “README.txt” que explique c贸mo ejecutar el programa.

  • Programar el Cliente con las especificaciones anteriores:
    • (1 punto) crear una rutina que se conecte al servidor y env铆e mensajes predefinidos, logueando lo enviado.
    • (1 punto) crear un m茅todo que ejecute paso a paso el ataque CRIME definido en el anexo, logueando los valores posibles.
    • (1 punto) Conectar las dos partes anteriores para que el Cliente ejecute el ataque satisfactoriamente.

Parte 3: Ataque y variaciones (2 puntos)

  • (1 punto) Dividirse los programas cliente y servidor (cada integrante ejecuta uno de ellos). Apuntar el programa cliente a la IP en la VPN del CEC del usuario servidor (puerto 5327/TCP) y dejar correr. Comprobar que el secreto es recuperado entre todas las opciones posibles y adjuntar los logs.
  • Invertir en el programa Servidor el orden de las operaciones de cifrado y compresi贸n (es decir, ahora hay que cifrar primero y luego comprimir):
    • (0.3 puntos) 驴En qu茅 afecta esto al protocolo?
    • (0.3 puntos) 驴En qu茅 afecta esto al ataque?
    • (0.4 puntos) Proponga un cambio m谩s eficiente al propuesto.