acm-header
登录

ACM通信

Kode恶性

心碎和咖啡杯


咖啡杯上的碎心拿铁图案

图片来源:Shutterstock, Andrij Borys Associates

回到顶部

亲爱的KV,

我正在处理一个项目,该项目已被一家咨询公司选中进行外部安全审查。他们问了很多信息,但没有真正向我解释这个过程。我说不出这是一种什么样的复习——钢笔(渗透)测试还是别的什么。我不想质疑他们的工作,但在我看来,他们的要求完全是错误的。我是应该给他们指出正确的方向呢,还是应该低着头,微笑着,忍受下去?

综述了

亲爱的,

我不得不说,我不喜欢低着头,不喜欢笑,不喜欢代表别人承担任何事情,但你可能在发送这张便条之前就知道这一点。许多安全领域的从业者既不像KV所希望的那样有组织,也不像KV所希望的那样有独创性。事实上,这不仅仅是在安全领域,让我把我的评论限制在一个单一的主题上。

总的来说,有两种类型的安全审查:白盒和黑盒。在白盒审查中,攻击者几乎可以完全访问代码、设计文档和其他信息,这些信息将使他们更容易设计和执行成功的攻击。在黑箱审查或测试中,攻击者只能以与普通用户或消费者相同的方式查看系统。

想象一下,你正在攻击一个消费设备,比如手机。在白盒情况下,你拥有设备、代码、设计文件和开发团队在制作手机时想到的所有东西;在黑盒情况下,你只有手机本身。笔试的想法目前在安全领域得到了认可,但坦率地说,这只是一个系统的黑箱测试。事实上,任何安全测试或检查的目标都是确定攻击者是否能够成功地对系统进行攻击。

确定什么是或不是一次成功的攻击需要安全测试人员像攻击者一样思考,KV认为这是一个很容易的技巧,因为在内心(什么心?)我是一个很糟糕的人,我的第一个想法是:“我怎么能打破它?”由于软件的整体质量极低,且任何产品中使用的软件模块数量越来越多,因此安全测试通常非常容易。用温伯格第二定律的话说,“如果建筑师像程序员设计程序那样设计建筑,那么出现的第一只啄木鸟就会摧毁整个社会。”安全工作中困难的部分是将攻击限制在重要的攻击范围内,并通过那些只有少量线索的开发人员,他们能够构建至少抵抗最常见的脚本小攻击的系统。

你的信似乎暗示你的外部审查员对白盒审查感兴趣,因为他们要求大量的信息,而不是只看你的系统的表面价值并试图违反它。从白盒安全审查中期望得到的东西,至少在高级别上,对于任何曾经参与过设计审查的人来说都不应该感到惊讶,因为这两个过程应该相当相似。审查将以自上而下的方式进行,即审查人员要求系统的总体描述,并希望将其写入设计文件中(请拥有设计文件);或者,同样的信息也可以通过一系列痛苦的会议提取出来。

在没有设计文档的情况下,在评审会议中提取设计需要花费更长的时间,但这看起来与设计评审相似。首先,房间里一定有很多咖啡。咖啡多少钱?每人至少一个罐子,如果房间里有千伏病毒,至少两个。准备好咖啡后,你需要一块至少2米(6英尺)长的大白板。

然后我们会遇到一个典型的问题:“高级功能是什么?”“这个系统由多少不同的程序组成?”“它们叫什么名字?”“他们如何沟通?”对于每个项目,“这个项目的主要模块是什么?”KV曾经问一个软件设计师,当他在一块四米高的白板上填满了命名框后,“是什么架构将所有这些连接在一起?”得到的回答是,“这个系统太复杂了,没有架构。”下一个声音是KV的玻璃杯在桌子上的哗啦哗啦声和一声沉重的叹息。不用说,这款软件漏洞百出,其中许多与安全有关。


任何安全测试或检查的目标都是确定攻击者是否能够成功地对系统进行攻击。


一个好的审稿人会有一个关于每个程序或子系统的问题清单,但不会太过规式化。安全审查是一种探索,一种洞穴探索的形式,在此过程中,您深入到软件的肮脏的、不受欢迎的角落,并推动软件的软部分。过于规定性的清单总是忽略了重要的问题。相反,问题应该从宽泛开始,然后随着感兴趣的问题的出现而变得更加集中——相信我,它们总是这样的。

当发现问题时,应该将它们记录下来,尽管可能不是一种容易携带的形式,因为您永远不知道还有谁在阅读您的票务系统。你想进入一个系统,去读bug。如果你在公司内部有一两个坏苹果(哪家公司没有坏苹果呢?),他们在“Security P1”上进行搜索,他们就会获得大量对你的系统进行零日攻击的素材。

描述了系统及其模块之后,下一步是查看模块应用程序编程接口(api)。通过查看它的api,您可以了解到很多关于系统及其安全性的信息,尽管您将学到的一些内容是不可能被看到的。这可能会很伤人,但必须这么做。

当然,必须查看api,因为它们显示了传递的数据以及如何处理这些数据。有针对这类工作的安全扫描工具,它们可以用来指导您在哪里执行代码检查,但如果您在安全性方面有某种能力或直觉,通常最好是自己对api进行抽检。

最后,我们来进行代码评审。任何想从这里开始的评论者都应该立即从大炮中被枪毙。代码实际上是最后要检查的东西——原因有很多,其中一个很重要的原因是,除非安全检查团队比开发团队更大,否则他们永远没有时间完成足够深度的代码检查。

代码评审必须有针对性,必须深入研究真正重要的东西。正是前面所有的步骤告诉了审核人员什么才是真正重要的,因此,他们应该要求查看系统中10%(希望更少)的代码。代码的唯一概览应该由前面提到的代码扫描工具自动执行,其中包括静态分析。静态分析工具应该能够识别其他人工评审遗漏的热点。

评审完成后,您应该期望得到一些输出,包括摘要和详细的报告,描述问题和缓解措施的bug跟踪票(所有这些都是安全的,不会被窥探),以及QA团队可以使用的一组测试,以验证确定的安全问题已被修复,并且不会在代码的后续版本中重复出现。

这是一个漫长的过程,充满了破碎的心和咖啡杯,但如果评审者有条理,有独到的想法,这是可以完成的。

KV

ACM队列的q戳相关文章
queue.acm.org

如何提高安全性?
Kode恶性
https://queue.acm.org/detail.cfm?id=2019582

安全问题解决了吗?
约翰Viega
https://queue.acm.org/detail.cfm?id=1071728

腌制的补丁
Kode恶性
https://queue.acm.org/detail.cfm?id=2856150

回到顶部

作者

乔治诉Neville-Neilkv@acm.org)是Neville-Neil Consulting的东主及ACM队列编辑委员会。他从事网络和操作系统代码方面的工作,教授各种与编程相关的课程,并鼓励您的评论、俏皮话和与他相关的代码片段通信列。


版权归作者所有。
向所有者/作者请求(重新)发布权限

数字图书馆是由计算机协会出版的。版权所有©2020 ACM, Inc.


没有发现记录

登录为完全访问
»忘记密码? »创建ACM Web帐号
文章内容:
Baidu
map