Configurando Burp Suite para versiones superiores a Android Nougat

En las últimas semanas, estoy auditando varias aplicaciones de Android con Burp Suite, después de unos días de trabajo con mi vieja versión de Android 5.0 pensé que ya era hora de actualizar a una superior, y quizás, utilizar nuevas herramientas, aquí me tope con Genymotion  gracias a un compañero de trabajo.

Una vez instalado y configurado Burp Suite con Android tal y como nos recomiendan en la web de Portswigger , me encontré con el siguiente problema:

The client failed to negotiate an SSL connection to [DOMAIN:443] Received a fatal alert: certificate_unknown

Configurando Burp Suite para versiones superiores a Android Nougat

Errores mostrados por Burp Suite

Android, parecía no aceptar el certificado de Portswigger e impedía la navegación SSL, después de un rato buscando por Internet una solución al problema, me dí cuenta que las últimas versiones de Android, en concreto a partir de la API >= 24 (Nougat) , sólo aceptan un certificado si este se encuentra en las CA a nivel de sistema o si se ha declarado expresamente en el fichero AndroidManifest.xml de configuración de la APK.

Para solucionar este problema, puedes seguir los siguientes pasos:

Visualizar los certificados

Para visualizar los certificados a nivel de sistema, necesitaremos descargarnos las
Platform Tools  y conectarnos por ADB.

adb devices
adb connect [IP:PORT]
adb shell

Las CA de confianza para Android, se almacenan en un formato especial en la ruta: /system/etc/security/cacerts

Configurando Burp Suite para versiones superiores a Android Nougat

Visualización de los certificados del sistema en Android

Exportar y convertir la CA de Burp Suite

Como hemos visto al listar los certificados, Android requiere que el certificado esté en formato PEM y que tenga el nombre igual al subject_hash_old añadiendo al final .0

El primer paso, sería exportar el certificado de Burp Suite en formato DER

Configurando Burp Suite para versiones superiores a Android Nougat

Exportación de CA Burp Suite

Seguidamente, necesitamos convertir la CA de Burp (en formato DER) a un formato PEM, esto podemos hacerlo con OpenSSL

openssl x509 -inform DER -in cacert.der -out cacert.pem

Obtenemos el subject_hash_old y renombramos el archivo

openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1
mv cacert.pem [SUBJECT-HASH-OLD].0

Configurando Burp Suite para versiones superiores a Android Nougat

Conversión de formato DER a PEM son subject_hash_old

Añadir el certificado al dispositvo

Volvemos a hacer uso de ADB, al tener que copiar el archivo dentro del sistema de archivos (/system) previamente debemos de montarlo.

adb root
adb remount
adb push [SUBJECT-HASH-OLD].0 /sdcard/

Configurando Burp Suite para versiones superiores a Android Nougat

Copia del certificado desde PC a dispositivo Android

Por último, abrimos una shell en el dispositivo, movemos el certificado a la carpeta /system/etc/security/cacerts y cambiamos los permisos a 644

adb shell
mv /sdcard/[SUBJECT-HASH-OLD].0 /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/[SUBJECT-HASH-OLD].0 

Configurando Burp Suite para versiones superiores a Android Nougat

Copia del certificado a system y establecimiento de permisos

Finalmente, reiniciamos el dispositivo

reboot

Y podemos ver la CA de Burp Suite a nivel de sistema en el disposivito

Configurando Burp Suite para versiones superiores a Android Nougat

Certificado de Burp Suite a nivel de sistema

Espero que os haya sido de ayuda!!