@EricaHe
2015-09-28T11:03:25.000000Z
字数 5010
阅读 897
论文笔记
SSL
作者:Sascha Fahl, Marian Harbach,Thomas Muders, Matthew Smith,Lars Baumgärtner, Bernd Freisleben
单位:Leibniz University of Hannover, Philipps University of Marburg
论文主要研究内容包括以下几点:
论文通过对Google Market的13500个流行免费应用进行了静态分析,并根据结果从中挑选了100个进行人工审计,其结果可总结如下:
基本的认证检查包含以下四个部分:
此外,证书是否被撤回以及相应的证书链是否合法都应该被检查,而许多应用都忽视了Certificate Recovation Lists(CRLs)或Online Certificate Status Protocol(OCSP)的使用
Android4.0的发布让应用连接网络变得更加便捷,但也催生了许多问题:
但Android对于SSL处理的灵活性也产生了许多非常棒的特性,例如SSL Pinning。
论文对它所调查的13500个应用进行了静态分析(利用MalloDroid,一个他们自己开发的安卓扩展程序),涉及以下几个方面:
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的结果是令人满意的。
从所有使用了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个应用因此而受到影响。
有1074(17.28%,按所有包含HTTPS链接的app计)个应用不是接受所有证书(790个),就是接受一份合法证书的所有主机名。这就要求使用TrustManager接口或者扩展一下SSLSocketFactory类。
这部分从金融、商务、通讯、社交和工具类别中选用了100个下载量最大的应用进行人工审查,其中有41个应用存在可利用的漏洞,从而泄露了银行账号信息、PayPal和American Express的支付凭证,还有Facebook、Email和云存储等应用的凭证和消息。
100个应用中有21个应用存在该问题,一张自签名的证书就可以对其实施攻击。
尤其需要注意的是一个通用的在线银行应用,它针对不同的银行使用了不同的TrustManager方案,43家银行中,有24家银行无法抵御中间人攻击。
有20个应用不考虑域名地接受证书,使用一份毫无关系的合法证书就可以获得各种不同服务的凭据、Email、短信、通讯录等等信息。这里有3个例子:
一个杀毒软件通过有问题的ssl连接获得病毒库,并且不对获得的库进行进一步的检查,从而使得可以通过建立一个空的病毒签名传给该应用,于是这就相当于关闭了它的防御功能;也可以将它自己做成一个病毒签名传给它,然后它会检测到它自己并试图将自己删掉。这个故事告诉我们对于攻击的防御必须是全面且深入的,不能因为有了一层防线,就忽视了进一步的防御。
第二个例子是说有一个提供云分享服务的应用,由于这个原因而泄露了登录凭据,所以尽管通过中间人攻击并不能直接获得分享的数据,但只需要通过获得的登录凭据劫持用户账户,即可以获得所有的用户数据。
SSL Stripping主要发生在从HTTP转向HTTPS的过程中,在这个过程中攻击者可以将原本是HTTPS的连接转为HTTP,从而获取传输过程中的信息。
这个问题在Android环境中尤为显著,特别是那些使用了webkit.WebView,并且没有使用HTTPS来打开一个浏览会话的应用。
要解决这个问题,一种方法就是强制使用HTTPS,如HSTS中所要求的,或者使用一些工具,如一个叫HTTPS-Everywhere的工具。
然而这些方法都还不存在于Android中,Android的默认浏览器,包括Chrome、FireFox、Opera等等,都没有提供相关的特性或者扩展程序,这可以是未来进一步防护的一个方向。
尽管Android系统并没有提供SSL Pinning的功能,但由于Android中对于SSL的处理非常灵活可定制,所以开发者可以自行开发出这样的功能,尤其是许多Android应用只需要连接非常有限的一组网站,所以SSL Pinning非常适合在这种情形下使用。
应用可以通过使用自己信任的根证书所构成的一个KeyStore,或者通过使用只信任特定公钥指纹的TrustManager来实现SSL Pinning,从而可以有效地抵御来自被控制的CA的中间人攻击。
在20个之前表现良好的热门应用中,经检测,只有2个使用了SSL Pinning。
未能抵御中间人攻击的应用中,反馈缺失可以分为以下几种类型:
1. 无论是使用HTTPS还是HTTP都未给出任何提示
2. 用户使用HTTP时没有告诉用户其连接不安全
3. 所给提示信息与实际情况不符
然而即便是成功抵御了中间人攻击的应用,依然在反馈上存在错误,它们并没有意识到自己受到了攻击,从而没能成功为用户提供正确的提示信息,更不用说提醒用户他的连接可能存在潜在的危险(中间人攻击),有些应用甚至直接崩溃了。
作者通过在线调查的方式,调查了人们在Android浏览器中对于安全连接的了解,并发现问题如下:
是否正在使用安全连接?
对于该问题,在非IT专业人员中,有47.5%的人在使用HTTP时,认为自己的连接是安全的,而即便在曾经受过IT方面教育的人中,也有34.7%的人如此认为。两组人中共有22.4%人无法确定自己的连接是否受到保护。
为什么这么认为?
大部分人将链接前缀作为判断依据,而那些无法确定自己是否安全的人中有66.5%承认自己不知道该如何进行判断。在错判的人中,主要有3种原因:(1)使用了可信的提供商;(2)相信自己的手机;(3)认为自己使用了https:// 开头的链接(虽然这并不是真的)。
有没有看过威胁提示信息?
大部分参与者没有见过或者不是太确定,在所有人中,有24%的人只看了一部分,还有4.5%的人根本没有看该信息。
对其危险程度进行评价。
平均下来大约是2.85(1-5,从低风险到高风险打分)
从上述结果中可以看出,即便是在一个安全措施到位的环境中,依然面临着来自用户的种种问题。
解决方案可从3个角度来考虑:
1. 从Android系统的角度
2. 从应用市场的角度
3. 独立的解决方案
使用MalloDroid来对应用进行检查