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.
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. |