はじめに
Windows Helli for Business で PIN 入力を複数回誤った場合に、どのような動作になるのかが、以下の公開情報に記載されています。
今回は、実際に どのような動きになるのかを検証してみました。
(上記の公開情報より、抜粋)
承認されていないユーザーが Windows Hello for Business に登録されているデバイスを所有するとどうなりますか?
承認されていないユーザーは生体認証オプションを利用できず、PIN を入力する唯一のオプションがあります。
ユーザーがランダム PIN を入力してデバイスのロックを解除しようとすると、3 回失敗した後、資格情報プロバイダーに次のメッセージが表示されます。
間違った PIN を複数回入力しました。もう一度やり直すには、下の「A1B2C3」と入力します。
チャレンジ フレーズ A1B2C3 を入力すると、ユーザーには PIN を入力する機会がもう 1 つ付与されます。
失敗した場合、プロバイダーは無効になり、ユーザーはデバイスを再起動するための唯一のオプションを残します。 再起動後、前述のパターンが繰り返されます。
試行が失敗した場合、デバイスはロックアウト状態になり、最初の再起動後 1 分、4 回目の再起動後 2 分、5 回目の再起動から 10 分後に続きます。
各ロックアウトの期間は、それに応じて増加します。
この動作は、TPM 2.0 のハンマリング防止機能の結果です。 TPM のハンマリング防止機能の詳細については、「 TPM 2.0 のハンマリング防止」を参照してください。
前提となる環境
-
TPM が利用できる Windows クライアント
物理 PC(ハードウェア TPM 2.0 搭載)
または、以下の記事の手順を使って、Hyper-V 上に TPM 2.0 が有効な Windows VM を手配(今回は、VM を使って検証しました)
-
Windows Hello for Business を構成
以下の記事の手順を使って、上記で手配した OS へ Windows Hello for Business を構成
検証実施前のステータス
検証を開始する前に、tpm.msc と、Get-Tpm 等のコマンドの実行結果を確認します。
コンピューターのトラステッドプラットフォームモジュール (TPM) の管理
OS インストール直後の tpm.msc の画面
公開情報:TPM のトラブルシューティング
https://learn.microsoft.com/ja-jp/windows/security/hardware-security/tpm/initialize-and-configure-ownership-of-the-tpm
TPM コマンド
OS インストール直後の コマンド実行結果
このリファレンスでは、すべての TPM コマンドレットの説明と構文を示します。コマンドレットの先頭の動詞に基づいて、アルファベット順にコマンドレットを一覧表示します。
公開情報
Get-Tpm
Get -Tpmコマンドレットは、TpmObject を取得します。
このオブジェクトには、現在のコンピューター上の Trusted Platform Module (TPM) に関する情報が含まれています。
項目 | 値 | |
---|---|---|
TpmPresent | True | 現在のコンピュータにTPMがあるかどうか |
TpmReady | True | TPM が Windows Server 2012 標準に準拠しているかどうか。 |
TpmEnabled | True | |
TpmActivated | True | |
TpmOwned | True | |
RestartPending | False | |
ManagedAuthLevel | Full | オペレーティング システムが所有者の承認を管理するレベル。 可能な値は、Legacy、Balanced、および Full です。 |
OwnerAuth | Trusted Platform Module (TPM) の現在の所有者認証値 | |
OwnerClearDisabled | Flase | TPM をリセットできるかどうか。 この値が True の場合、所有者認証値を使用してオペレーティング システムから TPM をリセットすることはできません。 この値が False の場合、オペレーティング システムから TPM をリセットできます。 |
AutoProvisioning | Enabled | コンピューターが自動プロビジョニングを使用できるかどうか。 可能な値は、NotDefined、Enabled、Disabled、および DisabledForNextBoot です。 |
LockedOut | False | TPM がロックアウトされているかどうか |
LockoutHealTime | 10 min | TPM のロックを解除できるようになるまでに経過する必要がある時間。 |
LockoutCount | 0 | 失敗した試行回数 |
LockoutMax | 31 | 失敗試行の制限 |
SelfTest | {} | TPM が実行するテストによって返される情報。 |
公開情報:Get-Tpm
https://learn.microsoft.com/ja-jp/powershell/module/trustedplatformmodule/get-tpm
Get-TpmEndorsementKeyInfo
Get -TpmEndorsementKeyInfoコマンドレットは、Trusted Platform Module (TPM) の承認公開キーと証明書に関する情報を取得します。
項目 | 値 | |
---|---|---|
IsPresent | True | 承認公開キーがオペレーティング システムに認識されているかどうかを表すブール値 |
PublicKey | System.Security.Cryptography.AsnEncodedData | 承認キーの asn.1 エンコードされた公開部分を含むAsnEncodedDataオブジェクト。コマンドレットがハッシュ アルゴリズムを使用した場合の公開キーのハッシュ (文字列)。 |
PublicKeyHash | ハッシュ値 | |
ManufacturerCertificates | {} | 製造元の承認キー証明書を含むX509Certificate2Collectionオブジェクト。このオブジェクトには、製造元の証明書とプラットフォーム証明書を含めることができます。エンタープライズ証明書など、オペレーティング システムに登録されている追加の承認キー証明書のコレクションを含むX509Certificate2Collectionオブジェクト。 |
AdditionalCertificates | {} |
公開情報:Get-TpmEndorsementKeyInfo
https://learn.microsoft.com/ja-jp/powershell/module/trustedplatformmodule/get-tpmendorsementkeyinfo
Get-TpmSupportedFeature
Get -TpmSupportedFeatureコマンドレットは、Trusted Platform Module (TPM) が指定された TPM 機能をサポートしているかどうかを確認します。
公開情報:Get-TpmSupportedFeature
https://learn.microsoft.com/ja-jp/powershell/module/trustedplatformmodule/get-tpmsupportedfeature
検証結果
結果として、公開情報に書かれている説明と、かなりの差異が見受けられました。
公開情報 | 検証結果 | |
---|---|---|
チャレンジフレーズ を求められるまでの回数 |
3 | 4 |
チャレンジフレーズ に回答して、そのあとに試行できる回数 |
1 | 1 |
チャレンジフレーズ のあと PIN をミスした際に ロックアウトが発生するか? |
する | しない |
ロックアウト発生までの失敗回数 | 4 | 31 |
ロックアウト発生し、再起動後に PIN 入力できるようになるまでの時間
公開情報 | 検証結果 | |
---|---|---|
1 回目 | 1分 | 10分 |
2 回目 | 未記載 | 10分 |
4 回目 | 2分 | |
5 回目 | 10分 |
検証した結果を、そのままの流れのままを 次章に示します。
1回~4回目の PIN 入力ミス
誤った PIN 入力を実施したあと、以下のメッセージが表示された。
正しいパスフレーズを入力すると、PIN の入力画面になります。
ここで、誤った PIN を入力すると、以下の画面になります。
上記の画面で OK を押すと、以下のようになり、再起動するしかなくなります。
同じデバイスへ、別の管理者アカウントで RDP を実施。Get-Tpm を実行した結果は、以下の通り。
以後、Get-Tpm の値は、同様の方法で取得しています。
この時は、LockOutCount 5 になっているが、Lockedout は、False のままになっている。
この時、PIN 入力はできないが、パスワード なら入力できる状態。PIN がどのような状態であっても、パスワードに切り替えることでサインインが可能。
再起動を実施
再起動後に、Get-Tpm を確認すると、Count は 5 のまま
6回~9回目の PIN 入力ミス
誤った PIN 入力を 実施したあと、以下のメッセージが表示された。
この時は、LockOutCount 9 になっているが、Lockedout は、False のままになっている。
30秒経過後、チャレンジフレーズ の入力が可能となるため、正しいフレーズを入力
この時は、LockOutCount 10 になっているが、Lockedout は、False のままになっている。
再起動
再起動後も LockOutCount は 10回 のままだった。
11回~14回目の PIN 入力ミス
11回~14回誤った
誤った PIN 入力を実施したあと、以下のメッセージが表示された。
この時は、LockOutCount 14 になっているが、Lockedout は、False のままになっている。
1分経過後、チャレンジフレーズ の入力が可能となるため、正しいフレーズを入力
この時は、LockOutCount 15 になっているが、Lockedout は、False のままになっている。
再起動
再起動後も LockOutCount は 15回のまま
16回~19回目の PIN 入力ミス
誤った PIN 入力を実施したあと、以下のメッセージが表示された。
この時は、LockOutCount 19 になっているが、Lockedout は、False のままになっている。
2分経過後、チャレンジフレーズ の入力が可能となるため、正しいフレーズを入力
この時は、LockOutCount 20 になっているが、Lockedout は、False のままになっている。
再起動
再起動後も LockOutCount は 20回のまま
21回~24回目の PIN 入力ミス
誤った PIN 入力を実施したあと、以下のメッセージが表示された。
この時は、LockOutCount 24 になっているが、Lockedout は、False のままになっている。
この時は、LockOutCount 25 になっているが、Lockedout は、False のままになっている。
再起動
再起動後も LockOutCount は 25回のまま
26回~29回目の PIN 入力ミス
誤った PIN 入力を実施したあと、以下のメッセージが表示された。
この時は、LockOutCount 29 になっているが、Lockedout は、False のままになっている。
10分経過後、チャレンジフレーズ の入力が可能となるため、正しいフレーズを入力
この時は、LockOutCount 29 になっているが、Lockedout は、False のままになっている。
再起動
再起動後も LockOutCount は 29回のまま
30回~31回目の PIN 入力ミス
誤った PIN 入力を実施したあと、以下のメッセージが表示された。
LockedOut が True になり、 LockOutCount も 31 になっている。
ロックアウト後の動作
10分まつと、以下のように Lockedout が False に変更され、LockOutCount も 30 に減算されている。(なお、このときは待っただけで 再起動はしていません)
ここで、正しい PIN を入力すると、サインインできました。
サインイン後の Get-Tpm の結果は、直前と変わらない。
このあと、再起動して Get-Tpm を実行するも カウントの値は変わらないが、時間がたつと カウントが 1 ずつ減っている様子。そして、また PIN を誤るとカウントアップしていき、31 に到達すると ロックが発生する。
ここで観察できた内容は、以下の公開情報の説明に近い状態です。
検証では 31 回でロックですが、以下の情報では 32 回になっている点が気になる点ですが・・・
連続4回失敗後、チャレンジフレーズ表示前の待ち時間
Get-TPM の結果では確認ができないのですが、ユーザーごとに ロックアウトされた回数がカウントされているような気がします。
これが増えるにしたがって、PIN を 4 回 連続でミスした際に、チャレンジフレーズが表示されるまで 待たされる時間は、どんどん延長されていくようです。
連続 4 回失敗したあと、チャレンジフレーズ入力前に待たされる時間
→ 検証では、ロックアウトの発生とは別に チャレンジフレーズの入力前に待機時間が発生した。公開情報には、このような説明は書かれていない。
検証結果 | |
---|---|
連続 4 回失敗 1回目 | なし |
連続 4 回失敗 2回目 | 30 秒 |
連続 4 回失敗 3回目 | 1 分 |
連続 4 回失敗 4回目 | 2 分 |
連続 4 回失敗 5回目 | 5 分 |
連続 4 回失敗 6回目 ここでロック発生 |
10 分 |
連続 4 回失敗 7回目 一旦 ロック回復後に 再度ミス |
30 分 |
連続 4 回失敗 8回目 一旦 ロック回復後に 再度ミス |
1 時間 |
連続 4 回失敗 9回目 一旦 ロック回復後に 再度ミス |
2 時間 |
以下の富士通さんが公開している情報に近い動きになりました。
https://www.fmworld.net/cs/azbyclub/qanavi/jsp/qacontents.jsp?PID=0311-3099
TPM のリセットを実行してみる
tpm.msc の状態は、TPM は使用する準備ができています。 という表示になっている。
ここで、TPM をクリア を実施します。
Get-Tpm の結果は、OwnerAuth に値が入っている。LockoutCount が 0 に戻っている。
リセットされたようだ。
しかし、リセットしたアカウントの方は、以下のメッセージが出て、PIN の再設定ができない。
パスワードに変更すれば、サインインができる状態。パスワードでサインインします。
サインインしたあと、以下のメッセージが出るため、サインイン を押します。
サインアウトを実施して、再度 サインインを試みます。
サインイン画面では、PINのエラーは消えていますが、PIN を選べなくなっているので、パスワードでサインインするしかありません。
以下のように Hello for Business の初期設定画面が現れます。初回サインイン時と同様な動きです。
Get-Tpm の結果は、OwnerAuth が空欄になりました。
これで、PIN を使って サインインできるようになりました。
ポリシーで、しきい値を変更すると、どうなるのか?
以下の公開情報で、ポリシーを使って TPM のロックアウトしきい値 を変更できるような事が書かれています。
しきい値を変更したら、どうなるのか検証してみました。
注意
なお、先に結論を書きますが、この検証結果は 意図しない結果となり、原因不明です。
再起動 を実施後に 検証しましたが、以前と変わらず、4回失敗したあとに、パスフレーズを求められる動作になっていました。
続いて、しきい値を 7 に変更して 再起動して試しても。以前と変わらず、4回失敗したあとに、パスフレーズを求められる動作になっている。
この謎は、解明できず。
まとめ
ポリシーの設定は、意図しない結果となりました。
この原因は、判らないままですが、何かわかったら この記事に追記していきたいと思います。
既定の TPM ロックアウトの発生トリガーと、その後に 待つべき時間や、TPM リセットの影響が調べられたので、これを踏まえて対応ができればと思います。