Android静态安全检测 -> HTTPS敏感数据劫持漏洞
16lz
2021-01-23
HTTPS敏感数据劫持漏洞 - SSLSocketFactory.setHostnameVerifier方法
一、API
1. 继承关系
【1】java.lang.Object
【2】org.apache.http.conn.ssl.SSLSocketFactory
2. 主要方法
【1】getSocketFactory()
【2】setHostnameVerifier(X509HostnameVerifier hostnameVerifier)
【3】其他方法
https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory.html
3. 示例
【1】调用setHostnameVerifier方法的语句
【2】验证模式
ALLOW_ALL_HOSTNAME_VERIFIER 关闭host验证,允许和所有的host建立SSL通信
BROWSER_COMPATIBLE_HOSTNAME_VERIFIER 和浏览器兼容的验证策略,即通配符能够匹配所有子域名
STRICT_HOSTNAME_VERIFIER 严格匹配模式,hostname必须匹配第一个CN或者任何一个subject-alts
【3】参考链接
http://yukinami.github.io/2016/02/15/Android使用HTTPS通信/
二、触发条件
1. 调用setHostnameVerifier方法
【1】对应到smali语句的特征
;->setHostnameVerifier(Lorg/apache/http/conn/ssl/X509HostnameVerifier;)V
2. 寄存器赋值的判断
sget-object v1, Lorg/apache/http/conn/ssl/SSLSocketFactory;->
ALLOW_ALL_HOSTNAME_VERIFIER:Lorg/apache/http/conn/ssl/X509HostnameVerifier;
3. 漏洞代码示例
三、漏洞原理
【1】Android APP在HTTPS通信中,使用ALLOW_ALL_HOSTNAME_VERIFIER,表示允许和所有的HOST建立SSL通信,这会存在中间人攻击的风险,最终导致敏感信息可能会被劫持,以及其他形式的攻击
【2】更多内容
http://pingguohe.net/2016/02/26/Android-App-secure-ssl.html
http://www.droidsec.cn/android-https中间人劫持漏洞浅析/
https://jaq.alibaba.com/community/art/show?spm=a313e.7975615.40002100.4.1ooXUl&articleid=60
四、修复建议
【1】验证策略改成严格模式,即把ALLOW_ALL_HOSTNAME_VERIFIER改成STRICT_HOSTNAME_VERIFIER
更多相关文章
- 关于AlertDialog中EditText不能弹出输入法解决方法
- android 跳转到系统相关应用的方法
- android屏幕信息获取的两种方法
- Android中new Notification创建实例的最佳方法
- Android:EditText 软键盘退出监听解决方法
- Android实现静态广播监听器的方法
- android链接服务器获取图片三种方法。
- TabHost的基本使用方法
- android去掉头部label的方法