人话版安全概念(2) 供应链安全SAST,DAST,SCA…

2024-08-04 09:00   北京  

网络安全概念多,英语缩写多。

这两年供应链安全也比较火,今天说一说相关的术语。

SAST

SAST(Static Application Security Testing静态应用安全测试)

简单说,就是代码未运行的时候进行的扫描。很多程序写完后,就有漏洞,一般人看不出来,怎么办,找个专业的工具扫一下,直接扫描源代码就可以发现漏洞,这类工具归类到SAST,国外比较有名的是Coverity,Fortify,国内这几年也比较多,象酷德啄木鸟,也是各种编程语言都支持。

还有一种,也要归于静态扫描,就是软件在出厂前要经过杀毒软件扫描,防止在客户处被误认为是病毒(其实绝大部分是误报,但解释起来非常麻烦,最好的办法是自己找各个杀毒软件提前查一遍)。容器的扫描也有一种方法,直接扫描容器的文件,同样是SAST。

DAST

DAST(Dynamic Application Security Testing动态应用安全测试)

就是程序跑起来以后再扫描。用的最多的是各种漏洞扫描器,国内国外很多,操作系统层面的,比较著名的开源是Nessus。Web方面的更多,象Owasp Zap,Retina等。数据库也有很多,OSV等。现在很多动态扫描需要提前给权限,比如,操作系统要给root密码,数据库也一样。

IAST

Fuzzing测试(模糊测试)是一种半自动化测试技术,用于发现软件中的漏洞和安全问题。它通过向应用程序提供大量随机或半随机的数据输入,观察其行为,以识别潜在的崩溃、异常和安全漏洞。在哪个参数注入,用什么范围注入,是Fuzzing的核心问题。

SAST和DAST都是针对已知漏洞,而Fuzzing针对的是未知漏洞。

IAST(Interactive Application Security Testing)交互式应用安全测试

IAST结合了SAST和DAST的特点,通过在应用程序运行时插入传感器(简称插桩)来监控和分析应用程序的行为和代码。它是一种类似Fuzzing的方法,但很高效。

IAST首先要在源代码中插入用于监控跟踪的部分源代码,然后在程序运行后捕捉正常的程序行为,在这些基础上,使用Fuzziung的方法,注入随机半随机的数据,以图发现程序异常。

相对传统Fuzzing,它捕捉用户正常行为,找到可变参数,自动生成随机数据,有效降低了Fuzzing难度,较高的提升效率。由于要改代码(部分情况,如Java,因为有JRE 钩子功能不用改,但大部分情况需要改),有SAST的特征,但更多的是运行中的监控,更象DAST,二者特征都有,不好归类,再起个新名字也算正常。

SCA

SCA(Software Composition Analysis)软件成分分析

自从有漏洞跟踪,就有了漏洞库的概念,漏洞库(如NVD、CVE数据库)记录了已知软件版本的漏洞信息。简单理解,开源或闭源软件的每一个版本,如果被发现过漏洞,都会在漏洞库里被记录。

SCA软件,可以根据源代码,或二进制,对软件成分做分析,该软件依赖哪些软件版本(特别是开源),取得软件版本号后,再与漏洞库做比较,会生成一个软件成分清单(包含所有依赖的组件版本及其漏洞)。软件成分清单非常有用,有很多开源软件,要求使用它的软件必须公开声明,这时候就要用到软件成分清单(著名的黑鸭子软件就是干这个的)。组件的版本漏洞情况则用来评估软件的安全风险。

SBOM(Software Bill of Materials)软件物料清单

SBOM主要就是指上边的软件依赖表。SBOM和SCA经常在产品上表现出混合。虽然SCA和SBOM有时在产品上表现出混合,但它们的侧重点不同:SCA是一种动态分析工具,而SBOM是一个静态的清单,记录了软件的所有成分。

SBOM非常重要,现在的软件有了非常多的开源依赖,导致开发环境每天都在变化,而这些并不随Git里的代码变化。所以,如果你只从Git里拉一个历史分支出来,再编译运行,已经不是当时的版本,因为依赖环境变了,要恢复依赖环境,就得靠SBOM。

SBOM还有个重要的特点,就是记录历史所有版本的成分。这样,在一个漏洞被发现后,不仅可以看对当前在开发版本的影响,还可以快速确定历史受影响的版本。

CICD

持续集成(CI - Continuous Integration)

持续集成是一种开发实践,指开发人员频繁地将代码变更合并到主分支(或主代码库),通常每天进行多次合并。每次合并都会触发自动化构建和测试,以便尽早发现集成错误。核心特点,研发段的自动化,包括自动化构建和自动化测试,二者是CI的基础。

持续交付(CD - Continuous Delivery)与持续部署(CD - Continuous Deployment)

两个词的缩写一样,但表达的含义不一样,持续交付,一般用于销售软件的场景,把版本给客户。持续部署则用于自研自用的场景,就是现在的DevSecOps,能够持续将版本部署到现网的生产环境。

持续部署比持续交付流程更多,也更复杂一些。


END


AI与安全
理清逻辑,找到规律,看清趋势。作者前华为云高级安全专家,现为独立顾问。
 最新文章