Come sapresti un certificato / chiave privata se lo hai estratto dalla RAM? O lo faresti?

6

Relativo a, naturalmente, la vulnerabilità heartbleed , ho letto le notizie sullo scenario peggiore per questo attacco è l'estrazione della chiave privata SSL, perché, naturalmente, questo consentirebbe all'utente malintenzionato di decrittografare tutto il traffico da e verso il server compromesso, incluso [probabilmente, a seconda del segreto di inoltro] qualsiasi traffico che è stato catturato e memorizzato da qualche parte.

Questo mi ha fatto pensare, ipotizzando lo scenario peggiore, che il tuo server vulnerabile Heartbleed avesse echeggiato la memoria posteriore contenente la tua chiave privata ... come l'hacker sarebbe stato in grado di distinguerlo da altri contenuti di memoria, o memoria non inizializzata, o cosa? hai? C'è un'intestazione / piè di pagina o uno schema rivelatore nei dati chiave stessi? So che alcuni moduli chiave RSA (PEM / base64) hanno intestazioni / piè di pagina nel file ( -----BEGIN FOO BAR KEY----- e -----END FOO BAR KEY----- ), anche se ho difficoltà a immaginare quelle stringhe caricate in memoria. È forse dato via dall'avere qualcosa di riconoscibile usando un puntatore ad esso?

Non sembra qualcosa che puoi usare per forza bruta (provare ogni combinazione di bit di memoria X con 64 KB di memoria sembra che genererebbe un numero astronomicamente elevato di permutazioni).

Quindi, come va? In che modo una chiave crittografica in memoria viene riconosciuta come chiave crittografica? E in una domanda correlata, la risposta è diversa o uguale per una chiave crittografica simmetrica? (ad esempio potresti estrarre con un attacco di avvio a freddo contro un sistema che utilizza la crittografia completa del disco, per esempio.)

    
posta HopelessN00b 11.04.2014 - 03:39
fonte

3 risposte

12

Sì. La maggior parte delle chiavi private ha un formato facilmente identificabile.

Se dice una chiave privata RSA generata con openssl, ha un formato specifico ad esempio, inizierà sempre con gli stessi tre byte a seconda della dimensione della chiave:

30 82 01 (for 768 bit key or MIIB in base64)
30 82 02 (for 1024 bit key or MIIC in base64),
30 82 04 (for 2048 bit key or MIIE in base64),  
30 82 09 (for 4096 bit key or MIIJ in base64).

Ci sono altri tipi di formati in cui è possibile memorizzare anche la chiave privata.

Puoi testarlo tu stesso con openssl usando i comandi: openssl genrsa 1024 (1024 significa chiave 1024 bit per vedere la chiave nella sua rappresentazione base64. )

Per ulteriore documentazione sul formato vedi questa risposta StackOverflow: Dove posso trovare della documentazione sul formato di un pubblico RSA chiave?

    
risposta data 11.04.2014 - 03:43
fonte
2

Come addendum alla risposta di dr jimbob:
Ci sono programmi di utilità che cercano questi pattern e cercano di estrarre le chiavi in questo modo.

Dichiarazione di non responsabilità: non ho provato nessuna di queste utilità. Questo post è solo una versione più bella dei link pubblicati dall'utente "void-star" su HN. (Vedi sotto.)

Ulteriori letture

risposta data 22.06.2016 - 14:56
fonte
0

Come (ulteriore) addendum a StackzOfZtuff e alla risposta di dr jimbob

Adi Shamir et al. carta Giocare a nascondino con le chiavi memorizzate ha un approccio molto diverso rispetto alla ricerca di intestazioni

L'approccio di Shamir si basa sul confronto di blocchi di dati nella stringa di memoria completa (ad esempio, scaricare l'intero contenuto di memoria / disco come una stringa) e vedere se sono matematicamente correlati a una chiave pubblica precedentemente nota.

Per trovare le chiavi in cui non è presente una chiave pubblica precedentemente nota, è stato effettuato un controllo per verificare l'entropia dei dati.

Since we know that key data has more entropy than non-key data, one way to locate a key is to divide the data into small sections, measure the entropy of each section and display the locations where there is particularly high entropy

Poiché le chiavi sono intenzionalmente casuali, questi dati risalgono su uno sfondo di dati che non è casuale. Questo attacco ha il vantaggio che dovrebbe essere possibile individuare qualsiasi chiave crittografica.

Our techniques seem to be applicable to a wide variety of other public key schemes, in addition to the RSA scheme.

Come ha sottolineato dr jimbob, Tobias Klein ha preso l'approccio di cercare le intestazioni

The following shows the hexadecimal representation of this ASN.1 syntax:
30 82 ?? ?? - SEQUENCE (30 82), length of the SEQUENCE (?? ??)
30 82 ?? ?? - SEQUENCE (30 82), length of the SEQUENCE (?? ??)

As all certificates should be represented in this syntax, we have a pattern to search for.

Con la crittografia completa del disco non saresti più in grado di cercare dati casuali sul disco, perché tutto sarebbe casuale. Inoltre, non sarà più possibile cercare intestazioni perché sarebbero crittografate.

Tuttavia, una volta avviata la macchina, sarebbe possibile leggere le chiavi direttamente dalla memoria con una di queste tecniche. Questo è ancora più facile per una VM (vedi la mia risposta qui )

    
risposta data 22.06.2016 - 15:22
fonte

Leggi altre domande sui tag