Microsoft Local Administrator Password Solution (LAPS) により、組織はすべてのエンドポイントでローカル管理者パスワードを管理できます。正しく導入すれば、潜在的な横方向の移動の一部の種類や privilege escalation を環境内で防ぐための効果的な方法となります。しかし、誤って導入すると、攻撃者にとって大きな隙が生まれます。
この記事では、LAPS とは何か、どのように展開するのか、そして Netwrix Privilege Secure を使用して、その本質的なセキュリティ上のギャップをどのように埋めるかを説明します。
Microsoft LAPS とは?
Microsoft LAPS は、Active Directory を利用して、すべての Windows エンドポイントにあるローカル Administrator アカウントのパスワードを管理し、ローテーションします。すべてのローカル Administrator アカウントに固有で複雑なパスワードを設定することで、LAPS は横方向への移動や特権昇格のリスクを軽減します。つまり、攻撃者が 1 つのローカル Administrator アカウントを侵害しても、同じパスワードを使うだけでは他のエンドポイントへ横方向に移動できません。
他のパスワード管理ツールと比べたメリットは、LAPS がこれらのパスワードを管理するために追加のコンピューターを必要としないことです。これは download して、LAPS を無料で利用できます。
Microsoft LAPS の設定
環境に LAPS をセットアップするには、ダウンロードに含まれているガイド(LAPS_OperationsGuide.docx)に詳しく記載された手順に従ってください。ここでは、これらの手順の一部を概要レベルで説明します。
エンドポイントに LAPS をインストールする
エンドポイントに LAPS をインストールすると、次のコンポーネントが配置されます。
- ファットクライアント UI
- PowerShell モジュール
- グループポリシー テンプレート
- AdmPwd GPO 拡張
管理コンソールではこれらの機能のうち1つ以上が必要ですが、LAPS によって管理されるエンドポイントには AdmPwd GPO 拡張だけで十分です。操作ガイドでは、このコンポーネントをエンドポイントにプッシュするいくつかの方法が紹介されています。
LAPS に対応するために Active Directory スキーマを拡張する
Microsoft は、この手順を支援する PowerShell モジュールを提供しています。これにより、スキーマに 2 つのコンピューター属性が追加されます:
- ms-Mcs-AdmPwd — 計算機オブジェクトのローカル Administrator パスワードを平文で格納します(怖いですよね、分かります。ですが後ほど詳しく説明します)
- ms-Mcs-AdmPwdExpirationTime — パスワードの有効期限が切れる時刻を格納します
スキーマを拡張したら、グループ ポリシーを使用して、LAPS の設定をすべてのメンバー サーバーにプッシュできます。次に、 Group Policy Management エディターを使用して、新しい LAPS グループ ポリシー オブジェクト(GPO)を設定します:
LAPS の GPO には、次の設定が含まれます:
- パスワード設定 — ローカルの Administrator アカウント用パスワードに対する、長さや有効期限(年齢)を含む複雑性要件を指定できます
- ローカル管理者パスワード管理を有効にする — GPO によって管理されるエンドポイントが LAPS によって管理されているかどうかを制御します
- 管理する管理者アカウント名 — デフォルトではないローカル管理者アカウントのパスワードを管理できます(つまり、「Administrator」という名前ではないローカル アカウント)
- ポリシーで必要とされる期間を超えるパスワードの有効期限を許可しない — パスワード設定の「パスワードの有効期間(日数)」の設定を超えてパスワードの有効期限が延びないようにできます
LAPS が安全であることを確認する
AD スキーマを拡張したら、次のステップは、これらの新しい属性に対する権限が正しく適用されていることを確認することです。必要なオブジェクトにだけアクセスを許可したいので、この手順はプロセスの中でも特に重要なものの一つです。Microsoft は、現在その属性へのアクセス権を持っているのが誰かを確認し、必要に応じて新しい権限を適用するための PowerShell スクリプトを提供しています。
大まかに言うと、ここではいくつかの点を考慮する必要があります:
- ローカル Administrator アカウントのパスワードを閲覧できてはいけないコンピューター オブジェクトについて、ユーザーおよびグループから「All extended rights(すべての拡張権限)」の権限を削除します(パスワードは属性に平文で保存されていることを忘れないでください)。
- 「SELF」プリンシパルには、「ms-Mcs-AdmPwdExpirationTime」および「ms-Mcs-AdmPwd」属性に書き込む権限(機能)が必要です。これにより、パスワードが期限切れになったときに、パスワードと有効期限の時刻を更新できます。LAPS によって管理されるすべてのコンピューター オブジェクトに、「SELF」の ACE が必要です。
- ローカル Administrator アカウントのパスワードをリセットすることが許可されているユーザーおよびグループには、これらのコンピューター オブジェクト上の属性へのアクセス権を付与する必要があります。
こちらは、現在だれがこれらの属性にアクセスできるかを理解するのに役立つスクリプトです。
<#
Author: Kevin Joyce
Requirements: Active Directory PowerShell module, Domain Administrator privileges (to ensure the capability to get attribute GUIDs and view all permissions on all computer objects)
Description: Looks up permissions within Active Directory on a target (OU or Computer) to determine access to LAPS attributes (ms-Mcs-AdmPwdExpirationTime and ms-Mcs-AdmPwd).
Usage: Populate the $target variable with the DN of a computer object, or OU to search for computer objects within.
To output the results to a text file run the following .LAPS_Permissions_Collection.ps1 > output.txt
<#
Import-Module ActiveDirectory
##Get the GUID of the extended attributes ms-Mcs-AdmPwdExpirationTime and ms-Mcs-AdmPwd from Schema
$schemaIDGUID = @{}
Get-ADObject -SearchBase (Get-ADRootDSE).schemaNamingContext -LDAPFilter '(|(name=ms-Mcs-AdmPwdExpirationTime)(name=ms-Mcs-AdmPwd))' -Properties name, schemaIDGUID |
ForEach-Object {$schemaIDGUID.add([System.GUID]$_.schemaIDGUID,$_.name)}
<# **REPLACE DN VARIABLE BELOW**
Declare the distinguishedName of the Computer object directly or OU to search for computers within#>
$target = 'CN=Computers,DC=COMPANY,DC=NET'
##Get distinguished name of all Computer objects from the OU or of the target itself
$computers = Get-ADComputer -SearchBase $target -Filter {name -like '*'}
<#Get objects that have specific permissions on the target(s):
Full Control(GenericAll)
Read All Properties(GenericRead)
Write all Properties (WriteProperty where ObjectType = 00000000-0000-0000-0000-000000000000
#>
Set-Location ad:
foreach ($computer in $computers){
(Get-Acl $computer.distinguishedname).access |
Where-Object { (($_.AccessControlType -eq 'Allow') -and ($_.activedirectoryrights -in ('GenericRead','GenericAll') -and $_.inheritancetype -in ('All', 'None')) -or (($_.activedirectoryrights -like '*WriteProperty*')-or ($_.activedirectoryrights -like '*GenericRead*') -and ($_.objecttype -eq '00000000-0000-0000-0000-000000000000')))} |
ft ([string]$computer.name),identityreference, activedirectoryrights, objecttype, isinherited -autosize
}
<#Get objects that have specific permissions on the target(s) and specifically the LAPS attributes:
WriteProperty
ReadProperty
#>
Set-Location ad:
foreach ($computer in $computers){
(Get-Acl $computer.distinguishedname).access |
Where-Object {(($_.AccessControlType -eq 'Allow') -and (($_.activedirectoryrights -like '*WriteProperty*') -or ($_.activedirectoryrights -like '*ReadProperty*')) -and ($_.objecttype -in $schemaIDGUID.Keys))} |
ft ([string]$computer.name),identityreference, activedirectoryrights, objecttype, isinherited -AutoSize
}
セキュリティのヒント:これら2つの LAPS 属性を権限でロックダウンするだけでなく、属性に対する LDAP トラフィックも監視してください。権限が誤って設定され、攻撃者がそれらを照会できてしまう状況を見つけられるようにするためです。 StealthDEFEND for Active Directory は、これらの属性に対する LDAP トラフィックをリアルタイムで通知できます。
LAPS の動作を確認する
特定のエンドポイントの現在のローカル Administrator パスワードを LAPS 経由で取得する方法はいくつかありますが、最も簡単なのは GUI を使用することです。コンピューター名を入力するだけで、平文のローカル Administrator パスワードとその有効期限日が表示され、これを変更できます。
または、PowerShell を使用してこの情報を取得することもできます:
Netwrix Privilege Secure で Microsoft LAPS のセキュリティギャップを解消する
Microsoft LAPS は、すべてのエンドポイントにわたってローカル Administrator のパスワードを管理するための強力なソリューションです。正しく導入すれば、潜在的な横方向の移動(lateral movement)や特権昇格(privilege escalation)の一部の形態を防ぐうえで効果的な方法になります。とはいえ、正しく導入されていない場合は、攻撃者にとって非常に大きな侵入口(隙)を作ってしまう可能性があります。
LAPS のセキュリティギャップには、次のものが含まれます。
- 古い(時代遅れの)インターフェース
- LAPS は強力な認証および認可をサポートしていません。
- LAPS では just-in-time access が提供されないため、Administrator アカウントは常に攻撃者に乗っ取られるリスクがあります。
- アクセス後に強制的なパスワードのリセットがないため、攻撃者は盗まれたパスワードを使用できてしまいます。
- ユーザーは常にアカウントのパスワードを把握している必要があり、運用面とセキュリティ面の両方で課題が生じます。
これらのセキュリティ上のギャップは Netwrix Privilege Secure を使って解消できます。これは privileged access management (PAM) solution マルチティアの承認、just-in-time とスケジュールされたアクセス、強制的なパスワードローテーション、パスワードの制御された開示、そしてセッションの記録と再生などの機能を追加することで LAPS を強化します。
Netwrix Privilege Secure のその他のメリット
多くの PAM ソリューションは、Domain Admin やローカル サーバーの Administrator のような高度に特権化されたアカウントへのアクセスを制限することにのみ注力しています。このアプローチでは管理者に必要なタイミングでの just-in-time アクセスを提供できますが、強力なアカウントは使用していない場合でも引き続き利用可能な状態にあるため、結果として脆弱性も残ります。
Netwrix Privilege Secure により、これらの常に特権化されたアカウント(standing privileged accounts)のほとんどを排除することで、攻撃対象領域(attack surface area)を大幅に削減できます。代わりに、管理者には、タスクを完了するために必要な正確な権限レベルが、必要なタイミングで、必要な期間だけ付与されます。このアプローチは、Domain Admins のメンバーである必要がある人数を減らすことも可能にし、セキュリティ上のリスクをさらに低減します。加えて、このソリューションは、アカウント侵害にしばしば悪用されるアーティファクト(artifacts)を削除するか、最小化します。
共有する
もっと詳しく
著者について
Kevin Joyce
プロダクトマネジメント担当ディレクター
Netwrix のプロダクトマネジメント担当ディレクター。Kevin はサイバーセキュリティに情熱を持ち、特に攻撃者が組織の環境を悪用するために用いる戦術や手法を理解することに注力しています。Active Directory と Windows のセキュリティに焦点を当てたプロダクトマネジメントでの 8 年の経験を通じて、その情熱を活かし、組織がアイデンティティ、インフラ、データを保護できるようなソリューションの構築を支援しています。