Desaparafusando a fixação de SSL em aplicativos Android

Problemas de interceptação de tráfego

No processo de teste de penetração de aplicativos móveis no Android, muitas vezes é necessário descobrir como o aplicativo se comunica com o servidor, com quais endereços ele interage, como são as solicitações, quais dados são transmitidos. Mas nem sempre é possível fazer isso.





Atualmente, o protocolo HTTPS é utilizado para a comunicação entre os componentes das aplicações web, que se baseia nos protocolos HTTP e TLS. Não funcionará exatamente assim para interceptar o tráfego de aplicativos. ele é criptografado. Você pode, é claro, usar um servidor proxy que, usando seu certificado, será capaz de descriptografar o tráfego do aplicativo e ver todas as solicitações. No entanto, as ferramentas de proteção de aplicativos não param. Muitos aplicativos móveis usam SSL Pinning.





A fixação de SSL é a incorporação de um certificado SSL que é usado no servidor no código do aplicativo móvel. Portanto, o aplicativo não usa o armazenamento de certificados do dispositivo e não funcionará com o certificado que colocamos nele.





O erro que ocorre ao usar o pacote Burp para interceptar o tráfego com seu próprio certificado
O erro que ocorre ao usar o pacote Burp para interceptar o tráfego com seu próprio certificado

Métodos de proteção de aplicativos

Para entender como contornar a proteção, você deve primeiro descobrir por que meios essa proteção é realizada. Existem várias maneiras de fazer isso.





  • Gerente de confiança





Para este método, você precisa adicionar um arquivo de certificado aos arquivos do aplicativo, criar um KeyStore e adicionar nosso certificado a ele.





Depois disso, criamos o próprio TrustManager, que funcionará com nosso KeyStore, que contém o certificado necessário.





Em seguida, criamos um SSLContext que nosso TrustManager usa. Em seguida, especificamos o SocketFactory para o URLConnetction do SSLContext criado.





A essência principal deste método é que usamos diretamente o próprio arquivo de certificado no projeto e, em seguida, criamos um TrustManager que funcionará apenas com este certificado.





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





,





Também podem surgir dificuldades se o aplicativo estiver protegido contra modificações.





Falsificação de arquivo de certificado





Fácil de implementar





E esse método também é inconveniente no caso de proteger o aplicativo de alterações.








All Articles