الحصول على الوصول نصف المهمة؛ والنصف الآخر ألا تفقده. ولهذا تحرص كل البرمجيات الخبيثة الآلية تقريبًا قبل كل شيء على ترتيب إعادة تشغيل نفسها: بعد إعادة التشغيل، وبعد حذف الملف، وبعد تغيير كلمة المرور. ومن هنا تأتي الحكاية المألوفة — «نظّفنا وبعد يومين عاد».

والمواضع التي يُرتَّب فيها ذلك ليست كثيرة، ويمكن فحصها جميعًا في دقائق. وفي ما يلي الجولة الكاملة بالترتيب.

1. مفاتيح SSH

أبسط طريق للعودة: سطر في authorized_keys ينجو من تغيير كلمة المرور ومن تحديث النظام ومن إعادة التشغيل.

sudo find /home /root -name authorized_keys -exec ls -l {} \; -exec cat {} \;

كل سطر هو وصول دائم لشخص ما. فإن لم تستطع تحديد صاحبه فاعتبره غريبًا. وانتبه إلى التعليق في نهاية السطر أيضًا: فهو نص اعتباطي، ومطابقته لاسمك لا تثبت شيئًا.

2. مهام cron لجميع المستخدمين

ليس crontab الخاص بك وحده ما يحتاج فحصًا:

for u in $(cut -f1 -d: /etc/passwd); do echo "== $u"; sudo crontab -u "$u" -l 2>/dev/null; done
sudo ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/
sudo cat /etc/crontab

وعلامات تستحق البحث عنها: أسطر @reboot، وأوامر مشفَّرة طويلة، واستدعاءات curl أو wget موجّهة إلى صدفة، وأي شيء يُطلق من /tmp أو /dev/shm أو /var/tmp. فلا شيء قياسي يعمل من هذه الأدلة.

3. مؤقّتات systemd وخدماته

المكافئ الحديث لـ cron، ويُفحص أقل بكثير:

systemctl list-timers --all
systemctl list-units --type=service --state=running
sudo ls -la /etc/systemd/system/ /run/systemd/system/

وعلى حدة، خدمات المستخدم، التي تعمل بلا صلاحيات root ولا تظهر في القائمة العامة:

systemctl --user list-units --type=service
sudo ls -la /home/*/.config/systemd/user/

وتفصيل آخر: تفعيل lingering لمستخدم (loginctl enable-linger) يتيح لخدماته العمل بلا جلسة نشطة. تحقّق من ذلك بـ loginctl list-users.

4. ملفات بدء الصدفة

الشيفرة المُلحقة بنهاية ملف بدء الصدفة تُنفَّذ عند كل تسجيل دخول:

sudo tail -5 /root/.bashrc /root/.profile /home/*/.bashrc /home/*/.profile
sudo ls -la /etc/profile.d/

وانظر إلى نهاية الملف بالذات — فهناك تُضاف الأسطر كي لا تلفت النظر عند نظرة سريعة.

5. ld.so.preload

ملف يجعل النظام يحمّل مكتبة معيّنة في كل عملية تُطلق. ولا يُنشأ في الظروف الطبيعية أبدًا:

ls -l /etc/ld.so.preload

ووجوده علامة شبه قاطعة على اختراق جدي، ومثل هذه المكتبة تخفي عادة الملفات والعمليات واتصالات الشبكة على حد سواء. ولا شيء تراه على تلك الآلة بعد ذلك يستحق الثقة.

6. خطاطيف مدير الحزم

طريقة نادرًا ما تُذكر: يستطيع apt تنفيذ أوامر قبل كل عملية على الحزم وبعدها.

sudo ls -la /etc/apt/apt.conf.d/
sudo grep -r 'DPkg::Pre-Invoke\|DPkg::Post-Invoke\|APT::Update' /etc/apt/apt.conf.d/

ومثل هذا الخطاف ينطلق عند كل تثبيت تحديث — أي بانتظام وبصلاحيات root.

7. رسالة اليوم في Ubuntu

يحتوي الدليل /etc/update-motd.d/ على سكربتات تنفيذية تعمل عند كل دخول عبر SSH وتؤلّف نص الترحيب. والموضع مريح تحديدًا لأنه يبدو جزءًا من النظام:

sudo ls -la /etc/update-motd.d/

8. مهام at المؤجلة

sudo atq
sudo ls -la /var/spool/cron/atjobs/ 2>/dev/null

آلية قديمة ونادرة الاستخدام، ولذلك هي الأقل فحصًا على الإطلاق.

ماذا تفعل إن وجدت شيئًا

الدافع الأول هو حذف ما وجدته فورًا. وهذا خطأ: فمعه تختفي المعلومة عن كيفية وصوله إلى هناك، وبدون إجابة عن هذا السؤال سيتكرر كل شيء.

  1. احتفظ بنسخة من الملف أو المهمة ووقت تعديلها.
  2. باستخدام ذلك الوقت، انظر في سجلات خادم الويب وفي auth.log ماذا كان يجري في الدقيقة نفسها. وهناك تكون نقطة الدخول عادة.
  3. افحص المواضع الثمانية كلها من القائمة، لا الموضع الذي ظهر فيه شيء فحسب. فنادرًا جدًا ما يُترك باب خلفي في نسخة واحدة.
  4. وبعد ذلك فقط نظّف وأغلق الثغرة نفسها.

أن تعرف كيف يبدو الوضع الطبيعي

الصعوبة الأساسية في هذا الفحص ليست الأوامر بل أن سطرًا غير مألوف في قائمة مهام لا يبدو مريبًا إن كنت لا تتذكر كيف كانت القائمة سابقًا. وعلى خادم ضبطه شخص آخر أو ضُبط قبل سنة، يكاد يستحيل تمييز ما هو لك مما هو لغيرك.

ومن هنا الخلاصة العملية: أخذ لقطة «كما هو» أمر منطقي اليوم، ما دام الخادم سليمًا. فقائمة مهام cron والمؤقّتات والمفاتيح والخدمات على آلة سليمة هي المرجع الذي يُقارَن به كل شيء لاحقًا. وهي إذ تُجمَع وتُحفظ مع تاريخها تحوّل مطاردة باب خلفي من تمرين يستغرق ساعات إلى مقارنة بين قائمتين. وشكل ذلك تعرضه صفحات العرض التوضيحي أدناه.