【入門編】SQLインジェクション検知のためのWAFシグネチャ設計 – アプリケーションセキュリティ & 安全な開発防御ガイド

玄関の鍵を壊さず「合鍵」を渡す泥棒を防ぐ:SQLインジェクションとWAFの基礎知識

こんにちは!セキュリティの世界へようこそ。今日は、Webアプリ開発者が避けては通れない「SQLインジェクション」という厄介な攻撃と、それを食い止める「WAF(ワフ)」という門番の役割についてお話しします。

専門用語が並ぶと難しく感じますが、実は身近な「防犯」の仕組みと同じなんですよ。一緒に紐解いていきましょう。

—

1. SQLインジェクションって、何が怖いの?

まずは例え話をしましょう。あなたのWebアプリを「立派な一軒家」だと想像してください。
この家には、郵便受け(入力フォーム)があります。

通常、ユーザーはそこに「名前」や「住所」という、決まった書式の紙を入れますよね。これが正常なやり取りです。

ところが、悪意ある攻撃者は郵便受けに、「この家の権利書をよこせ(データの盗難)」や「この家を爆破しろ(データの破壊)」と書かれた特殊な命令文を投げ込みます。

これが「SQLインジェクション」です。
Webアプリがその命令を「ただの入力データ」だと思って実行してしまった瞬間、あなたの家の中に入り込まれ、勝手に金庫を開けられてしまうのです。

—

2. WAF(門番)はどうやって泥棒を見抜くのか?

この泥棒を入り口で食い止めるのがWAF(Web Application Firewall)です。
WAFは、郵便受けに入れられた手紙を片っ端から検閲する「凄腕の警備員」です。

「シグネチャ」という指名手配書

WAFは「シグネチャ」という指名手配リストを持っています。

  • UNION:別の家の情報を混ぜて盗もうとする手口
  • SELECT:勝手に棚の中身を覗き見る行為
  • DROP:家を壊そうとする危険なサイン

これらのキーワードが手紙の中に含まれていたら、「怪しい!」と判断して門前払い(ブロック)します。

—

3. 泥棒の「偽装工作」をどう見破る?(正規化の重要性)

泥棒もバカではありません。そのまま「DROP」と書いたら見つかることを知っています。
そこで、文字を少し変形させてごまかします。

  • URLエンコード: %53%45%4c%45%43%54 (実はSELECTのこと)
  • 大文字小文字の混在: sElEcT
  • コメント挟み込み: SEL//ECT

これでは、単純なパターンマッチング(文字の一致確認)では見逃してしまいます。そこで必要なのが「正規化(Normalization)」です。

正規化とは、「汚れた手紙を一度洗濯して、本来の姿に戻すこと」です。
WAFは、バラバラにされた命令を元通りのきれいな文字列に直してから、「指名手配リスト(シグネチャ)」と照らし合わせます。そうすることで、どんなに隠蔽工作をされても、泥棒の正体を見破ることができるのです。

—

4. 実践:WAFのシグネチャ設定を覗いてみる

実際にWAFで設定するシグネチャのイメージをコードで見てみましょう。

シンプルなSQLインジェクション検知用正規表現の例
1. 郵便受けから来たデータを「小文字」に変換する(正規化)
2. 以下のパターンにマッチしたらブロックする

(?i)(union|select|drop|insert|delete|update).(–|#|\/\)

解説:
(?i) : 大文字小文字を区別しない設定
(union|…) : このいずれかのキーワードがあれば怪しい!
. : 何らかの文字が続き
(–|#|\/\) : SQLのコメント記号(命令の続きを無効化する小細工)があればアウト!

もちろん、これだけでは「正常な文章(例:ブログのタイトルに”SELECT”という言葉を使う)」までブロックしてしまう可能性があります。これを「誤検知(False Positive)」と呼びます。

—

5. 誤検知を減らすための「賢い防犯」

セキュリティをガチガチに固めすぎて、お客さんまで追い返してしまっては本末転倒ですよね。誤検知を減らすには、以下のステップが重要です。

1. まずは「ログモード」で動かす: いきなりブロックせず、怪しい動きがあったら記録だけ残す期間を設けます。
2. 正常なアクセスを学習させる: 「このページでは『SELECT』という単語はよく使われる」といったルールを例外として設定します。
3. 根本対策を優先する: WAFはあくまで「最後の砦」です。一番大切なのは、プログラム側で「プリペアドステートメント(SQLの命令文とデータを分離する技術)」を使うこと。これができれば、そもそもSQLインジェクションという攻撃自体が成立しなくなります。

—

最後に:セキュリティは「泥臭い積み重ね」

セキュリティの世界に、魔法のような一発解決策はありません。
「どんな泥棒が来そうか?」を考え、手紙(ログ)を読み込み、警備員(WAF)の設定を少しずつ調整していく……そんな泥臭い作業の積み重ねが、サービスの信頼を守ります。

まずは、「自分のWebアプリの入り口には、どんな手紙が届いているのか?」をログで確認することから始めてみませんか?それが、一流のエンジニアへの第一歩です。

何か分からないことがあれば、いつでもまた聞きに来てくださいね!一緒に安全なWebの世界を作っていきましょう。

コメント

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