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
ΠΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΈΠ· ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΠΆΠ΅Π³ΠΎ ΠΏΡΠΎΠΊΡΠΈ (Burp Suite; CER|DER)
openssl x509 -inform DER -in cacert.der -out cacert.pemopenssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1mv cacert.pem *.0mv /sdcard/*.0 /system/etc/security/cacerts/chmod 644 /system/etc/security/cacerts/*.0*chgrp - Π½Π° root Π΅ΡΠ»ΠΈ Π²Π΄ΡΡΠ³ Π³ΡΡΠΏΠΏΠ° Π½Π΅ root ΡΡΠΎΠΈΡ:
chgrp root <file>*
chown root <file>- Π΅ΡΠ»ΠΈ Π²Π΄ΡΡΠ³ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ-Π²Π»Π°Π΄Π΅Π»Π΅Ρ Π½Π΅ rootadb 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?