
概念実証のCobalt Strikeリフレクティブローダー。Cobalt Strikeの回避機能を再現、統合、強化することを目的としています!

Cobalt Strikeの回避機能を再現、統合、強化することを目的とした、概念実証のユーザー定義リフレクティブローダー (UDRL)です!
| 貢献者 | 主な貢献 | |
|---|---|---|
| Bobby Cooke | @0xBoku | プロジェクトの原作者兼メンテナー |
| Santiago Pecin | @s4ntiago_p | リフレクティブローダーの主要な拡張 |
| Chris Spehn | @ConsciousHacker | アグレッサースクリプティング |
| Joshua Magri | @passthehashbrwn | IATフック |
| Dylan Tran | @d_tranman | リフレクティブコールスタックスプーフィング |
| James Yeung | @5cript1diot | 間接システムコール |
Cobalt Strikeに組み込まれているCobalt Strikeリフレクティブローダーは堅牢で、Cobalt Strikeが提供するすべてのMalleable PE回避機能を処理できます。カスタムUDRLを使用する最大の欠点は、Malleable PE回避機能が標準でサポートされる場合とされない場合があることです。
公開BokuLoaderプロジェクトの目的は、レッドチームが独自の社内Cobalt Strike UDRLを作成するのを支援することです。このプロジェクトは、価値のあるすべてのCS Malleable PE回避機能をサポートすることを目指しています。一部の回避機能はCS統合を活用し、他の機能は完全に再作成され、一部はサポートされていません。
このプロジェクトをいかなる形でも使用する前に、回避機能が意図したとおりに動作することを適切にテストする必要があります。Cコードとアグレッサースクリプトの間で、異なるバージョンのオペレーティングシステム、コンパイラ、Javaを使用したコンパイルにより、異なる結果が返される可能性があります。
NtProtectVirtualMemoryへの間接システムコールを介して行われます。obfuscate "true"0x1000バイトはヌルになります。XGetProcAddress
Kernel32.GetProcAddressを使用しません。xLoadLibrary
TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleListからDLLベースアドレスを取得します。Kernel32.LoadLibraryAを使用しません。makeでBokuLoaderオブジェクトファイルをコンパイルBokuLoader.cnaアグレッサースクリプトをインポートScript Consoleを使用して、ビーコンビルドにBokuLoaderが実装されていることを確認RAWビーコンの生成はそのまま動作します。ビーコンローダーにArtifact Kitを使用する場合、stagesize変数はデフォルトより大きくする必要があります。
| 元のCobalt Strike文字列 | BokuLoader Cobalt Strike文字列 |
|---|---|
| ReflectiveLoader | BokuLoader |
| Microsoft Base Cryptographic Provider v1.0 | 12367321236742382543232341241261363163151d |
| (admin) | (tomin) |
| beacon | bacons |
Kernel32.LoadLibraryExAが呼び出されます。Kernel32.LoadLibraryExAの第3引数はDONT_RESOLVE_DLL_REFERENCES (0x00000001)です。
RXまたはRWXメモリがヒープに存在します。Kernel32.CreateFileMappingAとKernel32.MapViewOfFileが呼び出されます。NtAllocateVirtualMemory, NtProtectVirtualMemoryntdll.dllにユーザーランドフックを設定しても、これらのシステムコールは検出されません。mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11アセンブリ命令を含みます。0x1000バイトはゼロです。| コマンド | オプション | サポート状況 |
|---|
allocator | HeapAlloc, MapViewOfFile, VirtualAlloc | すべてBokuLoader実装によりサポート |
module_x64 | string (DLL Name) | BokuLoader実装によりサポート。 CS実装と同じDLL上書き要件が適用されます |
obfuscate | true/false | HTTP/SビーコンはBokuLoader実装によりサポート。SMB/TCPはobfuscate true現在サポートされていません。詳細はissueをご覧ください。修正できる方はヘルプを受け付けています :) |
entry_point | RVA as decimal number | BokuLoader実装によりサポート |
cleanup | true | CS統合によりサポート |
userwx | true/false | BokuLoader実装によりサポート |
sleep_mask | (true/false) または (Sleepmask Kit+true) | サポート。デフォルトの"sleepmask true"(sleepmask kitなし)を使用する場合は"userwx true"を設定。RXビーコン.textメモリ(src47/Ekko)をサポートするsleepmask kitを使用する場合は"sleepmask true" && "userwx false"を設定。 |
magic_mz_x64 | 4 char string | CS統合によりサポート |
magic_pe | 2 char string | CS統合によりサポート |
transform-x64 prepend | escaped hex string | BokuLoader.cna アグレッサースクリプト修正 |
transform-x64 strrep | string string | BokuLoader.cna アグレッサースクリプト修正 |
stomppe | true/false | 未サポート。BokuLoaderはビーコンDLLヘッダーをコピーしません。仮想ビーコンDLLの最初の0x1000バイトは0x00です。 |
checksum | number | 実験的。BokuLoader.cna アグレッサースクリプト修正 |
compile_time | date-time string | 実験的。BokuLoader.cna アグレッサースクリプト修正 |
image_size_x64 | decimal value | 未サポート |
name | string | 実験的。BokuLoader.cna アグレッサースクリプト修正 |
rich_header | escaped hex string | 実験的。BokuLoader.cna アグレッサースクリプト修正 |
stringw | string | 未サポート |
string | string | 未サポート |