亲爱的KV,
我正在进行一个项目,该项目已被一家咨询公司选中进行外部安全审查。他们要求提供大量信息,但没有真正向我解释流程。我无法判断这是哪种类型的审查——渗透(渗透测试)测试还是其他什么。我不想妄加揣测他们的工作,但在我看来,他们要求的似乎都是错误的东西。我应该指出正确的方向,还是保持沉默,强颜欢笑,忍受这一切?
已审查
亲爱的已审查,
我不得不说,我不赞成保持沉默,或强颜欢笑,或为别人的缘故忍受任何事情,但你可能在发这封信之前就知道这一点了。安全领域的许多从业人员既不像KV希望的那样有条理,也没有那么有原创性。事实上,这不仅仅是在安全领域,但请允许我这一次将评论限制在一个主题上。
总的来说,安全审查主要有两种类型:白盒和黑盒。白盒审查是指攻击者几乎完全访问信息,例如代码、设计文档和其他信息,这些信息将使他们更容易设计和执行成功的攻击。黑盒审查或测试是指攻击者只能像普通用户或消费者一样看到系统。
想象一下你正在攻击一部消费设备,例如手机。在白盒情况下,你拥有设备、代码、设计文档以及开发团队在构建手机时提出的所有其他内容;在黑盒情况下,你只有手机本身。渗透测试的想法目前在安全界很流行(我将其归因于那些喜欢说自己负责“渗透测试”的傻笑的12岁孩子),但坦率地说,这只是对系统进行的黑盒测试。事实上,任何安全测试或审查的目标都是弄清楚攻击者是否可以对系统进行成功的攻击。
确定什么是或不是成功的攻击需要安全测试人员像攻击者一样思考,KV觉得这很容易,因为在内心深处(什么内心?),我是一个可怕的人,我的第一个想法是,“我怎样才能搞砸这玩意?” 安全测试通常非常容易,因为软件的总体质量非常低,而且任何产品中使用的软件模块数量也越来越多。套用温伯格第二定律,“如果建筑师像程序员构建程序那样设计建筑物,那么第一只啄木鸟的到来就会摧毁整个社会。” 安全工作中困难的部分是限制攻击只针对重要的事情,并绕过那些略有线索的程序员,他们能够构建至少可以抵抗最常见的脚本小子攻击的系统。
你的来信似乎暗示你的外部审查员对白盒审查感兴趣,因为他们要求提供大量信息,而不是仅仅接受你的系统的表面价值并试图破坏它。至少在高层面上,对于任何曾经参与过设计审查的人来说,对白盒安全审查的期望不应该令人惊讶,因为这两个过程应该非常相似。审查将以自上而下的方式进行,审查员要求对系统进行总体描述,最好体现在设计文档中(为了上帝的爱,请提供设计文档);或者相同的信息可以通过一系列会议痛苦地提取出来。
在没有设计文档的情况下,在审查会议中提取设计需要更长的时间,但同样,看起来与设计审查类似。首先,房间里必须有很多咖啡。多少咖啡?每人至少一壶,如果你房间里有KV,则每人两壶。咖啡到位后,你需要一块大的白板,至少两米(六英尺)长。我还建议使用刑具,或者至少是一条马鞭,以保持人们的秩序。
然后我们有典型的盘问台词:“高层功能是什么?”;“有多少个不同的程序构成了系统?”;“它们叫什么名字?”;“它们是如何通信的?”;以及对于每个程序,“每个程序的主要模块是什么?” KV曾经问一位软件设计师,在他用命名的框填满了一块四米长的白板后,“支撑所有这些的架构是什么?”,答案是,“这个系统太复杂了,没有架构。” 接下来听到的声音是KV的眼镜在桌子上发出的撞击声和一声沉重的叹息。不用说,那件软件漏洞百出,而且很多都与安全有关。KV不是每天都想在中午从咖啡换成杜松子酒和奎宁水,但总有那么几天。
一个好的审查员会有一个关于每个程序或子系统需要询问的最少问题清单,但不会过于规范。安全审查是一种探索,一种探洞的形式,你在其中挖掘一块软件的肮脏、不受欢迎的角落,并推动柔软的部分,看看它们是否尖叫,或者吐出绿色的脓液,它会燃烧——它会燃烧,而且你无法洗掉该死的东西! 过度规范的清单总是会遗漏重要的问题。相反,问题应该从广泛开始,然后随着感兴趣的问题出现而变得更加集中——相信我,它们总是会出现的。
当发现问题时,应该记录下来,尽管可能不是以易于携带的形式记录,因为你永远不知道还有谁在阅读你的票务系统。你想进入一个系统并去读取错误。如果你公司内部有一两个害群之马(哪个公司没有害群之马?),他们搜索“Security P1”,他们会带着大量零日攻击你系统的素材离开。
一旦系统及其模块被描述清楚,下一步就是查看模块API(应用程序编程接口)。你可以通过查看系统的API了解很多关于系统及其安全性的信息,尽管你将学到的一些东西将永远无法视而不见。这可能会让人伤痕累累,但这是必须做的。我觉得大多数这些步骤都应该搭配葡萄酒(或更烈的东西)。对于加利福尼亚的读者,我推荐一种不错的籼稻来进行这种工作。
当然,必须查看API,因为它们显示了正在传递哪些数据以及如何处理这些数据。有一些安全扫描工具可以用于这类工作,可以指导你进行代码审查,但如果你在安全方面有任何能力或直觉,最好自己抽查API。
最后,我们来谈谈代码审查。任何想从这里开始的审查员都应该立即被炮轰出去。代码实际上是最后要审查的东西——原因有很多,其中最重要的原因是,除非安全审查团队甚至比开发团队还要大,否则他们永远没有时间完成对代码进行足够深入的审查。
代码审查必须是有针对性的,并且必须深入研究真正重要的事情。正是之前的所有步骤告诉了审查员什么才是真正重要的,因此,他们应该要求查看系统中可能10%(并希望更少)的代码。对代码的唯一广泛查看应该由先前提到的代码扫描工具自动执行,其中包括静态分析。静态分析工具应该能够识别其他人工审查遗漏的热点,然后人类必须回到代码的黑暗角落,再次尝试避免被绿色脓液喷到。
审查完成后,你应该期待一些输出,包括摘要和详细报告、描述问题和缓解措施的错误跟踪单(所有这些都受到保护,免受窥探),以及希望QA团队可以使用的一组测试,以验证已识别的安全问题已修复,并且不会在代码的后续版本中再次出现。
这是一个漫长的过程,充满了破碎的心和咖啡杯,但如果审查员有条理且具有原创性思维,就可以完成。
KV
如何提高安全性?
仅仅每年做一次牙线清洁是不够的。
Kode Vicious
https://queue.org.cn/detail.cfm?id=2019582
安全问题解决了吗?
我们许多安全问题的解决方案已经存在,那么为什么我们仍然如此脆弱?
John Viega
https://queue.org.cn/detail.cfm?id=1071728
腌制补丁
关于补丁存储库以及安全专业人员和内部开发人员之间的紧张关系
Kode Vicious
https://queue.org.cn/detail.cfm?id=2856150
Kode Vicious,在凡人世界中被称为 George V. Neville-Neil,以网络和操作系统代码为乐和盈利。他还教授各种与编程相关的课程。他的兴趣领域是代码探险、操作系统和重写你的糟糕代码(好吧,也许不是最后一个)。他获得了马萨诸塞州波士顿东北大学计算机科学学士学位,并且是、Usenix协会和IEEE的成员。George 是 Marshall Kirk McKusick 和 Robert N. M. Watson 合着的FreeBSD 操作系统设计与实现的合著者。他是一位狂热的自行车爱好者和旅行家,目前居住在纽约市。
版权 © 2020 由所有者/作者持有。出版权已授权给 。
最初发表于 Queue 第 18 卷,第 2 期—
在 数字图书馆 中评论本文
郭锦楠, Peter Pietzuch, Andrew Paverd, Kapil Vaswani - 使用保密联邦学习的可信人工智能
安全性、隐私性、问责制、透明度和公平性原则是现代人工智能法规的基石。经典的 FL 在设计时非常强调安全性和隐私性,但以透明度和问责制为代价。CFL 通过将 FL 与 TEE 和承诺相结合,弥补了这一差距。此外,CFL 还带来了其他理想的安全属性,例如基于代码的访问控制、模型机密性和推理期间的模型保护。保密计算(如保密容器和保密 GPU)的最新进展意味着现有的 FL 框架可以无缝扩展以支持 CFL,且开销较低。
Raluca Ada Popa - 保密计算还是密码计算?
通过 MPC/同态加密与硬件 enclave 进行安全计算,在部署、安全性和性能方面存在权衡。关于性能,这在很大程度上取决于你所考虑的工作负载。对于简单的工作负载(如简单的求和、低阶多项式或简单的机器学习任务),这两种方法都可以在实践中使用,但对于复杂的计算(如复杂的 SQL 分析或训练大型机器学习模型),目前只有硬件 enclave 方法在许多实际部署场景中足够实用。
Matthew A. Johnson, Stavros Volos, Ken Gordon, Sean T. Allen, Christoph M. Wintersteiger, Sylvan Clebsch, John Starks, Manuel Costa - 保密容器组
此处展示的实验表明,Parma(在 Azure 容器实例上驱动保密容器的架构)增加的额外性能开销不到底层 TEE 增加的额外性能开销的百分之一。重要的是,Parma 确保了容器组所有可达状态的安全不变性,并以证明报告为根基。这允许外部第三方与容器安全地通信,从而实现各种需要保密访问安全数据的容器化工作流程。公司可以在云中运行最机密的工作流程,而无需在其安全要求上妥协,从而获得优势。
Charles Garcia-Tobin, Mark Knight - 利用 Arm CCA 提升安全性
保密计算具有通过将监控系统移出 TCB 来提高通用计算平台安全性的巨大潜力,从而减小 TCB 的大小、攻击面以及安全架构师必须考虑的攻击向量。保密计算需要在平台硬件和软件方面进行创新,但这些创新有可能增强对计算的信任,尤其是在由第三方拥有或控制的设备上。保密计算的早期消费者将需要自行决定他们选择信任的平台。