adone
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
1. 概念介绍
2012年,Gartner提出了DevSecOps的理念,将安全防护流程有机地融入传统的 DevOps 流程中,为研发安全提供强有力保证,安全测试是 DevSecOps 实践的关键部分,安全测试工具又是支撑研发阶段安全要求落地的重要保障。SAST、DAST、IAST和SCA都是应用程序安全测试中的新技术,以下对这类安全测试技术进行简单介绍:
SAST是静态应用程序安全测试(Static Application Security Testing)的缩写,是一种分析代码的测试过程,能够扫描和检测到程序内部的安全漏洞,进而确保应用的安全性。它也叫静态分析,不用运行组件,在编译代码阶段之前,通过分析源代码来发现一些容易让应用受到攻击的安全漏洞。
DAST是动态应用程序安全测试(Dynamic Application Security Testing)的缩写,相当于一种在测试或运行阶段分析应用程序的动态运行状态的技术。它模拟黑客行为对应用程序进行动态攻击,并捕获程序反应,从而确定该应用是否会受到攻击。
IAST,即交互式应用程序安全测试(Interactive Application Security Testing)。它使用动态测试(即运行时测试)技术,可以发现正在运行的Web应用的漏洞。其解决方案旨在帮助企业识别和管理与这些漏洞有关的安全风险。
SCA,即软件组件分析(Software Component Analysis)。这是一个描述自动识别代码库中开源组件的术语。一旦识别出组件,就可以对比已知的安全问题,判断组件是否存在这些隐患,了解在一个应用里面是否存在组件的不同版本。此外,SCA还可以帮助识别组件的年份,确定是否需要维护,并发现开源代码中的许可证合规性问题。
2. 工具特性分析
2.1 AST工具特性对比
安全技术 | 优势 | 劣势 | 代表工具 |
SAST | SAST是一种白盒测试技术,通常在编码阶段分析应用程序的源代码或二进制文件来发现程序代码存在的安全漏洞: (1)代码具有高度可视性,检测问题类型更丰富 (2)测试对象包括WEB应用程序、APP (3)不需要用户界面(UI),漏洞发现更及时 | (1)代码理解局限性、区分开发语言 (2)不能确定漏洞可利用性,漏洞分类不明确 (3)不能整合测试问题,集成系统的漏洞发现不了 | 主要是一些代码扫描工具和代码审计工具。 (1)商业工具:Fortify、CheckMatrix (2)开源工具: Rips(PHP)、Seay源码审计(PHP)、PMD(JAVA)、 Raptor(支持多种语言的扫描插件) |
DAST | DAST是一种黑盒测试技术,它模拟黑客行为对应用程序进行动态攻击,主要优势: (1)攻击者视角,可发现大多数高风险问题 (2)无需源代码,测试对象范围较广 (3)支持当前的各类主流编程语言开发的应用、第三方组件、第三方框架 | (1)覆盖范围有限,覆盖率依赖于Explore的结果,对于AJAX页面、CSRF token页面、验证码页面等无法扫描 (2)测试对象为HTTP/HTTPS的web应用程序,无法测试APP (3)无法定位漏洞的具体位置,不适合DevOps环节集成使用 | 主要是web应用扫描工具: (1)商业工具: AppScan、AWVS、WebInspect (2)开源工具: OWASP Zap、Xray、 w3af |
IAST | IAST相当于是DAST和SAST结合的一种互相关联运行时安全检测技术,属于灰盒测试技术,主要优势: (1)漏洞准确率高,误报率极低,漏洞信息详细度高 (2)支持测试AJAX页面、CSRF token页面、验证码页面、API孤链、POST表单请求等环境 (3)测试过程无感知、漏洞发现快 | (1)只能在具有虚拟运行时环境的语言上执行,例如JAVA、C#、Python、NodeJs,不支持C、C++、Golang等语言 (2)每次更新Agent需要重启webserver,部署成本较高 (3)无法测试业务逻辑漏洞 | 百度的OpenRasp |
2.2 SCA工具
常用工具介绍:
SCA与其他三种安全测试技术不同,它主要是对软件组件进行分析管理。在软件开发过程中,通常使用软件成分分析(SCA)工具对软件包中引入的开源和第三方软件的安全性进行评估。高级的SCA工具可以使管理开源代码和开源组件的整个过程自动化,从选择、发出警报甚至到自动阻止。
大多数组织使用SCA工具来识别开源工具中的风险,典型的SCA工具有:
- Synopsys BlackDuck
- JFrog的Xray
- Nexus的SonaType
- FossID
- Veracode的SourceClear
- WhiteSource
其中业界认为Synopsys和WhiteSource为SCA工具领先者。
- SCA工作项
SCA主要的工作项包括开源组件漏洞管理、开源组件许可证管理和软件物料清单(SBOM)管理。要满足上述工作项,一款优秀的SCA工具必须要求满足以下要求:
- SCA的前提是引用的开源组件的识别,我们使用的许多语言都会有比较成熟的包管理器,
我们可以基于它的依赖配置文件去识别组件。比如说Java我们最常用的maven,它的依赖管理文件一般都是pom.xml,go一般则是go.mod。开源组件依赖分为两种,一种是直接依赖,一种是间接依赖。代码中的大多数漏洞都包含在未知且正在使用的间接依赖项中。因此,SCA工具需要准确地检查代码中的所有依赖项,识别和检查间接依赖项。像C/C++这样的语言,它没有像maven这样统一的包管理器,SCA识别起来就会有些困难。目前业界一般的做法是进行哈希指纹匹配,但这就需要提供SCA的公司必须有一个庞大的组件库以及版本的特征库,这样才能实现软件成分分析。
- 完成引用的开源组件识别后,通过SCA识别所有相关的开源安全漏洞,例如CVEs(通用漏洞披露)和国家信息安全漏洞共享平台披露的漏洞。SCA可以提醒使用者任何检测到的漏洞或潜在的许可证冲突,检测到存在漏洞的开源组件版本要及时进行升级修复或补丁修复,存在许可证冲突的开源组件要进行替换消减。
- 通过以上两点的能力,最终我们会得到一个软件物料清单(SBOM)清单,高级SCA工具可以自动化生成SBOM,但SBOM在本质上只是一张列表,它提供充足的可见性,却不传达任何风险信息。成熟的SCA工具在生成SBOM的基础上,通过完整的依赖关系图理清风险组件的影响范围,通过漏洞风险等级优先级排序给出有效的专家处置建议,这样才能真正将SBOM与相关风险关联起来,最大程度的帮助用户解决开源与软件供应链安全问题。
- 基于SBOM的开源软件供应链安全
(1)SBOM介绍
SBOM被提出之前,有很多企业通过各种形式建立软件的配套关系来管理引用软件的风险,但这些是基于企业内部的格式,与外部无法互通。SBOM的标准要求是支持美国信通院NTIA最小集,并与已有标准兼容互传。如今三种标准被指定为批准的格式:SPDX、CycloneDX和SWID。格式如下:
标准名称 | 格式 | 描述 |
SPDX | NTIA最小集 + SPDX可选字段 | Linux基金会项目,已成为ISO/IEC 5962-2021标准 |
CycloneDX | NTIA最小集 + CycloneDX可选字段 | OWASP项目,社区生态和工具相对更活跃 |
SWID | NTIA最小集 + SWID可选字段 | 主要用于软件标识、安全、升级和卸载场景 |
国家SwBOM | NTIA最小集 +国家SwBOM可选字段 | 基于SPDX,在最小集上增加license字段 |
SBOM唯一标识服务PURL协议用于描述软件包唯一性的一种标准协议,统一的方式识别和定位软件包,可用于跨编程语言、包管理器、打包约定、工具、API和数据库等。
PURL表达式:采用 scheme: type/namespace/name@version?qualifiers#subpath 描述软件包的唯一性。样例:(PyPI包管理) pkg:pypi/django@1.11.1
Type:包仓库类型如maven、pypi、github
Namespace:命名空间,如自研软件的offering名称/语言仓group信息
Name:软件包名称,如自研软件包名称、Maven artifactid
Version:软件版本信息
qualifiers#subpath:描述操作系统、路径等信息
(2)构建SwBOM信息树
SwBOM是企业内部软件信息树,与销售物料清单(Sales bill of material)区分。企业内部基于SwBOM标准格式构建软件信息树实现漏洞排查,能追溯到平台小包以及具体的开源组件,遇到log4j这种RCE漏洞可以将漏洞应急响应排查自动化完成,大大提高漏洞排查效率。软件信息树主要由两个树组成,一个是设计树,一个是结果树,两棵树分别在不同生产阶段构建:
设计树:在软件设计阶段录入,基于设计(4+1视图)建立设计树。用于设计阶段支持开源三方件、构建工具选型,以及支持漏洞修改评估。
结果树SwBOM:通过CICD构建流水线在构建中生成构建结果树SwBOM,利用构建变革(构建DSL模型、构建元数据)和开源变革(中心仓、元数据)成果,并与制品关联归档,用于编码构建后阶段,支持开源三方件管理以及漏洞追溯,支持SwBOM对外交付呈现,与业界数据交互。
软件信息树SwBOM设计原则要满足:要作为软件安全供应链的可信数据底座、描述软件成分结构的SwBOM信息随软件包归档、SwBOM应该在软件全生命周期应用。大概架构:
信息树包含的数据:PURL(软件身份ID) + SwBOM(与制品建立关联,与业界数据交换)+ SwInfo(对SwBOM中的对象软件进行分类和画像,用于描述软件详情)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)