Fortify是一种 SCA,用于查找软件代码中的安全漏洞。我只是好奇这个软件在内部是如何工作的。我知道您需要配置一组运行代码的规则。但是它究竟是如何找到代码中的漏洞的。
有人对此有任何想法吗?
提前致谢。
HP Fortify SCA 有 6 个分析器:数据流、控制流、语义、结构、配置和缓冲区。每个分析器都会发现不同类型的漏洞。
数据流 此分析器检测涉及被污染数据(用户控制的输入)的潜在漏洞,这些数据被用于潜在的危险用途。数据流分析器使用全局的跨过程污点传播分析来检测源(用户输入的站点)和接收器(危险的函数调用或操作)之间的数据流。例如,数据流分析器检测用户控制的无限长度输入字符串是否被复制到静态大小的缓冲区中,并检测用户控制的字符串是否被用于构造 SQL 查询文本。
控制流程 该分析仪检测潜在危险的操作序列。控制流分析器通过分析程序中的控制流路径,判断一组操作是否按一定顺序执行。例如,控制流分析器检测检查时间/使用时间问题和未初始化的变量,并检查 XML 阅读器等实用程序在使用前是否配置正确。
结构 检测程序结构或定义中潜在的危险缺陷。例如,结构分析器检测 Java servlet 中成员变量的分配,识别未声明为 static final 的记录器的使用,并标记由于谓词始终为假而永远不会执行的死代码实例。
语义 此分析器在程序内级别检测函数和 API 的潜在危险使用。基本上是一个聪明的 GREP。
配置 此分析器在应用程序的部署配置文件中搜索错误、弱点和策略违规。
缓冲区 此分析器检测缓冲区溢出漏洞,这些漏洞涉及写入或读取超出缓冲区可以容纳的数据。
@LaJmOn 有一个很好的答案,但是在完全不同的抽象层次上,我可以用另一种方式回答这个问题:
您的源代码被翻译成中间模型,该模型针对 SCA 分析进行了优化。
某些类型的代码需要多个翻译阶段。例如,首先需要将 C# 文件编译为调试 .DLL 或 .EXE,然后通过 .NET SDK 实用程序 ildasm.exe 将该 .NET 二进制文件反汇编为 Microsoft 中间语言 (MSIL)。而其他文件(如 Java 文件或 ASP 文件)则由相应的 Fortify SCA 翻译器一次性翻译为该语言。
SCA 将模型加载到内存中并加载分析器。每个分析器以协调的方式加载规则并将这些角色应用于程序模型中的功能。
匹配被写入 FPR 文件,漏洞匹配信息、安全建议、源代码、源交叉引用和代码导航信息、用户过滤规范、任何自定义规则和数字签名都压缩到包中。
也是上述@Doug Held 评论的附录......从 Fortify 16.20 开始,SCA 现在支持直接扫描 .Net C#/ASP/VB 源代码 - 不再需要预编译。
是的 - Fortify SCA 支持扫描适用于 iOS 的 Objective-C 和 Swift 以及大约 20 种其他语言和众多框架。在 Fortify SCA 数据表中查看更多信息:
https://www.hpe.com/h20195/V2/GetPDF.aspx/4AA5-6055ENW.pdf
您还可以通过 Fortify on Demand 的 SaaS 来利用 Fortify SCA,并让专家为您运行扫描并审核结果:
http://www8.hp.com/us/en/software-solutions/application-security-testing/index.html