LDAP署名/LDAPチャネルバインディングとCBT (Channel Binding Token) について

LDAP署名とLDAPチャネルバインディングの既定有効化

2020 年 3 月のアップデートにより『LDAP 署名』と『LDAPチャネルバインディング』が既定で有効化となることがマイクロソフトからアナウンスされています。

既定 (デフォルト設定) で有効化なので、アップデート後は明示的に無効化すれば影響はなさそうですが、そのやり方についてはこの記事では触れません。

この 2 つがそもそも何者なのかについて調べてみました。

前提知識

SASL と GSS-API が出てきます。

【図解】SASLとGSS-APIの仕組みと違い, LDAPやSMB2での利用例とシーケンス

LDAP 署名とは?

LDAP 署名 (LDAP Signing) とは、マイクロソフトの表現ではありますが、具体的には SASL (RFC 4422) という『通信プロトコルにおける認証とセキュリティのための汎用的なレイヤーを提供するフレームワーク』で定められている [Integrity] を確認する機能です。SASL のレイヤーでパケットの改竄を検知します。

SASL が動作するレイヤーは、イメージ的には TCP と LDAP の間と考えると分かり易いでしょう。

[参考]
https://support.microsoft.com/en-us/help/935834/how-to-enable-ldap-signing-in-windows-server-2008

The security of a directory server can be significantly improved by configuring the server to reject Simple Authentication and Security Layer (SASL) LDAP binds that do not request signing (integrity verification) or to reject LDAP simple binds that are performed on a clear text (non-SSL/TLS-encrypted) connection. SASLs may include protocols such as the Negotiate, Kerberos, NTLM, and Digest protocols.

SASL では機能として以下の 3 つを提供します。

  1. 認証 (Authentication)
  2. 機密性 (Confidentiality)
  3. 完全性 (Integrity)

これらの機能をプラグインとして用意していますが、具体的なメカニズムは SASL では定められていません

SASL で利用できるメカニズムは IANA が管理しており、下記ページで確認できます。

https://www.iana.org/assignments/sasl-mechanisms/sasl-mechanisms.xhtml

また、利用できるメカニズムは前述の 3 つの機能すべてを満たしている必要はありません。

Active Directory の SASL 実装では現状の既定値では『認証』の要素のみが使われていますが、LDAP 署名を有効化した場合は『完全性』の要素も使うようになります。

なので、Active Directory のドメインコントローラに内蔵する LDAP サーバを LDAP 署名付きで使うためには、LDAP クライアント側のアプリケーションでは "Simple BIND" に設定していては NG です。

『認証』だけでなく『完全性』の機能をサポートした "SASL BIND" にする必要があります。

例えば AD の LDAP ツリーを一覧表示できる『Apache Directory Studio』では"DIGEST-MD5" と "SASL-GSSAPI" が Integrity に対応しています。

https://cwiki.apache.org/confluence/display/DIRxSRVx11/2.1.+SASL+Authentication+to+ApacheDS

The DIGEST-MD5 and GSSAPI SASL mechanisms can provide message integrity and, optionally, message confidentiality by "wrapping" or "unwrapping" data with a security layer.

LDAP チャネルバインディングとは

チャネルバインディングは GSS-API というフレームワークで使われる言葉です。

GSS-API では『認証』に関する抽象的なシーケンスを定めています。フレームワークであるため、具体的な実装が必要です。有名な実装は SPNEGO です。

(なお、 SASL のメカニズムとして GSSAPI という選択肢が存在しますが、これは Kerberos/SPNEGO での実装を意味します。)

チャネルバインディングは下位層で行われた認証を上位層に伝え、相手の認証をより強固なものにする仕組みです。

具体的には、TLS のコネクション情報を、上位層のセッション情報と紐付けます。

なので MITM (Man-In-The-Middle) 攻撃で、LDAP BIND 時はスルーし、LDAP BIND 成功後に別の TLS コネクションでその BIND 情報で LDAP 検索を行う、といったことを防ぐことができます。(実際に今この攻撃は恐らくできないですが、脆弱性によりこの攻撃ができるようになっても防げるように。)

Active Directory における LDAP チャネルバインディングの具体的な実装は、CBT というトークンを使うもののようです。これは RFC には明確な記載は見当たりません。

一方で、マイクロソフトで以下のサイトが見つかりました。

https://support.microsoft.com/en-us/help/976918/authentication-failure-from-non-windows-ntlm-or-kerberos-servers

What is CBT (Channel Binding Token)?
Channel Binding Token (CBT) is a part of Extended Protection for Authentication. CBT is a mechanism to bind an outer TLS secure channel to inner channel authentication such as Kerberos or NTLM.

CBT is a property of the outer secure channel used to bind authentication to the channel.

TLS コネクションを、Kerberos や NTLM の認証情報と紐付けるためのトークンのようです。

また、以下のサイトでは『CBT はプロパティであり、RFC 5056 に定められた通りになっている』としています。

https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2008/dd639324(v=vs.90)?redirectedfrom=MSDN

A CBT is a property of the outer secure channel (such as TLS) used to tie (bind) it to a conversation over an inner, client-authenticated channel. The CBT must have the following properties (also defined by IETF RFC 5056):

チャネルバインディングを定めている RFC 5056 の Section 2.1 には似たような記載があるため、おそらくこのことを言っていると思われます。

多層防御となりますので TLS が安全なうちは特に不要だと思われますが、安全と思われた WPA2 も10年越しで脆弱性が発見されました。

TLS もいつまで安全か分かりません。多層防御の観点では導入したほうがベターではあります。

がしかし、例えば Linux サーバがドメインコントローラを LDAPs サーバとして使っている場合、通常の設定では CBT を取得する手段は無い気がします。

既存で ドメインコントローラを LDAPs として使っている場合は要注意かもしれません。(アップデート後は LDAP チャネルバインディングを無効化したほうが無難かも?)

IT/インフラエンジニアの地位とスキル向上のために

関連記事

IT 技術の進化はとどまることを知りません。矢継ぎ早に新たな技術が出てきたり、数年前の技術が時代遅れになったりと、IT エンジニアは勉強し続ける運命のようです。 それをどう思うかはあなた次第。 ビジネスの基本は『付加価値を与える[…]

IMG
関連記事

nesuke の考える NW エンジニアの2つの道 ネットワークエンジニアには 2 つの道があります。 1 つはネットワーク構築一筋で、L4 までをひたすらきっちりと構築していく道。 もう 1 つはネットワークを軸として深堀し[…]

IMG