大型公司的软件每天都会存在漏洞。了解如何保护应用程序免受数据泄露非常重要。

在本文中您将了解 DevSecOps 和网络安全。

本文附有视频课程。本文重点介绍定义和理论。视频课程还将向您展示如何利用常见的 Web 漏洞、如何修复这些漏洞以及如何使用 DevSecOps 工具确保您的应用程序安全。

在 .org YouTube 频道上 观看视频课程 。

感谢 Snyk 提供的资助使得本教程和视频课程的开发成为可能。

什么是 DevSecOps?

DevSecOps 是指将安全实践融入 DevOps 软件交付模型。在 DevSecOps 模型中,安全目标会尽早融入软件开发生命周期,并且在整个生命周期中,安全考虑都很重要。

为了真正理解 DevSecOps,首先了解 DevOps 和漏洞会有所帮助。

漏洞

让我们从漏洞开始。安全的全部意义在于防范漏洞,因此让我们先了解不同类型的漏洞,然后我将讨论 DevOps。

2020 年数据泄露的平均成本为 386 万美元,预计到今年年底全球网络犯罪成本将达到 6 万亿美元。据估计,90% 的网络应用程序容易受到黑客攻击,其中 68% 的敏感数据容易被泄露。

根据身份盗窃资源中心的数据,2020 年美国发生了 1000 多起数据泄露事件。超过 1.558 亿人受到数据泄露的影响。

statistic_id273550_cyber-crime_-number-of-breaches-and-records-exposed-2005-2020

漏洞、漏洞利用和威胁

在考虑安全性时,了解漏洞、利用和威胁之间的区别非常重要。

安全 漏洞 是一种软件代码缺陷或系统配置错误,黑客可利用它未经授权访问系统或网络。一旦进入系统或网络,攻击者便可以利用授权和特权来破坏系统和资产。

漏洞 利用 是黑客利用漏洞的方法。漏洞利用通常是一个定制软件或一系列命令。

甚至有漏洞利用工具包可以嵌入到受感染的网页中,不断扫描漏洞。一旦检测到漏洞,工具包就会立即尝试部署漏洞,例如将恶意软件注入主机系统。

威胁 是实际或假设的 事件其中一个或多个漏洞利用者利用漏洞发起攻击。

security vulnerabilities and exploits

只有少量已知漏洞会被用来入侵系统。风险最高的漏洞是那些被利用的可能性较高的漏洞,因此应优先考虑。

安全漏洞的类型

安全漏洞存在于与软件相关的所有不同领域。以下是应用程序和网站中的一些常见安全漏洞。

有两个不同的重要 Web 应用程序漏洞列表。第一个列表由开放 Web 应用程序安全项目 (OWASP) 创建。他们有一个流行的列表,称为 OWASP Top 10 ,其中列出了最常被利用的漏洞。

第二个列表是 CWE ,即常见弱点枚举,这是一份“社区制定的具有安全影响的常见软件和硬件弱点类型列表”。该列表由 MITRE 公司运营,该公司是一家非营利性公司,运营联邦政府资助的研发中心。他们创建了 CWE-25,这是 25 个最危险的软件弱点列表。

在 CWE-25 中,应用程序和网站安全漏洞主要有 3 种类型:

  1. 漏洞百出的防御
  2. 风险资源管理
  3. 组件之间不安全的交互

1. 防御漏洞

漏洞防御的弱点是允许用户绕过或欺骗身份验证和授权流程。身份验证可验证试图访问系统的人的身份,而授权则是分配给用户的一组访问和使用权限。

漏洞防御弱点包括:

  • 弱密码编码
  • 凭证保护不足
  • 缺少身份验证或仅采用单一身份验证
  • 不安全的继承权限
  • 未及时过期的会话

所有这些漏洞类型的防御漏洞都可以让黑客成功访问敏感资源。

利用这些漏洞的攻击可能包括:

  • 凭证填充攻击
  • 会话 ID 劫持
  • 窃取登录凭证
  • 中间人攻击

2. 风险资源管理

另一个漏洞类别是内存、功能和开源框架等资源的风险管理。

这些漏洞包括:

  • 越界写入或读取(又名缓冲区溢出): 应用程序可能被诱骗在目标内存缓冲区的末尾或开头之前写入或读取数据。
  • 路径遍历: 允许攻击者获取路径名,从而访问受限制目录之外的文件。稍后我将展示一个示例。

利用这些漏洞可以让黑客控制应用程序、破坏文件或访问敏感信息。

3. 组件之间的不安全交互

当今许多应用程序通过各种服务、线程和进程发送和接收数据。不同组件相互配合的方式可能会引入漏洞。

以这种方式暴露 Web 应用程序或网站的弱点包括:

  • 跨站点脚本或 XSS: 当用户输入未得到安全处理时,XSS 攻击的可能性就会增加,攻击者可以将客户端脚本注入其他用户查看的网页。这是一个非常常见的漏洞。
  • 跨站点请求伪造 (CSRF): 对看似合法、真实的请求是否是故意发送的进行不正确的验证。这些攻击通常通过社会工程媒介发起,例如诱骗用户点击链接的虚假电子邮件,然后向用户已经通过身份验证的网站或服务器发送伪造的请求。

如果应用程序和网站没有正确实施组件之间交互的安全控制,那么它们就很容易受到后门攻击、脚本攻击、蠕虫、特洛伊木马和其他漏洞的攻击,这些漏洞会部署恶意代码来破坏基础设施、数据和系统。

最常见的漏洞

在 OWASP-10 和 CWE-25 列表之间,很显然,破坏的访问控制是最大的漏洞。94% 的应用程序都存在某种形式的破坏的访问控制。

访问控制可确保用户无法超越其预期权限行事。如果设置不当,可能会导致未经授权的信息泄露、修改甚至数据破坏。

DevOps

现在我们来谈谈DevOps,它是DevSecOps的重要组成部分。

DevOps 是一个已经被讨论和撰写了很长时间的概念,并且出现了许多有关 DevOps 的定义。

DevOps 基本上是一套结合软件开发 (Dev) 和 IT 运营 (Ops) 的实践。它旨在缩短系统开发生命周期并提供高质量软件的持续交付。

image-59
DevOps Pipeline

大多数现代 DevOps 组织将依赖于持续集成和持续部署/交付系统的某种组合,形式为 CI/CD 管道 。作为生命周期的一部分,可以执行各种自动化安全测试和验证,而无需人工操作员的手动工作。而这都是软件开发生命周期的一部分。

以下是常见 DevOps 流程的示例。首先,开发人员编写代码并将其推送到存储库。此时 CI/CD 管道启动。进行自动化测试,然后构建版本,最终将其部署到生产中。每一步都有测试以确保代码质量。在此模型中,有时仅在部署到生产之前才考虑安全性。

image-57

DevSecOps 遵循类似的流程,但在整个过程中增加了自动化安全考虑。安全性与 DevOps 集成在一起。DevSecOps 将安全目标编入总体目标结构的一部分。

盾牌代表我们进行安全测试的所有地方。不同的步骤使用不同的工具,稍后我将讨论一些具体工具。

image-58

DevSecOps 应该被视为 DevOps 的自然延续,而不是一个独立的想法或概念。

旨在识别并理想地解决安全问题的活动是在应用程序开发生命周期的早期注入的,而不是在产品发布之后。这是通过让开发团队在软件开发生命周期 (SDLC) 内独立执行许多安全任务来实现的。

要在应用程序开发早期就整合安全目标,请在编写第一行代码之前就开始。安全性可以在系统、应用程序或单个用户故事的初始概念期间整合并开始有效的威胁建模。开发人员签入代码时可以随时运行静态分析、linters 和策略引擎,确保在更改进一步向上游移动之前处理所有容易出现的问题。稍后我将向您展示如何在编写代码时使用工具检查代码是否存在安全问题。

可以应用软件组成分析来确认任何开源依赖项都具有兼容的许可证并且没有漏洞。我将向您展示如何使用工具检查软件依赖项是否存在安全问题。立即获得有关您编写的代码的相对安全性的反馈非常有帮助,这有助于个人开发人员掌握安全问题。

代码签入后,可以使用静态应用程序安全测试 ( SAST ) 工具来识别漏洞并执行软件组成分析。SAST 工具应集成到提交后流程中,以确保主动扫描引入的新代码是否存在漏洞。集成 SAST 工具可以在软件开发生命周期的早期修复漏洞,并降低应用程序风险和暴露程度。

代码构建完成后,您可以开始使用安全集成测试。在隔离的容器沙箱中运行代码可以自动测试网络调用、输入验证和授权等内容。这些测试通常是动态应用程序扫描工具 (DAST) 的一部分。这些测试可以快速生成反馈,从而能够快速迭代和分类发现的任何问题,从而最大程度地减少对整个流程的干扰。如果出现无法解释的网络调用或未清理的输入等情况,则测试失败,管道会以报告和通知的形式向相关团队生成可操作的反馈。

接下来,可以测试正确的日志记录和访问控制等内容。应用程序是否正确记录了相关的安全和性能指标?访问是否仅限于正确的个人子集(或完全阻止)?

最后,应用程序投入生产。但安全测试仍在继续。自动修补和配置管理确保生产环境始终运行最新、最安全的软件依赖版本。

可以使用特殊技术和工具来保护容器。稍后,您将学习如何在实际环境中执行此操作。

利用 DevSecOps CI/CD 管道有助于整合每个阶段的安全目标,从而能够维持快速交付。

整个方法有助于最大限度地减少影响生产的漏洞,从而降低修复安全漏洞的成本。DevSecOps 旨在将安全性融入交付过程的每个阶段(从需求阶段开始),并制定安全自动化计划。

软件项目冰山

当考虑安全性时,您应该记住您的代码只是冰山一角。

image-70

在一般的软件项目中,只有 10-20% 的代码是自定义代码。是的,确保自定义代码的安全很重要,但还有很多事情需要考虑。

许多代码库的 80-90% 由开源代码、模块和库组成。您导入的框架和库本身可以导入更多框架和库。这些代码实际上并非您自己编写的。

image-71
The node_modules directory of a project is often massive.

平均而言,80% 的漏洞都存在于直接依赖项中。如果您导入了易受攻击的依赖项,无论您编写的安全代码有多好,都毫无意义。

然后是容器。这些容器通常包含数百个从公共源继承的 Linux 包。同样,这些代码实际上不是你自己编写的。

你不能忘记基础设施即代码。这为恶意行为者打开了许多新的攻击媒介。配置错误是头号云漏洞。

正确实施的 DevSecOps 应该覆盖所有这些领域。

DevSecOps 的重要性

为什么 DevSecOps 实践很重要?

随着公司规模不断扩大,通常会有更多的软件、云技术和 DevOps 方法。

软件越多意味着组织的风险就越数字化,这使得保护数字资产变得越来越具有挑战性。

云技术意味着许多 IT 和基础设施风险都转移到了云端。这提高了权限和访问管理的重要性,因为所有内容都可以从任何地方访问。

正如您所见,DevSecOps 将安全性引入 DevOps,使开发团队能够按照自己的节奏保护他们构建的内容,同时还可以在开发和安全从业人员之间建立更大的协作。安全团队提供专业知识和工具来提高开发人员的自主权,同时仍提供一定程度的监督。

DevSecOps 模型的 6 大优势(与传统 DevOps 模型相比)

6 Benefits of the DevSecOps Mode
  1. 交付速度更快: 当安全性集成到流程中时,软件交付速度会提高。在部署之前会识别并修复错误,从而使开发人员能够专注于交付功能。
  2. 改善安全态势: 安全性从设计阶段开始就成为一项功能。共享责任模型可确保安全性紧密集成——从构建、部署到保护生产工作负载。
  3. 降低成本: 部署之前识别漏洞和错误可大幅降低风险和运营成本。
  4. 提升 DevOps 的价值: 通过将安全实践融入 DevOps,可以改善整体安全态势,形成一种共同责任的文化。
  5. 提高安全集成度和速度: 通过消除开发后改造安全控制的需要,减少了安全软件交付的成本和时间。
  6. 实现更大的整体业务成功: 更加信任所开发软件的安全性并采用新技术可以实现更高的收入增长并扩大业务范围。

结论

有许多工具可以帮助保护您的应用,其中许多都是免费的。在本文附带的视频中详细了解如何使用它们。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部