构建DevSecOps软件开发安全体系

发布时间 2023-12-03 22:07:04作者: 小李吃西瓜

构建DevSecOps体系最核心的技术是安全工具链的建设,如代码审计工具(SAST)、交互式应用安全检测工具(IAST)、动态测试工具(DAST)等。这类工具针对开发软件代码或者软件制品进行自动化测试,发现软件漏洞的核心技术。同时,还有软件成分分析工具(SCA),可以从开源组件安全及开源许可的角度对软件进行安全分析。

上图中DAST处于测试环境中是可以实现安全左移,但端口开放、系统漏洞、管理后台开放扫描一般为上线后进行,比如端口扫描在测试环境下扫描端口没意义,需要正式环境的数据,可能在测试环境下数据库端口未开放,正式环境下开放了数据库端口,需要黑盒进行周期性扫描,所以正式上线后仍需进行黑盒扫描

SCA也可放在构建之前进行源码扫描,若存在安全风险阻断构建流程,将风险返回风险治理平台,最后到开发人员实现风险闭环

应用程序安全测试(AST)

AST(Application Security Testing,应用程序安全测试)是一种广泛应用于软件开发过程中的安全测试技术,它涵盖了多种测试方法,其中包括静态应用程序安全测试(SAST)、动态应用程序安全测试(DAST)和交互式应用程序安全测试(IAST)。

DAST

DAST是一种黑盒测试方法,是目前应用最广泛、使用最简单的一种Web应用安全测试方法。测试者无需了解架构、网络或者代码,而是从一个恶意攻击者的角度来测试应用程序。由于应用程序依赖于输入和输出运行,DAST通过模拟攻击者的行为构造特定的输入给到应用程序,同时分析应用程序的行为和反应,进而确定该应用是否存在安全漏洞。与静态检测方案相比,虽然DAST测试的过程相对比较独立,但是其在DevSecOps流程的测试阶段中发挥着重要作用,可以发现很多静态检测难以发现的运行时漏洞,例如身份验证和服务器配置错误、代码注入、SQL 注入和 XSS 错误等等

技术原理:

通过模拟真实黑客的攻击行为进行测试

1)通过爬虫对被测Web应用程序进行全面分析,了解应用程序的结构、目录、页面、参数等信息;

2)根据爬虫分析结果,利用扫描规则库对发现的页面和参数进行攻击尝试,例如注入攻击、跨站脚本攻击、文件包含漏洞等;

3)监听被测应用程序的反馈信息,包括HTTP响应、错误消息和日志信息等,以此来分析应用程序的行为和反应;

4)分析应用程序的响应结果,确定是否存在安全漏洞,并生成漏洞报告,指导开发人员修复问题。

这就好比应用程序是一栋大楼,DAST 工具可以被视为大楼的安保人员。这名保安首先会寻找这栋大楼有哪些入口例如门、窗等。之后便会尝试各种闯入大楼的方法,例如撬开门锁或打破窗户。完成各种尝试后,保安会向大楼经理汇报并解释他是如何闯入大楼的。通过这一系列流程,DAST可以有效地发现运行时漏洞和安全配置问题,对于识别安全漏洞和提高应用程序安全性方面发挥重要作用

优缺点:

优点:

  1. 无需源代码,测试对象不区分语言,可以发现静态扫描无法识别的风险
  2. 攻击者视角发现问题,准确率高
  3. 扫描成本低,能发现大部分风险

缺点:

  1. 部分漏洞场景无法覆盖,漏报率高
  2. 对扫描环境有影响,可能产生脏数据
  3. 无法定位漏洞的具体位置

SAST

SAST是一种白盒测试方法,它更侧重于识别应用程序源代码中的错误和漏洞。正如静态应用安全测试的字面意思,它可以在不运行代码(静止状态)的情况下进行测试,这种静态测试的特点使其可以在DevSecOps流程中偏早期的编码、构建、测试阶段进行,在实践中SAST通常会被集成在CI流程中甚至IDE编辑器中。在开发人员编码时为其提供实时反馈,帮助他们在代码传递到 SDLC 的下一阶段之前解决问题。

技术原理:

SAST扫描的核心是基于一组预先确定的规则(这些规则定义了源码中需要评估和处理的编码错误)与代码进行匹配。

第一步:通过语法分析和词法分析的方法形成中间代码,将其源代码之间的调用关系、执行环境、上下文等分析清楚。

第二步:通过语义分析(分析程序中不安全的函数)、数据流分析(跟踪、记录并分析程序中的数据传递过程所产生的安全问题)、控制流分析(分析程序特定时间,状态下执行操作指令的安全问题)等方法分析代码中可能存在的安全问题。

第三步:匹配所有规则库中的漏洞特征,进而找出疑似存在安全缺陷的代码片段

img

优缺点:

优点:

  1. 检测漏洞类型覆盖率高,覆盖已知漏洞类型和常见的安全缺陷
  2. 不需要部署就可以检测,左移
  3. 对运行环境没有影响
  4. 可定位缺陷所在位置

缺点:

  1. 误报率高
  2. 需要区分语言,成本高
  3. 没法结合环境,可能从代码角度存在漏洞, 但无法真实利用

IAST

通过代理、VPN或者在服务端部署Agent程序,收集、监控Web应用程序运行时函数执行、数据传输,并与扫描器端进行实时交互,高效、准确的识别安全缺陷及漏洞,同时可准确确定漏洞所在的代码文件、行数、函数及参数。IAST相当于是DAST和SAST结合的一种互相关联运行时安全检测技术。

技术原理:

代理模式,在PC端浏览器或者移动端APP设置代理,通过代理拿到功能测试的流量,利用功能测试流量模拟多种漏洞检测方式对被测服务器进行安全测试。

插桩模式,插桩模式是在保证目标程序原有逻辑完整的情况下,在特定的位置插入探针,在应用程序运行时,通过探针获取请求、代码数据流、代码控制流等,基于请求、代码、数据流、控制流综合分析判断漏洞。插桩模式分为主动式插桩和被动式插庄

被动式IAST通过在被测试应用程序中部署探针,然后获取程序执行的代码上下文信息及数据流向,根据数据流向及程序执行的代码上下文信息梳理污点链路,判断是否存在漏洞。之所以称之为被动主要原因在于,此类测试不会进行任何主动攻击或抓取,其收集和检测的流量主要来自测试人员在测试过程中的操作。因此被动 IAST特点是对应用程序性能的影响较小,并且可以在不对源代码进行任何更改的情况下进行部署。

主动式IAST同样在被测试应用程序中部署探针,但它主要通过使用外部扫描器触发流量,再由探针进行捕获、检测是否存在漏洞,由于触发流量的方式不同,主动 IAST 比被动 IAST 更全面,但这种方式可能会在测试过程中产生脏数据

优缺点:

代理模式优点:

  1. 不需要插庄,不会对应用有影响,
  2. 准确性高,覆盖率高

缺点:

  1. 无法定位到代码
  2. 可能有脏数据

插庄模式优点:

  1. 漏洞检测的效率比较高,可以做到实时检测
  2. 漏洞详情可以具体到某一行代码。

缺点:

  1. IAST的使用场景有一定的局限性。它只能在具有虚拟运行时环境的语言上执行,例如Java、Python和Node.js等语言,难以支持C、C++、Golang等语言。这限制了IAST的应用范围和适用性;

  2. 采用部署Agent模式的IAST需要每次更新Agent都需要重启Web服务器,这增加了部署的成本和复杂性,对于一些大型、复杂的应用程序而言尤其如此;

  3. 主动式IAST,在测试过程中可能会产生脏数据,被动式IAST虽不产生脏数据,但其只能在被单元测试或第三方爬虫激活的功能中发现漏洞,因此这可能导致很多漏洞被遗漏;

devsecops相对于sdl来说对安全产品提出了哪些更高的要求

工具集成: DevSecOps需要使用一系列工具来支持其目标。比如cicd软件jenkins,gitlab甚至自研的,如何集成各个工具是一个比较大的挑战,例如sca如果要做开发阶段的扫描插件,常见的就需要做idea

速度与灵活性: DevSecOps强调快速迭代和交付,而SDL可能需要更多的时间来进行详尽的安全审查和测试。在确保安全性的同时保持安全扫描速度是一个挑战,特别是对于一些追求快速交付的团队。例如sast接入到了发布流程中,需要经过白盒扫描才可以发布上线,这时候过长的扫描时间会导致整个开发周期变长,但是可以做增量扫描吧,一定程度上增加扫描速度。

自动化的安全性保证:DevSecOps侧重于自动化,而SDL可能涉及到一些手动的审查和流程。将这两者结合,确保自动化流程不会牺牲安全性,是一个需要仔细考虑的方面。例如iast对系统性能影响过大,减少数据流追踪层数降低安全性。