委任が許可されている
説明
ソースセキュリティプリンシパルは、ターゲットコンピューターでプロトコル遷移を使用して Kerberos 制約付き委任 (KCD) を実行できます。これは、ターゲットコンピューターで実行されている任意のサービスに Kerberos で認証するときに、任意のユーザーになりすます可能性があることを意味します。
したがって、多くの場合、ターゲットコンピューターが完全に侵害される恐れがあります。
悪用
ソースのセキュリティプリンシパルを侵害した攻撃者は、Rubeus などの専用のハッカーツールを使用して正当な Kerberos プロトコル拡張 (S4U2self と S4U2proxy) を悪用し、Kerberos サービスチケットを偽造し、ターゲットユーザーになりすます可能性があります。攻撃者は、たいてい特権ユーザーになりすまして特権アクセスを取得します。
攻撃者がサービスチケットを偽造すると、Kerberos と互換性のある任意のネイティブ管理ツールや特殊なハッカーツールを使用して、リモートで任意のコマンドを実行できるようになります。
悪用は、次の制約が満たされている場合に成功します。
-
ソースのセキュリティプリンシパルに対してプロトコル遷移が有効になっていること (UserAccountControl の ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION/委任 GUI の「Use any authentication protocol」)。厳密に言えば、攻撃はプロトコル遷移がなくても (委任 GUIの「Use Kerberos only」) 可能ですが、その場合、攻撃者はまずターゲットユーザーからソースセキュリティプリンシパルへの Kerberos 認証を強制する必要があるため、攻撃しにくくなります。したがって、このケースでは Tenable Identity Exposure は攻撃関係を作成しません。
-
ソースおよびターゲットのセキュリティプリンシパルに ServicePrincipalName が設定されていること。設定されていない場合、Tenable Identity Exposureはこの攻撃関係を作成しません。
-
なりすましの標的となるのは、「機密であり委任できない」(UserAccountControl の ADS_UF_NOT_DELEGATED) とマークされておらず、「保護されたユーザー」グループのメンバーでもないアカウントです。なぜなら、Active Directory がこのようなアカウントを委任攻撃から保護しているからです。
逆に、委任が許可されているターゲットコンピューターは、サービスプリンシパル名 (SPN) で指定されているため、「cifs/host.example.net」の SMB、「http/host.example.net」の HTTP などの特定のサービスを含んでいます。ただし、現実には攻撃者は「名前置換攻撃」を使用して、同じターゲットアカウントで実行されている他の SPN やサービスを標的にすることができます。したがって、これは悪用を制限するものとはみなされません。
修正方法
ソースセキュリティプリンシパルに、ターゲットコンピューターで Kerberos 制約付き委任 (KCD) を実行するアクセス許可が必要ない場合は、そのアクセス許可を削除する必要があります。「操作が許可されている」委任攻撃の関係とは逆に、ソース側で変更を行う必要があります。
ソースセキュリティプリンシパルを削除するには
-
「Active Directory ユーザーとコンピューター」の管理 GUI で、ソースオブジェクトの [プロパティ] > [委任] タブに移動します。
-
ターゲットに対応するサービスプリンシパル名を削除します。
-
このソースからの委任を一切望まない場合は、すべての SPN を削除し、「委任に関してこのコンピューターを信頼しない」を選択します。
あるいは、PowerShell を使用して、ソースの「msDS-AllowedToDelegateTo」属性のコンテンツを変更することもできます。
-
たとえば、Powershell で次のコマンドを実行して、すべての値を置き換えます。
コピーSet-ADObject -Identity "CN=Source,OU=corp,DC=example,DC=net" -Replace @{ "msDS-AllowedToDelegateTo" = @("cifs/desiredTarget.example.net") }
-
このソースからの委任を一切望まない場合は、次のコマンドを実行して属性を消去します。
コピーSet-ADObject -Identity "CN=Source,OU=corp,DC=example,DC=net" -Clear "msDS-AllowedToDelegateTo"
プロトコル遷移を無効にすることで、この攻撃経路を完全に閉じることなくリスクを軽減することも可能です。そのためには、すべてのセキュリティプリンシパルは NTLM ではなく Kerberos のみを使用してソースに接続する必要があります。
プロトコル遷移を無効にするには
-
「Active Directory ユーザーとコンピューター」の管理 GUI で、ソースオブジェクトの [プロパティ] > [委任] タブに移動します。
-
[Use any authentication protocol] の代わりに [Use Kerberos only] を選択します。
または、PowerShell で次のコマンドを実行して、プロトコル遷移を無効にすることもできます。
Set-ADAccountControl -Identity "CN=Source,OU=corp,DC=example,DC=net" -TrustedToAuthForDelegation $false
最後に、一般的な推奨事項として、機密の特権アカウントがそのような攻撃にさらされるのを制限するために、Tenable Identity Exposure は「機密であり委任できない」(ADS_UF_NOT_DELEGATED) としてマークするか、関連する運用上の影響を注意深く検証したうえで「保護されたユーザー」グループに追加することを推奨します。
関連項目