Problèmes d'interception du trafic
Dans le processus de test de pénétration des applications mobiles sur Android, il est souvent nécessaire de savoir comment l'application communique avec le serveur, avec quelles adresses elle interagit, à quoi ressemblent les demandes, quelles données sont transmises. Mais ce n'est pas toujours possible de le faire.
De nos jours, le protocole HTTPS est utilisé pour communiquer entre les composants des applications Web, basé sur les protocoles HTTP et TLS. Cela ne fonctionnera pas comme ça pour intercepter le trafic des applications. il est crypté. Vous pouvez bien sûr utiliser un serveur proxy, qui, à l'aide de son certificat, pourra décrypter le trafic applicatif et voir toutes les requêtes. Cependant, les outils de protection des applications ne restent pas immobiles. De nombreuses applications mobiles utilisent l'épinglage SSL.
L'épinglage SSL est l'incorporation d'un certificat SSL utilisé sur le serveur dans le code de l'application mobile. Ainsi, l'application n'utilise pas le magasin de certificats de l'appareil et ne fonctionnera pas avec le certificat que nous y avons glissé.
Méthodes de protection des applications
Afin de comprendre comment contourner la protection, vous devez d'abord déterminer par quels moyens cette protection est effectuée. Il y a plusieurs moyens de le faire.
Gestionnaire de confiance
Pour cette méthode, vous devez ajouter un fichier de certificat aux fichiers d'application, puis créer un KeyStore et y ajouter notre certificat.
Après cela, nous créons le TrustManager lui-même, qui fonctionnera avec notre KeyStore, qui contient le certificat requis.
Ensuite, nous créons un SSLContext que notre TrustManager utilise. Ensuite, nous spécifions le SocketFactory pour la URLConnetction à partir du SSLContext créé.
L'essence principale de cette méthode est que nous utilisons directement le fichier de certificat lui-même dans le projet, puis créons un TrustManager qui fonctionnera uniquement avec ce certificat.
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 |
, Des difficultés peuvent également survenir si l'application est protégée contre toute modification. |
Usurpation de fichier de certificat |
Facile à mettre en œuvre |
Et cette méthode est également peu pratique dans le cas de la protection de l'application contre les modifications. |