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