Sto cercando di imparare come collegarmi alla memoria del browser. Lo strumento Frida è un buon inizio per questo. Il mio obiettivo è estrarre le chiavi di sessione client-random, server-random e simmetriche stabilite alla fine di un handshake TLS. Impostando l'ambiente SSLKEYLOGFILE
posso estrarre il client-random e la chiave master, tuttavia non emette la chiave server-random.
Dopo aver esaminato il codice sorgente per Firefox, questo può essere risolto facilmente stampando la chiave server-random nella funzione static void ssl3_RecordKeyLog(sslSocket *ss)
in <firefox src/security/nss/lib/ssl/ssl3conn.c>
Tuttavia, questa non è una soluzione valida nel mio progetto in quanto rende scarsa la capacità di implementazione, ovvero la compilazione di Firefox ogni volta che c'è un nuovo aggiornamento non è generalmente una buona pratica per apportare modifiche al codice del browser e ridistribuirlo.
C'è un modo migliore per farlo? Più specificamente, qualcuna di queste due opzioni è valida? Non ho molta conoscenza dell'architettura del browser.
-
A. Uso di chiamate native C ++ in un'estensione per Firefox per chiamare questa funzione / qualsiasi funzione dal file
src/security/nss/lib/ssl/ssl3conn.c
. -
B. Utilizza un hook del browser per chiamare il mio codice ogni volta che viene chiamata questa funzione nel browser.
Contesto: utilizzando i tre valori del server random, client random e master secret, voglio generare il keyblock che viene ulteriormente utilizzato per generare chiavi di crittografia utilizzate in una sessione TLS.
Sono consapevole che wireshark ha questa caratteristica, e con un minimo di modifica posso emettere le chiavi, ma non vorrei usare wireshark poiché consumerebbe più risorse sul computer host per un processo semplice come la generazione di chiavi.
Posso scrivere il mio codice libpcap per analizzare il traffico, ma vorrei mantenere questa come ultima opzione.