コンテンツにスキップ

LDAP(エルダップ)とは?ADの名簿を引くための言葉

2026-10-28 更新約10分で読めます

最終確認: 2026-10-27

30秒で復習

  • LDAP(エルダップ)=ディレクトリ(社員・PC・グループの名簿)を検索したり書き換えたりするための、決まった言葉(プロトコル)。 AD の中身は LDAP で読み書きできる。
  • AD の役割分担:LDAP=名簿(誰がいる?どの部署?どのグループ?)、Kerberos=受付(本人確認してチケットを出す)、DNS=DC の場所案内。
  • 名簿は木の形。1件ごとに DN(住所)がある:CN=山田 太郎,OU=Users,OU=Tokyo,DC=example,DC=com(下から上へ書く)。
  • ポート:389(LDAP)・636(LDAPS=TLS で暗号化)・3268/3269(グローバルカタログ)。
  • LDAP 認証(NAS・Linux・VPN 機器などが「AD のパスワードでログイン」)は、389番の暗号化なしの bind だとパスワードが丸見え。LDAPS か StartTLS、署名・チャネルバインディングを使う。
  • Entra ID は LDAP を話さない(クラウドは OAuth・OIDC・SAML)。LDAP が必要なら Entra Domain Services などを使う。
  • 覚え方:「LDAP は電話帳を引く言葉。住所(DN)は下から書く」

こんな場面で出会う

  • NAS・VPN 機器・Jenkins などの設定画面で「LDAP サーバー:dc01、ポート 389、Base DN:DC=…」を入れる
  • PowerShell の Get-ADUser -Filter … で、部署の人を一覧にする(裏は LDAP の検索)
  • 「LDAP 署名を有効にしてください」というセキュリティの通知が来る

用語の正式名称と読み方

用語 読み方・正式名称 意味
LDAP エルダップ(Lightweight Directory Access Protocol) ディレクトリを検索・更新するためのプロトコル
ディレクトリ directory 人・PC・グループなどの情報をまとめた名簿。AD はその1つ
DN Distinguished Name(識別名) 名簿の1件ごとの住所。重ならない
DC(DN の中) Domain Component ドメイン名の部分。example.com → DC=example,DC=com(ドメインコントローラーの DC とは別)
OU Organizational Unit 部署や拠点などの入れ物(フォルダーのようなもの)
CN Common Name 1件の名前(ユーザー名、PC名、グループ名)
属性 attribute 1件の中の項目。mail、department、memberOf など
bind(バインド) — LDAP でのログイン。「誰として名簿を見るか」を名乗る
LDAPS LDAP over SSL/TLS TLS で暗号化した LDAP。ポート 636
StartTLS — 389番でつないでから、途中で TLS に切り替える方式
グローバルカタログ Global Catalog(GC) フォレスト全体の主な項目を持つ、検索用の名簿。ポート 3268

質問:LDAPとは? ADとはどういう関係?

答え: AD は「名簿(ディレクトリ)」と「認証の受付」をまとめた製品。名簿を読み書きするときの言葉が LDAP、ログインのチケットを出すのが Kerberos。

LDAP=名簿 389 / 636 誰がいる? どの部署? どのグループ? メールは? AD(DC) 名簿と受付を1台で Kerberos=受付 88 本人か確かめて チケット(入館証)を出す DNS=案内板(53):「DC はどこ?」を教える
仕組み たとえ 何をする ポート
LDAP 電話帳・社員名簿 「経理部の人は?」「山田さんのメールアドレスは?」「このグループのメンバーは?」 389 / 636 / 3268
Kerberos 受付・入館証 本人確認をして、チケットを出す(→Kerberosとは) 88
DNS 案内板 「DC はどこ?」を教える 53
  • AD の管理ツール(Active Directory ユーザーとコンピューター、PowerShell の Get-ADUser)も、裏では LDAP(など)で DC と話している。
  • AD 以外にも、OpenLDAP などの LDAP サーバーがある。LDAP は AD 専用ではない。

質問:名簿はどんな形? DNの読み方は?

答え: 名簿は木の形(ツリー)。いちばん上がドメイン、その下に OU(部署・拠点)、いちばん下に1件ずつ(ユーザー・PC・グループ)がある。

DC=example,DC=com ドメイン(example.com) OU=Tokyo 東京の入れ物 OU=Osaka 大阪の入れ物 OU=Users ユーザーの入れ物 CN=山田 太郎 ユーザー(1件) 山田さんの DN(住所) CN=山田 太郎, OU=Users,OU=Tokyo, DC=example,DC=com ↑ 自分から上へ(住所を逆から)
  • DN は自分から上に向かって書く。日本の住所を「山田太郎、総務部、東京支社、株式会社エグザンプル」と逆から書くイメージ。
  • 区切りは ,。名前に , が入るときは \, と書く。
  • 1件の中には属性がある。
属性 例 意味
sAMAccountName yamada Windows のログオン名
userPrincipalName [email protected] メール形式のログオン名
mail [email protected] メールアドレス
department 経理部 部署
memberOf CN=経理G,OU=Groups,... 所属グループ
userAccountControl 512 有効・無効などのフラグ(数字の各ビットに意味がある)

質問:LDAPでどんな操作をする?

操作 意味 例
Bind 名乗ってログインする サービス用アカウントで bind してから検索する
Search 検索する(いちばんよく使う) 「経理部の、有効なユーザー」
Add / Modify / Delete 追加・変更・削除 入社・異動・退職
Compare 値が合っているか確かめる —
Unbind 切断 —

検索の書き方(LDAPフィルター)

検索条件は、かっこと前置きの記号で書く。& は「かつ」、| は「または」、! は「ではない」。

(&(objectCategory=person)(objectClass=user)(department=経理部))
→ 経理部のユーザー

(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
→ 無効になっていないユーザー(2 は「無効」のビット)

(memberOf=CN=経理G,OU=Groups,OU=Tokyo,DC=example,DC=com)
→ 経理G に直接入っている人
# PowerShell(ActiveDirectory モジュール)で LDAP フィルターを使う
Get-ADUser -LDAPFilter "(department=経理部)" `
  -SearchBase "OU=Tokyo,DC=example,DC=com" -Properties mail, department |
  Select-Object Name, mail, department
  • SearchBase(どこから探すか)を絞ると、速く・必要な範囲だけ検索できる。
  • C# なら System.DirectoryServices.Protocols(.NET の LDAP クライアント)で同じことができる。

質問:「LDAP認証」とは? 何が危ない?

答え: NAS・Linux・VPN 機器・Jenkins などのWindows 以外の製品が、「AD のパスワードでログイン」させるときによく使う。製品は利用者の ID とパスワードで bind してみて、成功したら本人と判断する。つなぎ方を間違えると、パスワードがネットワークに丸見えになる。

✕ 389番・暗号化なし ○ LDAPS(636)・StartTLS NAS など yamada / Passw0rd! DC 盗聴すると、パスワードがそのまま読める (社内ネットワークでも危ない) NAS など DC TLS で暗号化して流す 署名・チャネルバインディングで 改ざん・中継(リレー)も防ぐ
つなぎ方 ポート 安全さ
シンプルバインド(暗号化なし) 389 ✕ ID とパスワードがそのまま流れる。盗聴で読める
StartTLS 389 → TLS に切り替え ○ 切り替えに失敗したとき平文に戻らない設定にする
LDAPS 636 ○ 最初から TLS。DC に証明書が必要
署名(LDAP signing)+チャネルバインディング 389 / 636 ○ 改ざん・中継(リレー)攻撃を防ぐ。Microsoft も必須にする方向
  • 製品の設定画面で「LDAP サーバー:dc01、ポート:389、SSL:なし」になっていたら要注意。
  • 製品が名簿を検索するためのサービス用アカウント(bind アカウント)のパスワードは、製品の中に保存される。権限は読み取りだけにして、長いパスワードにする。
  • そもそも新しく入れる製品なら、SAML・OpenID Connect で Entra ID につなぐほうが、MFA も効いて安全(→認証と認可・OAuth)。

質問:LDAPへの攻撃には何がある?(攻撃者の視点)

攻撃 何をする 対策
盗聴 389番の平文の bind から、パスワードを読む LDAPS・StartTLS にする。平文の bind を拒否する
LDAP リレー NTLM の認証を中継して、DC に LDAP でなりすまし接続し、設定を書き換える LDAP 署名とチャネルバインディングを必須にする
名簿の偵察(列挙) AD は普通の社員アカウントでも、ほとんどの名簿を読める。管理者・SPN の付いたアカウント・委任の設定などを洗い出し、攻撃の道筋を探す(BloodHound などの道具) 読めること自体は仕様。大量の LDAP 検索を監視し、危ない設定(SPN 付きユーザー、制約なし委任)を先に直す
パスワードスプレー よくあるパスワード1つで、たくさんのアカウントに bind を試す アカウントロックアウト、弱いパスワードの禁止、bind の失敗を監視
LDAP インジェクション 自作アプリが、入力をそのままフィルターに入れていると、* や )( で条件を書き換えられる 入力の * ( ) \ と NUL をエスケープする。ライブラリの機能を使う
匿名 bind 名乗らずに名簿を読む 匿名 bind を許可しない(AD の既定ではほぼ読めない)

質問:Entra ID(クラウド)でもLDAPは使える?

答え: Entra ID は LDAP を話さない。 クラウドのアプリは OAuth・OpenID Connect・SAML でつなぐ。名簿の検索は Microsoft Graph(REST API)で行う。

やりたいこと 方法
クラウドの名簿を検索したい Microsoft Graph(/users?$filter=department eq '経理部')
LDAP しか話せない古い製品を、クラウドだけの環境で使いたい Microsoft Entra Domain Services(マネージドの AD)で LDAP・LDAPS を提供する
オンプレの AD と Entra ID を両方使う オンプレの製品は AD の LDAP、クラウドは Entra ID。Entra Connect で同期する

具体例

場面 おすすめ
NAS の「AD 連携」を設定する LDAPS(636)か StartTLS。bind アカウントは読み取り専用・長いパスワード
自作の C# アプリで社員を検索したい Get-ADUser や System.DirectoryServices.Protocols。フィルターに入れる値はエスケープ
監査で「LDAP 署名が未設定」と言われた DC のイベント 2889(署名なしの bind をしている相手)を見て、相手を直してから必須にする
退職者がまだ「有効」になっていないか確かめたい userAccountControl の無効ビットで検索

関連メモ

確認したいこと

  • 389番の平文の bind をしている製品はないか(DC のイベント 2889)
  • DC の LDAP 署名・チャネルバインディングは必須になっているか
  • LDAP 連携している製品の bind アカウントの権限とパスワードの長さ
  • AD の名簿を大量に検索する動き(偵察)を監視しているか

参考資料