Probleme beim Abfangen des Verkehrs
Beim Penetrationstest mobiler Anwendungen unter Android muss häufig herausgefunden werden, wie die Anwendung mit dem Server kommuniziert, mit welchen Adressen sie interagiert, wie Anforderungen aussehen und welche Daten übertragen werden. Dies ist jedoch nicht immer möglich.
Heutzutage wird das HTTPS-Protokoll verwendet, um zwischen den Komponenten von Webanwendungen zu kommunizieren, das auf den Protokollen HTTP und TLS basiert. Es wird nicht einfach so funktionieren, um den Anwendungsverkehr abzufangen. es ist verschlüsselt. Sie können natürlich einen Proxyserver verwenden, der mithilfe seines Zertifikats den Anwendungsverkehr entschlüsseln und alle Anforderungen anzeigen kann. Anwendungsschutz-Tools stehen jedoch nicht still. Viele mobile Apps verwenden SSL Pinning.
SSL-Pinning ist das Einbetten eines SSL-Zertifikats, das auf dem Server im Code der mobilen Anwendung verwendet wird. Daher verwendet die Anwendung nicht den Zertifikatspeicher des Geräts und funktioniert nicht mit dem Zertifikat, das wir in das Gerät eingefügt haben.
Anwendungsschutzmethoden
Um zu verstehen, wie der Schutz umgangen wird, müssen Sie zunächst herausfinden, auf welche Weise dieser Schutz ausgeführt wird. Es gibt verschiedene Möglichkeiten, dies zu tun.
Vertrauensmanager
Für diese Methode müssen Sie den Anwendungsdateien eine Zertifikatdatei hinzufügen, dann einen KeyStore erstellen und unser Zertifikat hinzufügen.
Danach erstellen wir den TrustManager selbst, der mit unserem KeyStore zusammenarbeitet, der das erforderliche Zertifikat enthält.
Als Nächstes erstellen wir einen SSLContext, den unser TrustManager verwendet. Dann geben wir die SocketFactory für die URLConnetction aus dem erstellten SSLContext an.
Das Wesentliche dieser Methode ist, dass wir die Zertifikatdatei selbst direkt im Projekt verwenden und dann einen TrustManager erstellen, der nur mit diesem Zertifikat funktioniert.
API , .
OkHttp CertificatePinner
OkHttp. CertificatePinner, fingerprint .
fingerprint , , .
.
Network Security Configuration
Android 7.0 . res/xml/ network_security_config.xml, fingerprints, OkHttp.
AndroidManifest.xml android:networkSecurityConfig.
, .
Frida
Frida – . , , .
SSL Pinning Frida , TrustManager, . .
CertificateFactory X509Certificate .
FileInputStream BufferedInputStream .
KeyStore – KeyStore, .
TrustManagerFactory TrustManager, KeyStore.
SSLcontext – SSL, factory sslSocketFactory.
cert-der.crt, , .
keyStore, .
trustManager, keyStore .
Frida. SSLContext. , , . . , , TrustManager . , .
, TrustManager, , ( a , b TrustManager).
Frida , . Frida , OkHttp CertificatePinner.
– apk . , .
, Frida, frida-server , .
apk
, , SSL Pinning, .
apk . smali . Smali – android-. .smali , .
apktool. apk, Visual Studio Code ApkLab.
smali, Java-, . , .
ApkLab . .
: checkClientTrusted, checkServerTrusted, getAcceptedIssuers.
, , , , , . Java- .
, . mo9499a ( - ), , . , , , , . . , , .
getAcceptedIssuers . , , . : , keyStore ( m7931a), .
, .. . , - , , , smali. . - -.
OkHttp CertificatePinner. , OkHttpClient CertificatePinner. smali , , CertificatePinner OkHttpClient.
NSC (Network Security Configuration)
SSL Pinning.
, NSC, . NSC base-config domain-config.
base-config , .
domain-config .
<domain-config>.
ApkLab NSC .
, AndroidManifest.xml.
, TrustManager, KeyStore, . KeyStore . .apk KeyStore /res/raw, /assets.
, .
, SSL Pinning , , , . , , , , , .
Frida , , . , Frida.
apk , SSL Pinning. . , , .
Network Security Configuration , . SSL Pinning , .
KeyStore . , , - (, -).
|
, |
Frida |
TrustManager, OkHttp CertificatePinner |
APK |
TrustManager, OkHttp Certificate Pinner, NSC |
NSC |
NSC |
|
TrustManager |
|
|
|
Frida |
,
|
, , Frida |
APK |
|
, |
NSC |
Android 7.0 |
, Schwierigkeiten können auch auftreten, wenn die Anwendung vor Änderungen geschützt ist. |
Spoofing von Zertifikatdateien |
Einfach zu implementieren |
Und diese Methode ist auch unpraktisch, wenn die Anwendung vor Änderungen geschützt werden soll. |