Как использовать аннотации Fortify в коде Java?

У меня есть вопрос относительно имен и синтаксиса для использования аннотаций кода Fortify.

Короткая, короткая, очень короткая версия: Я ищу руководство/руководство, в котором будут перечислены доступные аннотации в коде и приведен пример их предполагаемого использования. Специально для использования при наличии набора SQL-инъекций и SQL-инъекций: проблемы с сохранением не учитывались в результатах сканирования Fortify.

TL;DR; Подробности:

  • Укрепить Версия: 19.1.0
  • Платформа: Java 8; Веб-приложение (Weblogic 12.2.1.4.0 (12c)); RedHat Unix
  • Проблема с укреплением: SQL-инъекция (WASC-19)
  • Дополнительная информация: код существует как часть веб-приложения.

Подозрительная входная строка поступает от клиента и затем становится частью оператора DDL (ALTER SESSION...). Это нельзя изменить, и операторы DDL нельзя параметризовать .

Дезинфекция входной строки до смешного проста. Строка (7 символов) передается через синтаксический анализатор регулярных выражений: Pattern.compile(HARDCODED_REGEX_CONSTANT).matcher(suspectString);

Использование объявления аннотированного метода, которое отправляет входные данные через синтаксический анализатор регулярных выражений, также было частью проверки, например. @Pattern(regexp=HARDCODED_REGEX_CONSTANT)

Ни один из этих двух подходов не является достаточным для Fortify.

Кроме того, подозрительная входная строка также проверяется на соответствие известным и допустимым значениям (значения извлекаются из базы данных, поэтому Fortify также обнаруживает, что эти значения также являются подозрительными).

Конечно, ни один из них не подходит для Fortify Scan.

Создание и сохранение пользовательского правила, которое является внешним по отношению к коду и применяется к результатам сканирования, не будет работать по причинам. [Я не могу адекватно или кратко объяснить, почему это простое решение было отклонено.] Достаточно сказать, создание набора ложных срабатываний для импорта перед сканированием Fortify; не является вариантом и не помечает известные проблемы как не являющиеся проблемой.

Размещение в коде параметра «Игнорировать этот комментарий» также не соответствует целевому состоянию. Конечная оценка заключается в том, что проблема остается в результатах сканирования, она критична и, следовательно, ДОЛЖНА быть решена.

Повторяя запрос: я хотел бы разместить аннотацию (или другую конструкцию в коде) (например, @FortifyValidate, @Fortify????? и т. д.) в точках, в которых проблема отмечена сканированием Fortify.

Я не могу найти адекватное руководство/руководство в Интернете, в котором будут перечислены доступные аннотации в коде и приведен пример их предполагаемого использования. Специально для использования при наличии набора проблем SQL Injection и SQL Injection: Persistence, исключенных из результатов сканирования Fortify.

Спасибо


person user3169968    schedule 02.12.2020    source источник


Ответы (1)


Отвечаю на свой вопрос как могу.

Ответ, к которому я пришел, заключался в использовании Fortify Annotations. Однако это не предпочтительный способ решения проблем с Fortify. Предпочтительнее средство идентификации, смягчения последствий и разрешения проблем — это Audit Workbench и Fortify Software Security Center, которые интегрированы в поддерживаемые процессы тестирования и контроля качества. Micro Focus предоставляет обзор того, как можно смоделировать этот процесс. https://www.microfocus.com/documentation/fortify-static-code-analyzer-and-tools/1810/AWB_Guide_18.10.pdf

Такой тип среды разработки мне недоступен.

Итак, о взломе:

Единственная документация, которую я нашел в Интернете, была: noreferrer">https://community.microfocus.com/t5/Fortify-User-Discussions/Using-Fortify-Java-Annotations/td-p/1500577 В нем есть несколько орфографических ошибок, но он точен и полезен для интеграция библиотеки Fortify Annotations в существующий проект maven и последующее размещение аннотаций в коде.

Примечания: страница создана в 2014 году, а версия Fortify, на которую она ссылается, — 4.00. Обязательно используйте текущую версию Fortify. Во-вторых, в Fortify 19.1.0 есть 2 файла jar, которые содержат определения аннотаций. Это FortifyAnnotations-CLASS.jar и FortifyAnnotations-SOURCE.jar. Я решил переименовать -CLASS.jar и использовать его вместо того, чтобы загромождать процесс сборки.

После импорта или добавления в путь к классам; с помощью аннотаций можно легко удалить определенные дефекты @FortifyXSSValidate или общую общую проверку @FortifyValidate.

Когда для обеспечения достоверности используется пользовательский код, очень полезно использовать аннотации @FortifyValidate("return").

Я рекомендую использовать как можно более краткую аннотацию, чтобы Fortify не помечал устраненные проблемы. Я бы также рекомендовал разместить некоторые встроенные заметки или документацию, подробно описывающую, почему была размещена аннотация и что именно делает ее размещение жизнеспособным решением.

person user3169968    schedule 10.12.2020