AndroidアプリケーションでSSLピン留めを緩める

交通傍受の問題

Androidでのモバイルアプリケーションの侵入テストのプロセスでは、アプリケーションがサーバーとどのように通信するか、どのアドレスとやり取りするか、どのようなリクエストがどのように見えるか、どのデータが送信されるかを調べる必要があります。しかし、これが常に可能であるとは限りません。





現在、HTTPSプロトコルは、HTTPおよびTLSプロトコルに基づいたWebアプリケーションのコンポーネント間の通信に使用されています。アプリケーショントラフィックを傍受することは、そのようには機能しません。暗号化されています。もちろん、プロキシサーバーを使用することもできます。プロキシサーバーは、その証明書を使用して、アプリケーショントラフィックを復号化し、すべての要求を確認できます。ただし、アプリケーション保護ツールは静止していません。多くのモバイルアプリはSSLピン留めを使用しています。





SSLピン留めは、サーバーで使用されるSSL証明書をモバイルアプリケーションコードに埋め込むことです。したがって、アプリケーションはデバイスの証明書ストアを使用せず、デバイスに挿入した証明書では機能しません。





BurpSuiteを使用して独自の証明書でトラフィックを傍受するときに発生するエラー
BurpSuiteを使用して独自の証明書でトラフィックを傍受するときに発生するエラー

アプリケーション保護方法

保護をバイパスする方法を理解するには、まず、この保護がどのように実行されるかを理解する必要があります。これを行うにはいくつかの方法があります。





  • トラストマネージャー





この方法では、アプリケーションファイルに証明書ファイルを追加してから、KeyStoreを作成し、それに証明書を追加する必要があります。





その後、TrustManager自体を作成します。これは、必要な証明書を含むKeyStoreと連携します。





次に、TrustManagerが使用するSSLContextを作成します。次に、作成したSSLContextからURLConnetctionのSocketFactoryを指定します。





この方法の主な本質は、プロジェクトで証明書ファイル自体を直接使用してから、この証明書でのみ機能するTrustManagerを作成することです。





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





,





アプリケーションが変更から保護されている場合にも、問題が発生する可能性があります。





証明書ファイルのなりすまし





実装が簡単





また、この方法は、アプリケーションを変更から保護する場合にも不便です。








All Articles