Android: SSL Unpinning

apk-mitm

JS-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΏΠ΅Ρ€Π΅ΠΏΠ°Ρ‚Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π°ΠΏΠΊ, Π² Ρ‚ΠΎΠΌ числС ΠΈ для ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΏΠΈΠ½Π½ΠΈΠ½Π³Π° ΠΈ Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅ сСртам ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ https://github.com/shroudedcode/apk-mitm#apk-mitm

Objection

android sslpinnning disable

Как Π½Π° Π½ΠΎΠ²Ρ‹Ρ… android

Π’ Android, начиная с 7 вСрсии, сСртификаты ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π΅ подходят для ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. Надо ΠΈΡ… Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… сСртификатов (ΠΊΠ°ΠΊ ΠΈ Π² Apple, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ дСлаСтся это Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ слСгка): https://blog.ropnop.com/configuring-burp-suite-with-android-nougat/

ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ сСртификата ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ способом, ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‡Ρ‚ΠΎ файловая систСма находится Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ read-only. Π’ этом случаС:

mount -o rw,remount /system
добавляСм сСртификат
mount -o ro,remount /system

Настройка Π½Π° эмуляторС

Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π· с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Google API (Π½ΠΎ Π½Π΅ Google Play) ΠΈ Π΄Π°Π»Π΅Π΅ ΠΏΠΎ инструкции, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΡˆΠ΅, ΠΈΠ»ΠΈ, Ссли Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ понятнСС, Ρ‚ΠΎ Π²ΠΎΡ‚ красивая ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π° medium: https://secabit.medium.com/how-to-configure-burp-proxy-with-an-android-emulator-31b483237053

ΠšΡ€Π°Ρ‚ΠΊΠΎ (сСрт ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½):

$ adb root
$ adb remount
$ adb push 9a5ba575.0 /system/etc/security/cacerts
$ adb shell "chmod 664 /system/etc/security/cacerts/9a5ba575.0"
$ adb reboot

Π’ β€œSettings -> Security -> Trusted Credentials” Π΄ΠΎΠ»ΠΆΠ΅Π½ появится сСрт PortSwigger.

Π”Π°Π»Π΅Π΅, Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ½Π°ΠΏΡˆΠΎΡ‚ эмулятора ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π½Π° Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅!

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сСртификатов, совмСстимых с систСмными сСртификатами Android

БистСмныС сСртификаты Π½Π° Android хранятся здСсь: /system/etc/security/cacerts

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ сСртификаты хранятся здСсь: /data/misc/user/0/cacerts-added На Π±ΠΎΠ»Π΅Π΅ старых устройствах ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: /data/misc/keychain/cacerts-added

  1. ЭкспортируСм сСртификат ΠΈΠ· ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΠΆΠ΅Π³ΠΎ прокси (Burp Suite; CER|DER)

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

  3. openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1

  4. mv cacert.pem *.0

  5. mv /sdcard/*.0 /system/etc/security/cacerts/

    chmod 644 /system/etc/security/cacerts/*.0

  6. *chgrp - Π½Π° root Ссли Π²Π΄Ρ€ΡƒΠ³ Π³Ρ€ΡƒΠΏΠΏΠ° Π½Π΅ root стоит: chgrp root <file>

  7. *chown root <file> - Ссли Π²Π΄Ρ€ΡƒΠ³ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ-Π²Π»Π°Π΄Π΅Π»Π΅Ρ† Π½Π΅ root

  8. adb reboot

    Π’ trusted creds появляСтся наш сСртификат

Или всС вмСстС ΠΎΠ΄Π½ΠΈΠΌ скриптом β€” zcc.py (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ½ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Π΄ΠΎΠΎΡ‚Π»Π°ΠΆΠ΅Π½).

ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ: android -> mitmproxy -> burp

ЗапускаСм burp: localhost:<port_burp> ЗапускаСм mitmproxy: mitmproxy -p <port_mitmproxy> --mode upstream:localhost:<port_burp> --ssl-insecure На Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅: set proxy with <port_mitmproxy>

Из-Π·Π° Ρ‡Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ финтСля: Π½Π΅ получаСтся ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСрта Π±ΡƒΡ€ΠΏΠ° Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅ Π² систСмныС. Π‘Π΅Ρ€Ρ‚ mitmproxy становится Π½ΠΎΡ€ΠΌ!

ΠŸΠ°Ρ‚Ρ‡ΠΈΠ½Π³ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Uber

1 Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹: JDK, Android SDK (Tool: zipalign) Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² PATH: C:\path\to\jdk\bin %USERPROFILE%\AppData\Local\Android\sdk\build-tools\23.0.2

2 Π‘Ρ‚Π°Π²ΠΈΠΌ Burp Π½Π° ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΠ΅, Π² WiFi настройках Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° ставим наш прокси. ЗапускаСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ - Π½Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ виснСт.

3 Π§Ρ‚ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ: Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Burp Suite ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π΅ HTTPs-соСдинСний (Π° ΠΌΡ‹ ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Ρ‚ΠΎ всС соСдинСния устройства ΠΏΡ€ΠΎΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ) подмСняСт сСртификат Π²Π΅Π±-сСрвСра Π½Π° свой, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, СстСствСнно, Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² список Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ…. ΠšΡ€ΡƒΡ‚ΠΎ! -> ΠΏΡ€ΠΎΠΊΠΈΠ΄Ρ‹Π²Π°Π΅ΠΌ наш сСртификат Π½Π° устройство Π² список Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… сСртификатов.

4 ΠžΠΏΡΡ‚ΡŒ пытаСмся Π²ΠΎΠΉΡ‚ΠΈ Π² свой Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚. БСйчас ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Uber сообщит Π½Π°ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ – Π·Π½Π°Ρ‡ΠΈΡ‚ прогрСсс Π΅ΡΡ‚ΡŒ, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ certificate pinning.

5 ΠžΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ Uber.apk ΠΊΠ°ΠΊ ZIP-Π°Ρ€Ρ…ΠΈΠ². Π’ /res/raw Π»Π΅ΠΆΠΈΡ‚ ssl_pinning_certs_bk146.bks. По Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Uber ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ BouncyCastle (BKS). Из-Π·Π° этого нСльзя просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сСртификат Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π‘Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BKS-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Для этого ΠΊΠ°Ρ‡Π°Π΅ΠΌ JAR (https://www.bouncycastle.org/latest_releases.html; bcprov-ext-jdk.jar) для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с BKS. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹: keytool -import -v -trustcacerts -alias mybks -file FiddlerRoot.cer -keystore ssl_pinning_certs_bk146.bks -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath bcprov-ext-jdk15on-160.jar -storepass spassword

ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π² Π°Ρ€Ρ…ΠΈΠ² *.apk

6 Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°Π΄ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ УдаляСм ΠΈΠ· apk ΠΏΠ°ΠΏΠΊΡƒ META-INF со старой подписью прилоТСния ΠΈ приступаСм ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π² Π½Π΅ΠΌ ΠΊΠ»ΡŽΡ‡ для подписи apk: keytool -genkey -keystore mykeys.keystore -storepass spassword -alias mykey1 -keypass kpassword1 -dname "CN=ololo O=HackAndroid C=RU" -validity 10000 -sigalg MD5withRSA -keyalg RSA -keysize 1024

ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ сгСнСрированным ΠΊΠ»ΡŽΡ‡ΠΎΠΌ наш APK: jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore mykeys.keystore -storepass spassword -keypass kpassword1 Uber.apk mykey1

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π²Ρ‹Ρ€ΠΎΠ²Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π°Ρ€Ρ…ΠΈΠ²Π΅ ΠΏΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…Π±Π°ΠΉΡ‚Π½ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅: zipalign -f 4 Uber.apk Uber.apk_zipal.apk

Π‘ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСртификат Π² систСмный для Π°Π½Π΄Ρ€ΠΎΠΈΠ΄Π° (Python)

Last updated

Was this helpful?