
现代企业完全依赖基于网络的平台进行客户互动、金融交易、数据处理和核心业务运营。随着数字化转型加速和远程或混合工作成为常态,Web应用程序的攻击面急剧扩大,使其成为网络犯罪分子的主要目标。因此,保护Web应用程序变得比以往任何时候都更加关键。
虽然静态代码分析能捕获源代码中的漏洞,但它无法识别应用程序与现实环境、第三方服务和复杂用户工作流交互时出现的运行时安全问题。这正是动态应用安全测试(DAST)变得无价的地方。GitLab的集成DAST解决方案为团队提供了在其CI/CD流水线中、按计划或按需进行自动化安全测试的能力,实现持续的安全验证而不中断开发工作流。
实施DAST是因为它通过在实际操作环境中测试应用程序,提供了关键运行时安全验证,识别静态分析无法检测的漏洞。此外,GitLab DAST可以无缝集成到左移安全工作中,并能增强合规性保证和风险管理。
DAST擅长识别仅在应用程序运行时才显现的安全漏洞。与检查静态代码的静态分析工具不同,DAST扫描器像外部攻击者一样与实时应用程序交互,发现以下问题:
DAST与其他安全测试方法互补,提供全面的应用程序安全覆盖。当与静态应用安全测试(SAST)、软件组成分析(SCA)、手动渗透测试和许多其他扫描器类型结合使用时,DAST填补了安全验证中的关键空白:
GitLab DAST无缝集成到现有的CI/CD流水线中,使团队能够在开发生命周期早期识别安全问题。这种左移方法提供了几个关键好处:
许多监管框架和行业标准要求定期对Web应用程序进行安全测试。DAST帮助组织满足以下标准的合规要求:
GitLab DAST的自动化性质确保了审计师可以依赖的一致、可重复的安全测试,而详细报告提供了合规验证所需的文档。
在实施GitLab DAST之前,请确保您的环境满足以下要求:
将DAST添加到流水线的最简单方法是在.gitlab-ci.yml文件中包含DAST模板,并提供要扫描的网站:
include:
- template: DAST.gitlab-ci.yml
variables:
DAST_WEBSITE: "https://your-application.example.com"此基本配置将:
但是,建议为了获得CI/CD的全部好处,您可以首先部署应用程序,并设置DAST仅在应用程序部署后运行。应用程序URL可以动态创建,并且DAST作业可以使用GitLab Job语法完全配置。
stages:
- build
- deploy
- dast
include:
- template: Security/DAST.gitlab-ci.yml
# 构建并将应用程序推送到GitLab的内置容器注册表
build:
stage: build
variables:
IMAGE: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG:$CI_COMMIT_SHA
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- docker build -t $IMAGE .
- docker push $IMAGE
# 将应用程序部署到您建议的目标,动态设置dast站点,需要构建完成
deploy:
stage: deploy
script:
- echo "DAST_WEBSITE=http://your-application.example.com" >> deploy.env
- echo "Perform deployment here"
environment:
name: $DEPLOY_NAME
url: http://your-application.example.com
artifacts:
reports:
dotenv: deploy.env
dependencies:
- build
# 配置DAST在非主分支上运行主动扫描,在主分支上运行被动扫描,并要求在运行前完成部署
dast:
stage: dast
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
variables:
DAST_FULL_SCAN: "false"
- if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH
variables:
DAST_FULL_SCAN: "true"
dependencies:
- deploy您可以通过查看Tanuki Shop演示应用程序来学习示例,该应用程序生成以下流水线:
在上面的示例中,我们为非默认分支启用了主动扫描:
- if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH
variables:
DAST_FULL_SCAN: "true"GitLab DAST采用两种不同的扫描方法(被动和主动),每种方法服务于不同的安全测试需求。
被动扫描分析应用程序响应而不发送可能有害的请求。此方法:
主动扫描发送精心设计的请求以触发漏洞。此方法:
注意:DAST扫描器默认设置为被动。
DAST有几个可以通过环境变量应用的配置选项。有关DAST所有可能配置选项的列表,请参阅DAST文档。
DAST需要在CI/CD作业中进行身份验证配置以实现完整的安全覆盖。身份验证使DAST能够模拟真实攻击并测试仅在登录后可访问的用户特定功能。DAST作业通常通过在浏览器中提交登录表单进行身份验证,然后在继续使用保存的凭据爬取应用程序之前验证成功。失败的身份验证会停止作业。
支持的身份验证方法:
以下是一个在Tanuki Shop MR中为单步登录表单的示例,该MR为非默认分支添加了管理员身份验证。
dast:
stage: dast
before_script:
- echo "DAST_TARGET_URL set to '$DAST_TARGET_URL'" # 从部署作业动态加载
- echo "DAST_AUTH_URL set to '$DAST_TARGET_URL'" # 从部署作业动态加载
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
variables:
DAST_FULL_SCAN: "false"
- if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH
variables:
DAST_FULL_SCAN: "true" # 运行被动和主动检查
DAST_AUTH_USERNAME: "admin@tanuki.local" # 在网站上身份验证的用户名
DAST_AUTH_PASSWORD: "admin123" # 在网站上身份验证的密码
DAST_AUTH_USERNAME_FIELD: "css:input[id=email]" # 描述在登录表单上用于输入用户名的元素的选择器
DAST_AUTH_PASSWORD_FIELD: "css:input[id=password]" # 描述在登录表单上用于输入密码的元素的选择器
DAST_AUTH_SUBMIT_FIELD: "css:button[id=loginButton]" # 描述在登录表单上点击提交的元素的选择器
DAST_SCOPE_EXCLUDE_ELEMENTS: "css:[id=navbarLogoutButton]" # 扫描时忽略的选择器逗号分隔列表
DAST_AUTH_REPORT: "true" # 生成详细说明身份验证过程中所采取步骤的报告
DAST_REQUEST_COOKIES: "welcomebanner_status:dismiss,cookieconsent_status:dismiss" # 添加到每个请求的cookie名称和值
DAST_CRAWL_GRAPH: "true" # 生成扫描爬取阶段访问的导航路径的SVG图
dependencies:
- deploy-kubernetes您可以通过查看作业日志来查看身份验证是否成功:
一旦此作业完成,它会提供一个身份验证报告,其中包括登录页面的屏幕截图:
您还可以在我们的DAST演示组中查看有关带身份验证的DAST的更多示例。要了解如何根据您的特定要求执行带身份验证的DAST,请参阅DAST身份验证文档。
GitLab的DAST通过直接在合并请求中显示结果,将安全扫描无缝集成到您的开发工作流中:
这些结果包括MR中的全面漏洞数据,以帮助开发人员在代码合并前识别和解决安全问题。以下是DAST通常报告的内容:
对于管理默认(或生产)分支中的漏洞,GitLab漏洞报告提供了一个集中仪表板,用于监控整个项目或组织中所有安全发现(在默认分支中)。此综合视图聚合了所有安全扫描结果,提供过滤和排序功能,以帮助安全团队优先处理修复工作。
当选择一个漏洞时,您将被带到其漏洞页面:
就像在合并请求中一样,漏洞页面提供全面的漏洞数据,如上所示。从这里,您可以通过为漏洞分配状态来进行分类:
当漏洞状态更改时,审计日志包括谁更改了它、何时更改以及更改原因的注释。此综合系统允许安全团队在其整个生命周期内有效优先处理、跟踪和管理漏洞,具有清晰的问责制和详细的风险上下文。
GitLab通过按需和计划性DAST扫描提供了超越标准CI/CD流水线集成的灵活扫描选项。按需扫描允许安全团队和开发人员在需要时手动启动DAST测试,而无需等待代码提交或流水线触发。此能力对于临时安全评估、事件响应场景或测试常规流水线扫描可能未覆盖的特定应用程序功能特别有价值。
按需扫描可以使用自定义参数、目标URL和扫描配置文件进行配置,使其成为对特定应用程序组件或新部署功能进行重点安全测试的理想选择。计划性DAST扫描提供自动化的、基于时间的安全测试,独立于开发工作流运行。这些扫描可以配置为每天、每周或在自定义间隔运行,确保对生产应用程序的持续安全监控。
要了解如何在项目中实施按需或计划性扫描,请参阅DAST按需扫描文档。
GitLab的安全策略框架允许组织在所有项目中强制执行一致的安全标准,同时为不同的团队和环境保持灵活性。安全策略支持对DAST扫描要求进行集中治理,确保关键应用程序获得适当的安全测试,而无需单个项目配置。通过在组或实例级别定义安全策略,安全团队可以为特定项目类型、部署环境或风险分类强制要求DAST扫描。
扫描/流水线执行策略可以配置为基于特定条件自动触发DAST扫描,例如对受保护分支的合并请求、计划间隔或部署事件。例如,策略可能要求在生产部署前对所有应用程序进行完整的主动DAST扫描,同时仅允许对开发分支进行被动扫描。这些策略可以包括自动应用于所有覆盖项目的自定义变量、身份验证配置和排除规则,减少开发团队的负担并确保安全合规。
合并请求批准策略通过强制执行可能影响安全的代码更改的人工审查,提供了额外的安全治理层。这些策略可以配置为在DAST扫描检测到新漏洞时、当安全发现超过定义的阈值时、或当更改影响安全关键组件时要求安全团队批准。例如,当DAST发现包括高严重性漏洞时,策略可能自动要求指定安全工程师的批准,同时允许较低风险发现继续进行标准代码审查过程。
要了解有关GitLab安全策略的更多信息,请参阅策略文档。此外,为了合规性,GitLab提供了安全清单和合规中心,这可以让您监督DAST是否在您的环境中运行以及在哪里需要它。
要了解有关这些功能的更多信息,请访问我们的软件合规解决方案页面。
GitLab DAST代表了一个将动态安全测试集成到现代开发工作流中的强大解决方案。通过在CI/CD流水线中实施DAST,您的团队获得了自动检测运行时漏洞、维护安全标准合规性以及构建更安全应用程序的能力,而不会牺牲开发速度。
成功实施DAST的关键在于从基本配置开始,并随着安全成熟度的增长逐渐扩展到更复杂的扫描配置文件。从简单的网站扫描开始,然后逐步添加身份验证、自定义排除和高级报告以匹配您的特定安全要求。
请记住,当DAST与其他安全测试方法结合使用时最为有效。将其与静态分析、依赖项扫描和手动安全审查一起使用,以创建全面的安全测试策略。GitLab DAST的自动化性质确保安全测试成为开发过程中一致、可重复的部分,而不是事后考虑。
要了解有关GitLab安全的更多信息,请查看我们的安全测试解决方案页面。要开始使用GitLab DAST,请立即注册GitLab Ultimate的免费试用。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。