Wind_Mask的博客

;

关于Secret的沉思(6):设备

8 min read


重新审视设备

之前在关于Secret的沉思(2):本地中,我妄言了一些设备的大方向,在此我又想碰瓷一些细节及技术问题(多少是因为最近看到一些技术的博客),但是自知不是专业,所以让我们稍微克制些。

Android

安全模型

在收入二手机实验后,我稍微触及了现代安卓安全模型的一角。如他人文中所言:

默认情况下,Android 具有强大的安全模型,并包含完整的系统 SELinux 策略强大的应用程序沙箱全面验证的启动、现代漏洞缓解措施(如细粒度、前沿的控制流完整性ShadowCallStack )、内存安全语言(Java / Kotlin)等等。

但是这和本系列一直考究的偏向显然是不一样的,甚至不如说,反而是一种麻烦。

在这里,专业人士指出要我们区分安全和隐私的区别,我承认了这一点,但是本系列终究是关于个人可以采用的沉思,而不是那些我们无力解决的问题的考察(比如控制流完整性的利用)。

所以我要考虑的是怎么运用设备提供保护而又不被其困住。

Unlock and Root

现在的情况参见各 Android 手机厂商 Bootloader 解锁 / 内核开源 / 解锁后保修情况

从技术上看这是破环安全模型的一环,也还是如他人文中言:

解锁 Android 中的引导加载程序存在很大的安全风险。它禁用验证启动,这是安全性的基本部分 模型。验证启动可确保基本系统和启动链的完整性,以防止邪恶女佣攻击和恶意软件持续存在。

但是他的建议适用的是Pixel及甚至安全加强的系统+自定义信任根回锁的Pixel, 而不是内置()的安卓。

所以最好的答案当然是照他说的做。

但是如果不能?

这也是为什么前文我说移动设备不太可信的原因,技术上码区其实知道,现代移动设备有着更全面现代的安全模型而不是桌面上的历史遗留(比如Linux就缺乏控制流完整性等,PC的安全启动时常不使用,定期的安全补丁也不熟)。但是但是但是,它们是你的吗?

这是一个所有权问题。

因此,移动设备的答案,可能在于多设备。

我倾向使用未解锁的设备作为一种日常,而可完全控制的设备作为一种实验。后者的使用实际上是高度困难的,这和流行的刷机泛滥相对立。当然某人用kt重写jvav的模块对此或许才算有权控制root的设备,而对于普通用户呢?

因此答案回到了一开始的结论,移动设备的不可信上,甚至回到了IPhone……

操作系统

Linux

这真是个有趣的反转,因为我们会看到(实际上也知道),Linux从不是为了Secret而设计的。因此,对其安全性的理解基于一种了解的缺乏(因为在桌面上的不流行),也就是基于隐瞒的安全,这在密码学上被认为不可靠。至少作为一种桌面操作系统方面,Linux并不会带来特别的安全,你需要评估自己的威胁模型。

当然人们会说,这是不了解不懂导致的,但是我们忘记了更好的是默认安全。Windows现在已经默认使用了Bitlocker全盘加密,Mac不必说,事实上移动设备都实行全面加密,只有桌面设备仍然保持明文,尤其是Linux,如果不手动使用加密,大部分桌面Linux安装我敢说,都是明文的(在这里我考虑到最流行的Ubuntu查询了一下,安装程序应该没有提供加密),,,

安全启动,TPM测量的加密,即使忽略桌面上的启动代码本身的安全问题,这些措施也仍然匮乏并且对用户不友好。

码区们通过像arch之乱或者安全偏执狂的使用方式保持他们能看到的Secret(当然由于不是专业的安全研究,所以不谈Exploit Mitigations之类),但是这不是对用户友善的方案。按理说应该是技术细节由专家处理好并将用户可控制的选择交给用户,而现在并没有做到。

而且事实上:

一个相当安全的 Linux 发行版所需的强化程度远远超出人们的想象。
你需要完全重新设计操作系统的功能并实施完整的系统 MAC 策略、完整的验证启动(不仅针对内核,还针对 整个基础系统)、强大的沙箱架构、强化的内核、现代漏洞缓解措施的广泛使用以及更多。

这是现实的可能吗?想想Android在此之上做的工作吧!


生态系统在原文被认为是一大牵扯,比如:

Linux 上的大多数程序都是用内存不安全语言编写的,例如 C 或 C++,这导致了大多数已发现的安全漏洞。

我知道这是典中典了(由于R开头语言的炒作),但是这是几年前的文章。不过我们也要想到,其他系统上的生态安全是由厂商强制实行的,而Linux上则寄希望于Rewrite……

Windows

对此我们说再多又怎么能比得上巨硬的文档呢?

原始设备制造商 (OEM) 的安全注意事项 | Microsoft Learn

我们至多补充一些对于用户要考察的选择:

比如说各家厂商喜欢在电脑中内嵌他们的控制软体,联想啦华硕啦,但是其中许多不必要的部分可以消除,或者存在替代(当然有些硬件功能独占)。微软的系统现在也一股味,禁用多余的不必要组件是你应该考虑的。