Generare un certificato CA per BURP Suite e Android Nougat

Generare un certificato CA per BURP Suite e Android Nougat (N) al fine di intercettare il traffico senza problemi dovuti ad eventuali limitazioni di sicurezza (e che funziona anche su iOS!!!)

Se importare il certificato predefinito comporta ancora problemi di utilizzo durante le analisi del traffico dei vari dispositivi Android o iOS, vediamo insieme come poter generare un certificato root CA personale, da utilizzare con BURP Suite e che sia funzionante in Android Nougat (N) e anche su iOS.

Il nostro fine è quello di riuscire ad intercettare correttamente il traffico generato dai dispositivi, senza incorrere in problemi comuni dovuti alle varie limitazioni di sistema (es. validità certificato troppo lunga o avvisi di sicurezza vari).

Generare il Certificato

NB: è fondamentale settare un campo CN, per consentire anche in iOS la validazione manuale del certificato root CA personale.

A causa di un bug noto, qualora nel certificato generato non sia presente l’attributo CN, questo non sarà poi validabile su iphone e simili, in quanto l’interfaccia del sistema operativo che normalmente consente di validare i certificati non lo mostrerà. Definire un attributo CN consente proprio di aggirare il bug in questione.

openssl req -x509 -days 730 -nodes -newkey rsa:2048 -outform der -keyout server.key -out ca.der -extensions v3_ca -subj 'CN=MyCertificate'

Convertire la chiave privata

openssl rsa -in server.key -inform pem -out server.key.der -outform der
openssl pkcs8 -topk8 -in server.key.der -inform der -out server.key.pkcs8.der -outform der -nocrypt 

Convertire la chiave pubblica

openssl x509 -inform der -in ca.der -out ca.pem
openssl x509 -inform PEM -subject_hash_old -in ca.pem | head -1

L’output fornito quest’ultimo comando (sequenza alfanumerica) sarà il nome del file che dovremo caricare sul dispositivo Android (con l’aggiunta dell’estensione “.0“), di seguito rappresentato da “nnnnnnnn.0“:

cp ca.pem nnnnnnnn.0
openssl x509 -inform PEM -text -in ca.pem -out /dev/null>> nnnnnnnn.0 

Copiare il certificato sul dispositivo Android con adb

adb push nnnnnnnn.0 /data/local/tmp
adb shell

da terminale nel dispositivo:

su
mount -o rw,remount /system
mv /data/local/tmp/nnnnnnnn.0 /system/etc/security/cacerts/
chown root:root /system/etc/security/cacerts/nnnnnnnn.0
chmod 644 /system/etc/security/cacerts/nnnnnnnn.0
reboot

Importare il certificato in BURP Suite

Una volta generato il certificato (e relativa chiave privata), non dobbiamo fare altro che importare il tutto dentro Burp Suite.

Per farlo è sufficiente andare in “Proxy Settings” -> “Import / Export CA Certificate” -> “Import” -> “Certificate and private key in DER format” e da qui selezionare “ca.der” come CA certificate e “server.key.pkcs8.der” come chiave privata.

That’s all!