Fortify是一个用于查找软件代码中的安全漏洞的SCA.我只是好奇这个软件如何在内部工作.我知道您需要配置一组规则来运行代码.但究竟是如何才能找到代码中的漏洞.
有没有人对此有任何想法?
提前致谢.
LaJ*_*mOn 74
HP Fortify SCA有6个分析器:数据流,控制流,语义,结构,配置和缓冲区.每个分析器都会发现不同类型的漏洞.
数据流 该分析器可检测涉及受污染数据(用户控制的输入)的潜在漏洞,这些漏洞可能会带来危险的使用.数据流分析器使用全局的,程序间的污点传播分析来检测源(用户输入的站点)和接收器(危险的函数调用或操作)之间的数据流.例如,数据流分析器检测是否将用户控制的无限长度输入字符串复制到静态大小的缓冲区中,并检测是否正在使用用户控制的字符串来构造SQL查询文本.
控制流程 此分析器检测潜在危险的操作序列.通过分析程序中的控制流路径,控制流分析器确定是否以特定顺序执行一组操作.例如,控制流分析器检测检查/使用时间问题和未初始化变量的时间,并检查在使用之前是否正确配置了诸如XML读取器之类的实用程序.
结构 这可以检测程序结构或定义中的潜在危险缺陷.例如,结构分析器检测Java servlet中成员变量的赋值,识别未声明为static final的记录器的使用,并标记由于谓词始终为false而永远不会执行的死代码实例.
语义 此分析器在程序内级别检测功能和API的潜在危险用途.基本上是一个聪明的GREP.
配置 此分析器在应用程序的部署配置文件中搜索错误,弱点和策略违规.
缓冲区 此分析器检测缓冲区溢出漏洞,这些漏洞涉及写入或读取比缓冲区可容纳的更多数据.
@LaJmOn有一个非常好的答案,但在完全不同的抽象层次上,我可以用另一种方式回答这个问题:
您的源代码将转换为中间模型,该模型针对SCA进行分析进行了优化.
某些类型的代码需要多个翻译阶段.例如,首先需要将C#文件编译为调试.DLL或.EXE,然后通过.NET SDK实用程序ildasm.exe将该.NET二进制文件反汇编为Microsoft中间语言(MSIL).而其他文件,如Java文件或ASP文件,由适当的Fortify SCA翻译器一次性翻译.
SCA将模型加载到内存中并加载分析器.每个分析器都以协调的方式加载规则并将这些角色应用于程序模型中的函数.
匹配项被写入FPR文件,漏洞匹配信息,安全建议,源代码,源交叉引用和代码导航信息,用户过滤规范,任何自定义规则和数字签名都压缩到包中.