Nella recente vulnerabilità DKIM, in che modo qualcuno ha determinato la lunghezza della chiave osservando le intestazioni?

10

Dopo aver letto questo recente articolo: Vulnerabilità WK-DKIM , ho un paio di domande.

Come si può determinare la lunghezza della chiave che viene utilizzata semplicemente guardando le intestazioni?

E presumo che l'attacco sia il seguente: correggimi se sbaglio:

  1. Calcola la chiave privata (di breve durata della chiave) conoscendo la chiave pubblica, il meccanismo (ad es. RSA ecc.)

  2. Spoof l'e-mail, sostituisci l'hash DKIM con hash calcolato illegalmente

  3. Prepara il verificatore a pensare che l'origine dell'e-mail sia corretta

posta sudhacker 25.10.2012 - 20:27
fonte

2 risposte

10

Ho scritto un parser e un firmatario DKIM per Microsoft Exchange, quindi è abbastanza semplice. Basta notare che la chiave pubblica memorizzata nel DNS non è una tipica chiave pubblica, è in una forma più compatta chiamata "modulo soggetto chiave pubblica".

How can one determine the key length that is being used simply by looking at the headers ?

  1. Esegui una query TXT per i seguenti valori nell'intestazione:      {s value} ._ domainkey. {d value} (ometti parentesi)
  2. Estrai il valore denominato "p=" nella query DNS precedente
  3. Utilizza un parser ASN.1 per determinare la lunghezza della chiave e altre cose che sono memorizzate all'interno di

Esempio di chiave pubblica a 2048 bit trovata in una query "p=" DKIM con un esponente di 65537

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoSd6ya7haEmQl1sWoEVVou8iC618evFqluT5zb
0aMEgBEfHSJRjT/FojPWqhjAtCYMAIggaE0ZxVzPDsMeRc3Mixy2WO9DWYAJuzwP7DyzUAclhGTfP4cG44SlbSsEsMM/91cu5zr9+TulnqPDxUyPvLZjGpJEHXoEWc4m
f6tbksyxZTI+wssw84NLfEs3VC4jN9P1CnfG2aTCC74lj1mePbEBCsg83+Ilz/dsDcH2FGmWVa5ytNCP7kkzyBYkfF09YpDiSXxowRGZbRkGveDvOP3ONUhLrXumpTP6
+/Hm34kbG/kGBSxNOXn8/2jf2m+08Bt8ci9Orzb2s8J81q6QIDAQAB

Basta incollare questa chiave nel decodificatore JavaScript ASN.1 per capire la lunghezza della chiave. La maggior parte dei programmatori avrà solo una biblioteca per capirlo.

    
risposta data 26.10.2012 - 05:56
fonte
3

La dimensione della firma RSA dipende dalla dimensione della chiave. Una chiave a 512 bit produce una firma lunga 64 byte. L'intestazione termina con una firma codificata Base64, quindi con il padding la memoria mi dice che sarà lunga 88 byte. Quindi, la lunghezza della chiave può essere determinata semplicemente guardando una firma.

Calcola la chiave, firma con la chiave (perché ora ce l'hai) e invia con tutte le intestazioni previste.

Per la versione / spiegazione più lunga di questo, vedi Dimensione firma RSA? su StackOverflow.

    
risposta data 26.10.2012 - 01:25
fonte

Leggi altre domande sui tag