Estoy tratando de aprender a conectarse a la memoria del navegador. La herramienta Frida es un buen comienzo para esto. Mi objetivo es extraer las claves de sesión aleatorias de cliente, servidor aleatorio y simétricas establecidas al final de un protocolo de enlace TLS. Al configurar el entorno SSLKEYLOGFILE
puedo extraer el cliente y la clave maestra, sin embargo, no genera la clave del servidor.
Después de revisar el código fuente de Firefox, esto se puede solucionar fácilmente imprimiendo la clave aleatoria del servidor en la función static void ssl3_RecordKeyLog(sslSocket *ss)
at <firefox src/security/nss/lib/ssl/ssl3conn.c>
Sin embargo, esta no es una solución viable en mi proyecto, ya que hace que la capacidad de implementación sea deficiente, es decir, compilar Firefox cada vez que hay una nueva actualización, generalmente no es una buena práctica hacer cambios en el código del navegador y redistribuirlo.
¿Hay una mejor manera de hacer esto? Más específicamente, ¿alguna de estas dos opciones es viable? No tengo mucho conocimiento sobre la arquitectura del navegador.
-
A. Usando llamadas nativas de C ++ en una extensión de Firefox para llamar a esta función / cualquier función del archivo
src/security/nss/lib/ssl/ssl3conn.c
. -
B. Use un enlace del navegador para llamar a mi propio código cada vez que se llame a esta función en el navegador.
Contexto: Utilizando los tres valores de servidor aleatorio, cliente aleatorio y maestro secreto, quiero generar el bloqueo de clave que se usa para generar las claves de cifrado utilizadas en una sesión TLS.
Soy consciente de que wireshark tiene esta característica, y con un cambio mínimo puedo enviar las claves, pero no me gustaría usar Wirehark ya que consumiría más recursos en la computadora host para un proceso simple como la generación de claves.
Puedo escribir mi propio código libpcap para analizar a través del tráfico, pero me gustaría mantener esto como la última opción.