通过命令行解释 Fortify 结果文件 (.fpr)

Posted

技术标签:

【中文标题】通过命令行解释 Fortify 结果文件 (.fpr)【英文标题】:Interpreting Fortify results file (.fpr) through command line 【发布时间】:2016-09-09 23:16:49 【问题描述】:

作为自动化运行安全代码分析过程的一部分,我有一个 Jenkins 作业,它使用 sourceanalyzer 命令行工具生成 .fpr 结果文件。目前,我在 Audit Workbench 应用程序中打开此结果文件以查看结果并检查是否有任何新引入的问题等,并从那里生成 PDF/XML 格式的报告。

是否有人可以通过命令行调用 Audit Workbench 并生成有关问题的报告,然后我们可以通过 Jenkins 脚本利用该报告并邮寄结果?在线查看命令行使用似乎停止在 fpr 生成阶段。

提前致谢!

【问题讨论】:

【参考方案1】:

有一个命令行实用程序可以从 FPR 文件生成报告。

目前有两种报告生成器:Legacy 和 BIRT。 BIRT 报告引擎在版本 4.40 中被引入 Audit Workbench。

这是一个使用 BIRT 报告引擎生成 DISA STIG 报告的示例

BIRTReportGenerator -template "DISA STIG" -source HelloWorld_second.fpr 
    -output BirtReport.pdf -format PDF -showSuppressed --Version "DISA STIG 3.9" 
    -UseFortifyPriorityOrder

使用旧版会涉及更多内容。命令是:

ReportGenerator -format pdf -f LegacyReport.pdf -source HelloWorld_second.fpr 
    -template DisaStig3.10.xml -showSuppressed -showHidden

您可以使用位于<SCA Install Dir>/Core/config/reports 目录中的预定义模板报告之一,也可以使用报告向导生成一份并保存存储在Windows 中C:\Users\<USER>\AppData\Local\Fortify\config\AWB-XX.XX\reports\ 目录中的模板。

在 Linux/Mac 上,查看配置文件 <SCA Install Dir>/Core/config/fortify.propertiescom.fortify.WorkingDirectory 属性,这是存储报告的位置

【讨论】:

谢谢@SBuris,非常感谢!【参考方案2】:

@SBurris,

如果您想要显示 Suppressed/Hidden 是否只是 -hideSuppressed 和 -hideHidden?

另外,有没有一种方法可以添加自定义过滤器以不显示 STIG/SANS/OWASP 中的“无”之类的内容,就像您可以在 AWB GUI 中创建的那样?

基本上,我需要一个命令来合并两个 FPR,然后根据在扫描代码上发现的新内容与旧 FPR 进行比较。

合并应该是:

FPRUtility -merge -project <newest_scan.fpr> -source <previous_scan.fpr> -f <BUILDXX_MergedWith_BUILDXY.fpr>

合并后我需要的自定义过滤器是:

"[OWASP Top 10 2013]:!<none> OR [SANS Top 25 2011]:!<none> OR [STIG 3.9]:!<none> AND [Detected On]:!/^/"

Detected On 字段是一个自定义标签,我需要将其从上一个 FPR 文件传递​​到新合并的文件中。

然后将报告从新合并的 fpr 以 pdf and xml 格式输出到我指定的位置/文件名。大致如下:

~AWB_Installation_Dir/bin/ReportGenerator -format pdf -f [BUILDXX_MergedWith_BUILDXY].pdf -source output.fpr 
    -template DisaStig3.10.xml -hideSuppressed -hideHidden

显然,只要我们可以将它返回给 Bamboo,这可能是多个命令。任何帮助将不胜感激。谢谢。

【讨论】:

在我下面的回答中,我发现 FPRUtility 误解了搜索过滤器中的复合表达式。【参考方案3】:

FPRUtility 通过应用布尔 AND 运算符来解释 -information -search -query ... 参数中的空格分隔条件。为了获得 2 个条件 A || B 的联合,我想我可以交叉否定补充前者的其他条件:!C && !D(其中A || B || C || D 始终成立)。即,为了找到所有重要和关键的问题,我使用

FORTIFY_ROOT\jre\bin\java -d64 -Xmx4096M -jar FORTIFY_ROOT\Core\lib\exe\fpr-utility-exe.jar -project APP_VER_DATE.fpr -information -search -query "[OWASP Top 10 2017]:A [fortify priority order]:!low [fortify priority order]:!medium" -categoryIssueCounts -listIssues > issues.txt

在审计的情况下,我认为我需要旧的报告生成实用程序来包含被抑制的问题(及其 cmets),

sed -e 's/\(IssueListing limit=\)"[^"]\+"/\1"-1"/' -i "FORTIFY_ROOT/Core/config/reports/DeveloperWorkbook.xml"
cmd /c call ReportGenerator -template DeveloperWorkbookAll.xml -format pdf -source APP_VER_DATE.fpr -showSuppressed -f "APP_VER_DATE_with_suppressed.pdf"

【讨论】:

Re:问题搜索配置文件,例如“OWASP Top 10 2013”​​,我发现 FPRUtility.bat 损坏了 -search -query 中使用的尖括号和/或感叹号“[OWASP Top 10 2013]:!" 参数。将这些参数直接传递给 java 工作:java -jar c:\fortify\Core\lib\exe\fpr-utility-exe.jar -project PROJ.fpr -information -search -query "[OWASP Top 10 2013]:!<none>" -categoryIssueCounts -listIssues.

以上是关于通过命令行解释 Fortify 结果文件 (.fpr)的主要内容,如果未能解决你的问题,请参考以下文章

Fortify Sql 注入 for Oracle

Fortify,如何通过命令启动分析

文件拷贝,用C语言实现命令行式的COPY功能

Fortify---Detail--Sql注入

加强命令行使用

HP Fortify 路径操作验证规则