LDAPインジェクション えるだっぷいんじぇくしょん
簡単に言うとこんな感じ!
社員名簿の検索フォームに「魔法の呪文」を入力して、本来見られないはずの情報を丸ごと引き出したり、パスワードなしでログインできちゃう攻撃だよ!LDAPっていう「人やコンピューターの名簿管理システム」の検索命令を悪用するんだ。
LDAPインジェクションとは
LDAP(Lightweight Directory Access Protocol) とは、企業内のユーザー情報・組織情報・コンピューター情報などを一元管理する「ディレクトリサービス」にアクセスするためのプロトコルです。Windowsの Active Directory や、社内ポータルのシングルサインオン認証など、多くの企業システムがLDAPを使って「この人は誰か・どの権限を持つか」を確認しています。
LDAPインジェクションとは、LDAPに対して送る検索クエリ(命令文)の中に、悪意のある特殊文字や命令を「注入(インジェクション)」することで、本来意図しない動作を引き起こす攻撃手法です。SQLインジェクションのLDAP版と考えると分かりやすく、ログイン画面の入力フォームなどを入口として悪用されます。
攻撃が成功すると、認証のバイパス(パスワードなしでのログイン)、全ユーザー情報の漏洩、権限昇格などの深刻な被害につながります。特に社内システムのユーザー管理にLDAPを使っている企業では、影響範囲が全社に及ぶ可能性があるため、非常に危険な脆弱性です。
LDAPインジェクションの仕組み
LDAPフィルターとは
LDAPへの検索は「フィルター」と呼ばれる命令文で行います。構文はSQLとは異なり、括弧と記号を使った独自の書き方です。
# 基本的なLDAPフィルターの例
# 「ユーザー名がtanaka かつ パスワードがpassword123のユーザーを探せ」
(&(uid=tanaka)(userPassword=password123))
LDAPフィルターで使われる主な特殊文字は以下のとおりです。
| 特殊文字 | 意味 |
|---|---|
( ) | フィルターのグループ化 |
& | AND条件(すべて一致) |
| | OR条件(どれか一致) |
! | NOT条件(一致しない) |
* | ワイルドカード(何でも一致) |
\ | エスケープ文字 |
攻撃の具体例
ログインフォームにユーザー名とパスワードを入力すると、アプリ側で次のようなLDAPクエリが組み立てられます。
# アプリが生成するクエリ(正常時)
# uid=【入力値】 かつ userPassword=【入力値】
(&(uid=tanaka)(userPassword=password123))
ここで攻撃者がユーザー名に *)(uid=*))(|(uid=* などの特殊文字を入力すると…
# 攻撃者の入力: ユーザー名に「*)(uid=*))(|(uid=*」を入力
# 生成されるクエリが意図しない形に変形!
(&(uid=*)(uid=*))(|(uid=*)(userPassword=anything))
# → パスワードチェックが無効化され、全ユーザーにマッチしてしまう
これにより、正しいパスワードを知らなくてもログインできてしまいます(認証バイパス)。
攻撃の種類と影響
| 攻撃の種類 | 内容 | ビジネスへの影響 |
|---|---|---|
| 認証バイパス | パスワードなしでログイン | 不正アクセス・なりすまし |
| 情報漏洩 | 全ユーザー情報の取得 | 個人情報・機密情報の流出 |
| ブラインドインジェクション | 応答の差異から情報を推測 | パスワードハッシュの特定 |
| 権限昇格 | 管理者権限への昇格 | システム全体の乗っ取り |
覚え方
🔑 「LDAP = 名簿、インジェクション = 呪文の混入」
名簿係(LDAP)に「全員を見せろ!」という呪文(特殊文字)を混ぜた紙を渡す攻撃、と覚えよう!
歴史と背景
- 1993年 — LDAPがRFC 1487として初めて標準化。X.500ディレクトリへの軽量アクセス手段として登場
- 1997年 — LDAPv3(RFC 2251)が策定。現在も広く使われるバージョン
- 1990年代後半〜2000年代 — Active DirectoryがWindowsに統合され、企業内LDAPが爆発的に普及
- 2000年代初頭 — SQLインジェクションの研究が進む中、同様の原理がLDAPにも適用できることが認識され始める
- 2003年頃 — セキュリティ研究者がLDAPインジェクションを体系的に分類・公表。OWASPも主要な脆弱性として取り上げる
- 2010年代〜現在 — クラウド化・SaaS化が進んでも、内部認証にLDAPを使い続ける企業は多く、依然として重要な脅威として認識されている
SQLインジェクションとの比較と対策
LDAPインジェクションはSQLインジェクションと原理は同じですが、対象となるシステムと特殊文字が異なります。
具体的な対策方法
LDAPインジェクションを防ぐには、主に「入力値の検証」と「エスケープ処理」が有効です。
① 特殊文字のエスケープ処理
LDAPフィルターに使われる特殊文字を、無害な表現に変換します。
# エスケープ処理の例(LDAPフィルター用)
( → \28
) → \29
* → \2a
& → \26
| → \7c
! → \21
\ → \5c
② 入力値の許可リスト(ホワイトリスト)方式
ユーザー名は「半角英数字とアンダースコアのみ許可」など、入力できる文字を厳しく制限します。
③ LDAPライブラリの安全なAPIを使う
多くの言語・フレームワークでは、クエリを文字列として組み立てるのではなく、パラメーターを安全に渡せる専用メソッドが提供されています。自前でクエリ文字列を組み立てることは避けましょう。
④ 最小権限の原則
LDAPに接続するアプリのアカウントには、必要最小限の権限のみ付与します。仮に攻撃されても被害範囲を限定できます。
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 4511 | LDAPv3のコアプロトコル仕様 |
| RFC 4515 | LDAPフィルター文字列の表現形式 |
| RFC 4513 | LDAP認証方式(バインド操作)の仕様 |
| OWASP Testing Guide | LDAPインジェクションのテスト手法(OTG-INPVAL-006) |
| CWE-90 | LDAPインジェクションの脆弱性分類(共通脆弱性タイプ一覧) |
関連用語
- SQLインジェクション — データベースへの問い合わせ文に悪意ある命令を混入させる攻撃。LDAPインジェクションと原理が同じ
- LDAP — ユーザー・組織情報を管理するディレクトリサービスへのアクセスプロトコル
- Active Directory — MicrosoftのLDAPベースのユーザー管理システム。LDAPインジェクションの主な標的
- インジェクション攻撃 — 入力フォームから悪意ある命令を「注入」する攻撃手法の総称
- 入力値検証 — ユーザーの入力データを受け付ける前にチェック・無害化する対策
- 認証バイパス — 正規の認証プロセスを迂回して不正アクセスする攻撃手法