【M365 ハンズオン】クラウドPKIを利用して、Entra CBA(証明書ベースの認証)をやってみる (2/2)

# 1.はじめに

本記事は、以下「クラウドPKIを利用して、Entra CBAをやってみる」の後編です。
前回の記事で、Intune クラウドPKIによるSCEP証明書の配布まで完了しましたので、Entra 証明書ベースの認証を今回は実施します。

https://qiita.com/mokonacl/items/2fa17589bb1f98627d8c

# 2.Entra CBA
### 2-1.Entra CBAとは

Entra CBA (certificate-based authentication)とは、条件付きアクセスの認証ポリシーに、X.509証明書を利用する仕組みとなります。

もともと、Entra IDでは、Windowsでは、Windows Hello for Business（WHfB）を利用することで、証明書ベースの認証に相当する仕組みを提供していましたが、直接Entra IDの認証に、X.509 証明書を使用できるEntra CBA提供されることになりました。
Entra CBA自体は無料となり、Windowsだけではなく、iOS/ Androidプラットフォームでも利用可能な認証方式となっています。

Entra CBAでは、PKI(公開鍵基盤:Public Key Infrastructure）部分に関しては別途用意する必要があります。そのため、今回は、Intune クラウドPKIを利用しています。

### 2-2.余談：米国 大統領令「国家のサイバーセキュリティの向上」

以下記事によると、2021年の米国 大統領令 14028 「国家のサイバーセキュリティの向上」に対する Microsoft のコミットメントの一環として、Microsoft Entra 証明書ベース認証 (CBA) の一般提供開始を発表したとのことです。
PIV/CAC カードが、連邦政府内で使用される最も一般的な認証方法であるという状況のため、Entra CBAを一般提供したようです。

https://jpazureid.github.io/blog/azure-active-directory/enhancements-to-microsoft-entra-certificate-based-authentication/

# 3.手順

### 3-1.Enra管理センターに、証明機関を登録する

Entra 管理センターに移動し、「保護 > Security Center ＞ 証明機関」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/7f47e210-5dbf-274d-863a-7fa8b01f6030.png)
<br>

「アップロード」をクリックし、ルート証明書をアップロードします。
このとき、ルートCA証明書であるには、「はい」を選択し、証明書失効リストのURLには、Intune クラウドPKIのルートCAのプロパティ情報から入力し、「追加」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/f8b1a6f8-0efd-6d73-15fb-5947b77b10e7.png)
<br>

再度、「アップロード」をクリックし、発行元CAの中間証明書をアップロードします。
このとき、ルートCA証明書であるには、~~「はい」~~「いいえ」を選択し、証明書失効リストのURLには、Intune クラウドPKIのルートCAのプロパティ情報から入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/6ae967b0-2deb-eb7e-3e1d-c72a231e2adb.png)
<br>

アップロードが完了すると、リストに一覧が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/665e70a2-b41e-1ea1-adb3-3972ca1dc91e.png)

### 3-2.認証ポリシーに、証明書ベースの認証を設定

次は、証明書ベースの認証を「認証方法」に追加していきます。
※未設定の場合は、「有効の列が、いいえ」になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/40c75256-94a3-6bfe-0594-32df6d0b6e00.png)
<br>

「有効にする」をチェックし、「グループの追加」からテスト対象のグループを追加し、有効化およびターゲットの右側にある「構成」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/ff672583-ab44-370a-e4a6-e36e58b20aac.png)
<br>

「発行者ヒント」にチェックを入れ、保護レベルを「多要素認証」、必須のアフィニティバインドを「低」にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/01fd8750-3ab3-e3d6-d546-5d0482f28f55.png)
<br>

次に、「＋規則の追加」を選択し、証明書の発行者の情報を登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/906d1f67-65a9-d54d-a3d1-d5b9e1f90bf4.png)
<br>

「証明書の発行者」にチェックを入れて、「証明書の発行者識別子」には、先ほど証明機関に登録した発行元CAを選択します。
認証強度は、「多要素認証」、アフィニティバインドは「低」にし、「追加」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/fdc9e559-4a86-51f1-e32f-2f7c6b2b8eb4.png)
<br>

ユーザー名バインドはそのままで、「保存」をクリックして完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/a0fbfeb1-101a-9c95-672b-ed86fa78d9c4.png)
<br>

これで対象となるユーザに対しては、認証画面に「証明書またはスマートカードを使用する」というリンクが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/1c3931ba-c251-cdfa-182f-d8e0b6756b9b.png)
<br>

「証明書またはスマートカードを使用する」をクリックすると、利用する証明書の選択画面が表示されます。利用する証明書を選択し、「OK」をクリックすることで、Entra CBAを利用できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/8be8aa7e-b7e1-6e11-2545-9eb3e932ad5b.png)


:::note info
認証方法
認証方法に、Entra CBAを有効にして、対象となるグループに該当している時点で、証明書認証は利用可能となっています。
加えて、***条件付きアクセスの認証強度***に設定することで、Entra CBAといった***認証方法を強制する***ことが可能となります。
:::

:::note warn
注意事項
設定時に以下のような注意のポップアップが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/23e91ee6-ae48-0095-5492-7f79881d5523.png)

これは、実際にユーザがCBAを利用できる状態かどうかに関わらず、対象ユーザにはCBAが有効になるための注意喚起と、TLSインスペクションを利用している場合は、TLS(SSL)復号除外が必要であることを警告しているものとなります。
:::

### 3-3.条件付きアクセスに、認証強度として、CBAを登録

Entra 管理センターにおいて、「保護 > 条件付きアクセス > 認証強度」を選択します。
そして、「＋新しい認証強度」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/3b61a4fa-cb04-ad0f-b702-5a29befbc913.png)

:::note 
***フィッシングに強い多要素認証(MFA)***
MFA扱いとなり、さらに、フィッシング耐性を有する認証方法としては、以下となっています。
今回設定しているEntra CBAも含まれますね。

* Windows Hello for Business
* FIDO 2 セキュリティキー
* Microsoft Entra 証明書ベースの認証 (多要素) 

参考：Microsoft Learn 組み込みの認証強度
https://learn.microsoft.com/ja-jp/entra/identity/authentication/concept-authentication-strengths#built-in-authentication-strengths

<br>

あえて、***フィッシングに強い***多要素認証という言い方をしているのは、AiTM (Adversary-in-the-Middle) や Pass-the-cookie と呼ばれる攻撃手法があるためです。技術的には、SMSや電話を使ったタイプのMFAは、バイパスされる危険性があります。

参考：Microsoft Security : From cookie theft to BEC: Attackers use AiTM phishing sites as entry point to further financial fraud
https://www.microsoft.com/en-us/security/blog/2022/07/12/from-cookie-theft-to-bec-attackers-use-aitm-phishing-sites-as-entry-point-to-further-financial-fraud/

:::

:::note 
***MFA疲労攻撃対策***

余談ですが、Microsoft Authenticaterでは、以前、「サインインを承認しますか?」というプッシュ通知に対して、「拒否 / 承認」という選択肢による確認でした。
そのため、「ユーザーの誤操作」を狙って、誤って/うっかり、「承認」を押させるというMFA疲労攻撃が発生していました。
その後、対策として、Microsoft Authenticaterは、「プッシュ通知に番号の一致が必要」機能によって MFA の誤承認発生を防止するという機能が、2021年11月にリリースされています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/734f93e8-ac17-e07f-985f-30e373e68549.png)

引用：Japan Azure Identity Support Blog
Microsoft Authenticator の MFA 疲労攻撃対策 - 数値の一致による MFA が 有効化されます
https://jpazureid.github.io/blog/azure-active-directory/defend-your-users-from-mfa-fatigue-attacks/

<br>
こちらの機能も「保護 > 認証方法」に移動し、メソッド中の「Microsoft Authenticator」のところで設定可能です。なお、古いテナントでなければ、最初から有効化されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/731bb4b2-7b22-d48e-3180-de99d6cd07b3.png)

:::

名前を入力し、「証明書ベースの認証（多要素）」にチェックを入れて、「詳細設定オプション」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/dcda88c6-1357-6a6a-ef58-9b7297a9d90c.png)
<br>

発行元CAを選択し、「保存」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/32785df3-6da5-94e8-6c13-2219e1c2afaf.png)
<br>

最後に、「作成」を押して、カスタム認証強度の作成完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/176cc9de-29bb-4e12-320f-360664d0294a.png)
<br>

次に、「保護 > 条件付きアクセス > ポリシー」に移動します。
条件付きアクセスを作成して、ユーザとアプリを限定します。
そして、許可条件に、***認証強度***の設定をし、完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/01c6841a-f781-4c14-4c73-e73a03eb4905.png)
<br>

:::note 
テスト用のSaaS
O365以外で、テスト用のSaaSで条件付きアクセスの確認をする場合は、以下URLをご参考下さい。
:::

https://qiita.com/mokonacl/items/46ba1483341e8eb1ea39

### 3-4.動作確認：Edge

それでは、動作確認をしていきます。
動作確認は、Edge , Google Chrome , Firefoxを利用し、どれも正常に動作いたしました。

では、Edgeのケースの画面遷移を見ていきます。
Edgeで、InPrivateを立ち上げて、SaaSにアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/04025782-f191-6eb2-dcea-734580641e90.png)
<br>

次に、「証明書またはスマートカードを使用する」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/9ca54ea4-3c6d-7946-d127-2031e331a2a1.png)
<br>

:::note
補足
ここで、パスワードを入力しても、条件付きアクセスの認証強度を満たせないので、再度証明書の提示を要求されます。
以下は、パスワード入力後に、証明書の提示を求められている画面です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/eea75574-030f-b18e-738b-ffb3b3fef5da.png)
:::

いつもの画面を遷移を経て、SaaSに無事アクセスできました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/32c6db10-034f-9feb-9962-04080e181bf3.png)
<br>

### 3-4.動作確認：Google Chrome
Google Chromeでも画面遷移は同じですが、ブラウザ側で証明書の選択画面が少し違います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/e393e750-0d72-dcbb-1541-ff9ee513fc64.png)

次に、「証明書またはスマートカードを使用する」を選択し、証明書を選択して完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/7b6a5244-ff56-d52b-62d1-3bef7ab80383.png)

### 3-5.動作確認：Firefox
Firefoxでも画面遷移は同じですが、ブラウザ側で証明書の選択画面が少し違います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/ce84657c-1925-8bdd-a625-d85a38340b59.png)

次に、「証明書またはスマートカードを使用する」を選択し、証明書を選択して完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/1ddd0c6a-d4f5-289d-1f0a-6444b2888c73.png)

# 5.おわりに

これで、「クラウドPKIを利用して、Entra CBA(証明書ベースの認証)をやってみる」は、完了です。
MFAだけではなく、パスワードレスやフィッシング耐性も考慮するためのアプローチとして良いかもしれませんね。