通常,当你有某种问题或要求时,会涉及到一个票务系统。所以你有一个人,他或她或他们提出一个请求,它会告诉你你需要修复或添加一些东西,它会以正常的方式处理。然后是问题。这很简单。我们已经见过很多次了,你知道,每次我们实际上构建这些功能和修复等等,我们都在使用软件开发生命周期,对吗?
计划、分析、设计、实施、测试、集成、维护模式。但缺少的是安全墙。最后一步,没有更好的说法了,软件开发生命周期实际上不在图中。你把所有东西都准备好了。
它处于某种最终完成的状态,或者被认为是最终完成的状态,然后它被固定在安全上,也许它没有这样做,也许有一些已知的漏洞没有得到处理,诸如此类。当这种情况发生时,保安会回来说,嗨,这是你需要修复的项目。这可能会有点争议,对吧?因为当你有这样的事情发生时一边的心态是这件事已经完成了而另一边的心态是,还没有,我甚至没有看到它。由此产生的其他一些后果是人们将一个或另一个群体视为障碍或不必要的过程。
我们感觉没有被倾听,没有被恰当地沟通。或者你可能会遇到这样的情况,也许没有足够的或没有正确的信息,对吧?当您发送请求时,您不一定知道应该包含什么,您可能包含太多或太少的错误或不匹配的信息,等等。这很令人沮丧。那么我们如何解决这些问题呢?
一种方法是实现DevSecOps。什么是DevSecOps?DevSecOps代表开发、安全和运维,它寻求在软件开发生命周期中集成安全,并简化开发、安全和运维这三个组的工作流程。
需要明确的是,DevSecOps不是什么,它不是用Dev和/ Ops取代安全,它不是期望Dev和/ Ops成为安全专家,也不是期望安全成为开发或运维。好的。从本质上讲,这意味着DevSecOps试图为安全而做的事情,就像DevOps为开发和运营而做的事情一样。所以,这意味着什么呢,如果我们想想DevOps之前的生活,或者DevOps之前的转变,你看到的是Dev和Ops之间发生的同样的交流模式,事情被卡住了,沟通效率不高,大家都很沮丧,意见不统一。所以当我们试图把安全包装到这个过程中,这样它们就包括在整个过程中,你试图解决这些问题,就像我们以前做的一样。但与之前的做法不同的是,我们到底要怎么做呢?这是安全的软件开发生命周期,然后它们向左移动。首先,我们需要讨论安全软件域生命周期,这是关于打破障碍,你想要向前迈进,并将安全性围绕DevOps生命周期,非常简单,它可以是这样的。
不需要任何细节,只需要知道每一步都有安全步骤。或者你可以有一些像这样重一点的东西,它开始讨论在每个阶段可以执行什么类型的安全活动,在这里您可以看到活动的不同名称。例如,你有安全的架构和设计。所以回到功能和修复,甚至整个服务,应用程序等等。
如果你在设计阶段引入了安全性,你要和他们,以及任何其他涉及到的架构师进行对话,你可以说,哦,好吧,我想用这个来构建它,我想依赖这些东西。然后他们会说,哦,你知道这个有一个漏洞你可以用这个来解决吗?他们可以成为谈话的一部分,这样你以后就不会发现了。
你选择了一些可能有更多漏洞的东西,或者其他你没有意识到的东西。类似地,您可以进行威胁建模,这是另一个设计阶段的活动。这基本上就是,当你试着在心理上建模,然后从字面上建模,你有什么类型的攻击风险,你可以做什么安全问题的解决方法就是,在这个阶段让所有需要的专家都参与进来,对吧?根据你设计的不同,会有一些不同,但你会有一个对话,你会说,我打算这样做。
如果有人恶意攻击,他们会怎么做?对吧?简单地说,还有测试,它是静态的和动态的应用程序安全测试,有些东西可以被流水线化,有些不能也不应该被流水线化,这是由于它们的持续时间,但我们的想法是实现安全测试,以将图像、依赖项等放入管道中。所以,你知道,在这些组之间来回切换,你可以说,好吧,就像我有一个CI\CD管道来做QA测试,等等,我可以把这些安全测试放在管道中适当的阶段,然后它们自动运行,然后需要审查它们的人将看到这些阶段。
而不是在最后才发现,我认为这已经完成了,我们实际上可以在这里或这里找到,哪个更早,你可以得到更好的结果。我刚才提到的模糊,部分原因是它很有趣,但确保你检查了所有潜在的输入,如果有人试图向你的应用程序扔垃圾,或者合法的代码,你的应用程序会发生什么也是个好主意。这不仅仅是为了确保你对你的输入进行了消毒。但实际上,如果有人试图通过在文本输入中放入二进制文件或类似的东西来关闭您的应用程序,您会感到优雅吗?
你只是拒绝输入吗?会发生什么呢?这些都是非常重要的。当然,正如你在图表中看到的,除了这些活动还有很多其他的事情但是这些是一些让你开始思考的事情,好的,我们在软件开发生命周期的不同阶段做什么?说到这一点,为什么这被称为左移,如果你想一下这个图,你看看屏幕上的东西,你是在左移,因为你实际上是在按照图的设计方式提前移动。所以不是等到最后,而是提前移动,向左移动到图中。
值得一提的是,你不必自己做这件事。我的意思不仅仅是请雇佣安全人员,同时也请雇佣并与安全人员合作。但是你不需要自己设计每个测试,对吧?
如果你在想,哦,不,我该怎么设计,静态应用程序安全性测试?或者我应该在哪里使用它?或者什么时候使用它?或者你听到了像威胁建模这样的东西,不确定要进行什么对话,有一些框架,有一些你可以用来描述所有活动的东西,你可以看到你的组织与某些标准化基准相比有多成熟,一些经常被引用的是BCM, DCM和Sam,我稍后会提供这些链接。
但这里的思想是,你不需要从头开始,你的安全人员不需要从头开始,你可以从这些现有的工具和框架等等中,然后说,好吧,我想如何为我们在这里做的事情定制这个?这一切都很棒,对吧?但我该怎么做呢?因为一旦我有了所有的工具,我如何让人们实现工具、测试和所有的对话呢?你做的是文化支持,这意味着这部分对话是关于人类的。
DevSecOps是由人类支持的,而人类是由另一群人支持的技术支持的。这是一种非常人性化的经历,我讲了其中的基本内容,但让我们多谈谈人类。所以我把这个演讲命名为长矛制导的部分原因与字面上的球体,长矛有关。
显然我不能正确地说出来,这是一支矛。这个想法是,你有所谓的钝端和锐端,我们不是唯一使用这个比喻的人,但基本上它是,谁有权力,谁执行决定。通常你有一个决策者层,然后你有一个实现层或个人贡献者层,它们通常不是同一层。当然,根据所做的决定,在不同的领域可能会有重叠。
但是这个想法是你从后面引导矛或者你从前面戳它。所以钝与锐,都是相对的。因为这都是相对的,你需要有适当程度的投入,这是建立在谁做决定和谁执行决定的基础上的。所以实施它的人可能对他们认为应该实施什么,应该如何实施,应该实施的时间表等等有很好的想法,但他们需要得到经理的认可,跳过关卡等等,以便说,我们需要为这个项目腾出时间,我们需要代表,比如,人们,专注于各种事情来完成这个项目。这就是我们的目的。一旦你有了这样的支持,你也可以从其他团队那里得到一定程度的支持,因为你可以说,好吧,我们团队不做其他项目的原因,这也是很重要的,因为这个由于这些原因,项目很重要。
我一直想说的一点是永远不要欺骗员工。这可以追溯到一些常见的漏洞,有时你会在推特或其他地方看到这些漏洞,你会听到人们说,哦,我点了钓鱼链接,现在我要上30分钟的课之类的。这并不理想,对吧?所以有很多其他的帖子,你可以看到人们谈论一些合法的电子邮件看起来是假的,因为电子邮件设计很难,而一些虚假的电子邮件看起来是合法的,因为,你知道,设计需要时间,他们可以正确地做。正因为如此,它更容易建立更多的信任,展示共同的利用,而不是在人身上实施。这样做的主要好处是当人们不小心点击了一些他们不应该点击的东西或者当他们使用电子邮件客户端时,它会自动下载附件,对吧?
事情就是这样发生的,现在他们有了一个受损的机器,你想要某种条件,告诉他们,他们可以联系你。所以如果你有一段有争议的关系,“我抓到你了”的关系,那么这种关系并不是真正能促进这种类型的对话的关系。所以这是非常重要的。
不要欺骗员工,但要展示给员工看,如果你在做年度安全培训,向他们展示那些常见的漏洞。说到培训,这意味着你可以定制培训。所以当你试图,你知道,说,哦,好吧,实际上,我们在捕鱼方面做得很好,人们很少点击它们,如果我们碰巧部署它们只是为了检查或无论你在做什么信息。
你可以说,好吧,人们用这个做得很好,但实际上,人们很难理解像多因素身份验证这样的东西,或者为什么他们应该启用它,或者为什么我们强迫它启用,这取决于情况。所以让我们教给他们这些。因此,当你有了定制化的培训,并且你正在进行培训时,你实际上可以花时间说,我要多谈谈每个人都做得不好的地方,少谈谈人们实际上做得非常棒的地方。也许要给他们点掌声。
如果你让训练变得有吸引力,这也会很有帮助。所以展示一个跨站脚本攻击,展示如何容易实现其中一些…我们会说人们可以使用的更简单的利用类型,这样当人们在想,哦,我…我不认为人们会这样做,因为我认为出于某种原因,这样做比表面上要困难,现在人们在试图保护自己的安全时可以记住这一点。对普通员工和非安全工程师进行稍微分开的培训也非常有帮助,非安全工程师实际上在做代码、基础设施和其他工作。顺便说一下,这也是你不需要从头开始的东西,我们有Sudo.pagerduty.com,在我的材料中也有链接,但当你看这个指南时,你可以看到我们有一些模板化的员工培训和安全工程师培训,你可以使用、定制和构建,这样你就可以从一个良好的起点开始。
可以帮助在安全性和其他组之间建立一定数量的保留库的东西称为完全服务所有权。这也是我将在参考文献和资源中链接到的内容。2022世界杯阿根廷预选赛赛程但全面服务所有权的理念是,如果你在维护它,或者你在构建它,你拥有它,这样就有一个明确的路径,如果有故障,我该联系谁,如果我有问题,我该联系谁,诸如此类的事情。这对安全也有好处的原因是你可以有一个安全专家或安全团队拥有与他们相关的服务,比如保险库,对吧?他们可以了解开发和运营的生产需求是什么。他们可以用理解来帮助建立同理心,这是双向的,对吧?
建立一种同理心,然后说,好吧,这就是你为什么要提出这样的要求,或者你为什么要在这样的时间轴上工作。
点击回到开发运营,但你知道,也有安全,他们可能只是为了好玩,你可以玩这些游戏,没有更好的说法,叫做夺旗。这是一种数字等效的游戏,在地面上,你试图捕获旗帜,但在这种类型的设置中,你所做的是你可能有一个服务器,你需要抓取一个文件,也许你需要访问根拥有的东西,但不是根帐户,你必须采取某些措施才能到达那里。我们的想法是试着提高安全状态,不仅是你是安全专家,当然,如果你不是安全专家,你的其他工程师也一样,这又回到了我之前的评论,哦,我没有意识到做某件事是如此快速和容易。所以如果你把它做成这样的游戏,你可以说,哦,试着访问这个文件或者试着不登录就登录,做这样的事情,你可以让他们意识到,哦,这就是你为什么要这样做的原因。
两组人一起进行的对话是关于威胁建模的。我之前提到过一点。
因此,威胁建模是试图找出你所设计的东西以及它如何处于潜在风险之中,并评估这种风险,看看哪些事情你可以缓解,哪些事情你不能。在这个对话中,不仅有安全问题,还有其他团体,他们可以带来他们领域的专业知识。当谈到安全性时,你需要防范这种类型的漏洞。你可以让其他小组说,好吧,我们可以这样设计,让它成为一个真正的对话,而不是一个项目列表,他们可能会收到。这又一次帮助改善了公共安全状况这样参与对话的每个人都能在他们试图建立共同目标的时候学到一些东西,这实际上是许多有框架的事情之一,或者是你可以跳出来的框架之一,而不是从头开始,也在资源材料中有链接。在所有这些之后,仍然会有安全事件发生,对吗?所以你尽你最大的努力,你评估你的风险,但最终,你会对一些事情感到惊讶,正因为如此,我想谈谈安全事件响应。下一张幻灯片文字比较多,但我会一个一个地讲,所以不要慌。
这是我们抽象出的关于安全事件通常如何运行的14步过程。你不一定要对每一个事件都做每一个步骤但是你会对你真正实现的事情这样排序。
首先要谈论的是停止攻击和进展。我们的想法是,你需要在迅速阻止攻击和引入其他人之间取得平衡。安全事件响应过程中的一些事情,你可能会开始注意到偏离非安全但仍然是工程生产事件。所以在另一个事件中,你可能会尝试把所有的主题反应人员集中在一个地方,然后用这种方式进行分类和处理。但在安全事件中,你可能有易受攻击的数据,你可能有其他你不想继续的情况可能在你的环境中升级。所以尽早停止是非常重要的。所以如果你能尽早停止,那就这样做吧。然后截断攻击向量,不管它是什么。所以这个想法就像,如果你有一个受损的服务器,你知道,你遇到一个网络区域,你可以阻塞一个端口或其他什么,阻塞那个端口。所以这是切断攻击向量,这与停止正在进行的攻击略有不同。在心理上模拟这些的方法是,假设有人闯入了你的房子,第一步是把他们赶出去,第二步可能是锁上门窗。这就是门和窗的步骤。
在此之后,再次组建一个反应小组,但要注意平衡攻击的严重性和注意到攻击正在进行的人的专业知识。一旦你到了这一步,你就需要优先考虑每个拥有适当专业知识的人,而不是利益相关者,所以这根本不是一个沟通的步骤。
这仅仅是为了引进能够继续对事件做出反应的人来处理我一会儿要讲到的下一步。
当你在这个阶段的时候,有一点很重要,那就是当你阻止一场正在进行的攻击时,你可能需要假设对方是怀有敌意的但一旦问题解决了,你可以在心理上转变为中立或积极的意图这种思维转变的思想是,当你不知道对方的意图时,你必须假设对方是怀有敌意的因为你必须规划出风险最高的情况以及怀有敌意的人会去哪里。但在解决了这个问题之后,你可以说,人们总是在意外中做事,下载垃圾邮件附件,或者做任何他们正在做的事情,这时你就可以转向一个更中立的立场,一旦你希望没有理由继续假设敌对的立场。
如果出现漏洞,您还需要确保隔离了任何受影响的东西。这里的想法是,如果有东西试图访问数据库或任何其他数据源,你要确保它们是隔离的,包含的,而且它们不会继续以这种方式访问。在这一点上,你还需要确定攻击的时间线。
现在你已经注意到这次袭击了,粗略地定义一下,可能是30分钟,也可能是一个小时,但总的持续时间可能更长。我们可能还记得前一段时间Equifax的泄露事件。
发生了什么,他们在某个时候注意到袭击,但当它被挖掘时,它已经进行了很长一段时间,任何安全事件也是如此,你知道有人现在在那里,但他们可能一直在进进出出,而不是绊倒梯子或类似的东西。那就建立时间线,找出我们存在了多久或者这次袭击持续了多久。
你要确保你同时处理了范围和严重性。所以他们能接触到什么信息,有多敏感。当你看到它有多敏感时,试着识别被泄露的数据,如果有的话,可能没有,那可能不是他们在做的事。但如果有,请确保您正在识别它,并再次评估受损数据的敏感性。然后你需要看看其他系统。这个想法是,如果有人从入口A进来,他们能去哪里?或者他们是否可以使用相同的开发点来开发a、B、C等等?那么在你的环境中其他系统的风险是什么呢?然后你需要评估再次发作的风险。所以你是否能够永久地解决这个问题,或者你只是在之前处理这个事件时暂时地解决了这个问题?
是否有一个未打补丁的CVE,例如,一个关键的漏洞,你能够修补它或能够围绕它进行架构,但在其核心,你需要更新一个依赖项或其他东西来真正修补它。这是评估的一部分。你也要确保你正在玩任何额外的缓解。所以在这里,我举了Equifax的例子,但基本上,有了这样的东西,如果你的系统被入侵了,而你的监视器没有捕捉到它,当你评估它是如何发生的,你可以设置监视器来捕捉它们未来的行为,你也可以做任何类型的键旋转或任何被破坏的事情,这是有意义的改变,以防止它以后被重用。
如果你把这些系统放在一边,以便以后可以对它们进行分析,现在一切都解决了,范围确定了,这就是你要对那些受损系统进行取证分析的时候了。再说一次,你只在所有问题都尽可能解决的时候才这么做,对吧?
这是当你想看看实际发生了什么,添加任何新的信息,这是一种扩充你迄今为止所拥有的一切,你可能会使用第三方来做这件事,这取决于,你知道,各种各样的因素和内部知识等等。
这是最后的步骤之一,有意图,这里的想法不像非安全事件,但仍然是生产或工程事件,你不想交流,这是一个主动事件,然后做30分钟,你知道,更新与安全的轮换,因为没有太多要说的,它主要是明显的焦虑,没有任何人可以采取行动,对吧?安全团队采取的行动比他们引入的其他专家都要多。所以当你发出内部沟通的时候,是接近尾声的时候,一旦你掌握了所有的信息,你只会在必要的情况下发出,因为人们需要采取什么行动这就相当于不做我提到的那些30分钟的更新如果你只进行事后分析普通的,我们会说,工程事故。这里的想法是,现在人们可以通读一遍,他们可以说,哦,这是发生的事情,这是解决问题的方法,这是我需要做的事情,然后他们可以继续前进。
在那之后,你可能需要让执法部门介入。这同样取决于您刚刚经历的安全事件类型。
无论如何,这可能是你公司的要求,所以这实际上取决于你的内部知识和相关的文档流程。如果你涉及到执法部门,你还想接触到可能被用作攻击载体的外部各方。想想看,如果你是a公司,B公司是攻击的源头,可能只是有人不小心在他们的系统上感染了恶意软件,这就是为什么你会以这种方式受到攻击。所以你要确保你能接触到他们,但不要使用你知道,'你好,域名',就像联系适当的联系人,如果你有它,你可能不得不通过执法部门,如果你不这样做,你知道,通知是合法的,而不是被忽略的垃圾邮件,对吧?就其本身而言。然后只有在必要的时候,才进行对外交流。这是如果你需要再次通知任何类型的泄露数据通知,或任何行动这需要由应用程序的任何客户、用户等,即向您提交数据的人承担。
现在,作为一个快速回顾的幻灯片,我们刚刚回顾了所有14个,我在我的资源和材料中有一个链接,在这张幻灯片上。2022世界杯阿根廷预选赛赛程所以我把所有事情都写在通知上了。st帐户,你可以看看我链接的所有东西,培训的伪指南,DevSecOps指南,这是这次演讲的起源,然后还有安全事件响应页面,它概述了14步过程。
还有与框架的链接,以及完整的服务所有权和其他一些东西。所以我强烈建议大家看一看。
下个月,我们要举办传呼机税峰会所以我真的觉得如果你注册加入就太好了。
这是一个免费的活动,5月4日开始注册。我会在你身边。
如果你有任何问题,请告诉我。
我的名字是Quintessence,我是Pager Duty的开发人员。