【入門編】LDAPインジェクションの仕組みとフィルタリングの重要性 – アプリケーションセキュリティ & 安全な開発防御ガイド

家の鍵穴に「合い鍵」を突っ込まれないために。LDAPインジェクションの脅威と鉄壁の守り方

こんにちは。日々、システムの守りを固めるエンジニアの皆さん、お疲れ様です。
今日は、少しマニアックだけれど、知ってしまうと背筋が凍る「LDAPインジェクション」についてお話しします。

「LDAP? なんだか難しそうな名前だな…」と思った方も大丈夫。身近な「家の鍵」を例に、泥棒がどんな手口で家の中に入り込もうとするのか、そしてどうやって防げばいいのか、一緒に紐解いていきましょう。

—

1. LDAPって何? 「巨大な住所録」をイメージして

まず、LDAP(エルダップ)とは、ネットワーク上の「住所録」のようなものです。会社で「この人のメールアドレスは?」「このグループの権限は?」と検索する際、裏側で動いているのがこの仕組みです。

あなたがログインしようとするとき、システムはLDAPに対してこんな風に問いかけます。
「このIDとパスワードの組み合わせ、住所録に載っていますか?」

これに対してLDAPが「はい、載っています」と答えることで、私たちはログインできるわけですね。

2. 泥棒の正体:LDAPインジェクションの仕組み

では、悪意のある攻撃者はどうやってこの「住所録」を悪用するのでしょうか。

例えば、ログイン画面の「ユーザーID入力欄」に、本来なら名前を入れるべきところに、特殊な記号( や ( ) など)を混ぜて入力するとします。これが「LDAPインジェクション」です。

鍵穴をガタガタさせる「特殊な記号」たち

LDAPの世界では、( や )、&、| といった記号には「命令」の意味があります。

  • “ :「すべて」を意味するワイルドカード
  • & :「かつ(AND)」
  • | :「または(OR)」

泥棒は、この記号を使って、システムへの質問を書き換えてしまいます。
本来は「IDが『田中』で、パスワードが『1234』の人はいますか?」と聞くはずが、特殊な記号を混ぜることで、システムに「IDが『田中』か、または『何もなし』の人はいますか?」と、とんでもない質問をさせることができるのです。

結果、パスワードを知らなくても「はい、その条件に合う人がいます!」とシステムが誤解し、ログインできてしまう。これが、鍵穴を特殊な細工でこじ開ける泥棒の手口です。

3. なぜ防げないのか? 「信じ込み」が一番の弱点

開発現場でよくある失敗は、「入力された文字を、そのまま丸投げしてしまうこと」です。

// 【危険なコード例】
// ユーザーが入力したIDを、そのままLDAPの検索条件に埋め込んでいます
var filter = “(&(uid=” + userInput + “)(password=” + password + “))”;

これだと、userInput に admin)(|(& なんていう記号を入れられた瞬間、検索条件がぐちゃぐちゃに書き換えられてしまいます。システムが「入ってきた文字は全部正しいものだ」と信じ込んでいるのが、最大の盲点なのです。

4. どうやって守る? 「フィルタリング」と「エスケープ」の鉄則

さて、ここからが本題の対策です。家を守るために、鍵穴を頑丈にするのと同じです。

対策1:入力値をそのまま信用しない(フィルタリング)

まずは、入力された文字の中に「怪しい記号」が含まれていないかチェックしましょう。例えば、( や ) を入力させない、あるいは削除するといったルールを設けるのが基本です。

対策2:魔法の呪文「エスケープ」を使う(重要!)

一番確実なのは、「入力された文字を、ただの『文字』として扱う」ことです。これをエスケープ処理と言います。

例えば、( という文字が来たら、それを命令の記号としてではなく「ただの括弧という文字」としてシステムに認識させる変換を行います。

最近のライブラリやフレームワークには、これを自動で行ってくれる機能が備わっています。

// 【安全なコード例(イメージ)】
// ユーザーからの入力を「安全な文字列」としてエスケープしてから使う
var safeInput = ldap.escapeFilter(userInput);
var filter = “(&(uid=” + safeInput + “)(password=” + password + “))”;

このように、「ライブラリの力を借りて、入力を無害化する」こと。これが、現代のソフトウェア開発における「鉄壁の防犯」です。

最後に:セキュリティは「疑うこと」から始まる

セキュリティは、難しい技術を並べることではありません。
「もし、悪い人がここに変な文字を入力したら、システムはどう動いちゃうだろう?」と、少しだけ意地悪な想像力を持つことから始まります。

今日から皆さんのコードを見直すとき、入力欄の先にある「LDAPという名の鍵穴」を想像してみてください。「この入力、そのまま渡して大丈夫かな? 泥棒に悪用されないかな?」と立ち止まるその一歩が、あなたと、あなたが守るユーザーの安全を守る一番の近道になります。

一歩ずつ、着実に。一緒に強固なシステムを作っていきましょう!

コメント

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