【Android安全】Android SSL 中间人攻击原理简析

  • 【Android安全】Android SSL 中间人攻击原理简析已关闭评论

中间人攻击(MITM)

1、Sniff攻击者存在自签名证书,用户侧没有对服务器证书校验,会将攻击者当成合法服务器端。

2、Sniff攻击者将接受到的用户提交的数据传递给真实服务器端,服务器端并没有校验客户端,会将Sniff攻击者当做合法的用户。

即Sniff攻击者没有被真实“用户”、真实“服务器”所感知。

Android HTTPS 中间人劫持漏洞可以拦截、修改、增加通讯内容。

中间人攻击漏洞源于:

1、没有对SSL证书进行校验;

2、没有对域名进行校验;

3、证书颁发机构(CA)被攻击导致私钥泄露等

攻击者可以盗取账户及密码明文、聊天内容、通讯地址、电话号码、以及信用卡支付信息等敏感信息。

第三种攻击可能性极低,不在讨论范围。我们重点探讨SSL证书校验和域名校验的场景。

代码中哪些地方可能会出现中间人攻击漏洞?

1)X509TrustManager

2)HostnameVerifier

3)setHostnameVerifier (X509HostnameVerifier hostnameVerifier)

漏洞触发前提条件?

开发自定义X509TrustManager逻辑,不校验证书,或者校验证书存在逻辑漏洞

或者实现的自定义HostnameVerifier不校验域名或者接受任意域名,如setHostnameVerifier(ALLOW_ALL_HOSTNAME_VERIFIER)

失效场景1:客户端不校验SSL证书

自定义的UnsafeTrustManager类接口中的checkServerTrusted()方法为空,即不检查服务器是否可信

失效场景2:客户端校验SSL证书逻辑存在问题

开发者已经注意到对证书链的有效性进行判断,不过在具体的代码实现中,出现了逻辑错误。当证书链长度为1时,就直接走到else分支了。只去调用了 checkValidity()方法了。查看官方对checkValidity方法的介绍

checkValidity只调用了证书有效期是否过期。 所以当访问攻击者伪造的自签名恶意网址(证书链长度为1),就直接校验证书有效期,其他证书内容都不再校验,就绕过了正常的证书校验逻辑了。造成了中间人攻击的漏洞。

失效场景3:自定义HostnameVerfier接口时,却又不检查站点域名与证书域名是否匹配,直接返回了true

失效场景4:直接使用接受任意域名的HostnameVerifier接口

应该设置为 STRICT_HOSTNAME_VERIFIER 模式

如何正确使用HTTPS进行通信?

代码1、使用Android认可的证书颁发机构颁发的证书

(上面的代码是 Android官方给出的使用HttpsURLConnection API 访问https网站的示例,由Android系统校验服务器端数字证书的合法性,用可信CA签发的数字证书的网站才可以正常访问,私有CA签发的数字证书的网站无法访问)

如果网站没有开启HSTS,则无法抵御SSL Strip(HTTPS降级为HTTP)攻击,这个不在本文探讨范围之内

注:Android系统已经预置了150+证书,这些证书可以在 “设置”——“安全”——“受信任的凭据”中看到。

只要我们的服务器端使用的证书是从android认可的证书颁发机构购买的证书,且在android中已经内置了这些证书。就可以直接访问而无需客户端再额外设置

代码2:自签名——预埋公钥 (针对无法预埋证书的场景,直接预置公钥来验证)

注:这里的PUB_KEY可以自行从自签名的证书中提取,也可以加入对证书有效期的校验以及域名hostname的判断。加强校验力度

代码3.1:预埋证书

直接完全重新实现checkServerTrusted()方法。包含签名CA是否合法、域名是否匹配、是否自签名证书、证书是否过期

代码3.2:预埋证书

预埋证书,自定义TrustManager类接口,直接调用系统自带checkServerTrusted()方法来进行证书链验证

看一下攻击效果,当受害人连接到恶意WiFi时,攻击者可以直接获取其账号和密码

  • 微信
  • 扫一扫
  • weinxin
  • 微信公众号
  • 扫一扫
  • weinxin
  • 本文由 发表于 2018年11月7日18:53:14
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
高帮鞋
懒人鞋
迷你蓝牙音箱
新款宽松斗篷
Hadoop-2.8.0-Day02-HDFS工作机制视频教程 人工智能

Hadoop-2.8.0-Day02-HDFS工作机制视频教程

01.自开发分布式数据采集系统--系统流程设计--采集任务逻辑实现.mp4 02.自开发分布式数据采集系统--备份数据清理任务实现.mp4 03.自开发分布式数据采集系统--可配置化改造--单例设计模...
今日种草 辅导孩子学习,我只推荐读书牛 人工智能

今日种草 辅导孩子学习,我只推荐读书牛

‍♀️#今日种草# 孩子上学后,在家给做辅导,真得备一台学习机,毕竟辅导起来更专业更方便,我给我家宝宝挑了不少学习机,这款读书牛更合我意,读书牛是早教机,其实也包含了学习机的功能,体验下来,功能非常实...
今日种草 辅导孩子学习,我只推荐读书牛 人工智能

今日种草 辅导孩子学习,我只推荐读书牛

‍♀️#今日种草# 孩子上学后,在家给做辅导,真得备一台学习机,毕竟辅导起来更专业更方便,我给我家宝宝挑了不少学习机,这款读书牛更合我意,读书牛是早教机,其实也包含了学习机的功能,体验下来,功能非常实...
应该成为时代列车前进的推动者 人工智能

应该成为时代列车前进的推动者

还是要努力地去做自己。我从来不抱怨,因为抱怨没有用,在中国内心深处,自己对自己的束缚和不自由。你能解放你自己么?能把自己解放已经很不错了。一个大学生,应该成为时代列车前进的推动者。但不是所有人走在后面...