Android静态安全检测 -> HTTPS敏感数据劫持漏洞

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

你可能感兴趣的:(【Android静态安全检测】)