Webアプリケーション攻撃

LDAPインジェクション えるだっぷいんじぇくしょん

LDAPインジェクション攻撃ディレクトリサービス認証バイパスActive Directory入力値検証
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インジェクションと原理は同じですが、対象となるシステムと特殊文字が異なります。

インジェクション攻撃の比較:SQLインジェクション vs LDAPインジェクション SQLインジェクション LDAPインジェクション 攻撃対象 リレーショナルDB(MySQL等) 攻撃対象 ディレクトリサービス(LDAP) 利用する特殊文字 ' " ; -- /* */ 1=1 など 利用する特殊文字 ( ) * & | ! \ など 主な被害 DBの情報漏洩・改ざん・削除 主な被害 認証バイパス・ユーザー情報漏洩 主な対策 プリペアドステートメント 主な対策 特殊文字のエスケープ処理

具体的な対策方法

LDAPインジェクションを防ぐには、主に「入力値の検証」と「エスケープ処理」が有効です。

① 特殊文字のエスケープ処理

LDAPフィルターに使われる特殊文字を、無害な表現に変換します。

# エスケープ処理の例(LDAPフィルター用)
(  → \28
)  → \29
*  → \2a
&  → \26
|  → \7c
!  → \21
\  → \5c

② 入力値の許可リスト(ホワイトリスト)方式

ユーザー名は「半角英数字とアンダースコアのみ許可」など、入力できる文字を厳しく制限します。

③ LDAPライブラリの安全なAPIを使う

多くの言語・フレームワークでは、クエリを文字列として組み立てるのではなく、パラメーターを安全に渡せる専用メソッドが提供されています。自前でクエリ文字列を組み立てることは避けましょう。

最小権限の原則

LDAPに接続するアプリのアカウントには、必要最小限の権限のみ付与します。仮に攻撃されても被害範囲を限定できます。


関連する規格・RFC

規格・RFC番号内容
RFC 4511LDAPv3のコアプロトコル仕様
RFC 4515LDAPフィルター文字列の表現形式
RFC 4513LDAP認証方式(バインド操作)の仕様
OWASP Testing GuideLDAPインジェクションのテスト手法(OTG-INPVAL-006)
CWE-90LDAPインジェクションの脆弱性分類(共通脆弱性タイプ一覧)

関連用語

  • SQLインジェクションデータベースへの問い合わせ文に悪意ある命令を混入させる攻撃。LDAPインジェクションと原理が同じ
  • LDAP — ユーザー・組織情報を管理するディレクトリサービスへのアクセスプロトコル
  • Active Directory — MicrosoftのLDAPベースのユーザー管理システム。LDAPインジェクションの主な標的
  • インジェクション攻撃 — 入力フォームから悪意ある命令を「注入」する攻撃手法の総称
  • 入力値検証 — ユーザーの入力データを受け付ける前にチェック・無害化する対策
  • 認証バイパス — 正規の認証プロセスを迂回して不正アクセスする攻撃手法