#はじめに
MSより2020 年初頭の Windowsアップデート(1/19確認時点では3月予定)に「LDAP 署名有効化」「LDAP チャネルバインディング (LDAPS 利用時)化」になるようです。
Windows の 2020 年 LDAP 署名と LDAP チャネル バインディングの要件
[AD管理者向け] 2020 年 LDAP 署名と LDAP チャネルバインディングが有効化。確認を!
これを見てみたんですけど、はっきり言ってよく分からん
ただ、影響範囲はでかそうな割に確かな情報がないので、検証しつつどのような対応が必要になるのかを書いていきます。
※認識違う部分ありましたらコメント頂ければとおもいます。
#アップデートの内容について
今後はLDAP通信はセキュリティ的にあれなので、LDAP署名を有効化しましょうというのが主旨です。
#LDAP 署名とは
そもそも「LDAP署名」とは何か?
これは単純にLDAPS通信(636)のことでしょ。
と思っていたら、よく調べてみると厳密には違いました。
こちらに以下のような記載を発見。
署名が必要な場合、SSL を使用していない LDAP 簡易バインドは拒否されます (LDAP TCP/389)。
LDAP(AD)の認証にはいくつか種類があります。
・匿名(anonymous)認証
⇒匿名による認証
クライアントは特に認証を必要とすることなく,LDAPの各エントリにアクセスできるようになる。
・簡易認証(simple bind)
⇒平文パスワードによる単純な認証
・SASL認証(SASL bind)
⇒ざっくりいうとセキュリティの高い認証方式。詳細は参照
https://www.ipa.go.jp/security/rfc/RFC2222JA.html
・DIGEST-MD5方式
⇒パスワードから,元の文字を推測できない(ハッシュで変換)"チャレンジ"と呼ばれるワンタイムレベルの文字列を送り,それに応答する"レスポンス"を使って行なわれる認証
データは暗号化されていないが、パスワードは盗聴されない。
・kerberos認証
⇒Kerberos v5に準拠した,Active Directory標準の認証プロトコル
KDCと呼ばれる認証機関から認証チケットを得ることで,チケットが有効な間,認証されたサービスにアクセスできるようになる。
つまり、TCP/389を使用した簡易認証方式は今後拒否される、が正しい理解のようです。
#LDAP チャネルバインディングとは
##とりあえず調べてみた
チャネルバインディングとは、GSS-APIと呼ばれる認証のフレームワークの中で出てくる用語です。
なんのこっちゃ?
調べてみる、ADにはSPNEGO(読み方:スプネゴ) というSSOに使用されている仕組みがあり、そこでGSS-APIが用いられているようです。
話を戻すと、チャネルバインディングとは使用されている特定のデータチャネルを識別するためのタグのことです。
具体的には、チャネルバインディングは起動側と受け入れ側)を識別します。
これらのタグは起動側と受け入れ側のアプリケーションに固有であるため、識別情報のより有効な証明となります。
でチャネルバインディングトークン(CBT)と呼ばれるものはMSが独自にGSS-APIの仕組みを用いて開発したもののようです。
##具体例をみてみる。
MSの以下サイトを参考にします。
認証の拡張保護の概要
HTTPSに置き換えて説明します。(LDAPS通信でも基本的には同様です。)
以下の登場人物がいるパターン
・クライアント
・サーバー
・攻撃者
攻撃者はあたかも自分がサーバーであるかのように見せて、
本来であれば
クライアント⇒サーバー となる接続を
クライアント⇒攻撃者⇒サーバー へ変えてしまいます。
そうなると、SSLチャネルは2つ作成されます。
・クライアントと攻撃者間
・攻撃者とサーバー間
そうすると、資格情報はクライアントから攻撃者にわたり
攻撃者からサーバーへ渡っていくので、サーバーから見たら正しい資格情報が送信された、としかみなさないため
通信が許可されてしまいます。
それを防ぐためにチャネルバインディングトークン(CBT)という仕組みがあります。
ざっくりいうと、CBTはTLSのチャネルのプロパティに認証情報的なものを保持していて
チャネルの送信先によって特定されます。
つまりクライアントと攻撃者のCBT、攻撃者とクライアント間のCBTは異なるため
サーバー側でCBTを比較して、攻撃を検知することができます。
今回の内容でいえば、LDAPS通信だけでは攻撃を防ぐことはできないので
CBTも有効にしましょう、というのがMSの考え方なのだと思われます。
#結局どういうこと?
今回のアップデートに関しては、以下のようになります。
・LDAP署名の有効化(簡易認証のLDAP通信は使えないよ)
・LDAPチャネルバインディングの有効化(LDAPS通信にはCBTを使うよ)
なので、このアップデートを適用すると
・簡易認証方式におけるLDAP通信はできなくなる
・LDAPS通信の際に、クライアントがCBTに適応していない場合、通信が拒否される。
#クライアントの影響は?
大きく分けてクライアントは以下の2つがあると思います。
・ドメインユーザー
・サードパーティー製品によるAD参照
まずドメインユーザーについてですが、ドメインユーザーがADに認証を行う際にはkerberos認証を使っています。
この場合、ldapのバインドはセキュリティ保護されているため今回のLDAP署名云々には引っ掛かりません。
問題なのはサードパーティー製品によるAD参照です。
該当製品がシンプル認証のTCP/389でLDAP認証を行っている場合、アップデート後には通信できなくなります。
この際にADSIを用いていたり、MD-5などの認証を行っている場合は該当しないので影響はありません。(今まで通りLDAPの設定自体は389のままでいける)
※ちなみにADSIもGSSAPIを用いて作られている=SASLを用いているわけなので今回のLDAP署名云々には関係ないようです。
#必要な対応について
こちらのページに以下のような対処法がありました。
◆Windowsの場合
ドメインに参加し、ADSI を使用します。
アプリケーションに大幅な改修が必要になるかもしれません。
◆Linuxの場合
ドメイン コントローラー側で「Active Directory 証明書サービス」をインストールします。 「証明機関」スナップインから DER 形式の CA ルート証明書が取得できます。
つまりWindowsの場合はADSIを使用してLDAP問い合わせをすれば問題なく使用できる。
Linuxの場合は直でLDAP参照(簡易認証)をしていることが多いと思われるため、AD側に証明書の設定が必要で、LDAPS(636)での通信が必要となります。
なので、ADをLDAP参照しているシステムがある場合
・ADSIを使用しているか
・簡易認証以外の方式で接続しているか
がカギとなります。
もし上記に当てはまらない場合は、ADSI対応するorLDAPS化が必要となります。
※ADSI対応というか、SASLに準拠したものであれば大丈夫です。
##ADに証明書の設定は必要?
簡易認証のLDAP通信を使用している場合はSSL化(LDAPS)が必要となります。
その場合はADに証明書をインストールする必要があります。
ADの証明書設定については以下を参照
https://social.technet.microsoft.com/wiki/contents/articles/2980.ldap-over-ssl-ldaps-certificate.aspx
https://support.microsoft.com/en-us/help/321051/how-to-enable-ldap-over-ssl-with-a-third-party-certification-authority
ADSIを使用している、もしくはSASL認証などでAD参照している場合にはADに証明書等は必要ありません。
(システムをADSI化するって結構大変なんだろうか。。。)