7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

「2020 年 LDAP チャネル バインディングと LDAP 署名を有効」について調べてみた

Last updated at Posted at 2020-01-25

#はじめに
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化するって結構大変なんだろうか。。。)

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?