업데이트로 돌아가기
New releaseSep 5, 2026

emp3r0r v4.15.0

자가 치유 Gossip Mesh C2: 지원 피어 발견, 크로스 플랫폼 BOF 실행, 스크립트 가능 에이전트.

공유
emp3r0r

emp3r0r

Linux와 Windows를 위한 자가 치유형, 메모리 전용 C2 — 끊어진 링크에서도 살아남고, 디스크를 절대 건드리지 않으며, Win32 API를 스크립트로 통과하는 에이전트.


Discord GitHub Sponsors

GitHub go.mod Go version Tests GitHub License GitHub release


emp3r0r-readme

emp3r0r란 무엇인가?

emp3r0r는 은밀성과 복원력이 선택 사항이 아닌 Linux 및 Windows 환경을 위해 만들어진 포스트 익스플로잇 프레임워크이자 C2입니다. 하나의 서버로의 안정적인 연결을 가정하는 대신, 에이전트는 링크가 끊겨도 계속 작동하는 자가 치유 메시를 형성합니다. 대상에게 Python이나 PowerShell을 요구하는 대신, 모든 것을 메모리에서 실행합니다. 그리고 하나의 플랫폼의 기술로 제한하는 대신, emp3r0r는 Windows BOF, Linux 오브젝트, Starlark 스크립트를 실행합니다 — 모두 파일리스, 모두 인프로세스로.


주요 하이라이트 및 고유 기능

🐍 스크립트 가능한 에이전트 (내장 Starlark 엔진 및 Win32 API 프록시)

모든 에이전트는 자체 스크립팅 엔진을 탑재하고 있어, 컴파일하거나 바이너리를 배포하지 않고도 새로운 포스트 익스플로잇 로직을 추가할 수 있습니다.

  • 스크립트는 전적으로 메모리에서 실행됩니다 — 대상에 Python, Bash, PowerShell이 필요 없고, 명령 인터프리터도 생성되지 않습니다.
  • 내장 API의 전체 세트가 파일 I/O, HTTP, 명령 실행 등을 스크립트 코드에서 바로 다룹니다.
  • Windows에서는 스크립트가 네이티브 Win32 함수를 직접 호출할 수 있습니다 — 에이전트가 시스템 DLL로 바로 프록시합니다.
  • 모듈은 작은 JSON 매니페스트가 있는 일반 Starlark 파일이므로, 직접 추가하기 쉽고 파일리스입니다.

중요한 이유: 에이전트 기능을 작성하고 확장하는 것이 스크립트를 편집하는 것만큼 간단해지며, 대상에 인터프리터나 새 바이너리를 배포하는 흔적이 전혀 없습니다.


🔐 TOFU 암호화 신원 고정

에이전트는 처음 통신할 때 자신의 신원을 암호화 키에 바인딩하며, 그 바인딩은 절대 변경되지 않습니다.

  • 다른 자격 증명으로의 재등록은 사칭으로 간주되어 거부됩니다.
  • 에이전트 제거는 명시적인 운영자 결정이며, 탈취된 키가 조용히 할 수 있는 일이 아닙니다.

중요한 이유: 세션 하이재킹과 에이전트 복제는 발생하지 않습니다. 통신하는 모든 에이전트는 등록한 그 에이전트입니다.


🔒 완전 순방향 비밀성 (PFS)

모든 C2 및 피어 링크는 세션에서 파생된 암호화 키와 함께 임시 ECDH 키를 사용합니다.

중요한 이유: 장기 키가 나중에 손상되더라도, 이미 지나간 트래픽을 복호화하는 데 사용될 수 없습니다.


🕸️ 자율 P2P 가십 메시 네트워크

에이전트는 서로를 발견하고 가십 메시를 통해 트래픽을 중계하므로, 하나의 링크나 하나의 서버가 사라져도 작전이 붕괴되지 않습니다.

  • 피어는 위장 mTLS 1.3 또는 신뢰할 수 있는 UDP(KCP)를 통해 연결되며, 모든 홉이 암호화됩니다.
  • 트래픽은 죽은 릴레이를 자동으로 우회합니다 — 작전 중 수동 프록시 수술이 필요 없습니다.
  • 직접 C2 접근이 없는 세그먼트도 이웃을 통해 계속 도달 가능합니다.

중요한 이유: 네트워크가 피보팅을 대신 해줍니다. 링크를 끊거나, 박스를 잃거나, C2를 차단해도 — 에이전트가 스스로 재라우팅합니다.


📂 P2P 파일시스템

파일은 C2를 통해서만이 아니라 에이전트 간에 직접 이동합니다.

  • 전송은 암호화된 피어 투 피어 터널을 타므로, 내부 네트워크가 서버에서 병목이 되지 않습니다.
  • 파일은 암호화된 블롭으로 에이전트 메모리에 캐시되고 요청 시 피어에 제공됩니다.
  • 피어에 파일이 없으면, 에이전트가 C2에서 자동으로 가져옵니다.

중요한 이유: 전달이 빠르고 대부분 C2 채널에 보이지 않습니다 — 이그레스가 제한된 환경에 이상적입니다.


📡 다중 프로토콜 리스너 및 플러그 가능 스테이저

에이전트를 심는 것은 그것을 살려두는 것만큼 진지하게 다뤄집니다.

  • 신뢰할 수 있는 프레이밍과 사용자 정의 가능한 HTTP 프로필을 갖춘 HTTP, TCP, UDP 리스너.
  • 직접 Linux 시스템 콜로 구축된 약 2KB 스테이저 — 대상에 libc도, 툴체인도 필요 없습니다.
  • 플러그 가능 스테이저 전송과 자체 해제 패커를 통해 초기 접근을 대상이 허용하는 채널에 녹여내고, 그 과정에서 정적 시그니처 매칭을 무력화합니다.
  • 스테이지와 에이전트 코드는 읽기/쓰기/실행 규율을 준수합니다 — 절대 RWX가 아닙니다.

중요한 이유: 작고, 적응력 있으며, 메모리 위생적인 초기 접근은 다른 방법으로는 도달할 수 없는 호스트에 착륙할 수 있음을 의미합니다.


🧩 네이티브 크로스 플랫폼 BOF 및 PICO 지원 (COFF, ELF 및 PICO)

컴파일된 C 모듈을 어느 플랫폼에서든 인프로세스로 실행합니다:

  • 타입 지정 인자 패킹을 갖춘 Windows COFF/BOF 바이너리.
  • 에이전트 메모리에 직접 로드되는 Linux ELF 재배치 가능 오브젝트.
  • SilentMoonwalk 콜스택 스푸핑을 갖춘 Crystal-Kit PICO 모듈.
  • Kerbeus-BOF, Remote-OPs, 상황 인식 제품군이 바로 사용 가능하게 제공됩니다.

중요한 이유: BOF는 로더만큼만 좋습니다 — emp3r0r는 Linux와 Windows 모두에서 새 프로세스 없이, 흔적도 남기지 않고 인프로세스로 실행합니다.


🧬 인메모리 라이브러리 로더 (memmod)

네이티브 라이브러리는 에이전트 자체 주소 공간에 매핑되어 거기서 호출됩니다 — LoadLibrary도, dlopen도, 디스크에 닿는 파일도 없습니다.

  • memmod는 Windows에서 PE DLL을, Linux에서 ELF .so를 로드하며, 재배치, 임포트, 익스포트 호출을 인프로세스로 처리합니다.
  • 검증된 업스트림 작업 위에 구축되었습니다: WireGuard의 memmod PE 로더와 Sliver C2 / sliverarmory/reflektor ELF 로더 및 호출 기계.
  • memdeps가 그 위에 있습니다: 선언된 의존성은 암호화된 memfs/C2에서 해결되고, 필요한 작업에만 매핑되며, 반환 시 언매핑됩니다.

중요한 이유: 네이티브 코드로 에이전트를 확장하는 데 새 바이너리, 로더 서비스, 디스크의 파일이 필요하지 않습니다.


🐧 Linux 모듈 및 eBPF

Linux 모듈은 커널까지 도달할 수 있는 Starlark 스크립트입니다. 에이전트는 필요 시 libbpf를 매핑하고 그 API를 Go 기반 빌트인으로 스크립트에 노출하므로, 모듈은 컴파일러나 자식 프로세스 없이 eBPF 오브젝트를 열거하고, 연결하고, 해제할 수 있습니다.

  • 빌트인은 libbpf를 미러링합니다: ebpf_progs, ebpf_maps, ebpf_links, ebpf_detach, ebpf_map_wipe, ebpf_code_offset, 그리고 장수명 ebpf_uprobe_start/ebpf_uprobe_stop.
  • ssh_harvest가 실제 예제입니다: sshd에서 패턴을 찾아 장수명 uprobe를 연결하고, 캡처된 자격 증명을 실시간으로 스트리밍하며, --disable까지 유지합니다 — ptrace도, 브레이크포인트도, 디스크도 없습니다.
  • libbpf만이 유일한 옵션은 아닙니다: 동일한 온디맨드 로더가 모듈이 선언하거나 제공하는 모든 .so를 처리하며, 스크립트는 mem_load_library로 바이트를 직접 매핑할 수 있습니다.

중요한 이유: 커널 수준 트레이드크래프트는 스크립트 하나와 에이전트가 필요할 때만 매핑하고 버리는 라이브러리 하나입니다.


🔑 Windows 토큰, Netonly 세션 및 Kerberos 티켓 (PTT)

Windows 호스트에 올라가면, emp3r0r는 도구를 전혀 배포하지 않고도 그 위의 사용자가 될 수 있게 해줍니다.

  • 실행 중인 모든 프로세스에서 액세스 토큰을 훔쳐 어디서나 사용합니다: Go 모듈, Starlark, BOF.
  • 모듈의 --user 플래그로 일회용 netonly 세션을 생성합니다: 에이전트 자체 신원을 유지하고 아웃바운드 접근에만 대상 사용자를 빌리며 — 어떤 비밀번호든 작동하고, 아무것도 검증되지 않습니다.
  • --ticket 플래그로 Kerberos 티켓을 임포트하여 완전한 pass-the-ticket을 수행합니다: 네트워크 신원은 티켓의 것이 되고(예: Domain Admin), 로컬 신원은 절대 변하지 않습니다.
  • 모든 토큰 인식 모듈이 --token, --user, --ticket을 받아들이므로, 신원 전환은 플래그 하나 거리입니다 — 단일 명령으로 세션 생성과 티켓 로드를 포함해서.
  • 티켓은 로그온 세션별로 존재하므로, DA 자료는 제거할 수 있는 일회용 세션에 격리되고, 에이전트 프로세스 자체는 깨끗하게 유지됩니다.

중요한 이유: 에이전트가 전혀 없는 머신으로의 측면 이동 — SMB 공유, 서비스 제어, CIFS — 이 일상적인 워크플로의 일부가 되며, 디스크의 도구가 아닌 빌린 사용자로 인증됩니다.


🧦 SOCKS5 피보팅 및 운영자 측 tun2socks

다른 임플란트를 태우지 않고 피보팅하세요: C2는 선택한 에이전트를 통해 중계하는 SOCKS5 프록시를 실행하고, 운영자 측은 투명 TUN 디바이스로 한 걸음 더 나아갈 수 있습니다.

  • socks_start 1080은 선택한 에이전트를 통해 터널링하는 C2의 SOCKS5 엔드포인트를 제공합니다 — proxychains나 아무 도구를 가리키면 대상 네트워크 안에 들어갑니다.
  • tun2socks start --route 10.10.0.0/24는 지정한 서브넷만 그 프록시를 통해 라우팅하는 TUN 디바이스를 생성합니다 — 나머지는 모두 정상 연결을 계속 사용합니다.
  • 결과는 도구별 프록시 구성 없이 에이전트에서 발생한 것처럼 보입니다.

중요한 이유: 에이전트 측 네트워크 전체에 투명하게 도달하세요 — DC를 curl하고, 아무 도구나 사용하세요 — 이그레스가 운영자 박스가 아닌 대상 네트워크에서 오는 것처럼 보입니다.


🎭 플러그 가능 C2 전송, uTLS JA3 회피 및 CBOR 프로토콜

  • 비콘 스타일 HTTP 폴링 또는 스트리밍 HTTP/2 중 선택 — 둘 다 가변 프로필을 갖춥니다.
  • TLS 지문은 uTLS로 무작위화되어, 채널이 네트워크 텔레메트리에서 눈에 띄지 않습니다.
  • 제어 트래픽은 컴팩트한 CBOR 프로토콜을 탑니다 — JSON보다 작고, 빠르고, 파싱하기 어렵습니다.

중요한 이유: C2 채널은 평범한 트래픽처럼 보이게 만들어지고 회선에서 간결하게 유지됩니다.


💾 암호화된 메모리 우선 스토리지

  • 에이전트 파일 작업은 인메모리, AES-GCM 암호화 가상 파일시스템에 대해 실행됩니다; 대용량 데이터는 식별 가능한 헤더가 없는 암호화된 블롭으로만 디스크에 흘러넘칩니다.
  • P2P 가능 에이전트는 가져온 것을 캐시하고 피어와 공유하여 C2 트래픽을 더 줄입니다.

중요한 이유: 디스크조차 적대적으로 취급됩니다 — 에이전트는 발견될 평문 아티팩트를 남기지 않습니다.


빠른 시작

1. 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

2. 운영자 머신 설정

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

3. 에이전트 페이로드 생성

운영자 콘솔 내에서:

# Direct C2 agent
generate --type linux_executable --arch amd64 --cc your.domain.com

카테고리