ковка бревен укрепляет исправление

Я использую Fortify SCA, чтобы найти проблемы безопасности в своем приложении (в качестве домашнего задания в университете). Я столкнулся с некоторыми проблемами «Подделки журнала», от которых я не могу избавиться.

По сути, я регистрирую некоторые значения, которые поступают в виде пользовательского ввода из веб-интерфейса:

logger.warn("current id not valid - " + bean.getRecordId()));

и Fortify сообщает об этом как о проблеме подделки журнала, поскольку getRecordId() возвращает пользовательский ввод.

Я следил за этой статьей и я заменяю «новую строку» пробелом, но о проблеме все еще сообщается

logger.warn("current id not valid - " + Util.replaceNewLine(bean.getRecordId()));

Может ли кто-нибудь предложить способ исправить эту проблему?


person Alina Danila    schedule 08.10.2012    source источник
comment
ИМХО, все дело в контенте :) в качестве хорошей практики вы должны дезинфицировать пользовательский ввод, и это следует рассматривать как предупреждение о том, что в определенных ситуациях, например, в гетерогенных программных архитектурах (вызов приложения C из JAVA) несанитизированный пользовательский ввод может быть опасным ( замена новой строки далека от надлежащей санации ;)), также атаки формата могут представлять угрозу, если идентификатор записи представляет собой число (длинное, целое, двойное), вы можете его пропустить :), если это строка, вы также можете ее пропустить, но помните об этом :).   -  person damiankolasa    schedule 09.10.2012


Ответы (4)


Алина, на самом деле я автор статьи, которую вы использовали для решения вашей проблемы с внедрением журналов. Надеюсь, это было полезно.

Виталий прав по поводу Fortify. Вам нужно будет создать то, что Fortify называет «настраиваемым правилом».

Вероятно, это будет правило очистки потока данных. Основной пример можно найти здесь: http://web.archive.org/web/20150125023230/http://www.cigital.com:80/newsletter/2009-11-tips.php. Если вы являетесь владельцем Fortify, в документации к вашему продукту должно быть руководство по написанию настраиваемых правил.

Я не знаю, какой флаг заражения вы будете использовать, но он будет выглядеть примерно так: «-LOG_FORGING». По сути, вы должны написать правило для удаления «загрязнения» подделки журнала всякий раз, когда данные передаются через ваш служебный метод. Fortify будет предполагать, что любые данные, проходящие через него, теперь можно безопасно записывать в журнал, и это не приведет к подделке журнала.

person jtmelton    schedule 12.10.2012
comment
Спасибо, Джон! Следуя вашим советам и документации, мне удалось написать нужное мне пользовательское правило. Ваша статья тоже оказалась очень полезной. - person Alina Danila; 15.10.2012
comment
эта ссылка больше не существует: cigital.com/newsletter/2009-11-tips .php - person Coder17; 21.06.2017

Я знаю, что на это уже был дан ответ, но я подумал, что пример будет хорошим :)

<?xml version="1.0" encoding="UTF-8"?>
<RulePack xmlns="xmlns://www.fortifysoftware.com/schema/rules">
  <RulePackID>D82118B1-BBAE-4047-9066-5FC821E16456</RulePackID>
  <SKU>SKU-Validated-Log-Forging</SKU>
  <Name><![CDATA[Validated-Log-Forging]]></Name>
  <Version>1.0</Version>
  <Description><![CDATA[Validated-Log-Forging]]></Description>
  <Rules version="3.14">
    <RuleDefinitions>
      <DataflowCleanseRule formatVersion="3.14" language="java">
        <RuleID>DDAB5D73-8CF6-45E0-888C-EEEFBEFF2CD5</RuleID>
        <TaintFlags>+VALIDATED_LOG_FORGING</TaintFlags>
        <FunctionIdentifier>
          <NamespaceName>
            <Pattern/>
          </NamespaceName>
          <ClassName>
            <Pattern>Util</Pattern>
          </ClassName>
          <FunctionName>
            <Pattern>replaceNewLine</Pattern>
          </FunctionName>
          <ApplyTo implements="true" overrides="true" extends="true"/>
        </FunctionIdentifier>
        <OutArguments>return</OutArguments>
      </DataflowCleanseRule>
    </RuleDefinitions>
  </Rules>
</RulePack>
person LaJmOn    schedule 30.11.2012

Вам нужно отметить свой replaceNewLine как дезинфицирующее средство в Fortify (если я правильно помню), и он перестанет сообщать о проблеме.

person Vitaly Osipov    schedule 09.10.2012
comment
Есть ли какие-либо дополнительные сведения об этих параметрах, чтобы пометить метод как «дезинфицирующее средство»? Я использую Fortify Audit Workbench и не могу найти эту опцию. - person Alina Danila; 09.10.2012
comment
Я узнал, что есть что-то под названием Fortify Java Annotations, надеюсь, я смогу найти больше информации об этом. - person Alina Danila; 10.10.2012
comment
Извините, я давно не прикасался к этому материалу. Лучше всего поговорить со службой поддержки Fortify — это дорогой продукт, и в последний раз, когда я им пользовался, поддержка была в порядке. - person Vitaly Osipov; 10.10.2012

На самом деле вы можете создать новое правило из определенного метода.

Перейдите к функции в правой части рабочего места аудита после того, как вы выполнили сканирование. Найдите свой метод дезинфекции и щелкните по нему правой кнопкой мыши.

Из него можно сгенерировать правило. Вам нужно общее правило DataflowCleanseRule.

Я просто сделал это на основе xml, который кто-то опубликовал выше. Вы можете сохранить правило в виде файла .xml. При обновлении сканирования вы можете передать аргумент -rule и указать файл .xml.

person Stephen Sill II    schedule 12.05.2021