Android 浏览器安全——你未被告知的
本文重点关注 Android 默认 Web 库中的缺陷,同时承认相关的漏洞利用。一些现代 Android 浏览器存在严重的安全漏洞和其它危险缺陷,这些缺陷无法修补或以其他方式纠正。这种弱点延伸到多个浏览器和应用程序,并由与旧操作系统版本上的系统 webcore 的链接决定。对于低于 5.0 的所有 Android 版本,应避免使用不提供自己渲染引擎的 HTML 应用程序。
近期统计数据表明,19% 的互联网信息系统访问者曾是漏洞利用或数据泄露的受害者,导致 45% 的人减少或消除对电子商务和通信的依赖。计算机安全漏洞正在直接影响在线业务的经济,这必须得到纠正。
弱化的 WebKit大多数移动平台(包括 Android)都非常依赖 KDE Konqueror 网络浏览器的 KHTML 渲染引擎。从操作系统默认浏览器的角度来看,移动 HTML 本质上是一种单一文化——它们都源于 KHTML,KHTML 通过在正确的时间以合理的许可提供高质量的代码库而赢得了这个地位。
尽管人们可能不愿称苹果为 KHTML 的始终如一的好管家,因为过去与 Konqueror 项目存在摩擦,但 Safari 浏览器引入了 KHTML 的引人注目的重制版本,称为 WebKit。苹果为 WebKit 提供了新功能和定期安全修复(2015 年超过 100 个与安全相关的补丁),这些最终被带回 Konqueror。随着 Safari 从桌面 MacOS 迁移到移动 iOS,WebKit 承担了移动浏览器领导者的重任,并且这个角色从未受到过 серьезных 挑战。
谷歌还在 Android 和 Chrome 网络浏览器中采用了 WebKit。Chrome 已成为市场份额最高的浏览器,并且在所有支持它的平台上都定期收到来自谷歌的更新。
然而,谷歌还将 WebKit 作为库添加到 Android 中。任何应用程序都可以链接系统 WebKit 以渲染 HTML 作为用户界面 (UI) 的一部分,方法是调用 WebView,WebView 链接到 /system/lib/libwebcore.so。
Android 捆绑的 WebKit 的问题在于,对于旧版本,它永远不会更新,这并不为人所知。Android 5.0 Lollipop 是第一个可以修补捆绑的 WebKit 的版本。
对于 Android 4.4 KitKat,捆绑的 WebKit 537.36 及其 TLS 实现不符合 RFC 7525 中定义的最佳实践加密。正如 Qualys SSL 扫描器 报告的那样
-
SSL 版本 3 已启用——RFC 中的绝对禁止。这可以通过 POODLE 降级攻击来利用以解密流量。
-
允许弱“出口级”密码——也是 RFC 中的绝对禁止。这使得第三方可以通过 FREAK 攻击进行恶意解密。
-
允许 RC4 密码——也是 RFC 中的绝对禁止。
-
允许弱 Diffie-Hellman 素数,这可以通过 Logjam 攻击来利用。
这些软件缺陷排除了将 KitKat 系统 WebKit 用于任何类型的敏感交易。Android JellyBean,其数字版本跨越 4.1 到 4.3,具有 WebKit 版本 534.30,情况甚至更糟,因为它自 Android 版本 4.0.1 Ice Cream Sandwich 以来实际上从未更新过
-
除了允许 SSL v3 之外,JellyBean 默认禁用 TLS 1.1 和 1.2。
-
JellyBean 也容易受到 “同源策略”漏洞 CVE-2014-6041 的攻击,该漏洞允许恶意网站监视浏览器活动。
谷歌不能也不会修补这些或其他错误,因为 Android 补丁过程在技术上和政治上都(太)困难——用谷歌自己的话说,补丁“不再能安全地进行”。谷歌经常放弃 Android 基础的很大一部分,而上述设计缺陷现在感染了超过 50% 的 Android 设备。截至 2016 年 4 月 4 日,KitKat 占 Android 总量的 33.4%;Jelly Bean 占 21.3%,早期版本总计占 4.9%。如果涉及系统库,则在这些平台上浏览敏感数据是不安全的。
无线运营商仍然销售 KitKat、Jelly Bean 和早期版本,这加剧了这个问题。即使是最大的运营商也犯有这种行为,并且他们没有披露这些旧操作系统版本具有弱的、可利用的加密和大量其他缺陷,这使它们在处理敏感流量方面处于严重劣势。一些运营商在锁定需要带有数字签名的内核的引导加载程序的手机上花费的精力,远远超过他们花在安全补丁上的精力。
原始设备制造商 (OEM) 也造成了同样的麻烦。尽管各种 Android 版本中的许多“默认浏览器”都使用系统 WebKit,但一些 OEM 为其品牌浏览器构建了单独的 WebKit 版本,这些版本表现出与谷歌相同的(缺乏)支持。OEM/供应商浏览器也不能信任处理敏感数据。
美国联邦通信委员会和贸易委员会(FCC 和 FTC)已宣布对谷歌及其合作伙伴就 Android 缺乏安全更新 一事展开联合调查,这可能会导致未来的架构变更,但不太可能确保旧版本的安全。理想情况下,FCC 将迫使运营商和 OEM 发布已超过六个月没有安全补丁的手机的签名密钥,让被遗弃手机的用户可以选择第三方安全支持。
如果微软采用 Windows XP 的 Internet Explorer 中的最终 Trident 渲染引擎,并将其锁定给 50% 的 Windows 用户社区,同时积极阻止更新,那么谴责将会是激烈而残酷的。现在是时候认识到谷歌所做的事情要糟糕得多——XP 和 KitKat 的支持在彼此几个月内结束,但微软不允许 XP 通过第三方像谷歌对待其孤立产品那样扩散。
苹果和 WebKit 团队可能在某种程度上松了一口气,因为他们得知谷歌正在分叉代码,组建 BLINK 引擎 并离开该项目。在所有大型 WebKit 实现中,谷歌的安全记录最差。尽管其他 Linux 发行版在 WebKit 安全 方面也落后,但没有一个像 Android 那样普及。谷歌的离开只会提高 WebKit 的安全地位。
瘟疫蔓延在 Google Play 商店中,许多浏览器据称比 Chrome 更快、功能更丰富。有些甚至声称安全性更高,我很快将在此处反驳这一点。Chrome 通常被应用程序评论网站视为保守的选择,并且很少在 Android 浏览器评论中名列前茅。
这些更快的浏览器通常只是围绕系统 WebKit 包装新的 UI 控件,因此继承了它们运行的 Android 版本的全部安全漏洞。
在 Jelly Bean 上测试并由 Qualys SSL 扫描器 报告的以降低的安全性运行的浏览器包括 Apus、Apus Turbo、Best Browser、Boat Browser、Brave (Link Bubble)、CM Browser、Dolphin、Dolphin Zero、Easy、Flynx、Flyperlink、Ghostery、Javelin、Maxthon、Mercury、Naked Browser、Next Browser、Ninesky、Safe Browser 和 UC Browser。在 4.4 KitKat 和更低版本的 Android 上,应避免使用这些浏览器。 请参阅表 1 了解详情。
表 1. 浏览器安全比较浏览器 | 版本 | FREAK | Logjam | POODLE | RC4 | TLS 1.2 |
Apus | 1.4.9 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Apus Turbo | 1.4.7.1003 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Best | 1.5.1 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Boat | 8.7.4 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Boat Mini | 6.4.6 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Brave (Link Bubble) | 1.9.19 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
CM Browser | 5.20.44 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Dolphin | 11.5.6 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 是 |
Dolphin Zero | 1.3 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Easy | 3.0.2 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Firefox | 46.0.1 | 安全 | 安全 | 安全 | 否 | 是 |
Flynx | 2.0.1 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Flyperlink | 1.36.RC4 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Ghostery | 1.3.3 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Google Chrome | 50.0.2661.89 | 安全 | 安全 | 安全 | 否 | 是 |
Javelin | 4.1.11 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Maxthon | 4.5.9.3000 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Mercury | 3.2.3 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Naked | 1.0 Build 114 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Next | 2.11 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Ninesky | 5.2.0 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Opera | 36.2.2126.102826 | 安全 | 安全 | 安全 | 否 | 是 |
Opera Mini | 16.0.2168.103662 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
Power | 48.0.2016042602 | 安全 | 安全 | 安全 | 否 | 是 |
Puffin | 4.7.4.2567 | 安全 | 安全 | 安全 | 是 | 是 |
Safe Browser | 1.17 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 否 |
UC Browser | 10.9.8.770 | 易受攻击 | 易受攻击 | 易受攻击 | 是 | 是 |
Yandex | 16.2.2.7988 | 安全 | 安全 | 安全 | 否 | 是 |
Yolo | 1.0.1.83 | 安全 | 安全 | 安全 | 否 | 是 |
令人惊讶的是,JellyBean 确实包含最新的 TLSv1.2 加密协议,但默认情况下处于禁用状态。开发人员必须遵循 启用它的程序,以使用此功能保护应用程序的安全。上面提到的一些浏览器已经这样做了,但许多浏览器要么出于无知,要么出于懒惰而没有这样做。有 广泛的详细密码控制选项 可以使用,以使标准 WebKit 通过更多的 Qualys SSL Labs 测试(通过禁用 SSLv3、RC4、导出密码等),但上面列出的所有经过测试的“重新命名的 WebKit”浏览器都没有这样做(可能是因为没有最佳实践详细说明这些程序)。
从 Android 2.3 Gingerbread 开始,谷歌做出了一个令人惊讶的决定,更改了首选密码顺序,从 Android 2.2 Froyo 的 AES256-SHA1 切换到 RC4-MD5。尽管这似乎是为了镜像 Java 标准而做的,但其影响被描述为“可怕的无知、安全无能的迹象,或者是受 NSA 影响的操纵的巧妙伪装”。此缺陷在最初的 Android JellyBean 4.1 版本中仍然存在,尽管它似乎已在 4.3 版本中得到纠正。
继续谈到第三方,CM Browser 应用程序专门宣传它是“安全的:恶意和欺诈保护”,并带有“#1 防病毒引擎……可以保护您免受恶意威胁”。尽管有这些说法,但它对 WebKit 系统的使用使其暴露于旧平台的所有问题。Safe Browser 宣传反间谍软件/病毒,但 SSL 测试结果肯定会否定恶意软件主机列表带来的任何可疑好处。Ghostery 浏览器似乎可以作为 Firefox 的插件使用——以此方式使用它以获得更好的加密支持。
Opera Mini 值得特别提及。在默认配置中,Qualys SSL 扫描器检测到“Presto”渲染引擎,而不是 WebKit,并且它通过了所有安全测试。但是,如果将“数据节省”设置从“极致”切换为“高”,则会检测到 WebKit(而不是 Presto),并且所有测试都失败。似乎当 Presto 处于活动状态时,Opera Mini 的所有浏览器流量都通过 Opera 的服务器进行预渲染和压缩。这是具有欺骗性的,因此此处报告了 Opera Mini 的不及格等级。
所有测试的浏览器都是免费的,但有些浏览器具有必须购买的“无广告/专业版”。请务必通过 Qualys SSL 扫描器进行测试,然后再为任何 Android 浏览器付费,以避免购买失败的产品。
这个问题并未随着浏览器而结束。许多应用程序会将网页渲染为其功能的一小部分,而这些渲染的页面也是不安全的。例如,Tinfoil for Facebook 应用程序具有“在应用程序内打开链接”的选项。这些链接使用系统 WebKit 打开。银行、证券和金融应用程序也很可能这样做。如果您运行处理敏感数据的 Android 应用程序,请询问开发人员他们是否使用 WebKit/WebView。如果是这样,请不要在 Android 4.4 或更低版本上使用它。
安全港湾在通过所有标准测试的上述网络浏览器中,Google Chrome 可能具有最大的安装基础,因为它在销售时捆绑在许多 Android 设备上。许多人会倾向于将其用作安全浏览器。由于多种原因,这可能是错误的选择
-
尽管 Chrome 允许在其他操作系统中将恶意软件阻止作为扩展程序,但此功能已从 Android 版本中删除。谷歌不仅停止了在 Chrome 中拒绝此单一功能,而且更进一步,从 Play 商店中删除了第三方恶意软件/广告拦截应用程序,进一步危及了 Android 社区。此举清楚地表明,对于 Android 架构师来说,广告遥测比安全更重要。
-
Google Chrome 是(部分)闭源的,用户不知道它在安装和使用时可能会收集什么信息,尤其是在谷歌可能感到理所当然的 Android 平台上。
-
除了 Chrome 之外,还可以在 Android 上加载开源 Chromium 浏览器(谷歌在分发之前向其中添加了闭源组件)。F-Droid 上的 getChromium 应用程序 可以安装此先行浏览器。尽管如此,Chromium 仍然缺少恶意软件过滤器。
很明显,Android 上最安全的浏览器应该是开源的,包括恶意软件阻止功能,接收定期更新,并且不以任何方式基于 WebKit,以确保它不会秘密地利用易受攻击的 Android 组件。满足这些条件的显而易见的浏览器是 Firefox。这并不是暗示 Firefox 是一个完美的浏览器。它以 缺乏沙箱 而闻名,这对它的声誉没有帮助。但是,它比 Android 上的大多数同类产品都要好得多。它还拥有一个大型扩展库,其中包括多个恶意软件/广告拦截选项,谷歌已确认 永远不会在 Android 版 Chrome 上推出,这可能是最好的,因为犯罪分子一直在招揽 Chrome 扩展应用程序作者 滥用 Chrome 用户。
为了解决其他对安全使用构成危险的 Android 组件,请考虑以下事项
-
/system/lib/libstagefright.so — 此库已在通过网页和 MMS 发送的媒体传输的攻击中受到损害。有些人认为 Firefox 不容易受到 StageFright 漏洞利用的影响。
-
/system/lib/libc.so — C 编程语言的核心标准库主要取自 OpenBSD,然后被忽视多年。维护人员最近的更新工作揭示了代码已沦落到的 可悲状态:“我看到了当我们分歧时情况有多糟糕(以及 Android 中有多少错误未修复,尽管这些错误已在上游修复多年)。”
-
Linux 内核本身——更多的是政策而非安全性的展示,谷歌对 Android 内核的源代码贡献被删除,内核维护人员宣布了原因:“简而言之,没有人关心代码,所以它被删除了”。对于一个确定的内核安全漏洞,对于许多用户来说,它永远不会被修补,Pinkie Pie 的 Towelroot 是最著名的例子。此漏洞允许任何应用程序在某些 KitKat 设备和许多早期版本上获得 root 权限。
您不希望将您的银行帐户托付给一个没有人关心数百个错误被忽略的操作系统,无论热情、炒作或吸引力如何。假设您必须使用您的 Android 设备来处理此类敏感信息,那么最好在安全浏览器中使用移动 HTML 网站,而不是本地应用程序。如果情况迫使您使用应用程序,则首选认识到 Android 库是安全雷区的应用程序开发人员,因此避免使用可能危及您数据的操作系统功能。
结论现代企业 Linux 的用户已经习惯了平台上的五年支持周期,平台具有定期的安全更新,这些更新依赖于细粒度的软件包数据库,从而可以轻松地撤消单个补丁。所有这些都可以从多个供应商处免费获得,尽管可以通过多种途径获得付费支持。
对于这些人来说,Android 版本非常类似于不受支持的开发快照。在 Android 更新罕见到达的情况下,它们以巨大的 .ZIP 文件形式出现,这些文件以不可逆的方式覆盖 (/system)/bin。更新通常会对启动固件应用新的锁,将用户挡在他们购买和拥有的硬件之外。
如果出现一个新的企业 Linux 发行版表现出这些行为,那么没有人会使用它。如果现有的发行版实施这些策略,那么用户社区的流失可能不会像将供应商拖入破产境地的诉讼风暴那样快。
在嵌入式、移动、工作站和服务器平台上需要一致的安全策略和更新的一天将会到来。为了计算机科学和使用它们的人们的利益,让我们希望那一天早日到来。