SV.LOG_FORGING
このエラーは、未検証のユーザーがシステムログファイルに情報を入力している場合に発生します。
脆弱性とリスク
ログ記録は、組織で実行するセキュリティ手段の重要な部分です。ログエントリにより、自動アラートツールの作成、統計情報の取得、セキュリティ破壊が生じた場合の攻撃者のトレースなどが可能になります。ログの偽造により、攻撃者が偽のエントリを追加してログレコードを操作できます。これにより、自動スキャニングユーティリティを混乱させ、攻撃を気付かれないようにすることや、攻撃後に検査官を誤った方向に導くことが可能となります。
Klocwork セキュリティ脆弱性 (SV) チェッカーは、潜在的に危険なデータを生成する呼び出しを特定します。このような呼び出しは安全でないソースと考えられます。ユーザーは攻撃者になる可能性があり、ヒューマンエラーを取り込む可能性があるため、安全でないソースはユーザーが指定した任意のデータである可能性があります。
軽減と防止
文字列は、特定のログに対して特別な意味を持つすべての文字 (テキストログにおけるキャリッジリターン、XML ログにおける山形カッコなど) に対してエスケープし、すべての非テキスト文字に対してフィルタリングする必要があります。
例 1
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String amount = req.getParameter("amount");
try {
int iAmount = Integer.parseInt(amount);
processAmount(iAmount);
} catch (NumberFormatException e) {
req.getSession().getServletContext().log("Incorrect int value specified for the 'amount' " + amount);
}
}
SV.LOG.FORGING が 20 行目に対して報告されています。15 行目で未検証のユーザー入力が 'amount' 変数に保存され、20 行目で定数文字列と連結された後、ログに書き込まれています。このシーケンスの場合、ログを偽造できます。
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。
拡張機能
このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、Java 解析のチューニングを参照してください。