【入門編】ログインジェクション:ログファイルへの制御文字注入 – アプリケーションセキュリティ & 安全な開発防御ガイド

ログは「会社の防犯カメラ」!改ざんから守るためのセキュリティ入門

こんにちは!セキュリティの現場で日々、泥臭いインシデントと戦っているエンジニアです。

今日は、多くの開発者がつい見落としがちな「ログへのインジェクション攻撃」についてお話しします。「え、ログってただの記録でしょ?攻撃されるの?」と思うかもしれません。ですが、実はここ、攻撃者にとっては「警察官(管理者)の目を欺くための格好の穴場」なんです。

難しい専門用語を並べるのはやめて、身近な例えから一緒に紐解いていきましょう。

—

1. ログファイルは「会社の防犯カメラ」

あなたの会社の入り口に、24時間稼働している「防犯カメラ」があると思ってください。誰かが入ってきたら、そのカメラが自動的に「何時何分、誰々さんが入室しました」と記録をノートに書き留めます。

このノートこそが、システムの「ログファイル」です。

本来、このノートは「事実」だけを書き留めるべき神聖な場所です。しかし、もし悪い泥棒が、「ノートに自分で勝手に嘘の書き込みを追加できる」としたらどうでしょう?

これが「ログインジェクション」という攻撃の正体です。

—

2. 攻撃のメカニズム:なぜ「改行」が武器になるのか

攻撃者は、システムに入力するデータの中に、「改行コード(\r や \n)」をこっそり紛れ込ませます。

例えば、ログイン画面のユーザー名入力欄に、ただの名前ではなく、以下のような「細工された文字列」を入力したとしましょう。

佐藤太郎
[INFO] 2023-10-27 10:00:00 – システム管理者権限をユーザーID:999に付与しました。

システムがこの入力をそのままログに吐き出すと、ログファイルの中身はこうなってしまいます。

[INFO] 2023-10-27 09:59:00 – ユーザー「佐藤太郎」がログインしました。
[INFO] 2023-10-27 10:00:00 – システム管理者権限をユーザーID:999に付与しました。

管理者がこのログを見ると、「おや?10時に権限付与があったのか」と勘違いしてしまいますよね。実際にはそんな操作はしていないのに、ログが嘘をついているのです。これが、悪意ある改行コードによる「ログの偽造」です。

—

3. どうすれば防げるの?

対策は大きく分けて2つあります。一歩ずつ見ていきましょう。

対策①:入力値から「悪さをする文字」を排除する

ログに出力する前に、データに改行コードが含まれていないかチェックして、もしあれば削除、あるいは別の文字に置き換える(サニタイズ)のが鉄則です。

(例:Pythonでの実装イメージ)

import logging

def safe_log(user_input):
# 改行コードをスペースに置換して、ログの行をまたぐのを防ぐ
clean_input = user_input.replace(‘\n’, ‘ ‘).replace(‘\r’, ‘ ‘)

# 整形された安全なログのみを出力する
logging.info(f”ユーザーアクセス: {clean_input}”)

これなら攻撃者が改行を混ぜても、一行に収まるのでログが汚されません!

対策②:構造化ログ(JSON形式など)を採用する

これが現場での一番のおすすめです。ログを単純な文字列として保存するのではなく、機械が読み取りやすい「JSON形式」で保存します。

(JSON形式のログ例)

{“timestamp”: “2023-10-27 10:00:00”, “level”: “INFO”, “user”: “佐藤太郎”, “action”: “login”}

こうしておけば、入力値に改行コードが含まれていても、それはあくまで「user」という項目の中身として扱われます。ログの行が強制的に変わることはないので、「偽の行を勝手に作り出す」という攻撃が不可能になるんです。

—

4. セキュリティは「心の持ちよう」から

「ログなんて誰も見ていないだろう」と思っていると、そこが一番の付け目になります。攻撃者は、管理者がログを確認する際の「慣れ」や「思い込み」を突いてきます。

  • ログは信頼できないものとして扱うこと
  • 出力する直前に、必ず「そのデータは改行を含んでいないか?」を疑うこと

この二つを意識するだけで、あなたの守るシステムはグッと強固になります。

最初は難しく感じるかもしれませんが、まずは「ユーザーからの入力を、そのままログに垂れ流していないかな?」と確認することから始めてみてください。それが、プロへの第一歩です。

また分からないことがあれば、いつでも聞きに来てくださいね。一歩ずつ、一緒に強くなっていきましょう!

コメント

タイトルとURLをコピーしました