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

  • A+
所属分类:人工智能
广告也精彩

中间人攻击(MITM)

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

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证书

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

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

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

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

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

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

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

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

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

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

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

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

应该设置为 STRICT_HOSTNAME_VERIFIER 模式

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

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

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

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

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

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

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

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

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

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

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

代码3.1:预埋证书

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

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

代码3.2:预埋证书

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

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

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

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

  • 微信
  • 扫一扫
  • weinxin
  • 微信公众号
  • 扫一扫
  • weinxin
广告也精彩
加绒女鞋
多功能扳手
一步裙
Y40 便携头戴式耳机
广告也精彩

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: