
فحوصات أمان لينكس
أداة كشف وإزالة وتحصين خوادم لينكس ضد عمالات التعدين الرقمية.
بُنيت من استجابة حوادث حقيقية — تكتشف المنقبين الذين يختبئون من
psوtopوhtopوbtopباستخدام تقنيات الروتكيت.
git clone https://gitlab.com/abdom.seada/security-checks.git
cd security-checks
sudo bash setup.sh
🔀 الفرع:
master— هذه المجموعة موجودة على الفرعmaster. قد تُضاف نصوص أمنية أخرى على فروع منفصلة في المستقبل.
⚠️ قم بتشغيل
setup.shمرة واحدة فور الاستنساخ — تخطي هذه الخطوة هو السبب الرئيسي للأخطاء.
sudo bash setup.sh
setup.sh يتولى كل شيء تلقائياً:
المخرجات المتوقعة عند نجاح الإعداد:
✅ Setup complete — all checks passed!
Next steps:
sudo ./miner-hunter scan # Safe read-only scan
sudo ./miner-hunter full # Scan → Kill → Harden
💡 لماذا هذا ضروري؟ لن ينفذ لينكس ملفاً ما لم يكن لديه العلم
+x. ينقل Git و SCP هذه الخاصية. يقومsetup.shبإصلاح جميع الملفات دفعة واحدة — بما في ذلك وحداتlib/التي يعتمد عليها النص الرئيسي.
sudo ./miner-hunter scan # ✅ Safe — read-only, zero changes
sudo ./miner-hunter full # ⚠️ Full pipeline: Scan → Kill → Harden
sudo ./miner-hunter scan --dry-run # 👁️ Preview mode — shows what would happen
| الخيار | الوصف |
|---|---|
-d, --dry-run | معاينة جميع الإجراءات دون إجراء أي تغييرات |
مواقف من الحياة الواقعية وما يجب تشغيله بالضبط في كل منها.
top لا يظهر شيئاً"هذا هو العرض الكلاسيكي للروتكيت. المنقب يختبئ من أدوات مساحة المستخدم لكنه لا يستطيع الاختباء من عدادات أداء الأجهزة.
# Step 1: Run a safe scan first — confirm what's there before touching anything
sudo ./miner-hunter scan
ما ستراه إذا كان المنقب موجوداً:
🚨 [CRITICAL] CPU anomaly: 97% user CPU but top shows max 2% per process
🚨 [CRITICAL] perf detected 4 hidden threads consuming ~94% total CPU
🚨 [CRITICAL] Active connection to 185.x.x.x:9200 (known mining port)
🚨 [CRITICAL] Fake kernel thread PID=3421 NAME=[kworker/0:1] EXE=/tmp/.x/miner
# Step 2: Kill the miner and block its pool
sudo ./miner-hunter kill
# Step 3: Harden the server so it can't come back
sudo ./miner-hunter harden
لاحظت شيئاً مريباً — حركة مرور صادرة غير معتادة، مهمة cron لم تنشئها، عملية باسم غريب — لكنك لست متأكداً.
# Run a full scan — completely safe, read-only, zero changes
sudo ./miner-hunter scan
# Then read the structured report
sudo ./miner-hunter report
التقرير في /root/miner_evidence_*/report.txt يُصنف كل اكتشاف حسب الخطورة:
[CRITICAL] إدخالات → تابع إلى kill فوراً[WARNING] إدخالات → راجع يدوياً قبل التصرفلدى المنقب آلية استمرارية — مهمة cron، خدمة systemd، إدخال PM2، أو باب خلفي في ملف تعريف الصدفة يعيد إحياءه بعد قتله.
sudo ./miner-hunter scan
ابحث عن هذه في المخرجات:
⚠️ [WARN] Suspicious cron entry: * * * * * /tmp/.x/update
🚨 [CRITICAL] Malicious systemd service: /etc/systemd/system/update-check.service
🚨 [CRITICAL] PM2 process 'app-worker' has 8432 restarts — likely miner respawn loop
🚨 [CRITICAL] Shell profile backdoor detected in /root/.bashrc
# kill removes ALL persistence artifacts — not just the running process
sudo ./miner-hunter kill
# Then harden to install the watchdog so you're alerted if anything respawns
sudo ./miner-hunter harden
💡 بعد
kill، يقوم المراقب (watchdog cron) بالتشغيل كل 5 دقائق ويسجل في/var/log/miner_hunter/watchdog_alerts.log— ستعرف فوراً إذا عاد شيء.
تحصين استباقي قبل النشر — لا منقب، لا حادث، فقط تأمين الأمور.
# Run harden standalone — no scan or kill needed
sudo ./miner-hunter harden
هذا سيقوم بـ:
sshd/usr/bin (مجموع اختباري MD5 — بحيث يمكنك اكتشاف الملفات الثنائية المعدلة لاحقاً)بعد kill، خطوة التحقق تبلغ أن المنقب قد لا يزال قيد التشغيل:
⚠️ MINER MAY HAVE RESPAWNED
CPU: 89% | Mining conns: 1
Firewall blocks are in place — miner can't reach pool
Consider a REBOOT or OS REINSTALL
# 1. Firewall blocks are already in place — miner CANNOT reach its pool
# Confirm blocks are active:
iptables -L OUTPUT -n | grep DROP
# 2. Run a second scan to see what survived
sudo ./miner-hunter scan
# 3. Check for a kernel module rootkit hiding the process
lsmod | grep -iE 'diamorphine|reptile|kovid|rootkit'
# 4. Non-zero taint = out-of-tree kernel modules loaded (rootkit indicator)
cat /proc/sys/kernel/tainted
إذا كانت قيمة تلوث النواة غير صفرية أو ظهرت وحدة روتكيت معروفة — فإن المنقب لديه تحكم على مستوى النواة. المسار الأكثر أماناً في هذه المرحلة هو إعادة تثبيت نظام التشغيل بالكامل من لقطة نظيفة معروفة.
بعد harden، يكون مراقب cron مثبتاً بالفعل. إليك كيفية التعامل معه:
# Watch the alert log in real time
tail -f /var/log/miner_hunter/watchdog_alerts.log
# Confirm the watchdog cron job is registered
cat /etc/cron.d/miner-watchdog
# Check for /usr/bin binary changes since your baseline was taken
md5sum --check /var/lib/miner_hunter/usrbin_baseline.md5 --quiet
أي مخرجات من الأمر الأخير تعني أن ملفاً ثنائياً للنظام قد تم تعديله بعد خط الأساس الخاص بك — تحقق فوراً.
| التقنية | ما تكتشفه |
|---|---|
تحليل perf لوحدة PMC (عدادات مراقبة الأداء) للأجهزة | مستهلكو وحدة المعالجة المخفيون — |
عند تشغيل sudo ./miner-hunter kill، هذا هو التسلسل بالضبط:
DROP قبل القتل، حتى لا يتمكن المنقب من إعادة الاتصال حتى لو عادSIGKILLperf وفحص /proc/net/tcp لتأكيد انخفاض وحدة المعالجة واختفاء الاتصالاتsecurity-checks/ ← repo root (master branch)
├── miner-hunter # نقطة الدخول — هذا ما تقوم بتشغيله
├── setup.sh # ⚙️ الإعداد الأولي — شغّله مرة بعد الاستنساخ
├── lib/
│ ├── common.sh # أدوات مشتركة: تسجيل، ألوان، مساعدات
│ ├── detect_hidden.sh # كشف العمليات المخفية والروتكيت
│ ├── detect_cpu.sh # تحليل وحدة المعالجة عبر perf و /proc
│ ├── detect_network.sh # كشف اتصالات مجمعات التعدين
│ ├── detect_persistence.sh # كشف آليات الاستمرارية
│ ├── kill_miner.sh # قتل العمليات وإزالة الآثار
│ └── harden.sh # التحصين بعد الحادث
├── README.md
└── LICENSE
كل تشغيل يُنتج:
بُنيت هذه الأداة أثناء استجابة حادثة نشطة ضد منقب عملات رقمية قام بـ:
next للاندماج مع عمليات Next.js على خادم Node.jskthreadd — اسم خيط نواة فعلي/proc/PID/exe → (deleted))ps و top و htop و btopperfMIT
| الخطوة | الوظيفة |
|---|
| ✅ الأذونات | تشغيل chmod +x على miner-hunter وجميع نصوص lib/*.sh |
| ✅ المجلدات | إنشاء /var/log/miner_hunter/ و /var/lib/miner_hunter/ (للجذر فقط، 700) |
| ✅ التبعيات | فحص perf و mpstat و iptables و fail2ban و bc و strings — تثبيت المفقود تلقائياً |
| ✅ الاختبار الذاتي | تشغيل ./miner-hunter --version للتأكد من أن كل شيء يعمل بشكل صحيح |
| الأمر | الوصف | يُغير النظام؟ |
|---|
scan | فحص كشف كامل — العمليات المخفية، وحدة المعالجة، الشبكة، الاستمرارية | ✅ لا |
kill | قتل المنقبين المُحددين، حظر عناوين IP التجمعات، إزالة الآثار | ⚠️ نعم |
harden | تحصين بعد الحادث — SSH، جدار الحماية، المراقب، خط الأساس للتكامل | ⚠️ نعم |
full | تنفيذ scan → kill → harden مع تأكيدات بين المراحل | ⚠️ نعم |
report | عرض أحدث تقرير فحص | ✅ لا |
-e, --evidence DIR | حفظ الأدلة إلى دليل مخصص بدلاً من /root/miner_evidence_* |
-h, --help | عرض المساعدة |
-v, --version | عرض الإصدار |
| التقنية | ما تكتشفه |
|---|
مقارنة /proc مع ps | عمليات غير مرئية لأدوات مساحة المستخدم |
| اختطاف LD_PRELOAD | مكتبات مشتركة خبيثة تعترض libc لإخفاء العمليات |
| روتكيتات وحدات النواة | Diamorphine و Reptile و Kovid وروتكيتات معروفة أخرى |
| خيوط نواة مزيفة | منقبون يتنكرون كـ [kworker] و [kthreadd] و [kswapd] |
| ملفات ثنائية معدلة للنظام | ps و top و ls و ss و netstat مستبدلة |
أخذ عينات دلتا من /proc | محاسبة مباشرة على مستوى النواة لوحدة المعالجة لكل PID |
| كشف الشذوذ في وحدة المعالجة | استخدام وحدة معالجة عالي %user دون عملية مرئية تفسره |
| التقنية |
|---|
| ما تكتشفه |
|---|
قراءة مباشرة من /proc/net/tcp | اتصالات نشطة — يتجاوز ss/netstat المخترقة |
| كشف منافذ التعدين | المنافذ 3333 و 4444 و 5555 و 7777 و 9200 و 14433 و 14444 و 45560 |
| تحليل نطاقات التعدين | حل نطاقات مجمعات التعدين المعروفة والتحقق المتبادل مع الاتصالات النشطة |
| ربط المقبس بـ PID | تتبع العملية التي تملك كل اتصال تعدين |
| الموقع | ما يفحصه |
|---|
| Cron | /etc/cron* و /var/spool/cron/ وجميع crontabs للمستخدمين |
| Systemd | جميع ملفات الوحدات والمؤقتات للبحث عن إدخالات مريبة |
| قواعد Udev | تنفيذ مفعل بواسطة الأجهزة على أحداث الأجهزة |
| PM2 | إدخالات مدير عمليات Node.js مع أعداد إعادة تشغيل عالية جداً |
| ملفات تعريف الصدفة | .bashrc و .bash_profile و /etc/profile و /etc/profile.d/* |
| SSH | جميع ملفات authorized_keys عبر جميع المستخدمين |
| الويبشيلات | ملفات PHP داخل مجلدات المشاريع Node.js |
| إعدادات XMRig | config.json في مواقع الإسقاط الشائعة للمنقبين |
| الإجراء | التفاصيل |
|---|
| استمرارية جدار الحماية | خدمة systemd لاستعادة حظر iptables للتعدين عند كل إعادة تشغيل |
| تدقيق SSH | فحص PermitRootLogin و PasswordAuthentication و MaxAuthTries — طباعة القيم الموصى بها |
| فحص Fail2ban | التحقق من أن سجن sshd نشط والإبلاغ عن عناوين IP المحظورة حالياً |
| مراقب المنقبين | مهمة cron كل 5 دقائق — فحص شذوذ وحدة المعالجة، LD_PRELOAD، منافذ التعدين، ويبشيلات PHP |
خط أساس /usr/bin | مجموع اختباري MD5 لجميع الملفات الثنائية في /usr/bin لكشف العبث في المستقبل |
| المتطلب | التفاصيل |
|---|
| نظام التشغيل | لينكس — تم اختباره على Ubuntu 24.04 LTS و Debian 13 |
| الصلاحيات | يجب تشغيله كـ root (sudo) |
| مثبت تلقائياً بواسطة setup.sh | perf و mpstat (sysstat) و bc و strings (binutils) |
| موصى به | fail2ban — يتم الإبلاغ عنه إذا كان مفقوداً، لا يُثبت تلقائياً |
| مطلوب (غير مثبت تلقائياً) | iptables — يجب أن يكون موجوداً لمراحل القتل/التحصين |
| المخرج | الموقع | المحتويات |
|---|
| دليل الأدلة | /root/miner_evidence_YYYYMMDD_HHMMSS/ | الملفات الثنائية الملتقطة، تقارير perf، إعدادات المنقب |
| ملف السجل | /var/log/miner_hunter/run_YYYYMMDD_HHMMSS.log | سجل التشغيل الكامل مع الطوابع الزمنية |
| التقرير | evidence_dir/report.txt | ملخص منظم للنتائج مع مستويات الخطورة |
| تنبيهات المراقب | /var/log/miner_hunter/watchdog_alerts.log | تنبيهات مستمرة بعد harden |
| خط أساس التكامل | /var/lib/miner_hunter/usrbin_baseline.md5 | مجاميع اختبارية لـ /usr/bin بعد harden |