ネイティブなインメモリ ELF BOF ローダー、AES-256-CFB 暗号化ポーリング、およびファイルレスなポストエクスプロイトモジュール向けの Python C2 サーバーを備えた Linux C2 ビーコン。
ネイティブなインメモリ ELF BOF ローダーを備えた Linux C2 ビーコン。Go や Rust のランタイムを必要とせず、C 言語で書かれています。LazyOwn RedTeam フレームワークに組み込めるよう設計されており、Cobalt Strike の Beacon Object Files に着想を得ています。
このリポジトリには以下が含まれます:
beacons/v1/、beacons/v2/、beacons/v3/
同一の HTTPS/CFB ビーコンの3つのバリアント。v1 は標準的な
プルモードのビーコンです。v2 はメッシュ/p2p ディスカバリを追加します。v3 は
実験的なブランチです。bof/<name>/bof.c
ビーコンが取得してメモリ内で実行できる位置独立な ELF オブジェクト。
含まれている5つは: whoami、is_sudo、cat、
userenum、suid_enum。c2/server.py
コマンドを配信し、結果を受け取り、BOF をホストする
小さな Python 製 Gopher 風サーバー。include/
スタンドアロンの AES-256 (aes.c/aes.h)、cJSON、ランタイム
設定ローダー (config.c/config.h およびその Python
ミラー config_py.py)、そしてビーコンとテストで共有される
AES-256-CFB ラッパー。Makefile、CI — .github/workflows/ci.yml、
テスト — tests/。5分間のエンドツーエンド実行については QUICKSTART.md を参照してください。 BOF 作成ガイドについては docs/BOF_AUTHORING.md を参照してください。 C2 ワイヤプロトコルについては docs/PROTOCOL.md を参照してください。
ビルド (Debian/Ubuntu):
sudo apt-get install gcc libcurl4-openssl-dev libssl-dev make
C2 サーバー用のランタイム:
pip install -r requirements.txt
make config # one-time: copies config.example.json -> config.json
make beacon # builds build/beacon (runnable, with build/config.json staged next to it)
make bofs # builds all BOFs into build/bof/*.x64.o
make all-beacons # builds v1, v2, v3
make test # runs the full test suite
make clean # removes build/
make beacon の実行後、バイナリは実行可能な状態になります:
./build/beacon
build/config.json(自身と同じディレクトリ)をバイナリ相対の検索パス経由で読み込むため、BSB_CONFIG や cd config/ は不要です。同じバイナリを別のホストにコピーしても、隣に config.json があれば同様に動作します。
BOF を 1 つだけ再ビルドしたい場合:
make bof-whoami
make bof-suid_enum
ターゲットへ配布するために、Makefile には自己完結型のディレクトリをステージングする install ターゲットがあります:
make install-all DESTDIR=/tmp/deploy
scp -r /tmp/deploy/* user@target:/opt/bsb/
ssh user@target /opt/bsb/beacon
これは通常のフローではありません。バイナリ + 設定 + BOF を単一のディレクトリにまとめてどこかへコピーしたい場合にのみ使用してください。
python3 c2/server.py
サーバーはデフォルトで 0.0.0.0:7070 にバインドし、AES キーと C2 URI を config/config.json から読み込みます。設定パスは BSB_CONFIG=/path/to/config.json で上書きできます。
サーバーが起動したら、REPL からコマンドを注入できます:
Client ID: linux
Command: id
./build/beacon
ビーコンは config/config.json(バイナリからの相対パスで、バイナリ相対の検索パス経由で見つかる)を読み込み、C2 をポーリングし、送受信した内容を出力します。キューにコマンドがない場合は、ポーリング間隔のあいだスリープするだけです。
BOF を実行するには、C2 が /bof/<name>.x64.o を指す bof フィールドを含む JSON オブジェクトを返します。ビーコンはそのファイルを取得し、インメモリ ELF ローダー(beacons/v1/beacon.c 内の RunELF)を介して自身のプロセスにロードします。
すべての運用パラメータは config/config.json にあり、起動時に読み込まれます。バイナリに埋め込まれるものはありません。
| セクション | キー | デフォルト | 目的 |
|---|---|---|---|
c2 | url | https://127.0.0.1:4444 | C2 のベース URL |
c2 | uri | /api/poll/ | クライアント ID の前の URI パス |
c2 | client_id | linux | ビーコン識別子 |
crypto | aes_key_hex | (プレースホルダー) | 64 桁の hex 文字 = 32 バイト |
crypto | mode | cfb | 暗号化モード |
timing | sleep_seconds | 6 | 基本ポーリング間隔 |
timing | jitter_percent | 20 | スリープに対する +/- パーセントのジッター |
timing | curl_timeout_seconds | 10 | libcurl の合計タイムアウト |
timing | curl_connect_timeout_seconds | 5 | libcurl の接続タイムアウト |
network | user_agents | (4 つの文字列) | ローテーションリスト |
network | verify_tls | false | C2 の TLS 検証 |
bof | download_chunk_size | 4096 | BOF ダウンロードバッファ |
CI では、64 桁の hex キーがソース内に現れた場合にビルドを失敗させるガードレールが実行されます。実際のキーは config/config.json に置くべきであり、このファイルは git で無視されます。
BOF は void go(char *args, int alen) をエクスポートする C ソースファイルにすぎません。コールバック API には bof/include/beacon_api.h を、直接システムコールのヘルパーには bof/include/syscalls.h をインクルードしてください。位置独立で、libc を使わずにコンパイルします:
gcc -c -fPIC -nostdlib -m64 -O2 -I bof/include bof/<name>/bof.c -o build/bof/<name>.x64.o
make bof-<name> ターゲットはこれをラップします。生成された
.x64.o を C2 ホストの sessions/uploads/ に配置し、コマンド
インジェクションから bof:<name> のようなコマンドを返すことで
トリガーします。
完全な契約については docs/BOF_AUTHORING.md を参照してください。
make test
テストスイートは tests/ 内の複数のファイルに分割されています:
| ファイル | 対象範囲 |
|---|---|
test_config.py | C JSON 設定ローダー:デフォルト、オーバーライド、エラー |
test_crypto.py | AES-256-CFB のラウンドトリップと Python/C 間の相互運用 |
test_bof_compile.py | すべての BOF がコンパイルされ、go をエクスポートし、libc リークがないこと |
test_beacon_build.py | Beacon バイナリがビルドされ、BOF API + RunELF を公開すること |
test_c2_server.py | C2 ディスパッチャー:GET/POST/BOF、パストラバーサル対策の強化 |
test_c2_http_e2e.py | 暗号化を伴う実際の HTTP/1.1 ソケットラウンドトリップ |
test_install_deploy.py | make ワークフローが実行可能なツリーを生成し、make clean がそれを消去すること |
beacons/
v1/beacon.c canonical beacon
v2/beacon.c mesh/p2p variant
v3/beacon.c experimental variant
bof/
include/ shared BOF headers (beacon_api.h, syscalls.h)
whoami/bof.c sample: print effective UID
is_sudo/bof.c sample: check sudo/wheel membership
cat/bof.c sample: read a file
userenum/bof.c sample: list /etc/passwd users and privileges
suid_enum/bof.c privesc recon: walk FS, list SUID/SGID binaries
c2/
server.py Gopher-style C2 server
config/
config.example.json template (copy to config.json)
include/
config.h, config.c runtime config loader
config_py.py Python mirror for the C2
aes.h, aes.c standalone AES (ECB/CTR/CBC)
aes_cfb.h, aes_cfb.c AES-256-CFB the beacon actually uses
cJSON.h, cJSON.c vendored JSON parser
beacon.h BOF API the beacon implements
tests/
test_*.py Python test suite
*_harness.c C test harnesses
docs/
PROTOCOL.md wire protocol
BOF_AUTHORING.md BOF contract and gotchas
.github/workflows/
ci.yml build + test + key-leak guard
Makefile
requirements.txt C2 server runtime deps
GPL v3。LICENSE を参照してください。
このプロジェクトは、ゼロトークンのポリグロット静的解析ツールである ReadMenator によって解析されています。再生成するには
pip install readmenator && readmenator . --rebuild を実行してください。解析出力: