ActivieDirectoryのLDAP 署名有効化をやってみた

# はじめに
2020 年初頭の Windowsアップデートで、「LDAP 署名有効化」「LDAP チャネルバインディング （LDAPS 利用時）化」になるとのことで試してみました。
本記事では「LDAP 署名有効化」で試したことについての記録です。

https://portal.msrc.microsoft.com/ja-JP/security-guidance/advisory/adv190023
https://msrc-blog.microsoft.com/2019/10/02/ldapbinding/

## 試した環境
* Windows Server 2016 Standrd
* 2012/12/11時点での Windowsアップデート実施済み
* ADをセットアップ済み

# グループポリシー定義で変更
[マイクロソフトのアナウンス](https://support.microsoft.com/ja-jp/help/935834/how-to-enable-ldap-signing-in-windows-server-2008)によるとサーバーの`LDAP 署名有効化`にはグループポリシーの定義で変更するみたいなので素直にやってみました。

![LDAP署名グループポリシー設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/de823812-e1fb-d108-a3cd-789fd657f883.png)

よし、簡単に出来たー。これで Linuxから普通の `ldapsearch` ではエラーになるはず[^1]。


```
# ldapsearch -x -LLL -H ldap://${LDAP}/ -D "${ADMIN}" -b ${SUFFIX} -y ${PASS} -s sub "(cn=Administrator)" cn
dn: CN=Administrator,CN=Users,DC=win2018adfs,DC=osstech,DC=example,DC=co,DC=jp
cn: Administrator
```

**って、あれー。応答返ってくるし。** 同ページに「変更後の確認方法[^2]」も載っているのでそれも試してみるも以下の結果に。

![LDAP接続成功png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/018030ce-6002-d957-32d9-ff5b070e8d75.png)

**BIND 成功してる！！** どうやらグループポリシーではダメらしい。windowsようわからん。

# ローカルセキュリティポリシー設定
確かローカルセキュリティポリシーで同じ感じの設定があったはず。ってことで確認してみる。

![LDAP署名ローカルセキュリティポリシー設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/dfd07ef8-4a93-9dc9-a852-39b6e0309721.png)

`LDAPサーバー署名必須` は「なし」になっている。ここを変えれば良いのかなぁー。


![LDAP署名ローカルセキュリティポリシー変更できない.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/3924f252-c602-66f0-4f58-3734fee96b37.png)

設定値欄が**グレーアウト**して変えられないんだけど…


# ローカルセキュリティポリシーを強引に変える
ということで強引にローカルセキュリティポリシーを変えてみることにしました。
（[こちら](https://troushoo.blog.fc2.com/blog-entry-393.html)のページに従って変えることができました。）


#### 1. ローカルセキュリティポリシーのポリシーエクスポート
「操作」-> 「ポリシーのエクスポート」で現在の設定を任意のファイル名で保存します。
![ローカルセキュリティポリシーエクスポート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/ae9ada5f-cc23-015c-16cd-ccf07b53cbef.png)


#### 2. mmc を起動
「ファイル名を指定して実行」で mmc.exe と入力て起動します。
![mmc起動.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/cb5fdf14-ad5d-207b-6528-bca6b8db5feb.png)

#### 3. スナップインの追加と削除

「ファイル」->「スナップインの追加と削除」から`セキュリティ構成と分析`を追加します。
![スナップイン追加と削除.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/820f2452-a6f2-1182-b24c-cff006bc8cae.png)

![スナップイン追加と削除2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/cde63d26-6fe5-c57b-5db0-8262ed7d48d9.png)


#### 4. セキュリティ構成と分析でデータベースを開く
「セキュリティ構成と分析」で右クリックをし、「データベースを開く」を選択します。

![セキュリティ構成と分析.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/fb4b0fa8-6d1d-fd6a-2bf1-d57fcdc4940f.png)

#### 5. データベースを開く
新しく作ることになるので「ファイル名」に任意の名前を入力して「開く」を押します。
![データベースを開く.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/f0102ed7-afbf-b7db-913a-106b36d75b9a.png)

#### 6. ポリシーファイルを開く
続いて「テンプレートのインポート」になるので「1. ローカルセキュリティポリシーのポリシーエクスポート」で保存したファイルを指定します。
![ローカルセキュリティポリシーのインポート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/bf1bdf06-1cd4-57e0-afd8-13374578168f.png)

#### 7. コンピュータの分析
「セキュリティ構成と分析」で右クリックをし、「コンピュータの分析」を選択します。
![コンピュータの分析.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/74ca35c5-a3ae-72b4-2b3e-3ffb1c6a58e9.png)


ログファイルのパス指定画面となるので適当に指定し、「OK」を押します。

![分析の実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/ca4f6ef0-367d-02e8-3ea8-ea001c9fb9a8.png)

#### 8. ローカルセキュリティポリシーを設定
ローカルセキュリティポリシーと同じ設定画面となるので、目的の「LDAPサーバー署名必須」を選択します。
![コンソールからのLDAPサーバー署名必須.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/2174645e-65cb-3290-2f94-6bbada241aeb.png)

#### 9. LDAPサーバー署名必須の有効

この画面で「署名を必要とする」に変更して「OK」を押します。

![LDAP署名ローカルセキュリティポリシー変更するとき.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/4a163e01-fcab-aae2-b231-debc4fdc45ed.png)

`署名を必要する`になっていることを確認します。
![LDAP署名を必須とした.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/e58b5af3-0f0c-0112-41cb-998507945b9d.png)

#### 10. コンピュータの構成
「セキュリティ構成と分析」で右クリックをし、「コンピュータの構成」を選択します。
![コンピューターの構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/5e3a1a07-c88b-49f2-8b9d-7b6590671891.png)

ログファイルのパス指定画面となるので適当に指定し、「OK」を押します。

![分析の実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/ca4f6ef0-367d-02e8-3ea8-ea001c9fb9a8.png)

以上で作業は完了です。これで設定が反映されました。実際にローカルセキュリティポリシーの設定を新しく開いてみると変更されています。

![LDAP署名ローカルセキュリティポリシー変更後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/f2b0cdba-ec74-ad36-6fb0-7d63e1c39a21.png)


# LDAP署名有効化状態で ldapsearch

おそらくLDAP署名の有効化を設定出来たのでLinuxから ldapsearch を実行！

```
# ldapsearch -x -LLL -H ldap://${LDAP}/ -D "${ADMIN}" -b ${SUFFIX} -y ${PASS} -s sub "(cn=Administrator)" cn
ldap_bind: Strong(er) authentication required (8)
	additional info: 00002028: LdapErr: DSID-0C090256, comment: The server requires binds to turn on integrity checking if SSL\TLS are not already active on the connection, data 0, v3839
```

エラーが返ってきたー。やったぜ。

ldaps にすると結果返ってきます。

```
# ldapsearch -x -LLL -H ldaps://${LDAP}/ -D "${ADMIN}" -b ${SUFFIX} -y ${PASS} -s sub "(cn=Administrator)" cn
dn: CN=Administrator,CN=Users,DC=win2018adfs,DC=osstech,DC=example,DC=co,DC=jp
cn: Administrator
```

一応「変更後の確認方法」の方もやってみました。

![強力なセキュリティで保護された認証が必要.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/29671371-ed6b-345c-cdba-fb0b3c0e2e5b.png)

想定通りの結果です。

LDAP署名の有効化を確認できました。めでたしめでたし。


# 時間が経つとLDAP署名が無効化される(2019/12/23追記)
イベントビューアーに以下の記録がされたタイミングでローカルセキュリティポリシーのLDAP署名が「なし」と設定変更されましたので、テスト最中に設定が切り替わってLDAP署名が無効化状態になってしまう可能性があるのでご注意ください。

![グループポリシーオブジェクトセキュリティポリシー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316450/84ba4189-a1a4-51e6-c4fe-246ac3f8f686.png)


グループポリシーのLDAP署名必須は「署名を必要とする」になっていて、仮に適用されても有効なままになると思うのにWindows意味不明…

[^1]: LDAP署名なにそれ RFC にあるの？聞いたこと無いんでopenldap-clientsパッケージでは対応してないと決めつけ
[^2]: 日本語訳のページ間違っているので英語版見た方が確実です。ファイル名を指定して実行は ldap.exe ですよマイクロソフトさん。