Instalación del certificado Burp Suite en el keystore del sistema de Android Nougat (7.1.2)

in #android7 years ago (edited)

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.



Te sirvió de algo este post? entonces espero al menos tu upvote  al menos reesteeam

Sort:  

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:

The Meet the Steemians Contest is over - Results are coming soon ...

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @opensylar! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

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!