如何使用SSL信任杀手级应用程序避免Okhttp证书固定绕过?



>我正在使用okhttp3证书固定以确保安全。但是VAPT团队能够绕过固定并能够拦截通信。他们正在使用安卓 SSL 信任杀手 apk。

用于生成 pinner 对象的代码:

public CertificatePinner provideCertificatePinner() {
final CertificatePinner.Builder builder = new CertificatePinner.Builder();
builder.add(DOMAIN_PATTERN, "sha1/***********");
builder.add(DOMAIN_PATTERN, "sha256/**********");
builder.add(DOMAIN_PATTERN, "sha256/*******");
builder.add(DOMAIN_PATTERN, "sha256/*****
return builder.build();
}

将 pinner 附加到 HTTP 客户端:

OkHttpClient getOkHttpClient(HttpLoggingInterceptor interceptor, CommonRequestInterceptor authenticationInterceptor
, CertificatePinner certificatePinner) {
OkHttpClient okHttpClient = null;
try {
OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder().readTimeout
(Constants.NetworkConstants.READ_TIMEOUT, TimeUnit.SECONDS).connectTimeout
(Constants.NetworkConstants.CONNECTION_TIMEOUT, TimeUnit.SECONDS);
okHttpClientBuilder.sslSocketFactory((SSLSocketFactory) SSLSocketFactory.getDefault());
okHttpClientBuilder.addInterceptor(authenticationInterceptor);
okHttpClientBuilder.addInterceptor(interceptor);
okHttpClientBuilder.certificatePinner(certificatePinner);
okHttpClient = enableTls12OnPreLollipop(okHttpClientBuilder).build();

} catch (Exception e) {
e.printStackTrace();
}
return okHttpClient;
}

您可以查看有关虚构应用程序的博客系列,以了解您可以采取的所有安全措施来保护您的应用程序,如何绕过它们,最后您将能够看到后端如何防御与受感染的应用程序进行通信。

因此,简而言之,无法避免绕过证书固定,但应用程序的后端可以防御它。

尽管可以绕过证书固定,但仍建议将其用作1层防御。

防止受损应用程序和/或设备的另一个重要事项是让您的应用程序仅与您直接控制的后端通信,尽可能避免直接调用第三方服务提供商。

(免责声明:我在Approov工作,这是防止受损应用程序的解决方案,在我链接到的博客系列中有所引用。

最新更新