综合国内外SAST工具支持的规则,这些规则包括了国际标准、国内标准、行业标准等,这里我罗列了一下,这些规则对应的标准集合。 评估一款SAST工具时,支持规则集的多少,且每个规则集是否为全集,或者接近全集,表明了一款工具的检测能力,而且是否能够对这些规则进行优化,提升检出率,减少误报,漏报。
对于每一标准中的每一条不管是强制类型、还是建议类型,都至少需要被一条SAST规则所覆盖,如果工具做的简单,就是可能需要多条规则覆盖一条标准项,如果做的更专业一点,则是把需要多条规则映射到一条标准,在检测结果展示中,看到是对每一条标准的覆盖,例如像Coverity出的Misra合规性报告,则是这种映射关系。而国军标GJB 8114、GJB 5369制定后,但是却没有要求出合规性报告,所以执行层面很灵活。而CNAS的代码审计依据的标准GB/T 34943、GB/T 34944、GB/T 34946是偏安全漏洞方面,更没有合规性报告的说法,在执行层面上每家测评中心执行情况也不同,我还记得当初作为CNAS技术负责人申请CNAS测评实验室认证时采用实验室间比对方法,大家对CNAS理解上的歧义。不管大家怎么理解,作为一款工具,支持这些标准才是王者。
下面我就罗列一下。
标类 | 序号 | 名称 | 全集数 |
国际行业标准 | 1 | OWASP TOP10 2021 当前最新基于WEB应用安全的行业标准,大部分工具具备 | A1-A10,每一类通过多个CWE缺陷实现 |
2 | OWASP TOP10 2017 相对过时WEB应用安全行业标准,部分老旧工具具备 | A1-A10,每一类通过多个CWE缺陷实现 | |
3 | OWASP MOBILE TOP10 2016 面向手机终端安全行业标准,大部分工具不支持 | M1-M0,每一类通过多个CWE缺陷实现 | |
4 | CWE/SANS TOP25 2023 MITRA每年发布一次,25类最常见的缺陷,其中部分与WEB应用安全相关,部分是运行时缺陷。大多数工具支持部分 | 25类CWE 编号缺陷 | |
5 | SEI CERT Oracle Coding Standard for Java CERT Java检测集 Java语言安全漏洞编码规则,没有包括Java Android和建议条项 | 185条 | |
6 | CERT C语言编码标准 | 122条 | |
7 | CERT C++编码标准 | 82条 | |
国际标准 | 8 | ISO 17961-2013,Cor 1 2016 C语言安全漏洞编码规则 | 94条 |
国际金融行业 | 9 | PCI-DSS V4.0 ,金融支付卡行业PCIDSS)数据安全标准 6.5.1-6.5.10主要列举了10类安全漏洞,但是覆盖整个标准需要更多 | 10类 |
国际航空业 | 10 | 联合打击战斗机项目系统研制与验证阶段航空器C++编程规范 | 29大类223条 |
11 | JPL(航空业)编码标准 | 33条 | |
国际 汽车制造行业 | 12 | MISRA C 2004: 1st Ed 2004.10,2nd Ed with Tech Cor 1 2008.07 工业标准的C语言嵌入式可靠性编程规范 | 143条 |
13 | MISRA C ++ 2008: 2008.06 工业标准的C++语言嵌入式可靠性编程规范 | 175条 | |
14 | MISRA C 2012: 1st Ed 2013.03,Amendment 1 2016.04,Tech Cor 1 2017.06,Amendment 2 2020.02 工业标准的C语言嵌入式可靠性编程规范 | 175条 | |
15 | AUTOSAR C++14, 车辆制造行业标准,只对应C/C++语言 | 397条 | |
国家推荐标准 | 16 | GB/T 39412-2020 代码安全审计规范 | 95条 |
17 | GB/T 38674-2020 应用软件安全编程指南 | 22大类上百小类 | |
国内行业标准 | 18 | YD/T 3464-2019 联网软件安全编程规范 | |
19 | SJ/T 11682-2017 C/C++语言源代码缺陷控制与测试规范 | 7大类88个小类 | |
20 | SJ/T 11681-2017 C#语言源代码缺陷控制与测试指南 | 7大类34个小类 | |
21 | SJ/T 11683-2017 Java语言源代码缺陷控制与测试规范 | 7大类58个小类 | |
国家标准 (CNAS) | 22 | GB/T 34944-2017 Java语言源代码漏洞测试规范 | 43条 |
23 | GB/T 34943-2017 C/C++语言源代码漏洞测试规范 | 32条 | |
24 | GB/T 34946-2017 C#语言源代码漏洞测试规范 | 40条 | |
国家军用 强制标准 | 25 | GJB 5369-2005 国家军用标准航天型号软件C语言可靠性编程规范 | 144条 |
26 | GJB 8114-2013 国家军用标准C/C++语言可靠性编程规范 | 204条 |