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

更多相关文章

  1. 关于AlertDialog中EditText不能弹出输入法解决方法
  2. android 跳转到系统相关应用的方法
  3. android屏幕信息获取的两种方法
  4. Android中new Notification创建实例的最佳方法
  5. Android:EditText 软键盘退出监听解决方法
  6. Android实现静态广播监听器的方法
  7. android链接服务器获取图片三种方法。
  8. TabHost的基本使用方法
  9. android去掉头部label的方法

随机推荐

  1. Android软键盘(三)自动弹出键盘的现象
  2. 【Android(安卓)屏幕扩展/共享】5分钟搞
  3. Android热修复升级探索——代码修复冷启
  4. 基于android系统的加密文件系统设计
  5. Android(安卓)Scroll分析(一)
  6. android studio 真机调试连不上手机
  7. 解析Android数据加密之异或加密算法
  8. Android混淆遇到的坑
  9. Android实现中轴旋转特效 Android制作别
  10. 深入Android(安卓)【四】 —— 组件调用