不要声称有安全边界 证明它

2026年9月3日2 次浏览来源:Dev.to阅读原文

一个系统必须运行一块你无法控制的代码——一个插件,一个依赖,某种生成的东西——而你想要保证代码不能触摸文件系统或产物过程.

不是说它"不应该": 它不能,机械的。

这是能力限制, 这是运行时间安全的核心问题之一。

设计并演示是两种不同的事物,而混淆是昂贵的.

设计是索赔 你可以写一个无可挑剔的文档:"进入和进入产卵过程被这样控制,用这些机制,在这个威胁模型下".

这是真实和必要的工作.

却作是说.

而安全分界线的失败模式是,它看起来像是坚守到不——沉寂地,在测试中看不见,只有在有人越过它时才能看见——.

在安全方面,一个未经核实的主张完全具有一个美丽,错误的建筑形状.

设计可以假设一个模块装填器悬钩起火时实际上没有,所有的推理都挂出正确而无价值.

机制存在,在节点中有几个,来命名一个混凝土运行时间,至少有三层,它们不能互换: 原生许可模式(.),它在整个进程一级切断了进入和产卵过程的机会。

SES / 硬化JavaScript(Compartments, ),它限制了每个模块在进程内可以导入的内容.

模块装填器截取,它控制当代码要求某事时解决什么.

在其中选择好的是设计.

但是选择好并不能证明选择 与你将要运行的真正依赖性树相抗衡。

证明而不是索赔 除签署设计外,另一种办法是提供禁闭装置:不可信的密码,试图达到危险的能力——打开一个文件,产出一个过程——以对抗实时及其真正的依赖树,以及显示每次尝试的日志被屏蔽.

或者,如果有东西逃出,确切的位置。

区别不是化妆品 "我认为这是被限制的","有证据表明试图从被拒绝的插件返回许可读取一个系统文件",是具有非常不同重量的说法.

第二,我对安全的其他一切运用的纪律:跨越程序边界,测量出什么来,而不是你认为出什么来。

诚实的部分 有一种诱惑,就是从一个你没有挣到的权力机构那里签下边界——因为设计看起来不错,因为机制是存在的。

诚实的纪律正好相反:你今天可以回来的,你回来的;取决于运行时间细节的,你没有掌握,你没有从记忆中断言:你通过经验验证,而尚不能证明的,被标记为接合来共同审查,而不是隐藏.

已证明的边界完全覆盖了所声称的空白。

对于必须相信禁闭的人来说, 攻击自己边界和保存证据的绳子比设计它的人的言语更有价值.

分享