日志锻造强化修复

时间:2012-10-08 15:25:22

标签: java security logging fortify log-forging

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

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

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

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

我已关注此article,我正在用空格替换'新行',但问题仍在报道

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

有人可以提出解决此问题的方法吗?

4 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:7)

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

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

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

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

答案 2 :(得分:3)

你需要将你的replaceNewLine标记为Fortify中的杀菌剂(如果我没记错的话),它将停止报告问题。

答案 3 :(得分:0)

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

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

您可以从中生成规则。您需要的是通用 DataflowCleanseRule。

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