Windows Server 2016 の エクストラネットのスマート ロックアウト機能の説明

適用対象: Windows Server 2016

概要


Windows Server 2016 の 2018 年 3 月の更新時点で、Active Directory フェデレーション サービス (AD FS) には、 エクストラネット スマート ロックアウト (ESL) という新しい機能があります。 認証サービスへの攻撃が増加したときに、ESL は、正規ユーザーからのサインインと攻撃者の可能性があるユーザーからのサインインの違いを識別する AD FS を有効にすることができます。 その結果、AD FS は、攻撃者をロックアウトし、正規ユーザーがアカウントを引き続き使用できるようにします。 これにより、ユーザーのサービス拒否が回避され、既知のユーザーアカウントを対象とする攻撃を防ぐことができます。

Windows Server 2016 の AD FS では、ESL 機能が使用できます。

ESL をインストールおよび設定する方法


ファーム内のすべてのノードに更新プログラムをインストールします。

最初に、Windows Server 2016 のすべての AD FS サーバーが、2018 年 3 月の Windows 更新プログラム時点で、最新のものであることを確認します。

アーティファクト データベースの権限の更新

エクストラネット スマート ロックアウト を使用するには、AD FS のアーティファクト データベースで新しいテーブルを作成する権限を持つために、AD FS サービス アカウントが必要です。 AD FS 管理者としてAD FS サーバーにログインし、PowerShell コマンド プロンプト ウィンドウで次のコマンドを実行してこの権限を与えます。

$cred = Get-Credential
Update-AdfsArtifactDatabasePermission -Credential $cred

  $cred プレースホルダーは、AD FS 管理者権限を持つアカウントです。 これにより、テーブルを作成する書き込み権限が与えられます。

AD FS ファームが SQL Server を使用しており、上記で提供されている資格情報が SQL Server では管理者権限を持っていないため、上記のコマンドは失敗することがあります。 この場合、SQL Server Database で、データベース権限を手動で設定することで、AdfsArtifactStore データベースに接続するときに次のコマンドを実行できます。

ALTER AUTHORIZATION ON SCHEMA::[ArtifactStore] TO [db_genevaservice]

ESL を設定する

ExtranetLockoutMode という名前の新しいパラメータが、ESL に追加されました。 ここでは、次の値が含まれています。

  • ADPasswordCounter– これは、従来の AD FS 「エクストラネット ソフト ロックアウト」モードで、場所に基づいて区別されません。 これが既定の値です。
  • ADFSSmartLockoutLogOnly– これは、エクストラネット スマート ロックアウトです。 認証要求を拒否する代わりに、AD FS は管理および監査イベントを書き込みます。
  • ADFSSmartLockoutEnforce–これは、しきい値に達したときに、見慣れない要求をブロックする完全なサポートを備えたエクストラネット スマート ロックアウトです。

最初に、ロックアウト プロバイダーを短期間 (1 ~ 3 日) のログのみに設定し、次のコマンドレットを実行することをお勧めします。 この期間内に監査を確認し (詳細については下記を参照) 、これらのイベントの頻度に影響する可能性のあるアカウントの数を確認してください。 監査の検証が正常に終了したら、設定を「ADFSSmartLockoutEnforce」モードに設定します。

Set-AdfsProperties -ExtranetLockoutMode AdfsSmartlockoutLogOnly

このモードでは、AD FS は分析を実行しますが、ロックアウト カウンターが原因で、要求はブロックされません。 このモードは、[適用] モードを有効にする前に、スマート ロックアウトが正常に実行されていることを検証するために使用されます。

新しいモードでは、次のコマンドを実行して、ファーム内のすべてのノードで AD FS サービスを再起動します。

再起動 - サービス adfssrv

ロックアウトのしきい値とオブザベーション ウィンドウの設定

ESL には次の 2 つのキー設定があります。 ロックアウト しきい値オブザベーション ウィンドウ

ロックアウトしきい値の設定

パスワード ベースの認証が正常に行われるたびに、AD FS はクライアント IP をアカウント アクティビティ テーブル内の使い慣れた場所として格納します。

パスワードベースの認証が失敗し、資格情報が使い慣れた場所から取得されない場合、失敗認証数は増加します。

使い慣れた場所ではないところからのパスワード施行の失敗数がロックアウトのしきい値に達した後に、使い慣れた場所ではないところからパスワード ベースの認証に失敗した場合、アカウントはロックアウトされます。

 ロックアウト は、この新しい使い慣れた場所ではないところのロックアウト カウンターとは別に、継続して使い慣れた場所にも適用します。

しきい値は、 Set-AdfsProperties を使用して設定します。

例:

Set-AdfsProperties -ExtranetLockoutThreshold 10

オブザベーション ウィンドウの設定

オブザベーション ウィンドウの設定では、一定の時間経過後にアカウントを自動的にロック解除できます。 アカウントのロックを解除すると、1 回の認証が許可されます。 認証が成功した場合、失敗した認証回数は 0 にリセットされます。 失敗した場合は、ユーザーが再度実行する前に、別のオブザベーション ウィンドウが表示されます。

オブザベーション ウィンドウは、次の例のコマンドのように Set-AdfsProperties を使用して設定します。

Set-AdfsProperties -ExtranetObservationWindow ( new-timespan -minutes 5 )

ロックアウトを有効にする

次の例のように EnableExtranetLockout パラメーターを使用して、エクストラネットのロックアウトを有効または無効にできます。

ロックアウトを有効にするには、次のコマンドを実行します。

Set-AdfsProperties -EnableExtranetLockout $true

ロックアウトを解除するには、次のコマンドを実行します。

Set-AdfsProperties -EnableExtranetLockout $false

強制モードを有効にする

ロックアウトのしきい値とオブザベーショ ウィンドウに慣れた後は、ESL は次の PSH コマンドレットを使用して「強制」モードに移行できます。

Set-AdfsProperties -ExtranetLockoutMode AdfsSmartLockoutEnforce

新しいモードを実行するには、次のコマンドを使用して、ファーム内のすべてのノードで AD FS サービスを再起動します。

再起動 - サービス adfssrv

ESL の管理


ユーザー アカウントの活動を管理する

AD FS は、ユーザー アカウントのアクティビティ データを管理するための 3 つのコマンドレットを提供します。 これらのコマンドレットは、マスター ロールを保持するファーム内のノードに自動的に接続します。

 この動作は、-Server パラメーターを渡すことで上書きできます。

  • Get-ADFSAccountActivity

    ユーザー アカウントの現在のアカウント活動を読み取ります。 コマンドレットは、常にアカウント アクティビティ REST エンドポイント を使用して、ファームのマスターに自動的に接続します。 したがって、すべてのデータは常に一貫性があります。

    Get-ADFSAccountActivity user@contoso.com

  • Set-ADFSAccountActivity

    ユーザー アカウントのアカウント活動を更新します。 これを使用すると、新しい使い慣れた場所を追加したり、任意のアカウントの状態を消去したりできます。

    Set-ADFSAccountActivity user@contoso.com -FamiliarLocation “1.2.3.4”

  • Reset-ADFSAccountLockout

    ユーザー アカウントのロックアウト カウンターをリセットする

    Reset-ADFSAccountLockout user@contoso.com -Familiar

トラブルシューティング


データベース 許可を更新

Update-AdfsArtifactDatabasePermission コマンドレットからエラーが返された場合は、次のことを確認します。

  • ノードがファームの一覧にあるが、ファームのメンバーではなくなった場合、検証は失敗します。 これは、remove-adfsnode <ノード名>を実行して修正できます。
  • 更新プログラムがファーム内のすべてのノードに展開されていることを確認します。
  • コマンドレットに渡された資格情報が、AD FS アーティファクト データベース スキーマの所有者を変更する権限を持っていることを確認します。

ログ / 監査

アカウントがロックアウトしきい値を超えるため、認証要求が拒否されると、AD FS はセキュリティ監査ストリームに ExtranetLockoutEvent を書き込みます。

イベントログの例

削除


SQL Server データベース ファームでは、問題を発生させずに、設定アプリケーションを使用して更新プログラムをアンインストールできます。

WID データベース ファームは、更新された WID データベースの検証バイナリのため、以下の手順に従う必要があります。

  1. サービスを停止し、アカウントのアクティビティ テーブルをドロップする psh のアンインストール スクリプトを実行します。

    Stop-Service adfssrv -ErrorAction Stop $doc = new-object Xml$doc.Load("$env:windir\ADFS\Microsoft.IdentityServer.Servicehost.exe.config")$connString = $doc.configuration.'microsoft.identityServer.service'.policystore.connectionStringif ( -not $connString -like "*##wid*" ){    Write-Error "SQL installs don't require DB updates, skipping DB table drop"}else{	$connString = "Data Source=np:\\.\pipe\microsoft##wid\tsql\query;Initial Catalog=AdfsArtifactStore;Integrated Security=True"	stop-service adfssrv	$cli = new-object System.Data.SqlClient.SqlConnection	$cli.ConnectionString = $connString	$cli.Open()	try	{            $cmd = new-object System.Data.SqlClient.SqlCommand        $cmd.CommandText = "IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[ArtifactStore].[AccountActivity]') AND type in (N'U')) DROP TABLE [ArtifactStore].[AccountActivity]"        $cmd.Connection = $cli        $cmd.ExecuteNonQuery()     }    finally    {        $cli.CLose()    }	write-warning "Finish removing the patch using the Settings app and then restart the complete to complete the uninstall"} 
  2. 設定アプリケーションを使用して更新プログラムをアンインストールします。

  3. コンピューターを再起動します。