LDAPのセキュリティの話です。
WindowsのADサーバーのLDAPサービスは、LDAPでログインしないと使えません。
このLDAPサーバーにログインすることを、LDAPでは「バインド」と言います。
LDAPサーバーにバインドする時に、LDAPSのように暗号化されていないLDAPではパスワードがネットワーク上に平文で流れてしまっているのでしょうか?
レジュメ
環境・前提条件
- LDAPサーバーとしてWindows Server 2019 AD を使用
- LDAPクライアントとしてドメインに参加していないWindows Server 2016のldp.exeを使用
バインドしていない場合は、ADのLDAPは当然検索や操作できないです。
Error 0x4DC ユーザーが認証されていないため、要求された操作は実行されませんでした。
結論、LDAPではパスワードはネットワーク上に平文で流れていませんでした!NTLM認証のチャレンジレスポンス式
LDAPのバインド時に、ネットワークのパケットキャプチャしてみました。
その結果、LDAPのバインドリクエスト時にパスワードは平文でネットワーク上に流れていませんでした。
NTML認証を利用しており、パスワードが直接ネットワーク上に流れないチャレンジレスポンス形式の通信でした。
調べると、LDAPのプロトコルバージョン3からこのような認証フレームワークが実装されたようですね。
LDAPのバインドで使用できる認証方式は?LDAPのセキュリティ
LDAPのパスワード認証方式では、
- シンプル認証
- MD5ダイジェスト認証
- Kerberos認証
- NTLM認証
- 匿名認証
が利用出来、シンプル認証ではネットワーク上にパスワードが平文で流れてしまいます。
Kerberos認証も使えるようですので、本来Windowsでは Kerberos認証を使用しているかもしれませんが、今回確認した環境ではNTML認証を使用していました。
LDAPで使用されていたWindowsのNTML認証とは?
NTLM認証と言うのは、Windows NT LAN Manager認証の略で、 Kerberos認証が使われる前、Windowsで広く使われていた認証方式ですね。
まず、サーバー側が「チャレンジ」というランダムな文字列を送り、クライアント側が、この「チャレンジ」をパスワードを暗号化キーとして使用し、暗号化したものを「レスポンス」としてサーバーに返します。
サーバーも自信で「チャレンジ」をパスワードを暗号化キーとして暗号化し、クライアントから来た「レスポンス」と比較し、認証する方式です。
この方式の場合、パスワードは平文でネットワーク上に流れないことがわかりますね。
パスワードが平文でネットワーク上に流れていないことがわかり、安心しましたが、さらにセキュリティを高めるためにはやはり、LDAPS(LDAP over SSL)ですね。最近、少し話題になっていますね。