[关闭]
@EricaHe 2015-09-28T11:03:25.000000Z 字数 5010 阅读 897

Why Eve and Mallory Love Android: An Analysis of Android SSL (In)Security

论文笔记 SSL


作者:Sascha Fahl, Marian Harbach,Thomas Muders, Matthew Smith,Lars Baumgärtner, Bernd Freisleben

单位:Leibniz University of Hannover, Philipps University of Marburg


Abstract & Introduction

论文主要研究内容包括以下几点:

论文通过对Google Market的13500个流行免费应用进行了静态分析,并根据结果从中挑选了100个进行人工审计,其结果可总结如下:


Background

1. SSL

基本的认证检查包含以下四个部分:

  1. 证书的common name是否与目标主机名相一致
  2. 为证书签名的CA是否可信
  3. 签名是否正确
  4. 从时限的角度,证书是否合法

此外,证书是否被撤回以及相应的证书链是否合法都应该被检查,而许多应用都忽视了Certificate Recovation Lists(CRLs)或Online Certificate Status Protocol(OCSP)的使用

2. Android & SSL

Android4.0的发布让应用连接网络变得更加便捷,但也催生了许多问题:

但Android对于SSL处理的灵活性也产生了许多非常棒的特性,例如SSL Pinning。


Evaluating Android SSL Usage

论文对它所调查的13500个应用进行了静态分析(利用MalloDroid,一个他们自己开发的安卓扩展程序),涉及以下几个方面:

1. HTTP vs. HTTPS

MalloDroid提取了254022个URL,从中去除了一些不会拿来传递敏感的用户信息的链接(如图片链接等等)后,还剩下195405个URL,它们分别指向25975个不同的主机,而其中指向1725(6.6%)个不同主机的29685(15.2%)个URL使用了HTTPS。为了研究用HTTP链接的服务器中有多少也可以使用HTTPS建立通信,论文展开了进一步的调查。

调查发现,有39.1%的URL指向的4526(17.4%)个主机可以使用Android默认trust root和当前浏览器验证来建立HTTPS连接,这就意味着在所有经过测试的13500应用中,有73.6%的应用最少只需添加一个s,就可以使用HTTPS。

有6214(46%)个应用同时存在有HTTPS和HTTP,有5810(43.0%)个应用根本没用HTTPS,只有111(0.8%)个应用完全使用了HTTPS。

根据出现次数进行排列,前50个主机中,有34个主机的所有API调用都可以通过HTTPS来进行,但没有一个是只能用HTTPS来访问的。在所有指向这些主机的URL中,有22.1%使用了HTTPS,有61%可以通过将http:// 替换成https:// 来实现HTTPS连接,还有16.9%是因为没有HTTPS才用的HTTP。

下表显示了前十个主机的HTTPS使用情况,可以发现,只有facebook.com和tapjoyads.com的结果是令人满意的。

Table1

2. Deployed SSL Certificates

从所有使用了HTTPS的主机中,总共获得了1887份不同的SSL证书。

从证书本身来说,有162(8.59%)份证书不能通过Android对于SSL证书的默认验证策略,42(2.22%)份证书由于是自签名的而认证失败,还有21(1.11%)份证书过期。

从对于主机名的认证上来说,在Android中有两种不同的验证策略——BrowserCompatHostnameVerifier和StrictHostnameVerifier,有112(5.94%)份证书无法通过后者的验证,而其中有100份连前者也无法通过。

从签发的CA来说,有45(2.38%)份证书找不到合法的证书链,即这些证书是由一些并不是默认信任的CA签发的。

总体而言,有394个应用因此而受到影响。

3. Custom SSL Validation

有1074(17.28%,按所有包含HTTPS链接的app计)个应用不是接受所有证书(790个),就是接受一份合法证书的所有主机名。这就要求使用TrustManager接口或者扩展一下SSLSocketFactory类。


MITMA Study

这部分从金融、商务、通讯、社交和工具类别中选用了100个下载量最大的应用进行人工审查,其中有41个应用存在可利用的漏洞,从而泄露了银行账号信息、PayPal和American Express的支付凭证,还有Facebook、Email和云存储等应用的凭证和消息。

1. Trusting All Certificates

100个应用中有21个应用存在该问题,一张自签名的证书就可以对其实施攻击。

尤其需要注意的是一个通用的在线银行应用,它针对不同的银行使用了不同的TrustManager方案,43家银行中,有24家银行无法抵御中间人攻击。

2. Allowing All Hostnames

有20个应用不考虑域名地接受证书,使用一份毫无关系的合法证书就可以获得各种不同服务的凭据、Email、短信、通讯录等等信息。这里有3个例子:

一个杀毒软件通过有问题的ssl连接获得病毒库,并且不对获得的库进行进一步的检查,从而使得可以通过建立一个空的病毒签名传给该应用,于是这就相当于关闭了它的防御功能;也可以将它自己做成一个病毒签名传给它,然后它会检测到它自己并试图将自己删掉。这个故事告诉我们对于攻击的防御必须是全面且深入的,不能因为有了一层防线,就忽视了进一步的防御。
第二个例子是说有一个提供云分享服务的应用,由于这个原因而泄露了登录凭据,所以尽管通过中间人攻击并不能直接获得分享的数据,但只需要通过获得的登录凭据劫持用户账户,即可以获得所有的用户数据。

3. SSL Stripping

SSL Stripping主要发生在从HTTP转向HTTPS的过程中,在这个过程中攻击者可以将原本是HTTPS的连接转为HTTP,从而获取传输过程中的信息。
这个问题在Android环境中尤为显著,特别是那些使用了webkit.WebView,并且没有使用HTTPS来打开一个浏览会话的应用。
要解决这个问题,一种方法就是强制使用HTTPS,如HSTS中所要求的,或者使用一些工具,如一个叫HTTPS-Everywhere的工具。
然而这些方法都还不存在于Android中,Android的默认浏览器,包括Chrome、FireFox、Opera等等,都没有提供相关的特性或者扩展程序,这可以是未来进一步防护的一个方向。

4. SSL Pinning

尽管Android系统并没有提供SSL Pinning的功能,但由于Android中对于SSL的处理非常灵活可定制,所以开发者可以自行开发出这样的功能,尤其是许多Android应用只需要连接非常有限的一组网站,所以SSL Pinning非常适合在这种情形下使用。
应用可以通过使用自己信任的根证书所构成的一个KeyStore,或者通过使用只信任特定公钥指纹的TrustManager来实现SSL Pinning,从而可以有效地抵御来自被控制的CA的中间人攻击。
在20个之前表现良好的热门应用中,经检测,只有2个使用了SSL Pinning。

5. Missing Feedback

未能抵御中间人攻击的应用中,反馈缺失可以分为以下几种类型:
1. 无论是使用HTTPS还是HTTP都未给出任何提示
2. 用户使用HTTP时没有告诉用户其连接不安全
3. 所给提示信息与实际情况不符

然而即便是成功抵御了中间人攻击的应用,依然在反馈上存在错误,它们并没有意识到自己受到了攻击,从而没能成功为用户提供正确的提示信息,更不用说提醒用户他的连接可能存在潜在的危险(中间人攻击),有些应用甚至直接崩溃了。


Limitations

  1. 倾向于选择流行的应用
  2. 文中所有提及的安装数量仅仅参照了Google Play Market
  3. 在MalloDroid所发现的所有存在问题的应用中,仅检查了100个应用,这并不能说明剩下的所有应用一定都无法抵御中间人攻击
  4. 有些经过混淆的应用难以进行静态分析,所以可能存在一些没有被发现的漏洞
  5. 在人工检查中,比较倾向于检查那些流行的,或者认为存在有敏感数据的应用
  6. 没有对每一个应用都进行完整的测试(比如一些银行应用)

Survey

作者通过在线调查的方式,调查了人们在Android浏览器中对于安全连接的了解,并发现问题如下:

  1. 是否正在使用安全连接?
    对于该问题,在非IT专业人员中,有47.5%的人在使用HTTP时,认为自己的连接是安全的,而即便在曾经受过IT方面教育的人中,也有34.7%的人如此认为。两组人中共有22.4%人无法确定自己的连接是否受到保护。

  2. 为什么这么认为?
    大部分人将链接前缀作为判断依据,而那些无法确定自己是否安全的人中有66.5%承认自己不知道该如何进行判断。在错判的人中,主要有3种原因:(1)使用了可信的提供商;(2)相信自己的手机;(3)认为自己使用了https:// 开头的链接(虽然这并不是真的)。

  3. 有没有看过威胁提示信息?
    大部分参与者没有见过或者不是太确定,在所有人中,有24%的人只看了一部分,还有4.5%的人根本没有看该信息。

  4. 对其危险程度进行评价。
    平均下来大约是2.85(1-5,从低风险到高风险打分)

从上述结果中可以看出,即便是在一个安全措施到位的环境中,依然面临着来自用户的种种问题。


解决措施

解决方案可从3个角度来考虑:
1. 从Android系统的角度
2. 从应用市场的角度
3. 独立的解决方案

1. Android系统

2.应用市场&独立的解决方案

使用MalloDroid来对应用进行检查


结论

  1. 调查了Android中SSL/TLS的使用情况,以及一些良性的应用在使用SSL/TLS进行网络连接时可能产生的安全问题。在100个人工审计的应用中,存在以下问题:许多网站的证书能够被攻击者获取;通过操控下载的病毒签名使得杀毒软件失去效用,甚至能够删除自身;通过一个有缺陷的app-building框架可以实现代码的远程注入和执行。
  2. 网上的调查发现了人们普遍对于安全连接存在困惑,超过一半的人无法正确判断自己是否在使用安全连接。
  3. 提供了一些安全措施来缓解未加密通信和SSL误用的情况,并提供了MalloDroid这一首选方案。
  4. 未来的工作:提供一个MalloDroid的Web App;对于Android应用的开发似乎有必要提供更多的教学,或者一些更加简单而安全的工具;什么样的解决方案才能平衡从用户到开发者,从安全到经济之间的关系,从而被人们所广泛地采纳,还有待进一步的研究。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注