关于紫红色安全的几个想法

2021-06-13 08:09:01

我想说几句关于我当前的冒险。我在成立上加入了紫红色项目,并致力于建设和运输全新开源操作系统的艰巨任务。

正如我的同事克里斯注意到,指向运行基于Linux的OS VS紫红色的设备的这种比较,使紫红色看不见并不容易壮举。

当然,在引擎盖下,很多不同。我们构建了一个全新的消息传递内核,新的连接堆栈,组件模型,文件系统,您将其命名为。是的,有一些安全的东西我兴奋不已。

我在这个博客上写了一些关于沙箱技术的帖子,我们在当时的铬/ Chromeos建造了一些人。一段时间后,情况对Linux来说最有挑战性。我们必须为Sandbox Chrome建立一个特殊的Setuid二进制文件,并且基本上创建了Seccomp-BPF,以改善Chromeos上的沙箱状态,以及Linux通常进一步。

有很多工作,我们进入了镀铬渲染器沙箱的一点,即在其余系统方面非常紧密。大多数剩余攻击表面都在IPC接口中,其余可用的系统接口是必不可少的,因为它可以在Linux上实现。

特别是一个艰难的问题是确保现有的代码,而不是用沙箱写的,"只是"在一个非常紧密的沙箱下工作(i' m谈论zero文件系统访问 - chroot-ed到空,已删除的目录,不同的命名空间,一个syscalls的小子集等)。一个人必须允许"挂钩"进入我们将拒绝的一些系统调用,以便我们可以将它们动态重写为IPC(这就是为什么Seccomp的SIGSYS机制建立的原因)。很难,我敢说,非常凌乱。

在紫红色,我们已经解决了许多问题。沙箱是微不足道的。实际上,没有能力的新进程可能会非常少。我们的IPC系统,是一种快乐。当辩论设计时,我经常微笑,因为无论是进程还是外,还可以对人们感到一个小的实施细节。

我们最终会写一些关于这个的好文件。我相信我们有意义地扩展了Chromeos'已验证的启动设计。

JIST是我们在名为Blobfs的内容寻址文件系统上存储不可改变的代码和数据。通过指定其哈希(真实,Merkle树的根,用于快速随机访问)来访问您想要的内容。然后我们在顶部有一个抽象层,哪些组件可以用来按名称访问文件,并且在引擎盖下可以验证这些哈希值的签名。文件系统当然是在User-Land中,可以很好地层,它易于为任何组件创建合适的环境。

一个关键元素是我们已经能够创建可执行的页面实际权限,而不会扰乱Blobfs支持,签名,动态库的加载。对于任何不需要JIT的过程,它' LL强制攻击者以rop / jop他们的方式进入他们的下一阶段。

对于系统级的人,RURT是过去几十年中最激动人心的安全发展之一。它典雅地解决了聪明人所说的问题无法解决。紫红色有很多代码,我们确保了大部分(数百万的LOC)都锈了。

我们的内核锆石不是在锈症中。无论如何。但它处于一个很好的,精益的C ++子集,我认为对C的巨大改进。

科斯塔斯写了一个令人心胸的内存分配器,Scudo,这是他对富含福克西亚的贡献之一(也是现在到Android!)

我们借此机会拥有适当的PRNG接口。它由D.J支持'伯尔尼斯坦' S优秀的Salsa20,从硬件(和深度安全的安全性);由于上下文保存/还原,硬件备份AES-CTR太慢。

当然很多模糊和消毒剂。 特别是,我们调整了Dmitry' s syzkaller在锆石上工作。 还有更多,我可能会在某个时候到达。 还有很多工作要做。 我很乐观,我们创造了一个明智的安全基础来迭代。 时间会告诉。 我们错过了什么? 福克斯是由谷歌VRP覆盖的,所以你可以通过告诉我们来支付!