Masalah intersepsi lalu lintas
Dalam proses pengujian penetrasi aplikasi seluler di Android, seringkali perlu untuk mengetahui bagaimana aplikasi berkomunikasi dengan server, alamat apa yang berinteraksi dengannya, permintaan seperti apa, data apa yang dikirim. Tetapi tidak selalu mungkin untuk melakukan ini.
Saat ini, protokol HTTPS digunakan untuk berkomunikasi antar komponen aplikasi web, yang didasarkan pada protokol HTTP dan TLS. Ini tidak akan bekerja begitu saja untuk mencegat lalu lintas aplikasi. itu dienkripsi. Anda tentu saja dapat menggunakan server proxy, yang, dengan menggunakan sertifikatnya, akan dapat mendekripsi lalu lintas aplikasi dan melihat semua permintaan. Namun, alat perlindungan aplikasi tidak berhenti. Banyak aplikasi seluler menggunakan SSL Pinning.
SSL Pinning adalah penyematan sertifikat SSL yang digunakan di server dalam kode aplikasi seluler. Dengan demikian, aplikasi tidak menggunakan penyimpanan sertifikat perangkat dan tidak akan berfungsi dengan sertifikat yang kami masukkan ke dalamnya.
Metode perlindungan aplikasi
Untuk memahami cara melewati perlindungan, Anda harus terlebih dahulu mencari tahu dengan cara apa perlindungan ini dilakukan. Ada beberapa cara untuk melakukannya.
Manajer kepercayaan
Untuk metode ini, Anda perlu menambahkan file sertifikat ke file aplikasi, lalu membuat KeyStore dan menambahkan sertifikat kami ke sana.
Setelah itu, kami membuat TrustManager itu sendiri, yang akan berfungsi dengan KeyStore kami, yang berisi sertifikat yang diperlukan.
Selanjutnya, kami membuat SSLConteks yang digunakan TrustManager kami. Kemudian kami menentukan SocketFactory untuk URLConnetction dari SSLContext yang dibuat.
Esensi utama dari metode ini adalah kami secara langsung menggunakan file sertifikat itu sendiri dalam proyek, lalu membuat TrustManager yang hanya akan berfungsi dengan sertifikat ini.
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 |
, Kesulitan juga dapat muncul jika aplikasi dilindungi dari modifikasi. |
Spoofing file sertifikat |
Mudah diimplementasikan |
Dan metode ini juga tidak nyaman dalam hal melindungi aplikasi dari perubahan. |