使用亚马逊 CodeCatalyst 启用 DevSecOps

DevSecOps 是在软件开发过程的每个阶段集成安全测试的实践。 Amazon CodeCatalyst 包括鼓励开发人员、安全专家和运营团队之间协作的工具,以开发既高效又安全的软件。DevSecOps 带来了文化变革,使安全成为开发软件的每个人的共同责任。

简介

在本系列的前一篇文章《使用 Amazon CodeCatalyst报告 维护代码质量》 中 ,我讨论了开发人员如何使用CodeCatalyst的工作流程操作快速配置测试用例、运行单元测试、设置代码覆盖率以及生成报告。这是通过吉恩·金(Gene Kim)的《 独角兽计划 》的主角马克辛 的 镜头完成的。在故事中,Maxine 遇到了质量保证和发布经理 Purna 和安全工程师 Shannon。每个人都有相同的共同目标,那就是将安全性集成到软件开发生命周期 (SDLC) 的每个阶段,以确保安全的代码部署。Maxine 面临的问题是,安全测试不是自动化的,按角色划分责任会导致项目停滞。

在这篇文章中,我将重点介绍DevSecOps团队如何使用亚马逊CodeCatalyst工作流程轻松集成和自动化安全性。 首先,我将使用 OWASP 依赖项检查器和 Mend SC A 检查漏洞。 然后,我将使用 Pylin t 对源代码进行静态分析 (SA)。我还将概述 DevSecOps 团队如何通过定义工作流程中的 软件组合分析 (SCA) 和 静态分析 操作的成功标准来影响构建结果。最后,我将向您展示如何从CodeCatalyst报告中获得见解,并通过CodeCatalyst问题向开发团队揭示潜在问题,以便更快地进行复。

先决条件

如果您想按照本演练进行操作,则需要:

  • 拥有 A WS 生成器 ID 用于登录 CodeCatalyst。
  • 属于 CodeCatalyst 空间,并在该空间中为您分配空间管理员角色。 有关更多信息,请参阅在 C odeCatalyst 中 创建空间 管理空间成员和 空间管理员 角色。
  • 拥有一个与您的空间关联的 亚马逊云科技 账户,并在该账户中拥有 IAM 角色。有关角色和角色策略的更多信息,请参阅 创建 CodeCatalys t 服务角色。
  • 拥有 M end 账户 (可选 Mend 部分为必填项)

草率排练

要继续操作,您可以重复使用之前创建的项目,也可以参考 之前介绍如何使用现代三层 Web 应用程序蓝图创建项目的文章 。蓝图提供示例代码和 CI/CD 工作流程,可帮助您在编程语言和架构的不同组合中轻松入门。这个项目的后端代码是用 Python 编写的,前端代码是用 JavaScript 编写的。

Modern Three-tier Web Application architecture including a presentation, application and data layer

图 1。现代三层 Web 应用程序架构,包括演示层、应用程序层和数据层

部署 项目 后,Cod eCatalyst会打开项目概述。选择 CI/CD → 工作流程 → 应用程序部署管道,查看当前工作流程 。

Six step Workflow described in the prior paragraph

图 2。应用程序部署管道

现代应用程序使用各种开源依赖项来加快功能开发,但有时这些依赖项中存在未知的漏洞。作为一名 DevSecOps 工程师,我可以轻松编辑此工作流程来扫描那些易受攻击的依赖关系,以确保我交付的是安全的代码。

软件组合分析 (SCA)

软件组合分析(SCA)是信息技术和软件工程领域的一种实践,用于分析定制的软件应用程序,以检测嵌入式开源软件并分析它们是否是最新的、包含安全漏洞或是否有许可要求。在本演练中,我将重点介绍两种 SCA 方法:

  • 我将使用开源 OWASP 依赖检查 工具来扫描我的应用程序中存在漏洞 的依赖关系。它通过确定给定依赖项是否有 通用平台枚举 (CPE) 标识符来做到这一点。如果找到,它将生成一份报告,链接到相关的 常见漏洞和暴露 (CVE) 条目。
  • 我将使用 CodeCatalyst 的 Mend SCA Action 将 Mend for SCA 集成 到我的 CI/CD 工作流程中。

请注意,开发人员可以用他们选择的工具替换其中任何一个,只要该工具输出的是C od eCatalyst支持的 SCA 报告 格式

使用 OWASP 依赖关系检查器进行软件组合分析

首先,我选择工作流程选项卡右 上角的 “ 编辑”。默认情况下,CodeCatalyst 会打开 YAML 选项卡。 我切换到 “ 可视化” 选项卡以直观地编辑工作流程,然后选择 “ +操作” (1),然后选择 “+” (2) 来添加一个 CodeCatalyst 操作接下来选择 配置 (3) 选项卡并编辑 操作名称 (4) 。完成后,请务必选中复选标记。

New action configuration showing steps to add a build action

图 3。新操作初始配置

在 “ 配置” 选项卡中向下滚动到 Shell 命令。 在这里,复制并粘贴在调用操作时运行的以下命令片段。

#Set Source Repo Directory to variable
- Run: sourceRepositoryDirectory=$(pwd)
#Install Node Dependencies
- Run: cd web && npm install
#Install known vulnerable dependency (This is for Demonstrative Purposes Only)
- Run: npm install pac-resolver@4.0.0
#Go to parent directory and download OWASP dependency-check CLI tool
- Run: cd .. && wget https://github.com/jeremylong/DependencyCheck/releases/download/v8.1.2/dependency-check-8.1.2-release.zip
#Unzip file - Run: unzip dependency-check-8.1.2-release.zip
#Navigate to dependency-check script location
- Run: cd dependency-check/bin
#Execute dependency-check shell script. Outputs in SARIF format
- Run: ./dependency-check.sh --scan $sourceRepositoryDirectory/web -o $sourceRepositoryDirectory/web/vulnerabilities -f SARIF --disableYarnAudit

这些命令将安装节点依赖关系,下载 OWASP 依赖关系检查 工具,然后运行它以在 SARI F 文件中生成调查结果。请注意第三条命令,它安装了一个存在已知漏洞的模块(这仅用于演示目的)。

输出 (1) 选项卡上,我将 报告前缀 (2) 更改为 owas p 前端。然后我将漏洞的 成功标准 (3) 设置为 0 — 严重 (4)。 如果发现任何严重漏洞,此配置将停止工作流程。

Report configuration showing SCA configuration

图 4:owasp 依赖关系检查前端

最佳做法是在部署资源之前扫描有漏洞的依赖关系,因此我将把我的 ow asp-dependency-check-frontend 操作设置为工作流程的第一步。否则,我可能会意外部署易受攻击的代码。为此,我选择了 “ 构建 (1)” 操作组 , 并将 “ 依赖于” (2) 下拉列表设置为我的 ow asp-dependency-check- frontend 操作。现在,我的操作将在构建任何资源并将其部署到我的 亚马逊云科技 环境之前运行。为了保存我的更改并运行工作流程,我选择了 Commi t (3) 并提供提交消息。

Setting OWASP as the First Action

图 5:将 OWASP 设置为第一个工作流程操作

亚马逊 CodeCatalyst 向我展示了实时运行的工作流程状态。工作流程完成后,我看到操作已进入失败状态。如果我是像 Unicorn Project 中的 Purna 一样的 QA 经理,我想看看为什么行动失败了。在左侧导航栏上,我选择 “ 报告” → “ow asp-frontend-web/漏洞/dependency-check-report.sarif ” 以了解更多详细信息。

SCA report showing 1 critical and 7 medium findings

图 6:SCA 报告概述

此报告视图提供元数据,例如工作流名称、运行 ID、操作名称、存储库和提交 ID。我还可以看到报告状态、按严重性分组的漏洞条形图、扫描的库数量以及 调查结果面 板。我已将此报告的成功标准设置 为 0 — 严重, 因此它失败了,因为发现了 1 个严重漏洞。如果我选择特定的发现 ID,我可以了解有关该特定发现的更多信息,甚至可以在国家漏洞数据库网站上查看。

Dialog showing CVE details for the critical vulnerability

图 7:关键漏洞 CVE 发现

现在,我可以通过左侧导航面板上的 问题 板向开发团队提出这个问题。请参阅 上一 篇文章 ,详细了解团队如何在 CodeCatalyst 中进行协作。

注意:让我们从 ow asp-dependency -check-frontend 操作的命令列表中删除 pac-resolver @4 .0.0 in stall,以使工作流程能够成功进行并完成。

使用 Mend 进行软件组合分析

Mend,前身为WhiteSource,是一家旨在保护当今数字世界的应用程序安全公司。Mend 保护软件的各个方面,提供从问题到解决方案的自动补救、预防和保护,而不仅仅是检测和建议的修复方法。在此 查找有关 Mend 的更多信息。

Mend 软件组合分析 (SCA) 可以作为一项操作在 Amazon CodeCatalyst CI/CD 工作流程中运行,使开发人员在构建和部署软件项目时可以轻松地执行开源软件漏洞检测。这使开发团队可以更轻松地在 亚马逊云科技 上快速构建和交付安全的应用程序。

CodeCatalyst 和 Mend 的入门非常简单。登录我的 Mend 账户后,我需要创建一个名为 Am azon-Codecatalyst 的新 Mend 产品和一个名为 mythical-Misfits 的项目。

接下来,我导航回到 CodeCatalyst 中的现有工作流程并添加一个新操作。但是,这次我将选择 “修复 SCA” 操作。

Adding the Mend action

图 8:修补操作

我现在需要做的就是转到 “ 配置” 选项卡并设置以下值:

  • Mend 项目名称:mythical-Misfits
  • Mend 产品名称:Amazon-Codecatalyst
  • 修补许可证密钥:您可以在 CI/CD 集成部分从您的 Mend 帐户中获取许可证密钥。你可以从 这里 获得更多信息 。

Mend Action Configuration

图 9:修改操作配置

然后我提交修改并返回到 Mend。

Mend console showing analysis of the Mythical Mysfits app

图 10:修补控制台

成功执行后,Mend 将自动更新并显示与上面屏幕截图类似的报告。 它包含有关该项目的有用信息,例如漏洞、许可证、违反政策等。要了解有关 Mend SCA 各种功能的更多信息,请参阅此处的文档 。

静态分析 (SA)

静态分析,也称为静态代码分析,是一种通过在不执行程序的情况下检查代码来完成的调试方法。该过程使人们了解代码结构,可以帮助确保代码符合行业标准。软件开发和质量保证团队在软件工程中使用静态分析。

目前,我的工作流程不进行静态分析。作为一名 DevSecOps 工程师,我可以将其作为一个步骤添加到工作流程中。在本演练中,我将创建一个使用 Pylint 扫描我的 Python 源代码进行静态分析的操作。请注意,你也可以使用其他静态分析工具或像 SuperLinter 这样的 GitHub 操作,如 前一篇文章所 述

使用 Pylint 进行静态分析

导航回 C I/CD → 工作流程 → ApplicationDeploymentPipelin e 并选择 “ 编辑” 后 ,我创建了一个新的测试操作。我将操作名称更改为 pylint 并设置 “ 配置” 选项卡以运行以下 shell 命令:

- Run: pip install pylint 
- Run: pylint $PWD --recursive=y --output-format=json:pylint-report.json --exit-zero

在 “ 输出” 选项卡上,我将 报告前缀 更改为 pylint。然后,我设置了静态分析的成功标准,如下图所示:

Report configuration tab showing static analysis configuration

图 11:静态分析报告配置

由于静态分析通常在执行之前运行,因此 pylint 或 OWASP 操作应该是工作流程中的第一个操作。为了这篇博客的缘故,我们将使用 pylint。我选择之前创建的 OWASP 或 Mend 操作,将 “ 依赖于 ” 下拉列表设置为 pylint 操作,然后提交更改。 工作流程完成后,我可以前往 “报告” > “pylint-pylint-report.json” 了解更多详情。

Static analysis report showing 7 high findings

图 12:Pylint 静态分析报告

报告状态为 “失败”,因为检测到了 1 个以上严重程度的错误。 在 “ 结果” 选项卡上,我可以更详细地查看每项发现,包括严重性、发现类型、来自 linter 的消息以及错误来自哪一行。

清理

如果您一直遵循此工作流程,则应删除部署的资源,以免继续产生费用。首先,删除启动蓝图时关联的 亚马逊云科技 账户中的 亚马逊云科技 云开发套件 (CDK) 使用 亚马逊云科技 CloudFormation 控制台 部署的两个堆栈。 这些堆栈将使用像 Mysfitsxxxxxwebstack 和 Mysfits xxxxAppstack 这样的名称。 其次,通过导航到项目设置并选择 “删除项目”,从 CodeCatalyst 中删除该项目。

结论

在这篇文章中,我演示了DevSecOps团队如何轻松地将安全性集成到Amazon CodeCatalyst工作流程中,通过使用OWASP依赖项检查器检查漏洞或通过软件组合分析(SCA)修复依赖关系来自动进行安全测试。我还概述了 DevSecOps 团队如何配置静态分析 (SA) 报告并使用成功标准来影响工作流程操作的结果。

Imtranur Rahman

Imtranur Rahman 是 WWPS 团队中一位经验丰富的高级解决方案架构师,拥有 14 年以上的经验。Imtranur与大型亚马逊云科技 Global SI合作伙伴合作,帮助他们制定云战略并广泛采用亚马逊的云计算平台。imtranur专门研究容器、开发/SecOps、GitOps、基于微服务的应用程序、混合应用程序解决方案、应用程序现代化,并热爱代表客户进行创新。他高度关注客户,并以凭借其丰富的专业知识提供最佳解决方案而感到自豪。

Wasay Mabood

Wasay 是一名总部位于纽约的合作伙伴解决方案架构师。他主要与 亚马逊云科技 合作伙伴合作开展迁移、培训和合规工作,但也涉足 Web 开发。当他不与客户合作时,他喜欢逛街、在家里闲逛和尝试新想法。