Android 如何使用SSL trust killer应用程序避免Okhttp证书被ePass固定?
我正在使用okhttp3证书钉扎来实现安全性。但是VAPT团队能够绕过钉住并能够拦截通信。他们正在使用安卓ssl信任杀手apk 用于构建pinner对象的代码: 正在将pinner连接到HTTP客户端: 你可以看到一个虚构的应用程序,看到你可以采取的所有安全措施来保护你的应用程序,如何绕过它们,最后你将能够看到后端如何防御与受损应用程序的通信 因此,简而言之,绕过证书固定是不可避免的,但应用程序的后端可以对此进行防御 尽管可以绕过证书钉扎,但仍建议将其用作一个额外的防御层 另一个重要的保护措施是防止应用程序和/或设备受损,即让应用程序仅与您直接控制的后端通信,尽可能避免直接呼叫第三方服务提供商 免责声明:我在一个解决方案中工作,该解决方案旨在保护应用程序免受危害,我链接到的博客系列中引用了该解决方案。您可以查看一个虚构的应用程序,查看您可以采取的所有安全步骤,以保护您的应用程序,如何绕过它们,最终您将能够看到后端如何防御与受损应用程序的通信 因此,简而言之,绕过证书固定是不可避免的,但应用程序的后端可以对此进行防御 尽管可以绕过证书钉扎,但仍建议将其用作一个额外的防御层 另一个重要的保护措施是防止应用程序和/或设备受损,即让应用程序仅与您直接控制的后端通信,尽可能避免直接呼叫第三方服务提供商Android 如何使用SSL trust killer应用程序避免Okhttp证书被ePass固定?,android,security,ssl,retrofit2,okhttp,Android,Security,Ssl,Retrofit2,Okhttp,我正在使用okhttp3证书钉扎来实现安全性。但是VAPT团队能够绕过钉住并能够拦截通信。他们正在使用安卓ssl信任杀手apk 用于构建pinner对象的代码: 正在将pinner连接到HTTP客户端: 你可以看到一个虚构的应用程序,看到你可以采取的所有安全措施来保护你的应用程序,如何绕过它们,最后你将能够看到后端如何防御与受损应用程序的通信 因此,简而言之,绕过证书固定是不可避免的,但应用程序的后端可以对此进行防御 尽管可以绕过证书钉扎,但仍建议将其用作一个额外的防御层 另一个重要的保护措施是
免责声明:我在一个解决方案中工作,该解决方案用于保护受损应用程序,我链接到的博客系列中引用了该解决方案。我认为尝试保护根设备免受攻击是不值得的。如果设备是根设备,则您已经输掉了本地战斗。为了检查我正在使用的根及其rootBeer.isrootedwithoutsyboxcheck方法。您可以使用软件检查根设备,攻击者可以找出您正在使用什么软件来检查根设备,并可以愚弄它。恐怕这里没有技术解决方案,唯一的办法是做更多的工作来混淆你的代码,而不是攻击者愿意做的除臭工作。而且不要付钱给VAPT团队,他们什么也没做。正如laalto已经在根设备上指出的那样,你无法阻止逆向工程。因此,您必须在Android和服务器之间设计协议,这样无论是否有人可以对其进行反向工程并查看数据。我认为,试图防止对根设备的攻击是不值得的。如果设备是根设备,则您已经输掉了本地战斗。为了检查我正在使用的根及其rootBeer.isrootedwithoutsyboxcheck方法。您可以使用软件检查根设备,攻击者可以找出您正在使用什么软件来检查根设备,并可以愚弄它。恐怕这里没有技术解决方案,唯一的办法是做更多的工作来混淆你的代码,而不是攻击者愿意做的除臭工作。而且不要付钱给VAPT团队,他们什么也没做。正如laalto已经在根设备上指出的那样,你无法阻止逆向工程。因此,您必须在Android和服务器之间设计协议,这样无论是否有人可以对其进行反向工程并查看数据。
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();
}
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;
}