# 窃听风暴： Android平台https嗅探劫持漏洞

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2014-02-24T07:45:00Z
Canonical: https://wepostx.com/topics/359

> 乌云历史资料归档
>
> **原始作者：** 腾讯安全中心
> **原始编号：** superkieran-wooyundrops:153
> **原始发布时间：** 2014-02-24 15:45
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

## 0x00 前言

去年10月中旬，腾讯安全中心在日常终端安全审计中发现，在Android平台中使用https通讯的app绝大多数都没有安全的使用google提供的API，直接导致https通讯中的敏感信息泄漏甚至远程代码执行。终端安全团队审计后发现，腾讯部分产品及选取的13款业界主流app均存在此漏洞。
此外，通过这个漏洞，我们发现了国内整个行业处理安全问题存在诸多不足，例如安全情报滞后、安全警告未得到应有的重视、安全行业缺乏良性的沟通环境等等。腾讯安全中心希望通过TSRC这个平台，跟业界同行和白帽子共同探讨、共同提高，打造一个良性的安全生态环境，提升自己产品的安全性的同时也给我们的用户带来更好的安全保障。

## 0x01 原理分析

在google的官方文档中，详细给出了若干种Android平台中使用https的方法。开发小伙伴在使用了这些代码开发测试自己产品的https功能时，会发现发生很多种类型的https异常，相信不少有经验的白帽子也遇到过类似的问题。简单来说，根本原因是google的API会检查https证书进行合法性。而开发或者测试环境的https证书，基本上都无法通过合法性检查。
API的检查内容包括以下4方面的内容：

```text
1. 签名CA是否合法； 2. 域名是否匹配； 3. 是不是自签名证书； 4. 证书是否过期。
```
一旦发现任何异常，则会终止请求并抛出相应的异常。那小伙伴们在产品开发或者测试时怎么办呢？终端安全团队审计后发现，绝大多数产品都采用了覆盖google默认的证书检查机制（X509TrustManager）的方式来解决这个问题。一个很典型的解决方案如下所示：

![原文图片](/media/2016/06/d7a48f6cedcf49f5626e908bbb74a767)

相信许多白帽子看到这段代码，已经发现问题在哪里了：覆盖默认的证书检查机制后，检查证书是否合法的责任，就落到了我们自己的代码上。但绝大多数app在选择覆盖了默认安全机制后，却没有对证书进行应有的安全性检查，直接接受了所有异常的https证书，不提醒用户存在安全风险，也不终止这次危险的连接。实际上，现在所有的网页浏览器，都会对这类https异常进行处理并提醒用户存在安全风险，一个典型的提醒如下图所示，相信不少小伙伴都曾经见到过这类提醒页面吧。

![原文图片](/media/2016/06/43f4258567b52f43368089843ba20869)

![原文图片](/media/2016/06/1e50d842ee3714ad9e665158e5e38392)

类似的问题，还有证书域名检查（HostnameVerifier）部分，情况和上面说到的及其类似，因此不再赘述。

## 0x02 恶意场景

想要利用这个漏洞进行攻击，我们需要能够进行流量劫持，去截获并修改https握手时数据包：将握手时的服务器下发的证书，替换成我们伪造的假证书。随后，全部的https数据都在我们的监控之下，如果需要，甚至可以随意篡改数据包的内容。下面我们看看典型的恶意场景。

### 1. 伪造公众wifi进行劫持
某日，一名黑客带着他那台装满了“武器”的笔记本，激活了早已准备好的aircrack，静静的在星巴克坐了一个下午，夕阳西下，黑客握着一杯星巴克咖啡，消失在人群中，深藏功与名。随后，下午在星巴克进行过网上购物的人都发现，自己银行卡中所有的现金被无声无息的转走了。这并不是危言耸听，本文探讨的这个漏洞，完全就能够做到这个效果。小伙伴们参考下图我们审计时发现的某app信用卡绑定的https漏洞，所有的信用卡信息（卡号，有效期，CVV，密码，验证码）全部泄漏。有了这些信息，盗走你的现金有什么难度？
从技术层面讲，使用成熟的wifi伪造工具（如aircrack），黑客能够制造出和星巴克官方一摸一样的wifi信号。SSID，MAC地址，路由参数，统统都可以伪造。对于普通用户而言，根本没法分清楚眼前的wifi是星巴克还是猩巴克。
[enter link description here](http://static.wooyun.org/20141018/2014101813584399150.jpg)
2013台湾黑客大会中，主办方建立的wifi“绵羊墙”（即通过伪造的wifi收集周围人的密码明文），旨在提醒人们注意公众wifi的安全性。整个会议过程中，它抓到了很多密码明文，其中不乏像phpMyAdmin的管理密码（如下图）。

![原文图片](/media/2016/06/e9984dc61fc730bc5f15c8d2972bb534)

所以，小伙伴们，在不可信的wifi环境中，千万别做敏感操作。或者，干脆就不使用不信任的app。

### 2. 城域网、DNS等其他形式的流量劫持
相比而言，伪造wifi是比较容易实施的流量劫持方案。而城域网出口的流量劫持、DNS请求劫持、路由链路劫持等攻击形式虽然相对困难，一旦成功实施，其影响将会是灾难性的。大家还记得2010年伊朗黑客的那次dns劫持攻击吗？假如配合上我们今天所讨论的https漏洞，会造成怎么样灾难性的后果？

![原文图片](/media/2016/06/229ac4a32a649f2881e93cf68d201b09)

## 0x03 漏洞现状

为了解此漏洞的业界现状，我们选取了13款使用https通讯的Android app进行分析，这些app全部来自业内大公司。分析结果显示全部的13款app都存在上文描述的敏感信息泄漏漏洞。而泄漏的信息中，密码明文，聊天内容，信用卡号，CVV号随处可见。我们甚至还发现某些app的自动升级过程中使用的https通讯存在同样的问题，劫持流量后替换升级包的url后，该app会下载恶意的升级包并自动升级，直接造成了远程代码执行。
我们相信，业界绝大多数使用https的app都存在类似的漏洞。在发现此漏洞后，我们已经第一时间将漏洞的技术细节同步给国家互联网应急中心(CNCERT)以及发现存在此漏洞的友商。

## 0x04 后记

我们在发现、修复、溯源此次漏洞的过程中，发现了国内整个行业处理安全问题存在诸多不足。

### 1. 安全情报滞后
在溯源过程中，我们发现这类型的漏洞其实从Java时代就已经存在，但一直未广泛传播，随后随着dalvikvm Java虚拟机的使用踏入Android平台，随着Android的普及传播的越来越广。国外在CCS`12中出现第一次系统的讨论Android平台的此漏洞[1](http://static.wooyun.org/20141018/2014101813584388339.jpg)， 2012年9月《程序员》刊登的《Android软件安全开发实践》[2](http://static.wooyun.org/20141018/2014101813584427609.jpg)中首次提到此类安全问题。google官方的API文档[3](http://static.wooyun.org/20141018/2014101813584486317.jpg)中也曾提醒，自定义的TrustManger一定要小心实现，否则会引起严重的安全问题。
但可惜的是，这些关于的讨论并未得到我们和业界同行应有的重视，即使在一年后的今天，国内的app依然大面积的存在这类漏洞。CCS`12报告中指出，google play中17.3%使用https的app存在这类安全漏洞。而据腾讯安全中心审计相关同事的统计，国内app中存在这类安全漏洞的比例，远远高于国外。

### 2. 安全行业缺乏良性的沟通环境
其实，不管是国内还是国外，都有许多实力超群的白帽子，尽全力在为安全的互联网环境贡献自己的力量，但他们的声音，常常淹没在互联网信息的海洋里。个人的力量和影响终归是有限的，广大白帽子需要一个平台来发出他们的声音，使他们发现的安全问题得到应有的重视，也使这些安全问题尽快得到修复。TSRC正是这样一个良性沟通平台的尝试，诚然，我们现在做得还不够，但是我们一直在为了这个目标而努力。
腾讯安全中心有责任也有义务，给广大用户一个安全的互联网环境。以后不管是安全情报还是安全团队发现的安全问题，我们都会第一时间同步到国家互联网应急中心(CNCERT)及受影响的友商，帮助业界同行尽快修复安全问题。TSRC在此也呼吁业界同行放下公司、组织之间的隔阂，为了建立一个良好的沟通环境而共同努力。
国内安全行业任重而道远，腾讯安全中心跟整个行业一起，我们在路上。

## 0x05 相关链接

[1](http://static.wooyun.org/20141018/2014101813584388339.jpg) http://www2.dcsec.uni-hannover.de/files/android/p50-fahl.pdf [2](http://static.wooyun.org/20141018/2014101813584427609.jpg) http://www.programmer.com.cn/15036/ [3](http://static.wooyun.org/20141018/2014101813584486317.jpg) http://developer.android.com/training/articles/security-ssl.html
原文来自：[【2014-02-24】窃听风暴： Android平台https嗅探劫持漏洞](http://security.tencent.com/index.php/blog/msg/41)

## Replies
