源代码安全审计-Fortify SCA与Checkmarx SC代码审计工具对比
源代码安全审计-Fortify SCA与Checkmarx SC代码审计工具对比
一、测试工具
名称 | 版本号 | 发布时间 |
Fortify SCA | 22.1.0.0166 | 2022.6 |
Checkmarx SAST | 9.5.0.100 | 2022.7 |
二、实验方法
结合两款源码扫描工具的功能点、规则库、误报漏报率等多个维度进行比较,对同一份Java源码分别进行扫描测试,通过对扫描结果进行对比分析,得到不同工具的优劣势,侧重点等。三、对比分析
1.1、功能点对比
1.1.1、Fortify SCA
Fortify SCA 可跨 27 种编程语言检测 998 个独特的漏洞类别,支持 ABAP/BSP、ActionScript、 Apex、ASP.NET、C# (.NET)、C/C++、 Classic、ASP(带 VBScript)、COBOL、 ColdFusion CFML、HTML、Java(包括 Android)、JavaScript/AJAX、JSP、 Kotlin、MXML (Flex)、Objective C/C++、 PHP、PL/SQL、Python、Ruby、Swift、 T-SQL、VB.NET、VBScript、Visual Basic 和 XML。在扫描之前,可从项目中排除无需进行扫描分析的文件,并指定用于分析的Fortify 静态代码分析器的内存量,配置相应的规则包。
查看结果可选择“Audit Guide”选择要显示的问题类型,在“Audit Guide”中选择项目的过滤器列表时,会在过滤器表中显示所选过滤器类型的详细信息,包括与每个过滤器匹配的问题数量。
具备灵活的搜索功能,有较为丰富的搜索语法,可以帮助我们快速定位。在搜索框处输入搜索词后,文件夹名称旁边的标签会随之发生变化。
打开函数视图,可以查看项目中引入的所有package,所有的类以及类方法,并可快速在源代码中定位函数。
内置13个报告模板,可自由选择所需的报告类型以及要包含在报告中的信息,可根据Issue Filter Settings过滤信息,可以选择生成4种不同格式的报告。(PDF、HTML、DOC 或 XLS)
SCA报告构成如下:扫描概述、按风险的分类进行详细描述,包括每个风险的发现位置,代码上下文,风险源和风险输出,以及改进方法,各类风险描述之后是按照风险类别 的所有风险的统计和按照风险等级的统计图表。
1.1.2、 Checkmarx SAST
采用了独特的虚拟编译器技术,代码扫描不需要依赖编译器和开发环境,无需为每种开发语言的代码安装编译器和测试环境,只需要通过浏览器、开发环境集成插件登录到CxManager Application服务器,只需要提供源代码即可扫描,并给出精确的扫描结果。支持排队扫描、并发扫描、循环扫描、按时间调度扫描。
创建项目时,可以选择从位置属性下的扫描过程中排除某些文件夹或文件,参考链接:https://checkmarx.com/resource/documents/en/34965-85519-excluding-files-from-scans.html
支持创建规则集并自由勾选需要进行扫描的风险项,能够把规则集导出为XML文件。
提供两种扫描模式,全量扫描和增量扫描。增量扫描用于提高项目的扫描速度。它的工作原理是仅扫描自上次执行完整扫描以来已更改的代码。在增量扫描期间,系统将发送的每个文件进行增量扫描,并创建其代码的哈希值。然后,它将散列值与上次全扫描时扫描的同名文件的散列值进行比较。可以比较对同一项目的两次扫描结果,会显示每个文件中的代码差异,按漏洞/扫描结果分组。
在Web 界面中查看扫描结果时,会出现扫描结果概览,扫描结果摘要由四个窗格组成,其中包含不同级别的信息。
l 代码窗格:显示在代码中突出显示检测到漏洞的代码。
l 路径窗格:显示“易受攻击”代码元素的完整路径
l 查询窗格:定义如何呈现查询结果。
l 结果窗格:将结果显示为表格或图形。此外,还提供有关检测到的漏洞的背景信息。
代码窗格显示已扫描资源的源代码,并标记了检测到的漏洞。使用路径窗格或结果窗格突出显示代码中检测到的漏洞。
路径窗格显示构成在结果窗格中选择的漏洞实例的代码元素的完整路径。此路径代表漏洞实例的完整攻击向量。可以生成4种格式的详细扫描结果的报告,分别是PDF、RTF、CSV和XML。可自定义类别,分组展开,清除不想在报告中显示的漏洞。
也可以选择更改报告模板,显示哪些详细信息以及为每个结果显示哪些详细信息:
报告构成如下:风险按照不同分类方式的统计图、风险的数据统计情况、数量最多的前5类漏洞,风险最高的文件TOP 10、按照类别进行风险详述,包括风险的名称、描述、发现位置,代码上下文、常见危害、在软件开发各阶段的相应处理方式、详细示例,列举每一个风险的传输路径和相应位置代码。
1.2、规则库对比
Fortify:https://vulncat.fortify.com/zh-cn/weakness
Checkmarx:https://checkmarx.atlassian.net/wiki/spaces/CR/pages/6553370734/Checkmarx+SAST+Resources
从Fortify官网中可以看到能够扫描到的风险项总共有998条
Checkmarx 9.5.0版本,去重后总共能扫描的风险项有1180条 官网链接:
1.3、扫描结果对比
1.3.1、测试源码来源
开源项目 | 版本号 | 项目地址 |
MCMS | 5.2.4 | https://gitee.com/mingSoft/MCMS |
OFCMS | 1.1.3 | https://gitee.com/oufu/ofcms/tree/V1.1.3/ |
l 扫描结果对比:
风险等级 | 数量 | 风险等级 | 数量 |
严重 | 57 | 信息 | 1923 |
高危 | 144 | 高危 | 3 |
中危 | 20 | 中危 | 21 |
低危 | 969 | 低危 | 850 |
Fortify/合计 | 1190 | Checkmarx/合计 | 2797 |
漏洞名称 | Fortify SCA | Checkmarx |
SQL注入 | 未发现 | 未发现 |
存储型XSS | 未发现 | 未发现 |
模板注入 | 未发现 | 未发现 |
文件上传 | 未发现 | 未发现 |
任意文件写入 | 未发现 | 未发现 |
目录遍历/任意文件读取 | 未发现 | 未发现 |
XML外部实体注入 | 未发现 | 未发现 |
Checkmarx/漏洞类型 | 出现次数 | 严重程度: |
Second Order SQL Injection(不存在,不算误报) | 3 | 高危 |
Input Path Not Canonicalized(误报) | 9 | 中危 |
HttpOnlyCookies | 6 | 中危 |
SSL Verification Bypass | 4 | 中危 |
HttpOnlyCookies In Config | 1 | 中危 |
Missing HSTS Header | 1 | 中危 |
Information Exposure Through an Error Message | 263 | 低危 |
Incorrect Permission Assignment For Critical Resources | 133 | 低危 |
TruffleHog HighEntropy Strings(误报) | 124 | 低危 |
Unsynchronized Access To Shared Data | 56 | 低危 |
Improper Exception Handling | 51 | 低危 |
Improper Resource Access Authorization | 38 | 低危 |
Heap Inspection | 27 | 低危 |
Portability Flaw Locale Dependent Comparison | 24 | 低危 |
Stored Log Forging(误报) | 18 | 低危 |
Escape False | 17 | 低危 |
Race Condition Format Flaw | 17 | 低危 |
Creation of Temp File in Dir with Incorrect Permissions(不存在,非误报) | 9 | 低危 |
Improper Resource Shutdown or Release | 9 | 低危 |
Private Array Returned From A Public Method | 9 | 低危 |
Public Data Assigned to Private Array | 9 | 低危 |
Stored Absolute Path Traversal(误报) | 9 | 低危 |
Sensitive Cookie in HTTPS Session Without Secure Attribute | 6 | 低危 |
Reversible One Way Hash | 5 | 低危 |
Use of Broken or Risky Cryptographic Algorithm | 5 | 低危 |
Use of Non Cryptographic Random | 5 | 低危 |
Stored Boundary Violation | 4 | 低危 |
Log Forging | 3 | 低危 |
Use Of Hardcoded Password In Config | 3 | 低危 |
Information Leak Through Comments(误报) | 2 | 低危 |
Missing Content Security Policy | 1 | 低危 |
Missing X Frame Options | 1 | 低危 |
Spring Missing Content Security Policy | 1 | 低危 |
Spring Missing Expect CT Header | 1 | 低危 |
Fortify/漏洞类型 | 出现次数 | 严重程度 |
Dynamic Code uation: Code Injection | 23 | 严重 |
Dynamic Code uation: Insecure Transport(规则过于敏感) | 6 | 严重 |
Insecure SSL: Overly Broad Certificate Trust | 3 | 严重 |
Insecure Transport: Weak SSL Protocol | 2 | 严重 |
Password Management: Insecure Submission | 12 | 严重 |
Password Management: Password in HTML Form | 2 | 严重 |
Privacy Violation | 9 | 严重 |
Access Specifier Manipulation | 3 | 高危 |
Code Correctness: Double-Checked Locking | 3 | 高危 |
Insecure Randomness | 55 | 高危 |
Null Dereference | 10 | 高危 |
Often Misused: Authentication | 9 | 高危 |
Open Redirect | 2 | 高危 |
Password Management: Password in Configuration File | 3 | 高危 |
Path Manipulation(无法调用) | 3 | 高危 |
Path Manipulation: Zip Entry Overwrite(无法调用) | 3 | 高危 |
SQL Injection(不存在,非误报) | 36 | 高危 |
Unreleased Resource: Database | 14 | 高危 |
Unreleased Resource: Files(误报) | 1 | 高危 |
Unreleased Resource: Streams(误报) | 2 | 高危 |
Insecure Transport: External Link(过于敏感) | 18 | 中危 |
Often Misused: File Upload | 2 | 中危 |
Build Misconfiguration: External Maven Dependency Repository | 6 | 低危 |
Code Correctness: Byte Array to String Conversion | 7 | 低危 |
Cross-Site Request Forgery | 118 | 低危 |
Dead Code: Expression is Always false | 13 | 低危 |
Dead Code: Expression is Always true | 13 | 低危 |
Dead Code: Unused Field | 1 | 低危 |
Dead Code: Unused Method | 4 | 低危 |
Denial of Service | 9 | 低危 |
Denial of Service: StringBuilder | 3 | 低危 |
Hardcoded Domain in HTML | 6 | 低危 |
Hidden Field | 46 | 低危 |
J2EE Bad Practices: Leftover Debug Code | 23 | 低危 |
J2EE Bad Practices: Sockets | 3 | 低危 |
J2EE Bad Practices: Threads | 24 | 低危 |
J2EE Misconfiguration: Excessive Session Timeout | 6 | 低危 |
J2EE Misconfiguration: Incomplete Error Handling | 2 | 低危 |
J2EE Misconfiguration: Missing Error Handling | 4 | 低危 |
JavaScript Hijacking | 29 | 低危 |
JavaScript Hijacking: Vulnerable Framework | 8 | 低危 |
Key Management: Null Encryption Key | 2 | 低危 |
Missing Check against Null | 2 | 低危 |
Obsolete | 1 | 低危 |
Password Management: Null Password | 4 | 低危 |
Password Management: Password in Comment | 50 | 低危 |
Poor Error Handling: Empty Catch Block | 38 | 低危 |
Poor Error Handling: Overly Broad Catch | 208 | 低危 |
Poor Error Handling: Overly Broad Throws | 1 | 低危 |
Poor Error Handling: Throw Inside Finally | 10 | 低危 |
Poor Logging Practice: Logger Not Declared Static Final | 7 | 低危 |
Poor Logging Practice: Use of a System Output Stream | 38 | 低危 |
Poor Style: Confusing Naming | 4 | 低危 |
Poor Style: Non-final Public Static Field | 12 | 低危 |
Poor Style: Value Never Read | 26 | 低危 |
Race Condition: Format Flaw | 17 | 低危 |
System Information Leak | 209 | 低危 |
Unchecked Return Value | 9 | 低危 |
Unsafe Reflection | 1 | 低危 |
Weak Cryptographic Hash | 5 | 低危 |
l 扫描结果对比:
风险等级 | 数量 | 风险等级 | 数量 |
严重 | 49 | 信息 | 49 |
高危 | 62 | 高危 | 1 |
中危 | 91 | 中危 | 4 |
低危 | 269 | 低危 | 282 |
Fortify/合计 | 471 | Checkmarx/合计 | 336 |
漏洞名称 | Fortify SCA | Checkmarx |
SQL注入 | 未发现 | 未发现 |
文件上传 | 未发现 | 未发现 |
利用解压功能上传任意文件 | 未发现 | 未发现 |
任意文件删除 | 未发现 | 未发现 |
漏洞类型 | 出现次数 | 严重程度: |
Reflected XSS All Clients(无法利用) | 1 | 高危 |
Unsafe Object Binding | 2 | 中危 |
CGI Reflected XSS All Clients(无法利用) | 1 | 中危 |
Missing HSTS Header | 1 | 中危 |
TruffleHog HighEntropy Strings(误报居多) | 212 | 低危 |
Spring Overly Permissive Cross Origin Resource Sharing Policy | 33 | 低危 |
Information Exposure Through an Error Message | 19 | 低危 |
Log Forging | 8 | 低危 |
Information Leak Through Comments(误报) | 4 | 低危 |
Portability Flaw Locale Dependent Comparison | 2 | 低危 |
Missing Content Security Policy | 1 | 低危 |
Missing X Frame Options | 1 | 低危 |
Spring Missing Content Security Policy | 1 | 低危 |
Spring Missing Expect CT Header | 1 | 低危 |
Fortify/漏洞类型 | 出现次数 | 严重程度 |
Dynamic Code uation: Code Injection | 12 | 严重 |
Dynamic Code uation: Insecure Transport(规则过于敏感) | 13 | 严重 |
Key Management: Hardcoded Encryption Key | 2 | 严重 |
Path Manipulation | 6 | 严重 |
SQL Injection: MyBatis Mapper(缺少漏洞产生的追踪信息) | 12 | 严重 |
Weak Encryption | 4 | 严重 |
Access Control: Database | 2 | 高危 |
Insecure Randomness | 41 | 高危 |
Key Management: Empty Encryption Key | 2 | 高危 |
Log Forging(规则过于敏感) | 4 | 高危 |
Null Dereference | 1 | 高危 |
Open Redirect | 2 | 高危 |
Password Management: Empty Password | 2 | 高危 |
Password Management: Hardcoded Password | 6 | 高危 |
Portability Flaw: Locale Dependent Comparison | 2 | 高危 |
Cross-Site Scripting: Poor Validation | 2 | 中危 |
Insecure Transport: External Link(外部链接) | 87 | 中危 |
Often Misused: File Upload | 2 | 中危 |
Build Misconfiguration: External Maven Dependency Repository | 1 | 低危 |
Cross-Site Request Forgery | 156 | 低危 |
Dead Code: Unused Field | 5 | 低危 |
HTML5: Overly Permissive Message Posting Policy | 3 | 低危 |
Hardcoded Domain in HTML(误报) | 19 | 低危 |
Hidden Field | 2 | 低危 |
J2EE Bad Practices: Leftover Debug Code | 2 | 低危 |
JavaScript Hijacking | 24 | 低危 |
JavaScript Hijacking: Vulnerable Framework | 8 | 低危 |
Key Management: Null Encryption Key | 7 | 低危 |
Log Forging (debug)(规则过于敏感) | 1 | 低危 |
Password Management: Password in Comment | 19 | 低危 |
Poor Error Handling: Overly Broad Catch | 1 | 低危 |
Poor Error Handling: Overly Broad Throws | 1 | 低危 |
Poor Style: Value Never Read | 9 | 低危 |
Redundant Null Check | 1 | 低危 |
System Information Leak | 7 | 低危 |
Weak Cryptographic Hash | 3 | 低危 |
工具名称 | Fortify SCA | Checkmarx SAST |
厂商 | Fortify Software | Checkmarx |
支持语言 | ABAP/BSP、ActionScript、Apex、ASP.NET、C# (.NET)、C/C++、Classic ASP(含 VBScript)、COBOL、ColdFusion CFML、Go、HTML、Java(包括 Android)、JavaScript/AJAX、JSP、Kotlin、MXML(Flex)、Objective C/C++、PHP、PL/SQL、Python、Ruby、Swift、T-SQL、VB.NET、VBScript、Visual Basic 和 XML(27种) | JAVA、PHP、ASP.NET(C#、VB.NET)、Python、Ruby、JavaScript、C++、APEX、ASP、Cobol、Go、Groovy、Kotlin、Objc、Perl、PLSQL、RPG、Scala、Swift、VB6、VbScript(22种) |
风险种类 | 998 | 1180(含372条漏洞等级为信息) |
风险类型参考来源 | CWE、OWASP、DISA CCI2、DISA STIG、FISMA Compliance:FIPS 200、GDPR、MISRA、PCI DSS Compliance: Application Security Requirements、PCI SSF Compliance: Secure Software Requirements | CWE、OWASP、PCI DSS v3.2.1/v3.1、FISMA 2014、NIST SP 800-53、OWASP Mobile TOP 10 2016、ASD STIG 4.10、MOISA(KISA) Secure Coding 2021、SANS top 25、OWASP ASVS、OWASP Top 10 API |
漏报率 | 低 | 稍高 |
误报率 | 稍高 | 低 |
软硬件类型 | 纯软件 | 纯软件 |
运行平台 | Windows、Linux、Mac OS | Windows |
运行方式 | 单机版 | B/S架构 |
运行速度 | 取决于电脑配置速度不定 | 取决于电脑配置速度不定 |
报告格式 | PDF、HTML、DOC、XLS | PDF、RTF、CSV和XML |
Fortify对于主流编程语言,比如Java、C/C++/C#、Golang、PHP、Python的检测项会更为丰富,扫描出来的漏洞会更丰富一些,但误报率相对较高。另外Fortify的检测规则相比更加敏感,更容易触发,需要花更多的时间去进行人工审核。
下一:32个好用渗透测试技巧