日志锻造强化修复

Ali*_*ila 12 java security logging fortify log-forging

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

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

logger.warn("current id not valid - " + bean.getRecordId()));
Run Code Online (Sandbox Code Playgroud)

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

我已经关注了这篇文章,我正在用空格替换"新行",但问题依然存在

logger.warn("current id not valid - " + Util.replaceNewLine(bean.getRecordId()));
Run Code Online (Sandbox Code Playgroud)

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

LaJ*_*mOn 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>
Run Code Online (Sandbox Code Playgroud)


小智 7

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

关于Fortify,Vitaly是正确的.您需要构建Fortify所谓的"自定义规则".

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

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

  • 此链接不再存在:http://www.cigital.com/newsletter/2009-11-tips.php (3认同)