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
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
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

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
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/
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  
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

Certificado de Burp Suite a nivel de sistema

Espero que os haya sido de ayuda!!


Javier Olmedo

Consultor de Ciberseguridad e Investigador de Seguridad de Aplicaciones Web en mi tiempo libre, Técnico en Sistemas Informáticos y Técnico Superior en Desarrollo de Software, apasionado de la [In]Seguridad Informática.

Deja tu comentario