我正在使用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()));
有人可以提出解决此问题的方法吗?
答案 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 文件。