大多数人1 并没有意识到安全有多么有趣,或者安全专业知识会让你在其他人眼中显得多么性感。2 我们 知道它引人入胜、令人着迷且很酷,他们 不知道。因此,当安全人员找到其他人(为了本文的目的,我们暂且称他们为“普通人”),并告诉他们他们做错了什么,以及他们不能发布他们的产品,或者部署他们的应用程序,或者他们必须立即停止接受销售订单,并且可能在接下来的几天内都不能接受,直到问题解决,那么这些普通人并不总是会以我们认为合适的感激之情来回应。
事实上,有时他们会对这些建议表现出负面反应——甚至是相当个人化的负面反应。
问题是这样的:安全人员知道事情应该是什么样子,那就是安全。他们接受了培训,参加了会议,阅读了文章,浏览了厚厚的书籍,3 所有这些来源都非常清楚:一切都必须是安全的。而安全通常意味着“封闭”——特别是如果安全人员没有充分参与设计、实施和运营流程。另一方面,普通人通常只是希望事情能够正常运作。这两种观点之间存在着根本的脱节,除非安全成为任何项目从开始到结束的首要要求,否则我们将无法解决这个问题。4
现在,普通人并不愚蠢。5 他们知道事情不可能总是完美运行;但他们希望事情尽可能地顺利运行。这就是我们需要跨越的鸿沟。7 我之前谈到过 受控降级作为一个概念,这是故事的一部分。我们安全人员应该准备好做的事情之一是解释存在需要缓解的风险。
对于安全人员来说,这些风险应该通过“故障关闭”来缓解。停止风险很容易:你只需停止系统运行,就不会有被滥用的风险。但对很多人来说,还有其他风险:例如,组织实际上可能会完全倒闭,因为某个_____8 安全人员关闭了订购系统。如果他们让我选择权衡停止接受订单的风险与丢失一些公司内部数据的风险,我会选择吗?嗯,是的,我可能会选择。但如果我没有被提供选择,并且风险没有被解释,那么我就别无选择。如果我经营一家企业,我希望听到的就是这种话。
但这不仅仅是这种类型的风险。在项目启动前两周参加项目会议并宣布项目无法部署,“因为针对此 API 的调用未经过身份验证”,这对任何人都没有好处。但是,作为一名开发人员,我与企业所有者有不同的词汇——和不同的担忧。如果安全人员不直接说“你需要在此 API 上使用身份验证,否则你无法继续”,而是问“如果在此 API 上提供的数据不正确,或者由想要破坏系统运行的人提供,会发生什么?” 怎么样? 以我的经验来看,大多数开发人员都对他们运行的系统的正确运行以及它处理的数据感兴趣——投入了精力。提出能够显示缺乏安全性的可能影响的问题,比最初基本上相当于“否”的“讨论”更有可能获得积极的反应。
不要误会我的意思;有时,作为安全人员,我们需要坚定立场,坚持我们的原则。9 但是最终,是系统、组织、业务部门或资源的所有者来做最终决定。我们的工作是用他们能够理解的语言与他们交谈,并确保他们尽可能地了解情况。而不是仅仅说“不”。
1. 我的意思是“那些不幸的可怜人没有阅读这些帖子,不像你,亲爱的聪明的读者。”
5. 虽然我们都遇到过很多愚蠢的普通人,但我敢打赌你也遇到过很多愚蠢的安全人员,所以这算是扯平了。6
9. 比喻意义上:我不赞成将任何武器,包括枪支,带到你的工作场所。
本文最初发表于 Alice, Eve, and Bob – 一个安全博客,并经许可转载。
评论已关闭。