Android 如何使用SSL trust killer应用程序避免Okhttp证书被ePass固定?

Android 如何使用SSL trust killer应用程序避免Okhttp证书被ePass固定?,android,security,ssl,retrofit2,okhttp,Android,Security,Ssl,Retrofit2,Okhttp,我正在使用okhttp3证书钉扎来实现安全性。但是VAPT团队能够绕过钉住并能够拦截通信。他们正在使用安卓ssl信任杀手apk 用于构建pinner对象的代码: 正在将pinner连接到HTTP客户端: 你可以看到一个虚构的应用程序,看到你可以采取的所有安全措施来保护你的应用程序,如何绕过它们,最后你将能够看到后端如何防御与受损应用程序的通信 因此,简而言之,绕过证书固定是不可避免的,但应用程序的后端可以对此进行防御 尽管可以绕过证书钉扎,但仍建议将其用作一个额外的防御层 另一个重要的保护措施是

我正在使用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;

    }