
Cobalt Strikeのaggressorスクリプトで、ビーコンシェルコードの生成、フォーマット、暗号化を行い、複数の終了方法、システムコール、エンコーディング/圧縮変換をサポートします。
Ryan Stephenson (RCStep)
Cobalt Strike のトップメニューバーに「Shellcode - Shellcode Generator」を追加します

CSSG は、ビーコンシェルコードをより簡単に生成およびフォーマットするための aggressor スクリプト、.NET スクリプト、Python スクリプトです。
公開された終了方法、追加のフォーマット、暗号化、エンコード、圧縮、複数行出力などを備えたビーコンステージレスシェルコードを生成します。
シェルコード変換は、メニューに表示されている降順で実行されます
必要条件:
RC4/AES 暗号化オプションは、/assets フォルダ内の Python スクリプトまたは .NET アセンブリを使用します。
Python ベースの暗号化は、RC4/AES 暗号化を実行するために pycryptodome パッケージがインストールされている必要があります。
Python 環境に応じて pip で pycryptodome をインストールします:
python -m pip install pycryptodome
python3 -m pip install pycryptodome
py -3 -m pip install pycryptodome
py -2 -m pip install pycryptodome
pip インストール後、次のようなコマンドで pycryptodome が存在することを確認できます:
python -m pip list | grep crypto
ジェネレーターは、クライアントホストのデフォルトの "python" コマンドを使用して RC4/AES 暗号化スクリプトを起動します。
RC4/AES .exe バックエンドオプションを使用するには、クライアントホストがネイティブの .NET Framework アセンブリを実行できる必要があります。
シェルコードジェネレーターのオプション:
リスナー:
「...」ボタンで有効なリスナーを選択します。このリスナーの選択からシェルコードが生成されます。
デリバリー:
ステージレス (シェルコードジェネレーターではステージはサポートされていません)
終了方法:
process - ビーコンが閉じられたときに、ビーコンが存在するプロセス全体を終了します
thread - ビーコンが閉じられたときに、ビーコンが実行されているスレッドのみを終了します
ビーコンシステムコールメソッド:
none
direct
indirect
ビーコン HTTP ライブラリ:
wininet
winhttp
ローカルポインターチェックボックス:
既存のビーコンからシェルコードを実行する場合に使用する可能性があります。
同じアーキテクチャの親ビーコンからキー関数ポインターを継承するビーコンシェルコードペイロードを生成します。
既存のセッション:
シェルコードがセッションメタデータを取得する親ビーコンセッション。
シェルコードはこのビーコンセッション内で実行する必要があります。
x86 チェックボックス:
チェックすると x86 シェルコードを生成します。デフォルトでは x64 が生成されます。
またはシェルコードファイルを使用:
ビーコンシェルコードを生成する代わりに、外部で生成された生のシェルコードファイルを使用します。
これにより、他のエクスポートされたビーコンファイルや他のツール (Donut、msfvenom など) からの出力を使用できます。
フォーマット:
raw - 生のバイナリシェルコード出力、フォーマットは適用されません
hex - 16進数フォーマットのシェルコード出力
0x90,0x90,0x90 - C# スタイルのバイト配列にフォーマットされたシェルコード
0x90uy;0x90uy;0x90uy - F# スタイルのバイト配列にフォーマットされたシェルコード
\x90\x90\x90 - C\C++ スタイルのバイト配列にフォーマットされたシェルコード
UUID - Python スクリプトでシェルコードを UUID 文字列に変換 (16 バイトチャンクごとに \x90 でパディング)
b64 - 生成プロセスの初期段階 (暗号化の前) でシェルコードを base64 エンコードするオプション
XOR 暗号化シェルコードチェックボックス:
チェックするとシェルコードを XOR 暗号化します (一度に1つの暗号化タイプのみ選択可能)
XOR キー:
暗号化に使用するランダムに生成され編集可能な XOR キー文字。
複数の文字は複数ラウンドの XOR 暗号化になります (例: ABCDE)
RC4 暗号化シェルコードチェックボックス:
チェックするとシェルコードを RC4 暗号化します (一度に1つの暗号化タイプのみ選択可能)
RC4 暗号化を実行するために Python スクリプトまたは .NET Framework アセンブリを使用します。
AES 暗号化シェルコードチェックボックス:
チェックするとシェルコードを AES 暗号化します (一度に1つの暗号化タイプのみ選択可能)
AES ブロック暗号 AES-CBC 暗号化を実行するために Python スクリプトまたは .NET Framework アセンブリを使用します。
シェルコードはブロックサイズ要件を満たすために \0 値でパディングされます。
ランダムに生成された IV が暗号化されたシェルコードデータの先頭に付加されます。
RC4/AES バックエンドチェックボックス:
チェックすると .NET exe アセンブリを使用してシェルコードファイルを暗号化します。
チェックを外すと Python スクリプトを使用してシェルコードファイルを暗号化します。
AES で受け入れられる暗号化キーのバイト長は 16、24、32 です。
RC4 の暗号化キーのバイト長は、.NET を使用する場合は任意、Python を使用する場合は最小 5 バイトです。
RC4/AES バックエンドツール:
Python スクリプトとコンパイルされた .NET アセンブリは assets ディレクトリにあります。
Encryptor アセンブリのソースフォルダもあり、私を信頼しない場合 (信頼しませんよね) は自己コンパイル用にあります。
これらのツールは両方とも RC4/AES シェルコード/ファイルを暗号化および復号化できます。
encrypt_file.py の使用方法:
encrypt_file.py [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
Encryptor.exe の使用方法:
Encryptor.exe [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
RC4 または AES キー
暗号化に使用するランダムに生成され編集可能な RC4/AES キー。
32 バイトの AES キーが生成され、256 ビット AES 暗号強度に推奨されます。
AES 暗号化キーのバイト長として受け入れられるのは 16、24、32 です。
RC4 キーの長さは、.NET を使用する場合は最小 1 バイト、Python を使用する場合は最小 5 バイトです。
エンコード/圧縮:
none - シェルコードに追加のエンコードや圧縮は行われません
b64 - シェルコードを base64 エンコード
gzip then b64 - gzip 圧縮してから base64 エンコード
gzip - シェルコードを gzip 圧縮
b64 then gzip - base64 エンコードしてから gzip 圧縮
b64 then 7xgzip - base64 エンコードしてから gzip 圧縮を7回実行
複数行出力:
生/バイナリ以外の出力形式で使用できます。
none - 複数行のフォーマットなし、シェルコードは1つの長い文字列
quoted - シェルコードは引用符で囲まれた行に分割されます
chunks.push_back - シェルコードは chunks.push_back(" と "); で囲まれた行に分割されます
複数行の長さ:
複数行出力オプションが選択された場合の各行のシェルコード文字数。
生成ボタン:
シェルコード出力先のディレクトリを選択します。
デフォルトのファイル名は beacon ですが、変更可能です。
使用された暗号化キーはポップアップに表示され、Cobalt Strike スクリプトコンソールにも書き込まれます。
生のビーコンシェルコードと最終フォーマットされたビーコンシェルコードのバイトサイズがポップアップに表示され、スクリプトコンソールにも書き込まれます。
シェルコードの生成/構築に使用されるファイルの場所はすべて scripts/shellcode_generator.cna ファイルに設定されています。
多くの情報セキュリティ関係者の貢献に触発されました。