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 / 3268 |
| Kerberos |
受付・入館証 |
本人確認をして、チケットを出す(→Kerberosとは) |
88 |
| DNS |
案内板 |
「DC はどこ?」を教える |
53 |
- AD の管理ツール(Active Directory ユーザーとコンピューター、PowerShell の
Get-ADUser)も、裏では LDAP(など)で DC と話している。
- AD 以外にも、OpenLDAP などの LDAP サーバーがある。LDAP は AD 専用ではない。
質問:名簿はどんな形? DNの読み方は?
答え: 名簿は木の形(ツリー)。いちばん上がドメイン、その下に OU(部署・拠点)、いちばん下に1件ずつ(ユーザー・PC・グループ)がある。
- 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 |
✕ 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 の名簿を大量に検索する動き(偵察)を監視しているか
参考資料