LDAPとは?認証の仕組みと狙われるリスク・対策を解説|サイバーセキュリティ.com

LDAPとは?認証の仕組みと狙われるリスク・対策を解説



LDAP(エルダップ)とは、ユーザーや機器などの情報をまとめて管理する「ディレクトリサービス」にアクセスするためのプロトコルです。社内システムのログインやアカウントの一元管理を支える仕組みとして、多くの企業で使われています。

一方で、設定を誤ると認証情報が盗まれる入口にもなります。この記事では、LDAPの仕組みと認証の流れ、Active DirectoryやSSOとの関係に加え、LDAPが狙われるリスクと安全に使うための対策を解説します。

LDAPとは

ディレクトリサービスにアクセスするためのプロトコル

LDAP(Lightweight Directory Access Protocol)は、ネットワーク上の「ディレクトリサービス」に保存された情報を検索・参照・更新するための通信のルール(プロトコル)です。
特定のメーカーに依存しないオープンな標準として、さまざまな製品で使われています。

LDAPそのものはデータを保存する仕組みではありません。実際のユーザー情報や組織の情報は「LDAPサーバー」と呼ばれるディレクトリサーバーに保存されており、LDAPはそのサーバーとやり取りするための共通の手順を定めています。

ディレクトリサービスとは

ディレクトリサービスとは、ネットワーク上のユーザー、コンピューター、プリンター、グループなどの情報を一か所にまとめて管理し、必要なときにすばやく検索できるようにするサービスです。
会社の電話帳や組織図を、システムから参照できる形にしたものとイメージするとわかりやすいでしょう。

ディレクトリサービスには、読み出しは多いが更新は少ない情報を、高速に検索できるように最適化されているという特徴があります。ログインのたびに参照されるユーザー名やパスワード、所属部署などの情報の管理に向いています。

DAPからLDAPへ(現在はLDAPv3)

LDAPは、国際標準のディレクトリの仕組みであるX.500で使われていたDAP(Directory Access Protocol)をもとに作られました。DAPは仕様が複雑で処理が重く、一般的なネットワークで使うには扱いにくいという課題がありました。

そこで、インターネットで広く使われるTCP/IPの上で、より軽く使えるように設計されたのがLDAPです。名前の「Lightweight(軽量な)」はこの経緯を表しています。
現在は、国際化やセキュリティの機能が強化されたバージョン3(LDAPv3)が標準として使われています。

LDAPの仕組み

ツリー構造で情報を管理する


LDAPで扱うディレクトリの情報は、表形式のデータベースとは異なり、木の枝のように上から下へ広がる階層(ツリー構造)で整理されます。ツリーの中の一つひとつの項目を「エントリ」と呼び、利用者や機器、組織などがそれぞれエントリとして登録されます。

一般的には、最上位に会社のドメインを表す「dc(Domain Component)」を置き、その下に部署などの組織単位を表す「ou(Organizational Unit)」、さらにその下に利用者や機器を表す「cn(Common Name)」を配置します。

DN・RDN・属性・スキーマ

各エントリは、ツリーの最上位からの経路を表す「DN(Distinguished Name:識別名)」で、重複することなく特定できます。
たとえば、技術部の佐藤さんのDNは「cn=sato,ou=技術部,dc=example,dc=co,dc=jp」のように、下の階層から順にカンマでつないで表します。
このうち、そのエントリ自身を表す一番左の部分(cn=sato)を「RDN(相対識別名)」と呼びます。

エントリには、メールアドレスや電話番号、所属などの「属性」を持たせられます。どのような種類のエントリに、どの属性を持たせられるかを定めたルールが「スキーマ」です。スキーマを拡張すれば、組織の運用に合わせて独自の属性を追加することもできます。

LDAPサーバーとクライアントの主な操作

LDAPでは、アプリケーションなどのクライアントがLDAPサーバーに要求を送り、サーバーが結果を返す形でやり取りします。主な操作は次のとおりです。

操作 内容
バインド(Bind) サーバーに接続し、誰として操作するかを認証する
検索(Search) 条件に合うエントリを探して取り出す
比較(Compare) エントリが特定の属性の値を持っているかを確かめる
追加・変更・削除 エントリを追加したり、属性を書き換えたり、削除したりする
アンバインド(Unbind) サーバーとの接続を終了する

LDIFはデータを受け渡すための形式

LDAPについて調べると、「LDIF(LDAP Data Interchange Format)」という言葉がよく出てきます。
LDIFは、ディレクトリのエントリや変更の内容をテキストで表すための形式で、データの一括登録や、別のサーバーへの移行、バックアップなどに使われます。

LDIFはデータをやり取りするための形式であり、LDAPサーバーがデータを内部で保存する形式ではありません。内部での保存方法は製品によって異なります。

LDAP認証の仕組み

バインド(認証)の流れ

LDAPで情報を検索したり変更したりする前には、まず「バインド」という操作で、サーバーに対して自分が誰であるかを示します。バインドに成功すると、そのアカウントに許可された範囲で操作できるようになります。

利用者のログインにLDAPを使う場合は、このバインドが成功するかどうかで、入力されたIDとパスワードが正しいかを判断します。つまり、バインドそのものが本人確認の役割を果たします。

シンプル認証とSASL認証

バインドの方法には、大きく分けて「シンプル認証」と「SASL認証」の2つがあります。シンプル認証は、DNとパスワードをそのまま送って認証する方法です。仕組みは簡単ですが、通信を暗号化していないと、パスワードがそのままの形でネットワーク上を流れてしまいます。

SASL認証は、Kerberosやクライアント証明書など、別の認証の仕組みを組み合わせて認証する方法です。パスワードをそのまま送らずに済む方法もあり、より安全性の高い認証を実現できます。

アプリケーションがLDAPで利用者を認証する流れ


社内システムなどのアプリケーションがLDAPを使って利用者を認証する場合、一般的には次のような流れになります。

まず、利用者がアプリケーションにIDとパスワードを入力します。アプリケーションは、あらかじめ用意された連携用のアカウントでLDAPサーバーにバインドし、入力されたIDに対応する利用者のDNを検索します。
次に、見つかったDNと入力されたパスワードでバインドし直し、成功すれば本人であると判断してログインを許可します。

この流れでは、アプリケーションが連携用アカウントのパスワードを保存していることや、利用者の入力が検索の条件に使われることがポイントです。連携用アカウント、利用者の入力、通信路の3か所が、攻撃者に狙われやすいポイントになります。

LDAPでできることとメリット

アカウント情報の一元管理

LDAPを使うと、利用者のIDやパスワード、氏名、所属部署、メールアドレスなどの情報を、LDAPサーバーに集めて一元管理できます。複数のシステムがLDAPサーバーを参照すれば、システムごとにアカウントを登録する必要がなくなります。

入社・退職・異動の際も、LDAPサーバーの情報を更新するだけで各システムに反映されるため、管理の手間が減り、退職者のアカウントの削除漏れも防ぎやすくなります。

アクセス制御

LDAPでは、部署やグループ、利用者ごとに、どの情報を閲覧・変更できるかを細かく設定できます。たとえば、一般の利用者には自分の情報の閲覧だけを許可し、管理者にだけ追加や変更を許可する、といった設定が可能です。

また、LDAPサーバーのグループ情報をもとに、アプリケーション側で「人事部のメンバーだけが人事システムを使える」といった制御を行うこともできます。

さまざまなOSやアプリケーションとの連携

LDAPはオープンな標準のため、Windows、macOS、Linuxなどさまざまな環境や、多くのアプリケーション、ネットワーク機器、複合機などが対応しています。異なるOSや製品が混在する環境でも、共通の認証基盤として使える点が大きなメリットです。

レプリケーションによる負荷分散

多くのLDAPサーバーは、データの複製を別のサーバーに持たせる「レプリケーション」に対応しています。複数のサーバーで同じ情報を持つことで、アクセスを分散して応答の遅れを防げるほか、1台に障害が起きても認証を続けられます。

LDAPのデメリットと注意点

構築・運用に専門知識が必要

LDAPサーバーを構築・運用するには、ツリーの設計、スキーマ、アクセス制御、暗号化の設定など、専門的な知識が必要です。
設定項目が多く、誤った設定がそのまま情報漏えいなどのセキュリティリスクにつながることもあるため、運用を担う担当者の育成や、外部の支援の活用を検討しましょう。

LDAPサーバーが止まると認証できなくなる

LDAPサーバーに認証を集約すると、サーバーが止まったときに、連携しているすべてのシステムにログインできなくなるおそれがあります。複数台のサーバーで冗長化し、定期的にバックアップを取るなど、障害に備えた構成にしておくことが大切です。

クラウドサービスとの連携には工夫が必要

LDAPは主に社内ネットワークでの利用を想定した仕組みです。多くのクラウドサービスはSAMLやOpenID Connectといった別の仕組みで認証を行うため、LDAPを直接つなげない場合があります。
クラウドサービスと連携する場合は、後述するIDaaSなどを組み合わせるのが一般的です。

LDAPとActive Directory・SSOとの関係

Active Directoryとの違い

Active Directory(AD)は、Microsoftが提供するディレクトリサービスの製品です。一方、LDAPは、ディレクトリサービスにアクセスするためのプロトコルです。
つまり、ADは「ディレクトリサービスそのもの」、LDAPは「ディレクトリサービスとやり取りするための手順」という関係にあります。

ADは、LDAPのほか、KerberosやDNSなどの仕組みを組み合わせて、Windows環境のユーザー管理や認証、グループポリシーによる端末の設定などを一体的に提供しています。
ADにもLDAPでアクセスできるため、多くのアプリケーションはLDAPを使ってADのユーザー情報を参照しています。ADのほかに、LDAPに対応したディレクトリサーバーとしては、オープンソースのOpenLDAPなどがあります。

SSOとの関係

SSO(シングルサインオン)は、一度のログインで複数のシステムを利用できるようにする仕組みです。LDAPサーバーに認証情報を集約すると、複数のシステムで同じIDとパスワードを使えるようになり、SSOの土台になります。

ただし、LDAPを使うだけでは、システムごとにIDとパスワードの入力が必要な場合もあります。「同じIDとパスワードで入れる」ことと、「一度のログインですべてに入れる」ことは別のものとして考える必要があります。

IDaaSとの連携

IDaaS(Identity as a Service)は、クラウド上でIDと認証を一元管理するサービスです。LDAPやADで管理しているユーザー情報をIDaaSと連携させることで、社内システムだけでなく、クラウドサービスへのSSOや多要素認証も実現できます。

LDAPが狙われるリスク

暗号化されない通信の盗聴

LDAPの標準の通信(389番ポート)は、何も設定しなければ暗号化されません。この状態でシンプル認証を使うと、IDやパスワードがそのままネットワーク上を流れるため、通信を盗み見られると認証情報が盗まれてしまいます。

LDAPで認証を行う場合、通信の暗号化は欠かせない前提です。社内ネットワークの中だからといって安全とは限りません。

匿名接続や権限の強い連携用アカウントの悪用

LDAPサーバーの設定によっては、IDやパスワードなしで接続する「匿名バインド」が許可されていることがあります。匿名バインドで組織の利用者の一覧などを読み出せる状態だと、攻撃者に標的の情報を与えることになります。

また、空のパスワードによるバインドを「成功」と誤って扱ってしまうアプリケーションでは、パスワードなしでログインできてしまうおそれがあります。
さらに、アプリケーションに保存された連携用アカウントに必要以上の権限が与えられていると、そのパスワードが漏れたときに、ディレクトリ全体の情報を読み出されたり、書き換えられたりする危険があります。

LDAPインジェクション

LDAPインジェクションは、アプリケーションの入力欄に特殊な文字を含む値を入力し、LDAPの検索条件の意味を書き換えてしまう攻撃です。SQLインジェクションのLDAP版といえるもので、入力値をそのまま検索条件に組み込むアプリケーションが狙われます。

成功すると、認証を回避してログインされたり、本来見られないはずのユーザー情報を取り出されたりするおそれがあります。

複合機などに保存された接続情報の窃取

複合機やネットワーク機器には、アドレス帳の参照や利用者の認証のために、LDAPサーバーへの接続情報(連携用アカウントのIDとパスワード)が保存されていることがあります。

機器の管理画面が初期パスワードのままだったり、誰でもアクセスできたりすると、接続先を攻撃者のサーバーに書き換えられ、保存されたパスワードを送らせて盗まれる手口があります。LDAPサーバー自体ではなく、つながっている機器が弱点になる点に注意が必要です。

LDAPを安全に使うための対策

LDAPSやStartTLSで通信を暗号化する

LDAPの通信は、TLSで暗号化しましょう。暗号化の方法には、最初から暗号化した通信を使う「LDAPS(標準は636番ポート)」と、通常の接続(389番ポート)を始めた後に暗号化に切り替える「StartTLS」の2つがあります。

方式 標準のポート 特徴
LDAP(暗号化なし) 389番 通信が暗号化されず、盗聴のおそれがある
StartTLS 389番 接続後に暗号化に切り替える。暗号化が必須になるよう設定する
LDAPS 636番 最初から暗号化した通信でやり取りする

あわせて、サーバー証明書を正しく検証する設定にし、暗号化されていない状態でのシンプル認証を受け付けないようにしましょう。

匿名接続を無効にし、連携用アカウントの権限を絞る

業務で必要がなければ、匿名バインドは無効にしましょう。アプリケーションの側でも、空のパスワードによるログインを拒否するよう確認しておくことが大切です。

アプリケーションの連携用アカウントには、利用者の検索に必要な最小限の読み取り権限だけを与えます。連携用アカウントは「漏れることを前提に」権限を絞り、アプリケーションごとに別のアカウントを用意することで、被害の範囲を限定できます。
パスワードは推測されにくいものにし、定期的に見直しましょう。

アプリケーションの入力値を適切に処理する

LDAPインジェクションを防ぐには、利用者の入力をそのまま検索条件に組み込まないことが基本です。検索条件で特別な意味を持つ文字は、エスケープ(無害化)してから使いましょう。多くの開発言語には、LDAPの検索条件を安全に組み立てるための仕組みが用意されています。

あわせて、IDとして使える文字の種類や長さを制限するなど、入力値の検証も行うと、より安全になります。

Active DirectoryではLDAP署名とチャネルバインディングを有効にする

Active Directoryを使っている場合は、Microsoftが推奨する「LDAP署名」と「LDAPチャネルバインディング」の設定を確認しましょう。
LDAP署名は、通信の内容が途中で改ざんされていないことを確かめる仕組みで、チャネルバインディングは、暗号化した通信を悪用したなりすましを防ぐ仕組みです。

これらを必須にすると、古い機器やアプリケーションが接続できなくなる場合があるため、ログで影響を確認しながら段階的に有効にしていきます。

LDAPサーバーを外部に公開せず、ログを監視する

LDAPサーバーはインターネットに公開せず、ファイアウォールで接続できる機器やネットワークを限定しましょう。あわせて、複合機やネットワーク機器の管理画面の初期パスワードを変更し、管理画面にアクセスできる範囲も絞ります。

また、LDAPサーバーへの接続やバインドの失敗、大量の検索などを記録し、監視しましょう。短時間に大量のログイン失敗がある、深夜に大量のユーザー情報が読み出されている、といった異常に早く気づける体制を整えることが大切です。

LDAPに関するよくある質問

Q. LDAPの読み方は?

一般的には「エルダップ」と読みます。正式名称は「Lightweight Directory Access Protocol」で、日本語では「軽量ディレクトリアクセスプロトコル」と訳されることもあります。

Q. LDAPとLDAPSの違いは何ですか?

LDAPSは、LDAPの通信をTLSで暗号化したものです。通常のLDAPは何も設定しなければ通信が暗号化されませんが、LDAPSでは最初から暗号化された通信でやり取りするため、パスワードなどの盗聴を防げます。

Q. LDAPで使うポート番号は?

標準では、暗号化なしのLDAPとStartTLSが389番、LDAPSが636番を使います。Active Directoryでは、これらに加えて、複数のドメインの情報をまとめて検索するための別のポートも使われます。

Q. OpenLDAPとは何ですか?

OpenLDAPは、オープンソースで開発されているLDAPサーバーのソフトウェアです。主にLinuxなどの環境で、ユーザー情報や認証の基盤として使われています。

Q. クラウドの時代にLDAPはまだ必要ですか?

クラウドサービスの認証ではSAMLやOpenID Connectが主流になりつつありますが、社内のシステムやネットワーク機器、複合機などでは、今もLDAPが広く使われています。
LDAPやActive Directoryで管理する情報をIDaaSと連携させ、社内とクラウドの両方をまとめて管理する形が一般的です。

まとめ

LDAPは、ディレクトリサービスにアクセスするためのプロトコルで、ツリー構造で管理された利用者や機器の情報を検索・認証に使えます。

アカウントの一元管理やSSOの土台として便利な一方、暗号化されない通信や匿名接続、権限の強い連携用アカウント、LDAPインジェクションなどが攻撃の入口になります。通信の暗号化、権限の最小化、入力値の処理、ログの監視を組み合わせて、安全に運用しましょう。

SNSでもご購読できます。