【问题标题】:log forging fortify fix日志锻造强化修复
【发布时间】:2012-09-28 21:06:54
【问题描述】:

我正在使用 Fortify SCA 来查找我的应用程序中的安全问题(作为大学作业)。我遇到了一些无法解决的“Log Forging”问题。

基本上,我会记录一些来自网络界面的用户输入值:

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

Fortify 将此报告为日志伪造问题,因为 getRecordId() 返回用户输入。

我已经关注了这个article,我正在用空格替换“新行”,但问题仍然存在

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

任何人都可以提出解决此问题的方法吗?

【问题讨论】:

  • 恕我直言,这都是关于内容的,:) 作为一种好的做法,您必须清理用户输入,这应该被视为在某些情况下的警告,例如异构软件架构(从 JAVA 调用 C 应用程序) ) 未经处理的用户输入可能很危险(替换新行远非正确处理 ;) ),格式攻击也可能带来威胁,如果记录 ID 是数字(长整型、双精度),您可以跳过它 :),如果它是字符串,您也可以跳过它,但请记住它:)。

标签: java security logging fortify log-forging


【解决方案1】:

我知道这已经被回答了,但我认为一个例子会很好:)

<?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>

【讨论】:

    【解决方案2】:

    Alina,我实际上是您用来解决日志注入问题的文章的作者。希望对您有所帮助。

    Vitaly 在 Fortify 方面是正确的。您需要构建 Fortify 所谓的“自定义规则”。

    这很可能是一个数据流清理规则。可以在此处找到一个基本示例:http://www.cigital.com/newsletter/2009-11-tips.php。如果您拥有 Fortify,您的产品文档中应该有一个自定义规则编写指南。

    我不知道你要使用的污点标志是什么,但它看起来像“-LOG_FORGING”。每当数据通过您的实用程序方法时,您基本上会编写一条规则来删除日志伪造“污点”。 Fortify 将假设通过那里的任何数据现在都可以安全地写入日志,并且不会导致日志伪造。

    【讨论】:

    【解决方案3】:

    您需要在 Fortify 中将您的 replaceNewLine 标记为消毒剂(如果我没记错的话),它将停止报告该问题。

    【讨论】:

    • 有关此选项的更多详细信息以将该方法标记为“消毒剂”吗?我正在使用 Fortify Audit Workbench,但找不到该选项。
    • 我发现有一个叫做“Fortify Java Annotations”的东西,我希望我能找到更多关于这个的信息。
    • 对不起,我有一段时间没碰这个东西了。与 Fortify 支持人员交谈是您的最佳选择 - 这是一个昂贵的产品,我上次使用它时支持还可以。
    【解决方案4】:

    您实际上可以从特定方法创建新规则。

    完成扫描后,导航到审计工作台右侧的功能。 找到您的消毒方法并右键单击它。

    您可以从中生成规则。你想要的是一个通用的 DataflowCleanseRule。

    我只是根据上面发布的 xml 做的。您可以将规则保存为 .xml 文件。 更新扫描时,您可以传递 -rule 参数并指向 .xml 文件。

    【讨论】:

      猜你喜欢
      • 2019-12-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 2023-03-02
      • 2022-11-14
      • 2021-02-22
      • 2018-07-02
      • 1970-01-01
      相关资源
      最近更新 更多