Instalación del certificado Burp Suite en el keystore del sistema de Android Nougat (7.1.2)
Te gusta mas en vídeo? puedes verlo desde acá
Nota:
Este post es un complemento y referencia de BBHV (Bimi Boo Hack Version), lo que busca este post es enumerar los vectores de ataque para hacer reversing a una APK de Android, en este caso se la hecho las pruebas se han realizado sobre Bimii Boo Play & Learn los pasos acá aplicados son validos para cualquier APK que utilice certificados para verificar la integridad de los datos recibidos y enviados a un webservices.
La aplicación que se a utilizado para hacer la demo tiene una versión limitada (free) y una versión completa (versión paga, usa la pasarela Google Pay) obviamente luego hecho el pago se puede utilizar la versión completa de esta app.
Como funciona Google Pay:
Para no entrar en detalles y explicarlo vagamente, cuando se inicia un pago vía Google Pay se envía el ID de la aplicación esta recibe los datos, luego solicita el medio de pago (crédito en Google Pay, TDC, etc) verifica que sean validos y tengan fondos, envía los datos a wallet.google.com y deniega o concede la compra.
Resulta obvio si se lograran interceptar estos datos y puedan modificarse, saldo/fondos disponible, validez del medio de pago, cualquier pudiera hacer compras arbitrarias sin tener fondos en sus cuentas o montar un webservice personalizado y redirigir el trafico que se envía - recibe a play.google.com o wallet.google.com.
Como era de esperarse este tipo de comunicación entre cliente y servidor se resuelven bajo HTTPs, por lo tanto debemos romperlo para luego onfly modificar datos a nuestro gusto, las herramientas y la documentación están porque no usarlas?
Herramientas:
Las que se me vinieron a la mente, fueron:
Pero no todo es descargar, utilizar y modificar cabeceras, al intentar interceptar trafico entre los webservices de Google y nuestro Android no siempre es tarea fácil, a media que las versiones de Android sean mas recientes la dificultad va aumentando, en versiones superiores a 4.0 no vale con solo un certificado auto firmado, se requiere algo mas.
Para versiones recientes (y no tan recientes), se necesita que el certificado sea validado por una CA de confianza a de nivel de Sistema, recordar que en Android hay CAs de confianza validadas por el usuario (generadas por Burp Suite y agregadas por nosotros mismos por ejemplo) y otras CAs de confianza y validadas a nivel de sistema las cuales viene pre-instaladas con el sistema operativo Android.
Para versiones Android superiores a la 4.0, modificar el keystore se volvió un tema oscuro, lo cual no significa que no se pueda modificarse.
Uno de los métodos para incluir un certificado y que Android lo considere como un certificado de confianza en el área del sistema se basa en la inclusión del mismo en el keystore, el keystore en versiones superiores 6, solo es accesible si eres root.
Play Hard:
Todo se basa en una serie pasos, pullear el keystore modificar y setear los permisos en modo RW de /system para poder sobrescribir el keystore en nuestro Android y listo.. o no?
Entorno donde fueron efectuadas las pruebas:
- Android-x86 (Nougat - 7.1.2)
- Android SDK tools
- Java
- OpenSSL package
Si juegas con Android con VirtuaBox deberás conectarte a tu localhost, no olvides habilitar el Port Fordwarding
al puerto TCP 5555
si tu comunicación es por NAT a tu VM.
Nos conectamos a nuestro Android en VBox
adb connect 127.0.0.1
Shell Android
adb shell
Nos hacemos de permisos de root
su
Montamos /system a modo RW para poder modificar el keystore...
mount -o remount,rw /system
Debería mostrar un output similar a este..
Ahora debemos generar el certificado desde Burp Suite..
Generamos los certificados compatibles (de DER a PEM) a partir de los certificados proveídos por Burp Suite
openssl x509 -in cacert.der -inform der -outform pem -out cacert.pem
Ahora necesitamos obtener el hash de nuestro certificado y setearlo como su nombre, si tienes OpenSSL < 1.0 entonces deberás cambiar subject_hash_old
a subject_hash
openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1
Ahora cambiemos el nombre...
cp -v cacert.pem 9a5ba575.0
Hasta acá todo listo ahora necesitamos pushearla a nuestro dispositivo, para ello necesitamos acceso root
adb root
Movemos las credenciales desde nuestro PC a una carpeta en nuestro Android
adb push 9a5ba575.0 /data/local/tmp/
Ahora accedemos a una terminal en nuestro Android
adb shell
Movemos el certificado a la carpeta donde se almacenan los certificados en Android
mv /data/local/tmp/9a5ba575.0 /system/etc/security/cacerts/
Seteamos los bits de RW para el owner y lectura para el grupo del usuario y otros
# chmod 644 /system/etc/security/cacerts/9a5ba575.0
And reboot...
# reboot
Luego deberíamos de poder ver el certificado ya instalado en nuestro Android
Después de esto ya podemos autorizar y modificar HTTPs Request desde nuestro Burp Suite
Saludos.
Congratulations @opensylar! You have received a personal award!
1 Year on Steemit
Click on the badge to view your Board of Honor.
Do not miss the last post from @steemitboard:
Congratulations @opensylar! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!