安全模型
安全架构是基于把经 Debian 和 The Update Framework 证明的模型集成到 Android 系统已经提供的模型中去。 F-Droid 的运行方式很大程度上受到了 Debian、Fedora、Ubuntu 等知名 GNU/Linux 发行版运作方式的事实安全模型的启发。 我们非常强调在“阳光下运作”并使所有内容都公开可用。 我们发布二进制文件时会包括源代码压缩包和构建日志。 这些内容将尽可能长时间存档,以供回溯审查。 所有这一切被许多不同的团体镜像在互联网上的许多地方。
- 存储库的定义首先是唯一的签名密钥
- 默认 HTTPS 连接
- 服务器仅通过 HTTPS 工作,HTTP 是重定向
- Android 强制要求 所有应用都对 APK 文件的全部内容具有有效签名
- Android 验证更新 基于已安装应用的签名
- 文件完整性 由 签名的元数据 保护
- 从 index-v2起,存储库中的文件基于 SHA-256 进行验证,包括图标、屏幕截图等。
- index-v2 使用任何受 apksigner以及 android-23和更新规格支持的算法 ,并依赖于 OpenJDK 和 Google 对当前有效签名算法的维护。 当 index-v2 推出时,所使用的签名算法是
SHA256withRSA
,摘要算法是SHA-256
。 _index-v1_由SHA1withRSA
签署。 在撰写本文时,SHA1 仍然被认为可以抵抗 second pre-image attacks, 这一点对确保索引 JAR 文件的安全很重要。 - 产品签名使用 Debian 的可重复构建的 apksigner。
- 签署的元数据包括 应用 和其 签署密钥 的散列值
- 在单独的机器上生成的签名元数据 (这对 f-droid.org 和 guardianproject.info 来说是完全离线的)
- 用于验证 F-Droid 客户端应用中的元数据签名的公钥
- 签署的元数据包括 时间戳 和 有效期
- 通过设置轻松支持 Tor
- 客户端 HTTP ETag 缓存检查,因此 ETag 不能被滥用来追踪用户
- 包括在签名元数据中的官方镜像列表,然后客户端 选择镜像 根据可用性和新鲜度,基于本地标准,如 Tor 是否在使用中
虽然当前设置已经是一个可靠的平台,但仍有许多改进值得实施:
- 更好地处理索引到期,又名“最大年龄”
- 客户端应用内置的固定 TLS 证书
为了防御持有应用存储库签名密钥的攻击者,必须有一个值得信赖的信息源进行比较。可重复构建意味着具有相同源代码的任何人都将生成完全相同的二进制文件。与审计系统配合使用时,很容易捕获插入构建过程中而不是源代码的恶意软件,如 XCodeGhost。可重复构建还可以让发布二进制文件的所有构建具有完全相同的哈希值。然后,任何应用存储库都可以只从源代码构建应用,并拥有来自构建相同应用的任何其他应用存储库的验证数据源。从源代码构建软件已经变得足够便宜,以至于 gitlab.com 和 Travis CI 等许多公司都在云中提供免费的自动化构建服务。由于整个 F-Droid 工具集是自由软件并且易于设置,因此设置自动审计的障碍非常低。世界上不同地区具有不同风险状况的人们可以运行验证服务器以提供更可靠的信息。
应用签名
- 当构建完全可重复时,可以使用开发者自己的签名分发应用。
- 默认情况下,“发布”服务器将为每个单独应用生成和管理签名密钥。 要在不同应用间分享签名密钥,必须使用 config.yml 中的 keyaliases机制进行专门配置。
- 所有应用均由 专用于该应用的密钥 进行签名,除非上游 专门 请求多个应用由同一个密钥签名,且须经 fdroiddata 维护者批准。
- 对 f-droid.org,所有的应用签名均在专用的、气隙隔离的离线机器上完成。
- 任何时候,一旦实现了可重复构建,就可以将开发者自己的签名添加到开发者发布于 f-droid.org 的应用。另外,由 f-droid.org 密钥签署的版本将继续分发。
- 在官方 F-Droid 客户端应用中,新安装默认使用开发者自己的签名。
- 我们鼓励应用开发人员和维护人员考虑在 f-droid.org 上进行发布时是否要为应用使用特殊的应用程序 ID,以避免与其他版本发生冲突。 一种常见的模式是通过 Gradle Build Flavor 将
.fdroid
添加到应用程序 ID 的末尾。
初始安装
大多数 F-Droid 的用户从 f-droid.org 下载 APK 并安装它。 这是一个内置应用商店没有的潜在攻击载体。 因此,我们采取了许多额外的安全预防措施,以使其尽可能地难以利用这一载体。
- 包括在 HSTS 预加载列表 中,所以主流的浏览器对到 f-droid.org 的所有连接将只使用 HTTPS
- 一个 增强的 TLS/HTTPS配置
- 一个 增强 的 HTTP 内容安全策略
- 初始安装 下载链接 上的 PGP签名
- 自动常规和随机审计,F-Droid.apk没有被篡改过
- F-Droid Limited 控制着许多潜在的网络钓鱼域名,例如 fdroid.org、 f-droid.com, 以及 f-dro1d.org。 (欢迎捐赠更多!)
- 网站是 静态生成,以大大减少攻击面
- 当浏览器中的 JavaScript 被禁用时,网站是完全正常的,消除了所有 XSS 攻击的可能性
F-Droid 作为内置应用商店
当 F-Droid 内置到 Android 中时,无论是作为 ROM 的一部分,还是通过刷新 OTA 更新,它不再需要启用“未知来源”功能。这是首选的操作方法,因此我们的目标是让用户尽可能轻松地以这种方式运行 F-Droid。刷入 F-Droid 的 OTA 包 特权扩展 具有相同或更低的风险 profile 安装标准的“gapps”包,许多人将其置入到自定义 ROM 上。因此,这种交付方式不会增加这些用户的风险状况。
在此基础上,F-Droid 使其尽可能容易地 构建到 ROM 项目中。 它已经包含在 CalyxOS、Replicant、LineageOS for microG 和 Fairphone Open。
防范恶意贡献者产生的数据
应用描述是由各种各样的人提交的,它们也可以从应用的源代码库中获取。 这些数据最终通过 f-droid.org 交付给 Android 客户端或用户的浏览器。
- Android 客户端从不运行 CSS、JavaScript 或危险的 HTML 标签,因为它通过
android.text.Html.fromHtml()
显示 HTML,并禁用了图像加载 - f-droid.org 网站通过 严格的 HTTP 内容安全政策 来防止恶意内容和 CSS/HTML/JavaScript 注入。
- Repomaker 通过 Mozilla 的 bleach 过滤文本, 并且有一个良好的 HTTP 内容安全策略。
HTTPS/TLS 配置
F-Droid 长久以来支持所有仍在运行的 Android 设备,这意味着尽可能长时间地维护兼容性。 为此,只要运行当前 Android 版本的用户不处于风险之下,我们就仍然支持旧的 TLS 配置。 这是我们的网站仍开启 TLSv1.0 和 TLSv1.1 的原因。 我们相信这不会增加更新软件的用户的风险。一台运行 Android 1.6 系统的设备应该可以安装旧版本的 F-Droid,并有一个基本够用的应用商店。
某些安全扫描器会标记此网站,因其仍支持 TLSv1.1 和 TLSv1.0。 但更重要的是,此网站同样支持 TLSv1.3 和 TLSv1.2,这两者均提供降级保护。 此外,最新的浏览器和 F-Droid 客户端完全禁用 TLSv1.1 和 TLSv1.0,使得攻击者不可能迫使它们使用有漏洞的 TLS 版本。 因此,这些为数不多使用旧的 TLS 版本的连接实际上需要旧的客户端和浏览器版本才能运作。 还在使用 TLS 1.0 或 1.1 的设备上本就存在许多知名的安全漏洞,旧 TLS 版本相比之下也就算不上什么了。
如果你想测试你的浏览器是否仍支持 TLS 1.0 或 1.1,单击下方链接看看是否显示错误信息。
安全审计
2013年,当时的研究生丹尼尔·麦卡尼(Daniel McCarney)(又名_pd0x_)完成了一个快速、非正式的 安全审计(archived)。
由开放技术基金资助的第二个”Bazaar 2”项目包括来自 Radically Open Security的 外部公共审计
The NLnet 资助的项目”Tracking the Trackers” 和 “The Search for Ethical Apps”提供了由 Radically Open Security 执行的 审计
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论