Linux C2 비콘으로, 네이티브 인메모리 ELF BOF 로더, AES-256-CFB 암호화 폴링, 그리고 파일리스 사후 익스플로잇 모듈을 위한 Python C2 서버를 갖추고 있습니다.
Go나 Rust 런타임 없이 C로 작성된, 네이티브 인메모리 ELF BOF 로더를 갖춘 Linux C2 비콘입니다. LazyOwn RedTeam 프레임워크에 연결되도록 설계되었으며 Cobalt Strike의 Beacon Object Files에서 영감을 받았습니다.
이 저장소에는 다음이 포함됩니다:
beacons/v1/, beacons/v2/, beacons/v3/의 비콘
동일한 HTTPS/CFB 비콘의 세 가지 변형입니다. v1은 표준
풀 모드 비콘입니다. v2는 메시/p2p 탐색을 추가합니다. v3는
실험적 브랜치입니다.bof/<name>/bof.c의 BOF
비콘이 가져와 메모리에서 실행할 수 있는 위치 독립적 ELF
오브젝트입니다. 포함된 다섯 가지는 whoami, is_sudo, cat,
userenum, suid_enum입니다.c2/server.py의 C2 서버
명령을 제공하고, 결과를 수락하며, BOF를 호스팅하는 작은
Python Gopher 유사 서버입니다.include/의 공유 라이브러리
독립형 AES-256(aes.c/aes.h), cJSON, 런타임
구성 로더(config.c/config.h 및 Python
미러 config_py.py), 그리고 비콘과 테스트가 공유하는
AES-256-CFB 래퍼입니다.Makefile의 빌드, .github/workflows/ci.yml의 CI,
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 하나만 다시 빌드하고 싶다면:
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 키가 나타나면 빌드를 실패시키는 가드레일을 실행한다. 실제 키는 git-ignored된 config/config.json에 속한다.
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로 재생성할 수 있습니다. 분석 결과물: