当前位置:   article > 正文

[安卓网络安全]安卓SSL中间人攻击防范_sethostnameverifier

sethostnameverifier

前言

目前,我们在开发App的时候对Https的校验方面都比较忽略,当我们使用一些抓包工具测试的时候,即使手机不安装抓包工具的证书,也可以抓取我们Https进行劫持看见我们的明文内容会泄露用户的隐私数据,下面我就写下我的防护措施。

概念

中间人攻击原理

针对SSL的中间人攻击方式主要有两类,分别是SSL劫持攻击和SSL剥离攻击

SSL劫持攻击

SSL劫持攻击即SSL证书欺骗攻击,攻击者为了获得HTTPS传输的明文数据,需要先将自己接入到客户端和目标网站之间;在传输过程中伪造服务器的证书,将服务器的公钥替换成自己的公钥,这样,中间人就可以得到明文传输带Key1、Key2和Pre-Master-Key,从而窃取客户端和服务端的通信数据;

但是对于客户端来说,如果中间人伪造了证书,在校验证书过程中会提示证书错误,由用户选择继续操作还是返回,由于大多数用户的安全意识不强,会选择继续操作,此时,中间人就可以获取浏览器和服务器之间的通信数据

SSL剥离攻击

这种攻击方式也需要将攻击者设置为中间人,之后见HTTPS范文替换为HTTP返回给浏览器,而中间人和服务器之间仍然保持HTTPS服务器。由于HTTP是明文传输的,所以中间人可以获取客户端和服务器传输数据。

上面的内容来自《Https协议简析及中间人攻击原理》如果还需要对Https的知识理解和补充可以自行Google,这里就不多做解释了。

抓取不校验的App信息

通常我们看似做了Https,但是我们没有做一些安全措施的话,我们的数据就会暴露,下面我们来做一些测试。

安装抓包工具Charles

Charles是一个很好用的抓包工具,有很多强大的功能,不过是付费的,有30天的试用期。
这里有一个很简单的教程看了配置下就可以了《十分钟学会Charles抓包(iOS的http/https请求)
,虽然是文章是关于IOS但是Android的配置方式是一样的。

抓取信息

在这里插入图片描述
我屏蔽了一些敏感信息,可以看见我们成功的抓取了Https链接里面的明文信息,并且我没有安装抓包工具的证书,下面我们来进行分析。

为什么用了Https还能抓取明文信息?

我来展示下我在App中编写的代码:

OkHttpClient okHttpClient = new OkHttpClient();
        try {
   
            final TrustManager[] trustAllCerts = new TrustManager[]{
   new X509TrustManager() {
   
                @Override
                public void checkClientTrusted(
                        java.security.cert.X509Certificate[] chain,
                        String authType) throws CertificateException {
   
                }

                @Override
                public void checkServerTrusted(
                        java.security.cert.X509Certificate[] chain,
                        String authType) throws CertificateException {
   
                }

                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
   
                    return null;
                }
            }};
            final SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, trustAllCerts,
                    new java.security.SecureRandom());
            // Create an ssl socket factory with our all-trusting manager
            final SSLSocketFactory sslSocketFactory = sslContext
                    .getSocketFactory();

            okHttpClient.setSslSocketFactory(sslSocketFactory);
            okHttpClient.setHostnameVerifier(new
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/943906
推荐阅读
相关标签
  

闽ICP备14008679号