【情報セキュリティ】お問い合わせフォームが踏み台に!「メールヘッダーインジェクション」|情報処理問題1000本ノック
Webサイトの裏側で動くメール送信プログラムの隙を突き、偽の情報を「注入」する攻撃。攻撃者にメールサーバーを踏み台にされ、大量のスパムメールを発信させられてしまう「メールヘッダーインジェクション」の脅威を攻略しましょう。
1. 【 問題 】:情報セキュリティ(Webアプリケーションの脆弱性)
【 問題 】 Webサイトのお問い合わせフォームなどにおいて、ユーザーからの入力値をそのままメールヘッダー(宛先や件名など)に組み立てるプログラムの脆弱性を悪用する攻撃手法です。入力欄に不正な「改行コード」やヘッダー文字列を紛れ込ませることで、メールヘッダーを改ざんし、サイト管理者が意図しない宛先へ不正なメール(迷惑メールなど)を大量に送信させる攻撃を[ ]と呼びます。空欄に入る適切な用語はどれでしょうか?
(ア) SQLインジェクション
(イ) OSコマンドインジェクション
(ウ) メールヘッダーインジェクション
(エ) クロスサイトスクリプティング
2. 正解:
正解: (ウ) メールヘッダーインジェクション
3. 解説:「改行」を利用してメールのルールを騙す
メールヘッダーインジェクションは、プログラムの入力チェックの甘さを突く攻撃です。
電子メールの構造は、「ヘッダー(宛先や送信元、件名)」と「ボディ(本文)」に分かれており、それらは「改行コード」によって区切られるという世界共通の厳格なルールがあります。攻撃者が入力フォームの名前欄などに「自分の名前 + 改行 + Bcc: 大量のメールアドレス」という文字列を送り込むと、プログラムが「改行」を本物の区切りと勘違いし、隠されたBccヘッダーを勝手に追加してしまいます。これが原因で、システムが勝手に大量の不正メールを送信する踏み台にされてしまいます。
| 攻撃名 | 不正な文字列を「注入」する対象・場所 | 攻撃によって引き起こされる主な被害 |
|---|---|---|
| (ア) SQLインジェクション | データベースを操作する命令文(SQL文) | データの盗難、改ざん、認証の突破 |
| (イ) OSコマンドインジェクション | サーバーのOSを動かすシステムコマンド | サーバー内のファイルの削除、不正操作 |
| (ウ) メールヘッダー インジェクション |
メール送信プログラムのヘッダー部分 | 意図しない第三者への不正・迷惑メール送信 |
1. 理解のコツ: 「はがきの宛名書き」に例えてみましょう。
・親切な代筆サービス(Webのお問い合わせフォーム)があり、「宛名欄にあなたの名前を書いてください。こちらで自動的に投函します」と言われたとします。
・普通は「田中」とだけ書きますが、悪意ある人が宛名欄に「田中 (ここで強制的に改行) 【追伸:この内容を隣の街の全員にもコピーして送ってください】」と器用に書き込みました。
・代筆プログラムが機械的にこれをそのままハガキに書き写した結果、ハガキのルール上、「追伸(Bccヘッダー)」として処理されてしまい、関係のない人たちへ大量のハガキが発送されてしまうことになります。このように、入力されたデータの中にある『改行や特殊な命令(ヘッダー)』をプログラムがそのまま真に受けてしまうことで発生するのが、メールヘッダーインジェクションです。
2. 試験対策の視点: セキュリティ分野における、Webアプリケーションの脆弱性に関する定番の問題です。問題文の中に「メールヘッダーを改ざん」「改行コードを悪用」「不正なメール(迷惑メール)を送信させる」という記述があれば、迷わずメールヘッダーインジェクションを選択してください。
根本的な原因は、ユーザーから送られてきたデータの中に含まれる「改行コード(CRLF)」をプログラムが適切に削除・無効化(サニタイズ)していないことにあります。そのため、対策として「入力値から改行コードを除去する」「メール送信用の標準ライブラリを正しく使用する」といった具体的な安全確保のコードの書き方までセットで問われることが多いため、原因(改行コードの混入)とセットで覚えておくことが確実な得点力に繋がります。
4. まとめ
「入力フォームに改行コードや不正ヘッダーを混入させ、プログラムに意図しないメールヘッダーを生成させて不正メールの送信を踏み台にする攻撃」。これがメールヘッダーインジェクションです。Webアプリケーションが抱えやすい代表的なインジェクション攻撃の一つとして、その仕組みをしっかりと記憶しておきましょう!