【入門編】XSS攻撃検知のためのWAFシグネチャとログ分析 – アプリケーションセキュリティ & 安全な開発防御ガイド

玄関の鍵だけじゃ防げない?「XSS」という名の“合鍵”を作らせない技術

こんにちは。現場で泥臭いインシデント対応をしていると、よく「ちゃんとWAFを入れているのに攻撃された」という相談を受けます。

セキュリティの世界では、WAF(Web Application Firewall)を「家の玄関に置いた屈強な警備員」に例えることがよくあります。でも、その警備員が「どんな格好をしたのが泥棒か」を知らなかったら、どうなるでしょう?

今日は、Webサイトの情報を盗み出そうとする「XSS(クロスサイトスクリプティング)」という泥棒の手口と、それを玄関先で見破るための「防犯チェックリスト(WAF)」の作り方について、一緒に学んでいきましょう。

—

1. XSSってそもそも何?「知らない人を家に入れる」怖さ

XSSは、一言で言うと「悪意のあるプログラムを、信頼されているサイトの一部としてブラウザに実行させる」攻撃です。

例えば、掲示板の投稿欄に、あなたの名前の代わりにと書き込まれたとします。もしサイト側がこれをそのまま表示してしまうと、他のユーザーがそのページを見た瞬間に、攻撃者が仕込んだプログラムがその人のPCで動いてしまいます。

これは、「泥棒が『大家さんからの荷物です』と書かれた偽の看板を掲げて、住人を騙して家の中に入れさせている」のと同じ状態です。住人(ブラウザ)は、その看板が偽物だとは思いませんから、何の疑いもなく泥棒を中に入れてしまうのです。

—

2. WAFで「怪しい動き」を見抜くには?

WAFは警備員です。彼らに「どのキーワードが危ないのか」を教えるのが「シグネチャ(正規表現)」というルール作りです。

しかし、攻撃者はあの手この手で「私は怪しい者ではありません」と偽装します。そこで、WAFには以下のようなパターンを警戒するよう設定します。

WAFの正規表現サンプル(簡易版)

WAFの設定ファイルやルール作成時に意識する、基本的な攻撃パターンの正規表現です。

1.

2. リンクの属性を使った実行(onerrorなど)を検知
on\w+\s=\s[“‘].?[“‘]

3. JavaScriptの擬似プロトコル(javascript:)を検知
javascript:.

※注意点:これらはあくまで基本です。最近の攻撃者は、大文字・小文字を混ぜたり、特殊なエンコードを使ったりして警備員をすり抜けようとします。WAFを導入したら「これで完璧」と思わず、ログを監視し続けるのが鉄則ですよ。

—

3. ログ分析で「予兆」を早期発見する

WAFで弾いたログをただ眺めるだけではもったいないです。SIEM(統合ログ管理)を使って、以下のような「泥棒の下見」を検知しましょう。

  • 短時間に同じIPから大量の特殊文字(<, >, ‘, “)を含むリクエストが飛んできているか?
  • これは攻撃者が「どこなら穴が開いているか」を総当たりで探している、まさに下見のサインです。
  • 普段のアクセスではあり得ないURLエンコードが含まれていないか?
  • 攻撃者は文字を隠すために特殊な符号化を多用します。

もしSIEMを導入しているなら、「1分間に5回以上の403(アクセス拒否)エラーを出したIPアドレスを自動的に24時間ブロックする」といった自動応答を設定しておくと、寝ている間の攻撃も防げるようになります。

—

4. 開発者として覚えておきたい「二重の鍵」

WAFは強力ですが、万能ではありません。開発者である皆さんがアプリケーション側でできる「一番の防犯」は、「入力された文字を信じない」ことです。

最も簡単な防御:出力のエンコード

PHPやJavaScriptで表示する際、特別な記号(< や > など)を「ただの文字」として扱うように変換します。

// 悪い例:そのまま表示してしまう
echo $user_input;

// 良い例:HTMLエンティティに変換して安全にする
// < は < に変換されるので、スクリプトとして動かなくなります echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); また、HTTPレスポンスヘッダーに Content-Security-Policy (CSP) を設定するのも非常に有効です。「このページでは、信頼できる場所以外からのスクリプト実行は一切禁止!」という強力な命令をブラウザに出す、いわば「家の中での行動制限ルール」です。

—

最後に:一歩ずつ、確実に。

セキュリティ対策に「終わり」はありません。でも、今日お話しした「WAFで怪しい奴を見張る」ことと「プログラム側でちゃんと文字を変換する」という2つを意識するだけで、あなたのサイトは格段に硬くなります。

最初は難しく感じるかもしれませんが、まずは「自分のサイトがどんなリクエストを受け取っているのか」をログで確認することから始めてみませんか?それが、プロへの第一歩です。

何か困ったことがあったら、いつでも相談してくださいね。一歩ずつ、一緒に守りを固めていきましょう!

コメント

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