Интерпретация файла результатов Fortify (.fpr) через командную строку

В рамках автоматизации процесса запуска безопасного анализа кода у меня есть задание Jenkins, которое использует инструмент командной строки sourceanalyzer для создания файла результатов .fpr. На данный момент я открываю этот файл результатов в приложении Audit Workbench, чтобы просмотреть результаты и проверить, есть ли какие-либо новые проблемы и т. д., и создать оттуда отчет в формате PDF/XML.

Кто-нибудь может вызвать Audit Workbench через командную строку и создать отчет о проблемах, который мы могли бы затем использовать с помощью сценария Jenkins, а также затем отправить результаты по почте? Глядя в Интернете, использование командной строки, похоже, останавливается на этапе генерации fpr.

Заранее спасибо!


person Gary O' Donoghue    schedule 13.05.2016    source источник


Ответы (3)


Существует утилита командной строки для создания отчета из файла FPR.

В настоящее время существует два генератора отчетов: Legacy и BIRT. Механизм отчетов BIRT был представлен в Audit Workbench версии 4.40.

Вот пример использования механизма отчетов 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, либо создать его с помощью Мастера отчетов и сохранить шаблон, который сохраняется в каталоге C:\Users\<USER>\AppData\Local\Fortify\config\AWB-XX.XX\reports\ в Windows.

В Linux/Mac просмотрите файл конфигурации <SCA Install Dir>/Core/config/fortify.properties для свойства com.fortify.WorkingDirectory, здесь будут храниться отчеты.

person SBurris    schedule 13.05.2016
comment
Спасибо @SBuris, очень признателен! - person Gary O' Donoghue; 14.05.2016

@SBurris,

Если вы не хотите показывать Suppressed/Hidden, это просто -hideSuppressed и -hideHidden?

Кроме того, есть ли способ добавить пользовательские фильтры, чтобы не отображать такие вещи, как «нет» из STIG/SANS/OWASP, как вы можете создать в графическом интерфейсе AWB?

По сути, мне нужна команда (команды) для объединения двух 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]:!/^/"

  • Где поле «Обнаружено при» — это настраиваемый тег, который мне нужно перенести из предыдущего файла FPR во вновь объединенный.

И ЗАТЕМ выведите отчет из этого недавно объединенного fpr в формате pdf и xml в указанное мной местоположение/имя файла. Что-то вроде:

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

Очевидно, что это может быть множество команд, пока мы можем вернуть их обратно в Bamboo. Любая помощь будет принята с благодарностью. Спасибо.

person R. Skinner    schedule 03.11.2016
comment
В моем ответе ниже я обнаружил, что FPRUtility неправильно интерпретирует составные выражения в фильтре поиска. - person eel ghEEz; 15.11.2017

FPRUtility интерпретирует разделенные пробелами условия в параметре -information -search -query ..., применяя логический оператор AND. Чтобы получить объединение двух условий 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

В случае аудита я решил, что мне нужна старая утилита для создания отчетов, чтобы включать подавленные проблемы (и их комментарии),

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"
person eel ghEEz    schedule 26.10.2017
comment
В отношении профилей поиска, таких как OWASP Top 10 2013, я обнаружил, что FPRUtility.bat искажает угловые скобки и/или восклицательный знак, используемые в параметре -search -query [OWASP Top 10 2013]:!‹none›. Передача этих параметров напрямую в 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. - person eel ghEEz; 09.02.2018