Fortify SCAを使用して、アプリケーションのセキュリティ問題を見つけています(大学の宿題として)。取り除くことができないいくつかの「ログ偽造」の問題が発生しました。
基本的に、Webインターフェイスからのユーザー入力として取得されるいくつかの値をログに記録します。
logger.warn("current id not valid - " + bean.getRecordId()));
getRecordId()はユーザー入力を返すため、Fortifyはこれをログ偽造の問題として報告します。
私はこれに従いました 記事 そして私は「改行」をスペースに置き換えていますが、問題はまだ報告されています
logger.warn("current id not valid - " + Util.replaceNewLine(bean.getRecordId()));
誰かがこの問題を修正する方法を提案できますか?
アリーナ、私は実際、ログインジェクションの問題を解決するために使用した記事の著者です。お役に立てば幸いです。
Fortifyに関してはVitalyは正しいです。 Fortifyが「カスタムルール」と呼ぶものを作成する必要があります。
これは、データフロークレンジングルールになる可能性があります。基本的な例はここにあります: http://www.cigital.com/newsletter/2009-11-tips.php 。 Fortifyを所有している場合は、製品ドキュメントにカスタムルール作成ガイドが含まれている必要があります。
使用する汚染フラグが何であるかはわかりませんが、「-LOG_FORGING」のようになります。基本的に、データがユーティリティメソッドを通過するたびに、ログ偽造の「汚染」を削除するルールを作成します。 Fortifyは、そこを通過したデータがログに安全に書き込まれるようになり、ログの偽造を引き起こさないと想定します。
私はこれがすでに答えられたことを知っています、しかし私は例がニースであると思いました:)
<?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>
FortifyでreplaceNewLineをサニタイザーとしてマークする必要があります(私が正しく覚えている場合)。そうすると、問題の報告が停止します。