Rastrear un paquete HTTPS saliente: solo es interceptado por cierto software, no se puede descifrar

0

Estoy intentando rastrear un paquete saliente cifrado con SSL. Es enviado por el juego Mass Effect 3 a un servicio web de EA.

Cuando huelo paquetes con Nirsoft SocketSniff, puedo ver el paquete (identificado positivamente por el momento en que aparece en SocketSniff):

Socket      Index  Type  Local Address  Local Port  Remote Address  Remote Port  Send Calls  Receive Calls  Sent Received  Closed
0x00000CBC  24     TCP   192.168.0.111  49191       94.236.58.180   443          5           492            661  1,753     Yes    

Luego puedo hacer clic en esta fila para ver volcados hexadecimales de todas las comunicaciones (en ambas direcciones) en el socket correspondiente. Hay 5 paquetes enviados y 12 recibidos, uno de los cuales es un certificado parcialmente legible de Electronic Arts entrante a mi PC.

También puedo ver la comunicación en más detalle en Wireshark, que muestra esto:

Cuando hago clic en la fila de Datos de la aplicación, puedo ver el texto cifrado hex dumpeado. Sin embargo, quiero ver el texto sin formato, por lo que necesito usar un proxy HTTPS.

Primero probé con Charles, que configuré y usé con éxito para descifrar algunos datos HTTPS desde y hacia un sitio web, así como un tráfico HTTPS diferente de Mass Effect 3. Sin embargo, el paquete descrito anteriormente no aparece en Charles. También probé Fiddler 4, que también utilicé para descifrar con éxito el tráfico HTTPS, pero el paquete tampoco aparece en Fiddler.

De los 4 programas que utilicé, 2 de ellos pueden recoger el paquete, pero no descifrarlo, y 2 de ellos pueden descifrar el tráfico HTTPS, pero no pueden capturar este paquete en particular. p>

¿Alguna idea de lo que podría estar haciendo mal o de lo que puedo intentar a continuación? Puedo proporcionar más información si es necesario.

    
pregunta halbrd 18.07.2018 - 12:58
fuente

1 respuesta

1

El uso de un proxy HTTPS se basa en el hecho de que puede mitigar la conexión mediante un certificado autofirmado. De hecho, puede crear un certificado para "* .ea.com" emitido por su propia CA y decirle al proxy HTTPS que lo envíe a su juego, en caso de que intente establecer una conexión de salida.

Este es el proceso normal:

  1. El juego quiere contactar a ea.com
  2. Realiza un protocolo de enlace TLS con ea.com
  3. Recibe un certificado que dice "esta clave pública pertenece a ea.com"
  4. El juego determina si el certificado es auténtico y confiable
  5. En caso negativo, finalice la conexión; de lo contrario, envíe datos cifrados que solo podrán ser descifrados por el propietario de la clave privada

Tan pronto como el juego encripta los datos, no puedes descifrarlos, incluso si usas Wireshark. El uso de un proxy que rompe HTTPS hace esto:

  1. El juego quiere contactar a ea.com
  2. Intenta realizar un protocolo de enlace TLS con ea.com
  3. El proxy HTTPS establece la conexión con ea.com en su lugar
  4. El proxy HTTPS entrega el certificado autofirmado (para el cual USTED tiene la clave privada) al juego
    1. Todo el tráfico ahora se descifra y vuelve a cifrar en el proxy HTTPS utilizando el certificado autofirmado
  5. El juego determina si el certificado es auténtico y confiable
  6. Si no, finalice la conexión; de lo contrario, envíe datos cifrados que solo podrán ser descifrados por el propietario de la clave privada ( que es USTED en este caso )

El paso 5 es problemático. Un proxy HTTPS solo funciona si el juego se basa en el sistema operativo para determinar la autenticidad de un certificado. En este caso, puedes instalar localmente tu certificado autofirmado y el sistema operativo felizmente le dice al juego "sí, todo está bien". Si el juego realiza algún tipo de técnica de fijación de certificados y HSTS para evitar certificados falsos e insiste en un original (o incluso almacena el único certificado (raíz) aceptado localmente en su código), no puede engañarlo al aceptar un auto Certificado firmado (sin alterar el código del juego).

Supongo que esta es la razón por la que su proxy HTTPS no puede reemplazar el certificado original por uno falso. Su proxy no lo recoge, ya que no puede revelar el texto sin formato ni lo puede capturar sin poder descifrarlo.

    
respondido por el GxTruth 18.07.2018 - 13:52
fuente

Lea otras preguntas en las etiquetas