DevSecOps的快速胜利
我总是喜欢到森林里去,享受宁静,不受打扰地追求我的思想。最近,在会议、聚会或研讨会上,我一次又一次地被问到一个问题:这个问题几乎总是:如果您想在软件开发中更多地处理安全问题,那么什么是快速的胜利或低挂的果实?
我现在就想回答这个问题!
视频记录
大家好,欢迎来到我在swamamp的演讲。如果您想知道如何在DevOps环境中开始安全性,如何适应SRE方法,以及是否可以将两者合并,那么在我的演讲中您就完全正确了。我们将发现如何从安全性开始,如何在团队中集成安全性,如何合并不同的方法,什么是快速的胜利,以及作为开发人员,如果您真的想要高效地转换,应该使用什么基本工具。
顺便说一下,我的名字是Sven,我是JFrog的开发倡导者,通常被称为森林里的人。如果你能看见,我现在在森林里。我喜欢它,因为这是一个思考复杂it挑战的完美时机。所以,你现在和我一起踏上了两段旅程。
一个是DevSecOps世界,另一个是这里的德国森林深处。让我们看看我们能做些什么。
如果您想将安全性集成到DevOps世界中,与其他主题的安全性有什么不同?好吧,让我们看看DevOps世界是怎样的?
DevOps世界通常关注的是这个过程的开发,如何构建软件,如果你在阅读维基百科,你会看到它很可能描述了从编码、构建、测试、打包到运行生产的所有事情。这里的共同点是所有提到的步骤都是专门的生产步骤。但是现在,我们谈论的是安全问题。
安全是一个生产步骤吗?不,安全不是生产步骤,安全是你必须在不同步骤中集成的东西,主要是,你必须在每个步骤中集成它,因为安全就像质量一样。那么让我们看看我们如何把它包括进来,或者更好地从过去中学到了什么,以及我们现在能做些什么来处理这个安全主题。所以在过去,我们有开发和运营团队,他们有酒,他们是生产步骤。他们的共同点是,开发舱创建二进制文件,而操作舱抓取这些二进制文件到存储库,比如Artifactory。然后投入生产,让它运行。
从ops和开发一起到DevOps的转变集中在不同生产步骤的技术需求和所有这些东西上。所以这运行得很好,现在或多或少建立起来了。但是现在我们有了安全,如果安全无处不在,意味着每一个微小的步骤都与安全有关,因为安全不是这个专门的步骤。
好的,最后一个问题是,如何将DevOps世界中的安全性集成到开发sec ops环境中?
只是,你必须在每个生产步骤中考虑安全问题,我会向你展示不同的方法,以及我们如何尽可能地向左平移。
但总的来说,安全更像是一种文化,对每个人来说必须意识到,这不仅仅是一种产品,它会帮助你,因为作为人类,你的速度不够快。但这不仅仅是买一件产品,它不会拖你的后腿。所以如果你做得对,你就有可能以一种不会拖你后腿的方式实现安全。
即使你做对了,它也会提高你的质量,因为质量和安全,它们只是好朋友。但是我们稍后会讲到这个话题。那么,如何集成安全呢?嗯,每个人都是其中的一部分。这是团队的责任。这就像是一种文化。
再读一点关于这个的内容。我们会发现安全就像质量一样。
它在你的管道中无处不在。好的,这些开发操作或开发安全操作,但人们在谈论网站可靠性工程。我们可以合并这个吗?有什么不同?主要的事情是网站可靠性工程来自谷歌宇宙,所以他们有这种方法,我们有专门的工程师,必须把所有这些东西自动化。谷歌的定义是SRE主要集中在最大值上50%的工作时间用于运营,其余时间用于开发。这是什么意思呢?
到最后,还是差不多的。这是一个人的开发行动。所以它是一个非常有经验的开发人员,专注于运营或者是一个非常有经验的运维人员,现在专注于开发。所以不管你选择什么,这个SRE,站点可靠性工程师,差不多是介于开发和运维之间。把这篇文章拼起来?肯定。因为DevOps只是一个过程,它是一种组织所有这些东西的方式。SRE是一个角色。那么SRE适合开发运营还是开发安全运营?
当然,它非常适合,因为这些人大多处于中间位置,这里的巨大潜力是,这个SRE,这个服务可靠性工程师,可以把两个部分结合在一起,操作的安全性和开发的安全性,并把它作为一个机会。好吧,简短的回答与此相吻合。肯定。
好的,我们看到开发运营和SRE正在完美地融合在一起。但是我在接下来的步骤中所解释的内容并不局限于DevOps,或者SRE等等。所以即使你有一个非常经典的项目管理风格,如果你有专门的团队,你可以使用我现在解释的一切,因为这是更通用的。因此,安全性并不局限于专门的产品管理风格。
安全是你可以在任何地方实现的东西,但我所解释的全部潜力,你将在DevOps或dev sec ops环境中得到。但是现在,我们来看一个例子。举个例子,科技领域的独行侠。那么,令人惊讶的是,在过去的一两年里发生了什么重大事件?
Solarwinds。所以我不想讲太阳风黑客的所有不同细节,但我想提一些对我们接下来要做的事情非常鼓舞人心的事情,或者我们应该利用这个教训。首先,这个黑客组织侵入了太阳风公司。那么太阳风是谁呢?Solarwinds是一家创建软件平台的公司,该软件平台用于管理网络基础设施。令人惊讶的是,如果你在管理网络基础设施,首先,这是公司通信结构中最关键的部分。第二件事是,要管理基础设施,你需要雇佣合适的人,比如管理员。这是一个完美的目标,因为太阳风大约有30万客户在使用这个软件。这个黑客组织所做的就是闯入太阳风公司的环境把太阳风公司作为他们所有客户的乘数器。
但是发生了什么?太阳风黑客是怎么做到的?这个黑客组织从Solarwinds侵入了这个IT系统,Solarwinds生产软件,他们的主要目标不是破坏东西或使它不可用,他们只是破坏了CI环境。
哇,CI环境?为什么?所以他们所做的是,他们以一种他们现在生产的每一个构建的方式改变了构建,他们会添加一些来自黑客组织的泄露的二进制文件,然后他们的官方更新,或者他们的官方发布包含已经泄露的代码。仅仅是有一款可以推广到30万客户的产品就已经很了不起了。
这是一个巨大的潜在目标,所以不是瞄准最终目标或只是攻击最终目标,你所做的是你要做的是乘数现在有两个视图。首先,如果你是下一个太阳风,或者如果你是太阳风的消费者。说,我们有两个维度,我们想看一下,因为我们必须看两面都要打。所以如果这是一种新的攻击,他们针对的是供应链,而不是最终目标。
那我们就得准备好了,我可以这么说,你有没有针对已知的漏洞扫描过詹金斯CI ?
对抗所有这些攻击,这意味着什么?你能做什么?谈到DevOps环境,有两个部分,两个主要部分。你有操作和开发部分。那么你应该关注哪些方面呢?
首先,如果你关注运行时环境,并扫描运行时环境,我不确定你是否真的想要它但如果你想测试和运行环境,你谈论的是DAST,动态应用程序安全测试框架,他们所做的是他们把你的环境看作一个黑盒,他们不了解依赖关系,他们不了解你使用的技术。
但我想强调的是,这些动态应用安全测试工具,他们正在攻击你的系统,试图闯入,他们需要如何做这些事情的知识,这是基于最常见的漏洞。如果你想要一些特殊的攻击,那么你需要定制这些工具,你需要这些特殊的知识,有时你有云环境不能进行自定义。我们还能做什么?因为我们想要专注于一些唾手可得的果实,快速的胜利,你能在你的环境中产生的最大影响,这肯定会激发一个静态的派对。
好的,我们讲了动态应用安全测试它的对立面是什么?静态部分,SAST,静态应用程序安全测试,我个人关注这一点,因为它有很多好处,因为我们不仅仅关注这个最常见的漏洞,因为这只是一个很小的数量。
现在我们专注于一切。对于糟糕的代码,我们关注的是已知的漏洞,遵从性问题,等等。
为什么?因为我们有所有的语义信息,所以我们有关于所有组件的所有信息,如果你专注于静态分析器部分,我们甚至可以在生产中运行之前就完成它。因此,如果您只是在产品运行期间进行扫描,那就太晚了。所以我想尽早解决所有的漏洞,这意味着我必须在开发部分,而不是在运维部分。
Ops并不擅长于on,但是主要的焦点应该放在开发部分,因为这是早期的,它没有在生产中运行,并且您有更多的信息可以使用来加强您的系统,这就是为什么您应该开始关注这个静态分析主题。好吧,如果我们在看强音棒,那么我们会看到依赖99%的测试结果。为什么?所以在编码的过程中,我们写了一些代码,但更有可能的是,我们通过依赖关系或传递依赖关系直接或间接地添加了更多的代码行。
如果我们把这个推到一个操作系统上,让它必须运行,例如,在x行上,我们配置了一点[听不清]但操作系统的其余部分是二进制的,这是我们正在获取的依赖。Docker也是一样,从front语句开始。所以我们增加了依赖关系,样本,Kubernetes,等等。所以纵观整个技术堆栈意味着如果你在谈论我们自己在做什么,找出我们在某个地方添加了什么,通过依赖,这是所有问题中最大的部分。
如果我们想要有效地对抗已知的漏洞,我们必须首先关注依赖关系,因为这是目前为止你的技术堆栈中最大的部分。让我们从遵从性问题开始。那么合规问题的行为是什么呢?
为什么我们要扫描它们?为什么这是安全措施的一部分?好吧,安全不仅仅是一个漏洞,安全是合规。所以也要保住生意。这意味着如果你要添加依赖关系,这是最大的部分,检查所有直接或间接的依赖关系是有意义的,以确保我们没有在正确的地方使用错误的许可。这对我们的生意来说是毒药。那么,我们需要做些什么来应对合规问题呢?
首先,我们需要一个被授权的人来决定你生产线的哪个部分的正确许可证,因为你需要一些法律建议或任何能够决定的人来确保你有一个允许的白色标签许可证和黑色标签许可证的初始清单,也就是不允许的许可证。如果你有这个,那么好的事情是机器可以开始扫描。因此,对于这个yes或no许可,或者如果传递依赖项或直接依赖项没有独占许可,为什么每次运行时都要扫描它呢?大多数情况下,如果你在项目中先扫描,如果它在正确的许可下运行,你就不会再有问题了因为这个基本上没有改变。但有两件事是可以改变的。
首先,项目本身可以改变,比如看看这个。Java。ee,雅加达。ee, NoEclipse。情感表达的东西。所以依赖关系总是有变化的。它可能是你使用的依赖项的项目维护者,不太清楚地维护他的依赖项。所以他可能从谷歌番石榴变成了收藏任何东西。然后你可能有不同的许可证,也可能没有,但如果你经常检查,如果有任何关于合规的问题,这总是好的。
但是如果你有一个合规问题会发生什么,那么你需要做什么工作呢?所以合规问题,在某种程度上是好的也是坏的,因为好的方面是你可以把它们结合起来。糟糕的是,如果你有一个遵从性问题,那么你必须删除整个文本中的这个点x或这个依赖项,然后你必须确保你正在改变它或用语义平等的实现替换它。
这不是小事。所以找一些在不同许可证上运行的东西和你期待的一模一样。这可能会带来一些麻烦,但大多数情况下,在检查许可后更改依赖项或可传递依赖项并不常见。所以如果你有有些事,可能真的很辛苦。但最重要的是,如果你是清白的,那么从中期或长期来看,就没有大问题。注意攻击载体,不同的攻击载体。说到漏洞,你们有这个通用的漏洞评分系统cbss。然后我们在这些不同的漏洞之间进行了排名风险很高,风险不高等等。
如果你想了解更多关于CVSS,我有一个专门的YouTube视频,详细解释了CVSS。但我在这里想强调的主要事情是,您需要一些工具,可以了解已知漏洞的CVSS值。下一件事是,即使CVSS值很低,也要看一下完整的影响图。所以你需要对整个技术堆栈的所有依赖关系,因为你可以将不同的漏洞组合到不同的攻击向量上。
不同的攻击向量意味着全部可能的弱点在您的应用程序中,不仅仅是每个单一的漏洞点,它是,除此之外,所有不同的攻击向量的整个组合。这意味着即使是低风险的漏洞也可能与其他对您的环境非常危险的东西结合在一起。
针对已知漏洞和遵从性问题的良好安全构建是什么?好的,有一件非常非常好的事情是良好的测试覆盖率。为什么?因为谈论已知的漏洞,您必须切换到相同依赖项的不同版本。所以如果你有一个非常强大的测试覆盖率,那么你就可以以一种不再有漏洞的方式改变版本。同时,通过良好的测试覆盖率,您可以检查不同版本中相同依赖项的新组合是否与您需要的完全相同。
如果您有遵从性问题,TDD甚至更强大,因为如果您必须用语义对等的实现进行替换,那么您会非常高兴有一个良好的测试覆盖率,因为这样您就可以在不同的实现之间切换,并检查您的测试覆盖率,如果一切都运行良好。所以TDD是针对已知漏洞的最好的安全带之一,你需要一个非常强大的测试覆盖率。我个人所知道的最强的测试覆盖率之一是突变测试覆盖率。因为它比行覆盖或分支覆盖强得多。
看看我的YouTube频道,我有解释测试本身的视频。但是无论您采用何种测试覆盖率,强大的测试覆盖率都是您针对已知漏洞和遵从性问题的安全带。
如果测试覆盖率是对抗已知漏洞和法规遵从性问题的最佳方法之一,那么您就需要一些东西来管理所有这些依赖关系,因为新依赖关系的组合或所有技术层的依赖关系的替换必须是对抗已知漏洞和法规遵从性问题的一部分。所以你需要一个单独的点,一个逻辑上的单独的点,你所有的存储库管理器都被管理,这样你就有了所有这些依赖项在一个地方。然后用一个工具你可以检查,不仅仅是一个技术层,或者一个技术,或者其他什么,你可以扫描整个技术堆栈的所有东西。我说的一切都是真的。例如,你的Maven依赖,如果你在编写Java代码,你的DBN存储库,你的Docker回购,你的Helm图表,但甚至,例如,在你的工具中,想想Solarwinds坦克。所以这次攻击针对的是供应链,这意味着如果你有一个Docker镜像,里面有Jenkins,只要扫描它,这样你就知道并意识到所有这些漏洞。
因此,您只需要一个点,我们在Artifactory中也有同样的点,因为我们知道所有这些不同的存储库类型,我们知道所有这些元数据。因此,我们不仅理解了依赖关系,还理解了传递依赖关系,直到最后一个元素。
然后使用Xray, Xray是一个扫描仪,我们使用所有这些二进制文件和Artifactory内部的知识,包括皮带信息和所有其他东西,给你关于所有已知漏洞和所有许可的完整影响图的视图你的整个技术堆栈都在使用。这是专注于80%,90%,99%的整个技术堆栈。因此,如果依赖关系是你整个技术堆栈中最大的部分,你想从安全开始,关注依赖关系,关注有效的依赖关系管理,关注扫描这些依赖关系以防范漏洞和遵从性问题。
如果你感染了某种攻击,你会怎么做?所以简单的回答就是找出所有被感染的组件,移除它们从头开始安装是干净的。
有这么简单吗?好吧,如果您有受感染的组件,并且您不知道其他哪些组件正在使用这个组件,那么如果您正确地执行它,那么它或多或少是一个非常、非常、非常长的工作和大量的努力。所以有效地,我们在人工查询语言中有支持,它是SQL查询语言,你可以选择不同的工件,然后你会看到它们被用在其他部分,或者被其他组件使用,因为有X射线,我们有完整的影响图,如果你有完整的影响图,我们可以识别谁在消费什么。这样,就很容易确保我们正在删除受感染的二进制文件,然后确保所有依赖项都被干净的依赖项替换。所以这是一个点,如果你有一个点,所有的依赖关系都经过,你有完整的影响图,如果你把完整的影响图添加到你的查询风格语言中,在那里你可以选择部分树,然后它可以删除所有东西,从头开始安装。所以这就是为什么JFrog的客户非常喜欢这个查询语言,因为有了它,我们可以很容易地删除受感染的二进制文件。
好的,如果你知道如何对抗已知的漏洞,有一个经常被提及的术语,它非常非常重要。这是左移。这是什么意思?例如,如果你第一次向左移动,这意味着我们不是在对抗产品内部的漏洞,而是在对抗CI管道内部的漏洞。
有了它,我们可以在每次构建时扫描或二进制文件,我们可以确保就已知的漏洞或合规问题而言,没有什么是对我们不利的,但我们可以进一步或更多地向左转移。这意味着,如果你只是把洞察力当作你的环境来看待,我并不是说我们不需要它,我只是说我们需要一些额外的东西。
因为如果你一整天都在做第一次提交,或者在几个小时后再推进CI环境,得到内部存在漏洞的反馈,我们已经烧了一些钱。所以我们还要最小化这个时间。这意味着我们往左平移得更多。
更左意味着我们直接在你的IDEE中移动,所以如果你在写你的第一行代码,你知道所有你需要的东西。例如,如果这个许可是正确的,在你的传递依赖关系或间接依赖关系中,你是否应该注意关于已知的弱点。这是用IDEE插件完成的,所以我们在IDEE中直接向左移动。然后如果你要添加第一行依赖关系或者第一行代码,你已经知道了一切,你现在正在处理的东西的完整影响图是什么。所以在ci环境中使用它意味着你有可能在整个技术堆栈中使用它,所以从你的应用程序到舵图。
如果您在您的IDEE中直接拥有它,那么您添加的第一行代码就可以了解所有内容,您不会浪费时间,也不会浪费精力。如果你想试试这个插件。我们有IntelliJ, VS code, Eclipse。它是开源的,可以在GitHub上找到。如果你有任何需要,你可以提出一些问题,或者你可以提出一些功能要求。或者如果你想推动代码,那就先制定一个度量标准。通过这个IDEE插件,你可以连接到x射线实例。这甚至可以通过免费层实现。你只需要从你的X射线实例中输入你的用户名和密码,然后你就可以和X射线连接了。所有的X射线信息都在你的IDEE里面看一看
对于IDEE内部的开发人员来说?我现在会给你们看一段很短的视频。现在,我们有一个简短的X射线IDEE插件,我只是添加了一个池塘依赖。这是IDE插件的一个版本,一个窗口。我在用IntelliJ。它在Eclipse上看起来可能会有点不同,然后它会被视为一个依赖项我们已经在这里添加了,这里这个4120然后你要握着铅笔树你会发现对象和数据绑定存在安全问题。
你得到的是将其列为高、中或低安全风险。您将看到许可信息或类型版本等。
好在你可以在这里看到所有的详细信息,例如,是否已经有一个固定的版本可用,以及什么时间,问题本身的摘要。很酷的一点是,如果你在某个地方,你可以到这里,显示他项目描述符,然后跳转到这里。另一件事是,如果你决定排除,你可以在这里说排除依赖,你会得到的是依赖排除。就是这样。
另一件事我想告诉你如何安装它。在IntelliJ中,这很简单。同样,作为一个插件,你需要搜索JFrog插件,更新它或者只是安装它。在IntelliJ中,你必须重新启动,在Eclipse ir中可能不同。然后你要做的唯一一件事就是去x射线插件的设置,添加你的坐标,然后你就可以把IntelliJ连接到x射线安装。
就是这样。玩得开心。好了,是时候总结一下今天所学的内容了。因此,我们看到安全不仅仅是你的生产管道中的一个步骤,安全就像一种文化,安全就像质量,它无处不在,在你的生产管道的每一个步骤中,我们看到无论你何时选择DevOps,或SRE方法或经典的项目管理,无论什么安全都可以在所有这些项目管理关键流程中实现。
这意味着团队中的每个人都必须意识到他可以做些什么来提高他所工作的专用步骤中的安全性。我们需要总体的概述,我们需要完整的影响图表。所以我们需要一个关注所有技术和所有过程的整个技术栈的观点。所以安全不像我只是买一个产品,安全是团队内部的一种责任,团队需要意识到它需要权力来决定必须做什么来实现更好的安全。
一开始就关注安全意味着你应该关注那些唾手可得的果实,快速的胜利,并着眼于整个技术堆栈意味着整个技术堆栈远远超过90%,真的,在大多数情况下超过90%,只是依赖管理,这意味着你需要一个非常有效的依赖管理,另一方面,你需要一些东西可以处理所有这些依赖,直接依赖,传递依赖,间接依赖。为此,我们有Artifactory,因为它知道所有这些包管理器,从Java, Maven到Dabian到Helm图表,Docker,等等。然后用x射线,我们不仅可以扫描二进制文件本身,还可以检查依赖关系,间接依赖关系,我们也可以检查遵从性问题。因此,我们对已知的漏洞和合规问题有一定的了解。关注依赖关系意味着超过90%的系统已经清除了已知的漏洞。如果你想试试,我们有这个免费层。在那里你可以做两件事,你可以在ci环境中实现它,在那里有一匹工作的马,你必须自动化一切,这样质量总是一样的,安全行为总是一样的,无论你选择什么时间。在另一边,你可以尽可能向左平移。使用我们的IDE插件,我们直接进入IDE,在那里您正在编写第一行代码。你也需要所有这些信息。接下来你能做的是,不同的事情。
首先,您可以参加一些我们的网络研讨会,以获得关于分发、关于Artifactory、关于安全性等更详细的信息。
如果你想亲身体验,只要注册参加我们的研讨会,我们有定期的研讨会,我可以用德语和英语授课。如果你只是想在YouTube上消费一些东西,看看我的YouTube频道。我在YouTube上有很多户外IT相关的视频。那么非常感谢你们的出席。
很高兴在这次会议上见到你们,并享受接下来的会议。享受其他的演讲吧。如果你能参加我的网络研讨会,研讨会或者我的YouTube频道的订阅用户。否则,我现在要做的是,我会在森林里待一会儿,我们会煮杯咖啡,吃点东西,走一圈,然后回家,对你来说,享受剩下的会议,注意安全,再见。

