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

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

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

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

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/

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

Finalmente, reiniciamos el dispositivo
reboot
Y podemos ver la CA de Burp Suite a nivel de sistema en el disposivito

Espero que os haya sido de ayuda!!
hola, en caso de que el system no sea writable, cómo se procede?
Buenas Ileana,
En ese caso tienes que usar lo siguiente:
adb root
adb disable-verity
adb remount
Haciendo esto ya deberías poder escribir.
Otra manera es instalar Magisk.
Saludos!!
Hola, tienes otra solución o recomendación si no tengo el dispositivo rooteado, la aplicación que estoy auditando no corre en dispositivos rooteados y tampoco he podido hacer un bypass de esta característica y poder empaquetar de nuevo el apk.
Gracias
Hola Jhonatan,
En ese caso tendrás que meterte en código smali, para intentar ver la función que comprueba si el dispositivo es root.
Saludos!!