乐趣区

关于devsecops:2-种方式在流水线中集成-DAST动态保护应用程序安全

💡 如何在流水线中集成与利用 DAST?

近日,在「DevSecOps 软件平安开发实际」课程上,极狐 (GitLab) 前端工程师钱堃、极狐(GitLab) 高级后端工程师张林杰,开展了对于 DAST 的概念、必要性、优缺点 的内容分享,并联合 实操演示,帮忙大家进一步把握 DAST 技术。

以下内容整顿自本次直播,你也能够点击👉观看视频回放或下载 PPT。Enjoy~

DevSecOps 在 DevOps 的根底上减少了 Sec(Security,平安)的概念,是指通过与 Sec(平安团队)+ Dev(研发团队)+ Ops(经营团队)单干,在规范 DevOps 周期中建设要害的平安准则

DevSecOps 提倡“平安左移”的理念,即在软件生命周期(SDLC)的晚期阶段就重视平安问题,从而避免缺点产生以及尽早找出破绽。

在软件开发生命周期不同阶段发现破绽,其修复老本(人力、财力等)不一样。如下图所示,如果说需要阶段发现一个破绽,其修复老本是 1,在编码阶段就变成了 5,而在生产阶段变成了惊人的 30,这意味着:生产阶段破绽修复老本 = 需要阶段破绽修复老本 x 30

可见通过平安左移,可能大幅升高安全漏洞修复老本。

图片起源:NIST

不同开发阶段有不同危险破绽,借助各种平安扫描工具,层层递进,能力实现整体,例如:

  • SAST – 动态利用平安测试;
  • DAST – 动静利用平安测试;
  • IAST – 交互式利用平安测试;
  • RASP – 运行时利用自我爱护;
  • Dependency-Scanning – 依赖项平安扫描;
  • Secrets Detection – 机密信息检测。

图片起源:Freebuf

DAST 和 SAST

明天,咱们次要分享平安扫描工具之一——DAST(Dynamic Application Security Testing,动静应用程序平安测试)。

提到 DAST,就绕不开通常与其成对呈现的 SAST(Static Application Security Testing,动态应用程序平安测试)。首先,先厘清概念:

➤ SAST

通常在 编码阶段 ,对 源代码 进行平安测试发现安全漏洞的测试计划。

SAST 是对应用程序源代码执行间接的 白盒剖析,剖析是在代码的动态视图上运行的,这意味着代码在审查时没有运行。

➤ DAST

测试或运行阶段 ,剖析 应用程序的动静运行状态。它模仿黑客行为对应用程序进行动静攻打,剖析应用程序的反馈,从而确定该 Web 利用是否易受攻击。

DAST 是一种 黑盒测试 技术,它们不能拜访代码或实现细节,只查看系统对潜在破绽测试的申请和响应。换言之,DAST 是内部的破绽扫描程序。

另外,从扫描筹备、扫描速度、开发语言等方面进行比拟,两者之间还有以下差异:

为什么须要 DAST?

从上文的内容中能够看到 SAST 具备其局限性,包含:

  • SAST 利用于代码未运行时,无奈笼罩运行问题或配置问题;
  • SAST 对于访问控制,无奈笼罩身份验证或加密等场景;
  • 支流 SAST 工具均基于污点流传模型实现,在代码分支多、调用层级很深的状况下,信息网络宏大(特地是思考了调用程序和全局变量的状况下),耗时成倍增长;
  • 为升高复杂度,查看器失落上下文信息,从而无奈精确定位到某些标识符正确指向对象,最终导致误报或漏报。

举一个 SAST 误报的例子。如下图,这是一段 JS 代码,定义了一个 test 函数,变量 b = 11 * 10,如果 b > 100,那么返回一个一般字符串 safe;如果 b < 100,则将函数传进来的实参去进行 eval

咱们肉眼来看,能够算出 b = 110,永远都是大于 100,返回 safe 字符串,前面的 eval 永远不会执行,所以这个函数在咱们料想的运行状况下,它是一个平安函数。

但如果在极狐 GitLab 上开启 SAST 查看,就能够扫到这个破绽,如下图,发现应用了 eval,认为有可能会导致危险的注入,进行正告,但实际上这个函数是平安的,因而产生误报(在极狐 GitLab 中,用户能够 dismiss)。

这个例子阐明了 SAST 的局限性。鱼和熊掌不可兼得,因而须要 DAST 补救一些 SAST 的有余。

DAST 的工作流程

以 Web 部署为例,DAST 的工作流程是:

Step 1:通过爬虫扫描整个 Web 利用构造,爬虫会发现被测 Web 程序的目录数量、页面数量、页面参数;

Step 2 :依据爬虫的剖析后果,对发现的页面和参数发送批改的 HTTP Request 进行攻打尝试(扫描规定库);

Step 3 :通过剖析 Response,验证是否存在安全漏洞。

上述步骤波及到两种扫描形式,即:

  • 被动扫描(default):不主动攻击,搜寻 HTTP 音讯、Cookie、存储事件、控制台事件和 DOM 以查找破绽,包含搜寻裸露的信用卡、裸露的秘密令牌、短少的内容安全策略以及重定向到不受信赖的地位。
  • 被动扫描(full):主动攻击,剖析每个 HTTP 申请以获取注入地位,例如查问值、标头值、cookie 值、表单和 JSON 字符串值,将攻打内容注入到对应注入地位,造成新的申请,将申请发送到指标应用程序,并查看 HTTP 响应来确定攻打是否胜利。

DAST 的优缺点探析

DAST 长处

1. 不受语言和框架限度

DAST 测试不要求具备编程语言常识;无论应用何种框架,DAST 工具都会依据输出和输入,评估应用程序行为。

2. 低误报率

DAST 工具对应用程序环境执行端到端扫描,使平安钻研人员可能检测和辨认安全漏洞。

3. 无需拜访源代码

DAST 扫描通过应用程序前端发送歹意无效负载来测试,因而企业能够利用第三方平安服务来执行,而不裸露利用程序代码。

DAST 毛病

尽管 DAST 工具评估利用程序代码中的各种破绽,但它们无奈定位代码库中平安问题的确切地位;也无奈嗅探应用程序堆栈中未执行局部中的破绽。

常见的 DAST 工具

下图所示是常见的 DAST 工具:

极狐 GitLab 中 DAST 流水线的流程

Step 1:因为 DAST 是黑盒测试,须要依赖于一个运行中的实在应用程序能力工作。因而,先筹备一个已部署的利用网站(测试网站);

Step 2:在仓库 CI Yaml 文件配置对应 DAST 脚本

Step 3:把相应配置提交到对应极狐 GitLab 仓库,触发流水线,通过 CI runner 运行扫描程序,模仿用户拜访申请;

Step 4:取得响应后果,分支器会针对响应返回后果做具体分析,如果输入有破绽,则输入到对应的破绽报告中,该报告在 CI runner 运行完之后,对立输入到 CI 产物中;

Step 5:依据破绽报告展现的破绽具体信息,开发者能够着手进行破绽修复。

极狐 GitLab DAST 配置指南

Web Analyzer

两种类型的 Web Analyzer 

理论开发中,以 Web 利用为主。极狐 GitLab 针对 Web 利用提供两种类型的 Analyzer:Proxy-based analyzer 和 Browser-based analyzer。接下来别离介绍:

➤ Proxy-based analyzer: 用于扫描传统的简略 HTML 利用

在极狐 GitLab 中配置 DAST 的 Proxy-based analyzer 非常简单:申明 DAST stages,通过引入一个模板文件,就能够开箱即用了。

在理论运行的过程中,调用 ZAP 代理程序,对应用程序进行一个扫描过程:

➤ Browser-based analyzer: 用于扫描重度应用了 JavaScript 的利用,包含单页利用

Browser-based analyzer 应用浏览器模仿拜访:配置对应参数 DAST_BROWSER_SCAN,设置为 true,就能够启用了。

它的原理是在 ZAP 前端设置了一层浏览器代理,模仿用户进行行为剖析,通过 ZAP 代理,拜访到具体的 Web Application。这样的益处是所有申请和返回后果实际上都是通过 ZAP,这样能够利用 ZAP 的申请剖析性能,对具体响应就做具体分析,看是否存在破绽。

上图配置中援用了一个模版配置文件:DAST.gitlab-ci.yml,它具体是做了哪些事件?如下图:

  • 申明了须要援用的镜像版本号:13;
  • 申明了一个新的 DAST 工作,应用极狐 GitLab 官网提供的 DAST 镜像,进行扫描解决;
  • 能够看到具体的 script 参数外面,先通过提取对应的环境变量 DAST_WEBSITE(如下图形式 1)或者把对应的地址放到根目录下 enviroment_url.txt 文件(如下图形式 2),两种形式取其一;
  • 执行脚本,剖析完之后他通过 artifacts,也就是对应浏览 Pipeline 产物;
  • 最初将破绽报告输出到文件中去。

图注 / 形式一:适宜动态地址

图注 / 形式 2:适宜动静地址

配置指标应用程序

如果想启用 DAST,必须要一个 Runtime。如果每次都要事后手动去部署 Runtime 的话,是比拟麻烦的,有没有主动部署形式?答案是有的,并且有两种形式:

➤ 通过 docker service 配置 Runtime

提前编译好指标镜像文件,通过 docker service 形式在 Pipeline 中将 Runtime 运行起来。

如下图,定义了两个 job,第一个是 deploy 的 job,第二个是 DAST 的一个运行工作。

在 deploy 外面,通过 docker build 的形式把指标的镜像文件构建进去,并推送到了极狐 GitLab 的一个镜像仓库中。

在启用 DAST 的时候,定义了一个 services 的依赖项,即须要先把对应的镜像运行起来后,失去了一个理论运行地址,把这个地址填到 DAST_WEBSITE 环境变量中,这样就能够实现在 Pipeline 里运行 Runtime 的成果。

这种形式适宜简略的镜像程序,因为如果有很多依赖项,就须要把对应依赖项的 Service 也一并定义,比拟麻烦。

➤ 和 Review apps 搭配应用

极狐 GitLab 举荐 Review apps 性能,它能够针对某个合并申请来主动部署,用于 QA 验证或自动化测试

Review apps 提供了这样一种机制:把对应的 MR 部署到某个绝对长期的环境中去,就能够通过这个长期环境去看到这个变更的理论影响成果。这样一个长期 runtime 环境,正好能够搭配 DAST 来应用,做对应的 DAST 检测(如下图)。

身份认证:多种登录形式

因为爬虫并不可能主动对未登录的页面进行爬取,所以先要在爬虫外面做一些设置,让爬虫主动登录,Web Analyzer 反对多种登录形式,包含:

  • HTTP authentication;
  • Single-step login form;
  • Multi-step login form。

须要留神的几点:

  • 爬虫不具备人机校验能力,登录认证时须要敞开 CAPTCHA;
  • 爬虫会遍历网站上的所有链接,如果不对它进行限度,有可能不小心扫到了一个登出链接,而后又会跳到一个从新登录的状态。因而要去除扫描登出链接。
扫描查看项与扫描时间管制

极狐 GitLab 的破绽扫描查看项,蕴含高等级、低等级,超过 150 种。

有些部署网站可能比拟大,波及的页面数量和链接数量很多,执行 DAST 可能会呈现执行工夫过长或超时的状况。

此时就要手动管制对应的爬虫解决数量,DAST 提供了一些对应参数去限度,包含浏览器的数量、最大执行数、最大页面查看深度、总超时工夫、具体操作的操作超时工夫等,依据具体利用场景去调整。

API Analyzer

API Analyzer 与 Web Analyzer 的区别是,API Analyzer 不反对爬取,须要手动给到 API 文档,让它晓得哪些端点须要检测。

反对的 API 格局包含 REST  API、SOAP、GraphQL、From bodies, JSON or XML。

如下图,常见的 OpenAPI 须要在 ci.yml 文件中去配置,引入 DAST_API 的样本文件,设置对应的 API 端点即对应的文档地址。

模板配置文件

DAST-API.gitlab-ci.yml 文件引入了另外一个仓库叫做 api-security 镜像,理论执行时也调用了不同的扫描剖析脚本去执行输入。

下图是另外一种格局的 API 的配置形式:Postman collection,能够看到的对应的环境变量名称变了。

接着是 GraphQL API 配置形式,通过间接配置 API 端点即可,如果其反对类型,能够通过 API 自身的到详尽文档,不须要指出文档地址,否则须要手动指出。

Analyzer 拿到文档后,首先进行扫描操作,之后针对不同 API 进行理论检测和攻打。

图注 /GraphQL Schema with introspection

图注 /GraphQL Schema with schema file

身份认证:多种形式

 HTTP Basic Auth:间接提供一个账号密码

➤ Bearer token,分为两种:

  • token 的过期工夫比拟长,能够在 CI 脚本 Yaml 文件名配置一个绝对固定的 token,这样在整个剖析过程中,只须要用到这一个 token 就能够了。
  • token 时效性比拟短的状况下,须要在爬取过程中定期去做更新解决,能够去指定更新 token 的脚本、更新工夫,做到自动更新。

以上,就是对于 DAST 的基础知识和操作分享。同时,咱们提供了极狐 GitLab 旗舰版 30 天收费体验机会,欢送到极狐 GitLab 官网申请试用,联合产品实操,将更加有助于你进一步把握 DAST。

退出移动版