قد تخبرك سجلات Linux بأن خدمة بدأت أو أن مستخدمًا سجّل الدخول، لكنها لا تعرض دائمًا الصورة الحالية كاملة. لمعرفة ما يحدث على الجهاز الآن، تحتاج إلى مراقبة العمليات التي تعمل، والخدمات النشطة، والمنافذ المفتوحة، والاتصالات التي تنشئها البرامج.
هذه المهارة لا تعني البحث عن «برنامج اختراق» في كل سطر. الهدف هو بناء صورة طبيعية للجهاز، ثم ملاحظة ما لا يتوافق معها، وجمع أدلة كافية قبل إصدار الحكم.
في هذا الدرس ستتعلم استخدام أدوات Linux المدمجة لفحص العمليات والاتصالات وربطها بالمستخدمين والخدمات والسجلات. نفّذ جميع التطبيقات على جهاز افتراضي تملكه داخل مختبرك، ولا تفحص جهازًا أو شبكة دون تصريح.
إذا كنت لا تزال في بداية التعامل مع الأوامر والملفات والصلاحيات، فابدأ أولًا من درس أساسيات Linux لطالب الأمن السيبراني، ثم عد لتطبيق المراقبة العملية على النظام.
وتكتمل صورة الجهاز عندما تجمع بين المراقبة الحالية وما سجله النظام سابقًا؛ لذلك يفيدك درس قراءة سجلات Linux واكتشاف النشاط غير المعتاد في بناء خط زمني وربط العمليات بالأحداث السابقة.
ما العملية في Linux؟
العملية Process هي برنامج قيد التشغيل. عند فتح المتصفح أو تنفيذ أمر في الطرفية أو تشغيل خدمة، ينشئ Linux عملية لها رقم فريد يسمى PID.
من المعلومات المهمة عن كل عملية:
- PID: رقم العملية.
- PPID: رقم العملية التي شغّلتها.
- USER: المستخدم الذي تعمل العملية باسمه.
- START: وقت بدء العملية.
- ELAPSED: المدة التي ظلت خلالها تعمل.
- CMD: الأمر الكامل المستخدم لتشغيلها.
- CPU وMEM: مقدار استهلاك المعالج والذاكرة.
اسم العملية وحده لا يكفي للحكم عليها؛ فقد تستخدم عملية سليمة اسمًا غير مألوف، وقد يحاول برنامج ضار استخدام اسم يشبه إحدى عمليات النظام.
الفرق بين العملية والخدمة والاتصال
قد تختلط هذه المصطلحات على الطالب:
العملية
برنامج يعمل حاليًا وله PID، مثل المتصفح أو محرر النصوص.
الخدمة
برنامج يعمل عادة في الخلفية ويقدم وظيفة مستمرة، مثل خدمة SSH أو جدولة المهام. تدير توزيعات Linux الحديثة كثيرًا من الخدمات باستخدام systemd.
الاتصال
قناة تواصل تستخدمها عملية لإرسال البيانات أو استقبالها عبر الشبكة.
قد تبدأ خدمة واحدة عدة عمليات، وقد تنشئ العملية الواحدة أكثر من اتصال. لذلك يحتاج المحلل إلى ربط هذه العناصر بدل فحص كل عنصر بمعزل عن الآخر.
عرض العمليات باستخدام ps
لعرض العمليات المرتبطة بالمستخدم والطرفية الحالية:
ps
لكن هذا العرض محدود. لرؤية العمليات الجارية على الجهاز:
ps aux
يعرض الأمر اسم المستخدم ورقم العملية واستهلاك الموارد ووقت التشغيل والأمر المرتبط بها.
للحصول على حقول أكثر وضوحًا:
ps -eo pid,ppid,user,%cpu,%mem,lstart,etime,cmd
لا تحاول تحليل القائمة كاملة دفعة واحدة. ابدأ بسؤال محدد، مثل: ما العمليات التي تستهلك المعالج؟ ومن شغّلها؟ ومتى بدأت؟
ترتيب العمليات حسب استهلاك الموارد
لعرض العمليات الأعلى استهلاكًا للمعالج:
ps aux --sort=-%cpu | head
ولعرض الأعلى استهلاكًا للذاكرة:
ps aux --sort=-%mem | head
الاستهلاك المرتفع ليس دليلًا على وجود اختراق. قد ينتج عن تحديث النظام أو ضغط الملفات أو تشغيل المتصفح. المهم هو معرفة ما إذا كان الاستهلاك متوقعًا ومتوافقًا مع نشاط المستخدم.
أما ارتفاع الاستهلاك من عملية مجهولة، تعمل باسم مستخدم غير متوقع، وبدأت في وقت غير معتاد، فيستحق فحصًا أعمق.
المراقبة المباشرة باستخدام top
يعرض الأمر التالي العمليات واستهلاك الموارد بصورة متجددة:
top
داخل top يمكنك:
- الضغط على
Pللترتيب حسب استهلاك المعالج. - الضغط على
Mللترتيب حسب استهلاك الذاكرة. - الضغط على
Tللترتيب حسب وقت التشغيل. - الضغط على
qللخروج.
قد يتوفر برنامج htop بواجهة أوضح، لكنه ليس مثبتًا افتراضيًا في جميع التوزيعات. لذلك لا تعتمد على وجوده في كل جهاز.
المراقبة المباشرة مفيدة لاكتشاف الارتفاعات المؤقتة التي قد لا تظهر عند تنفيذ ps مرة واحدة.
فحص عملية محددة
بعد العثور على PID لعملية تريد فهمها، اعرض تفاصيلها باستخدام:
ps -p 1234 -o pid,ppid,user,lstart,etime,%cpu,%mem,cmd
استبدل 1234 برقم العملية الحقيقي.
ركز على خمسة أشياء:
- من المستخدم الذي يشغّل العملية؟
- ما العملية الأم PPID؟
- منذ متى تعمل؟
- ما الأمر الكامل الذي شغّلها؟
- هل استهلاكها للموارد طبيعي؟
أهمية العملية الأم PPID
نادراً ما تظهر العملية من العدم؛ غالبًا تكون عملية أخرى قد شغّلتها.
لعرض العلاقات بين العمليات بصورة شجرية:
ps -eo pid,ppid,user,cmd --forest
وإذا كان الأمر pstree متوفرًا:
pstree -ap
قد يكون تشغيل محرر نصوص من واجهة سطح المكتب طبيعيًا، وتشغيل أمر إداري من جلسة المستخدم متوقعًا. لكن تشغيل برنامج شبكي غير معروف من عملية مؤقتة أو من برنامج لا يُفترض أن يشغّله يحتاج إلى تفسير.
العلاقة بين الأب والابن قد تكشف سياقًا لا يظهر من اسم العملية وحده.
البحث عن عملية بالاسم
للبحث في قائمة العمليات:
ps aux | grep اسم-العملية
يمكن أيضًا استخدام:
pgrep -a اسم-العملية
وللبحث داخل سطر الأوامر الكامل:
pgrep -af اسم-العملية
قد يجد البحث جزءًا من اسم عملية أخرى؛ لذلك راجع PID والأمر الكامل ولا تعتمد على تطابق الاسم وحده.
استخدام نظام الملفات proc
يوفر المجلد /proc معلومات مباشرة عن العمليات. لكل عملية تعمل مجلد يحمل رقم PID الخاص بها.
لمعرفة الملف التنفيذي المرتبط بعملية:
readlink -f /proc/1234/exe
ولعرض مجلد العمل الحالي للعملية:
readlink -f /proc/1234/cwd
ولعرض الأمر الكامل:
tr '\0' ' ' < /proc/1234/cmdline
استبدل 1234 برقم العملية.
قد تحتاج إلى sudo لرؤية معلومات عملية يملكها مستخدم آخر. وقد تختفي المعلومات إذا انتهت العملية قبل فحصها.
كما يمكن لبعض البرامج تغيير ما يظهر في سطر الأوامر؛ لذلك لا تعتبر بيانات /proc وحدها إثباتًا نهائيًا.
معرفة الملفات التي تستخدمها العملية
لعرض واصفات الملفات المفتوحة لعملية:
sudo ls -l /proc/1234/fd
قد تجد:
- ملفات يقرأها البرنامج.
- ملفات يكتب فيها.
- أجهزة يستخدمها.
- اتصالات شبكية ممثلة بوصفها sockets.
كثرة الملفات المفتوحة ليست بالضرورة مشكلة. المهم هو اكتشاف ملف أو مسار لا يتناسب مع وظيفة العملية.
لا تفتح ملفات مجهولة أو تنفذها لمجرد أنها مرتبطة بعملية مشبوهة.
مراجعة الخدمات النشطة
لعرض الخدمات التي تعمل حاليًا:
systemctl --type=service --state=running
ولفحص خدمة محددة:
systemctl status اسم-الخدمة
يعرض الأمر حالة الخدمة ووقت تشغيلها ورقم العملية الرئيسي وبعض رسائل السجل الحديثة.
اسأل عند مراجعة الخدمات:
- هل أعرف وظيفة هذه الخدمة؟
- هل يحتاجها الجهاز؟
- هل تبدأ تلقائيًا؟
- منذ متى تعمل؟
- تحت أي مستخدم تعمل؟
- هل تستمع إلى منفذ شبكي؟
وجود خدمة لا تعرفها لا يعني أنها ضارة. ابحث عن اسم الحزمة ومصدرها ووظيفتها قبل اتخاذ أي إجراء.
ما المنفذ الشبكي؟
المنفذ رقم تستخدمه خدمة لاستقبال الاتصالات أو تستخدمه عملية ضمن اتصال شبكي.
لعرض منافذ TCP وUDP التي تستمع للاتصالات:
sudo ss -lntup
معاني الخيارات:
lيعرض المنافذ المستمعة.nيعرض العناوين والأرقام دون تحويلها إلى أسماء.tيعرض TCP.uيعرض UDP.pيعرض العملية المرتبطة بالاتصال عندما تسمح الصلاحيات.
قد لا يعرض النظام جميع أسماء العمليات للمستخدم العادي؛ لذلك نستخدم sudo للقراءة الكاملة.
قراءة عنوان الاستماع بصورة صحيحة
إذا رأيت:
127.0.0.1:8000
فهذا يعني عادة أن الخدمة تستمع محليًا على الجهاز نفسه.
أما:
0.0.0.0:8000
فيعني أن الخدمة تستمع على جميع واجهات IPv4 المتاحة.
والعنوان:
[::]:8000
قد يشير إلى الاستماع على واجهات IPv6، وقد يشمل IPv4 بحسب إعدادات النظام.
لكن الاستماع على جميع الواجهات لا يثبت أن الخدمة مكشوفة مباشرة للإنترنت؛ فالوصول الفعلي يعتمد أيضًا على الجدار الناري والموجّه وترجمة العناوين وإعدادات الشبكة.
هذه نقطة مهمة يغفل عنها كثير من الشروحات المختصرة.
عرض الاتصالات النشطة
لعرض اتصالات TCP الحالية:
sudo ss -tnp
ابحث عن:
- عنوان الجهاز المحلي.
- عنوان الوجهة.
- منفذ الوجهة.
- حالة الاتصال.
- العملية المرتبطة به.
حالة ESTAB تعني أن اتصال TCP قائم حاليًا، لكنها لا تحدد إن كان الاتصال مشروعًا أو ضارًا.
قد يتصل المتصفح بعشرات العناوين في ثوانٍ بسبب الإعلانات والخطوط والخدمات الخارجية؛ لذلك لا تحكم على الاتصال دون معرفة العملية والسياق.
الفرق بين المنفذ المستمع والاتصال الصادر
المنفذ المستمع ينتظر اتصالًا قادمًا إلى خدمة محلية.
أما الاتصال الصادر فينشئه برنامج على جهازك باتجاه خدمة خارجية.
قد يكون وجود منفذ مستمع طبيعيًا لخادم SSH داخل مختبرك، وقد يكون غير متوقع على جهاز طالب لا يقدم أي خدمات. وبالمثل، الاتصال الخارجي قد يكون تحديثًا طبيعيًا أو نشاطًا يحتاج إلى مراجعة.
السياق هو الذي يحدد أهمية النتيجة.
ستة أسئلة لفحص اتصال غير مألوف
عند العثور على اتصال لا تعرفه، لا تبدأ بحظره مباشرة. اسأل:
- ما العملية التي أنشأت الاتصال؟
- من المستخدم الذي يشغّلها؟
- ما المسار الحقيقي للملف التنفيذي؟
- من العملية التي شغّلتها؟
- هل الوجهة والمنفذ متوافقان مع وظيفة البرنامج؟
- هل يظهر الحدث نفسه في السجلات أو في Wireshark؟
إذا لم تستطع الإجابة، سجّل ما وجدته وحدد درجة ثقتك بدل الادعاء بأن الاتصال اختراق مؤكد.
ربط الاتصال بالعملية
إذا أظهر ss رقم PID، افحصه باستخدام:
ps -p 1234 -o pid,ppid,user,lstart,etime,cmd
ثم تحقق من مسار الملف التنفيذي:
readlink -f /proc/1234/exe
وبعد معرفة المسار الصحيح، يمكنك حساب بصمته الرقمية:
sha256sum /المسار/إلى/الملف
البصمة لا تخبرك إن كان الملف آمنًا أو ضارًا، لكنها تساعد على توثيق الملف ومقارنته لاحقًا دون الاعتماد على اسمه فقط.
لا ترفع ملفات العمل أو الملفات الحساسة إلى مواقع عامة للفحص قبل التأكد من سياسة الخصوصية والتصريح المتاح لك.
ولرؤية حركة الاتصال نفسها ومقارنتها بما تعرضه أداة ss، ارجع إلى درس قراءة حركة الشبكة باستخدام Wireshark وتعلّم اختيار الواجهة واستخدام الفلاتر داخل مختبرك.
ربط العملية بالسجلات
بعد معرفة اسم الخدمة أو وقت بدء العملية، عد إلى سجلات Linux.
لفحص سجل خدمة:
sudo journalctl -u اسم-الخدمة --since "30 minutes ago"
ويمكن البحث باستخدام رقم العملية:
sudo journalctl _PID=1234
قد لا تجد رسائل؛ فليست كل عملية ترسل مخرجاتها إلى journal. غياب النتيجة لا يعني أن العملية لم تعمل.
قارن بين:
- وقت بدء العملية.
- وقت ظهورها في السجل.
- وقت الاتصال الشبكي.
- المستخدم المرتبط بها.
- أي تغيير حدث على النظام في الفترة نفسها.
بهذه الطريقة يتحول التحقيق من ملاحظة منفردة إلى خط زمني مترابط.
ابنِ خط أساس قبل البحث عن الشذوذ
خط الأساس هو وصف للحالة الطبيعية للجهاز.
سجل في مختبرك:
- الخدمات التي تعمل عادة.
- المنافذ المستمعة المعتادة.
- العمليات الأعلى استهلاكًا للموارد.
- المستخدمين الطبيعيين لكل خدمة.
- البرامج التي تنشئ اتصالات خارجية.
- الأوقات المعتادة لتشغيل الجهاز وتحديثه.
نفّذ الأوامر نفسها في عدة أوقات واحتفظ بالنتائج بعد إزالة البيانات الحساسة. عند ظهور تغيير لاحق، ستستطيع مقارنته بحالة معروفة.
من دون خط أساس قد يبدو كل شيء غريبًا، أو قد تمر التغييرات المهمة دون ملاحظة.
مؤشرات تستحق المراجعة
تستحق العملية فحصًا أعمق عندما تجتمع عدة مؤشرات، مثل:
- بدأت في وقت لم يكن فيه المستخدم يعمل.
- تعمل تحت حساب لا يتوافق مع وظيفتها.
- شغلتها عملية أم غير متوقعة.
- يعمل ملفها التنفيذي من مجلد مؤقت.
- أنشأت اتصالًا إلى وجهة غير مألوفة.
- تستمع على منفذ لم يكن مفتوحًا سابقًا.
- تستهلك موارد مرتفعة دون سبب معروف.
- ظهرت بعد تسجيل دخول أو تغيير في الصلاحيات.
- عاد تشغيلها بعد إيقافها دون تفسير.
- يرتبط اسمها بخدمة لا تظهر في قائمة الحزم المعروفة.
لا يكفي مؤشر واحد لإثبات الاختراق. قوة التحليل تأتي من اجتماع الأدلة واتساقها.
لا توقف العملية قبل حفظ الأدلة
من الأخطاء الشائعة إيقاف العملية فور الاشتباه بها. قد يؤدي ذلك إلى فقدان معلومات مؤقتة، مثل الاتصال الحالي وسطر التشغيل وعلاقة العملية بغيرها.
قبل اتخاذ إجراء داخل جهاز مصرح لك بإدارته، دوّن:
- التاريخ والوقت والمنطقة الزمنية.
- PID وPPID.
- اسم المستخدم.
- الأمر الكامل.
- مسار الملف التنفيذي.
- الاتصالات الحالية.
- الخدمة المرتبطة.
- الرسائل ذات الصلة في السجل.
- سبب الاشتباه ودرجة الثقة.
في جهاز حقيقي تابع لجهة عمل، اتبع خطة الاستجابة للحوادث ولا تتصرف منفردًا.
مختبر عملي: تتبع عملية عادية
قبل تنفيذ التدريب، تأكد من استخدام بيئة معزولة. وإذا لم تُجهّزها بعد، فاتبع خطوات إنشاء مختبر أمن سيبراني منزلي آمن لحماية جهازك وشبكتك الأساسية.
نفّذ التدريب داخل جهاز Linux افتراضي تملكه.
الخطوة الأولى: أنشئ عملية تدريبية
نفّذ:
sleep 300 &
سيعرض النظام رقمًا للعملية. لمعرفة PID الذي شغّلته آخر مرة:
echo $!
سجّل الرقم.
الخطوة الثانية: افحص هوية العملية
استبدل PID بالرقم الذي ظهر:
ps -p PID -o pid,ppid,user,lstart,etime,%cpu,%mem,cmd
ثم اعرض الملف التنفيذي:
readlink -f /proc/PID/exe
واعرض الأمر الكامل:
tr '\0' ' ' < /proc/PID/cmdline
الخطوة الثالثة: افحص العملية الأم
استخدم قيمة PPID التي ظهرت:
ps -p PPID -o pid,ppid,user,lstart,etime,cmd
ستفهم الآن كيف أنشأت جلسة الطرفية عملية sleep.
الخطوة الرابعة: أنهِ التجربة
kill PID
ثم تحقق:
ps -p PID
إذا لم تظهر العملية، فقد انتهت بنجاح. استخدام kill هنا جزء من تجربة على عملية أنشأتها بنفسك، وليس إجراءً عامًا تجاه أي عملية مجهولة.
مختبر عملي: تتبع منفذ واتصال محلي
سنشغّل خادمًا محليًا مؤقتًا لا يقبل الاتصالات إلا من الجهاز نفسه.
أنشئ مجلدًا تدريبيًا وانتقل إليه:
mkdir -p ~/linux-monitoring-lab
cd ~/linux-monitoring-lab
شغّل خادم Python محليًا:
python3 -m http.server 8000 --bind 127.0.0.1
اترك النافذة مفتوحة، ثم افتح نافذة طرفية ثانية ونفّذ:
sudo ss -ltnp | grep ':8000'
سجّل:
- عنوان الاستماع.
- رقم المنفذ.
- اسم العملية.
- PID.
أنشئ اتصالًا محليًا بالخادم:
curl http://127.0.0.1:8000
ثم اعرض الاتصالات المتعلقة بالمنفذ:
sudo ss -tnp | grep ':8000'
قد ينتهي الاتصال بسرعة قبل أن تراه، وهذه ملاحظة عملية مهمة: بعض الأحداث قصيرة العمر تحتاج إلى مراقبة مستمرة أو التقاط شبكي لرصدها.
لإيقاف الخادم، عد إلى نافذته واضغط:
Ctrl + C
بطاقة تحليل العملية
استخدم البطاقة التالية لكل عملية تحتاج إلى مراجعة:
وقت الفحص:
PID:
PPID:
المستخدم:
وقت بدء العملية:
الأمر الكامل:
مسار الملف التنفيذي:
استهلاك المعالج والذاكرة:
الخدمة المرتبطة:
المنافذ والاتصالات:
السجلات المرتبطة:
سبب المراجعة:
التفسير المحتمل:
درجة الثقة: منخفضة، متوسطة، مرتفعة
الإجراء المقترح:
هذه البطاقة تمنعك من القفز من اسم غير مألوف إلى اتهام غير مدعوم.
مشروع تطبيقي للطالب
أنشئ تقريرًا بعنوان «خريطة العمليات والاتصالات في جهاز Linux»، ثم نفّذ ما يلي:
- سجّل وقت بداية الفحص والمنطقة الزمنية.
- حدد خمس عمليات طبيعية واشرح وظيفة كل منها.
- اختر عملية واحدة وارسم علاقتها بالعملية الأم.
- احصر الخدمات التي تعمل في الخلفية.
- سجل المنافذ المستمعة وسبب فتح كل منفذ تعرفه.
- اربط منفذًا واحدًا بالعملية التي تستخدمه.
- أنشئ خادم Python المحلي وسجل ظهوره واختفاءه.
- اربط حدثًا واحدًا بسجل Linux.
- اكتب ما تستطيع إثباته وما لا تستطيع إثباته.
- أخفِ أسماء المستخدمين والعناوين الحساسة قبل مشاركة التقرير.
هذا المشروع مناسب لإضافته إلى ملف الطالب المهني لأنه يعرض طريقة التفكير والتحليل، وليس مجرد قائمة أوامر محفوظة.
أخطاء شائعة
اعتبار الاسم الغريب دليلًا على الضرر
قد تكون العملية جزءًا طبيعيًا من النظام. افحص مسارها وحزمتها ومستخدمها ووظيفتها.
اعتبار استهلاك المعالج اختراقًا
الاستهلاك المرتفع مؤشر يحتاج إلى سياق، وليس حكمًا نهائيًا.
إيقاف العملية قبل توثيقها
قد تفقد معلومات مهمة لا يمكن استعادتها بعد انتهائها.
تجاهل العملية الأم
معرفة من شغّل العملية قد تكون أهم من اسم العملية نفسها.
الخلط بين الاستماع والانكشاف للإنترنت
المنفذ المستمع لا يعني تلقائيًا أنه متاح من الإنترنت.
الاعتماد على لقطة واحدة
العمليات والاتصالات تتغير بسرعة. كرر القياس وقارنه بخط الأساس والسجلات.
أسئلة شائعة
هل كل منفذ مفتوح يمثل خطرًا؟
لا. قد يكون المنفذ ضروريًا لخدمة مشروعة، لكن يجب معرفة الخدمة التي تستخدمه، وعنوان الاستماع، ومن يستطيع الوصول إليه.
هل يمكن لعملية ضارة إخفاء اسمها؟
قد تستخدم اسمًا مشابهًا لعملية نظام أو تغير ما يظهر في سطر الأوامر. لذلك نفحص المسار والعملية الأم والمستخدم والاتصالات والسجلات معًا.
أيهما أفضل: ps أم top؟
يعطي ps لقطة لحظة تنفيذ الأمر، بينما يعرض top تحديثًا مستمرًا. يستخدم المحلل الأداتين بحسب السؤال الذي يحاول الإجابة عنه.
لماذا لا يظهر اسم العملية في ss؟
قد تحتاج إلى sudo، أو قد يكون الاتصال انتهى، أو لا تسمح صلاحيات المستخدم برؤية معلومات العملية.
هل أوقف أي عملية لا أعرفها؟
لا. وثقها وابحث عن وظيفتها وعلاقتها بالنظام أولًا. وفي بيئة العمل اتبع إجراءات الاستجابة للحوادث.
الخلاصة
مراقبة Linux لا تعني حفظ أوامر ps وtop وss، بل تعني ربط العملية بالمستخدم والعملية الأم والملف التنفيذي والخدمة والاتصال والسجل.
ابدأ بخط أساس للجهاز، ثم ابحث عن التغييرات التي لا تتوافق معه. وعندما تجد شيئًا غير مألوف، اجمع الأدلة وحدد درجة الثقة قبل اتخاذ أي إجراء.
بهذه المنهجية تنتقل من مشاهدة قائمة طويلة من العمليات إلى فهم قصة ما يحدث داخل النظام لحظة بلحظة.
ولمعرفة الدروس والمهارات التي تلي مراقبة العمليات والاتصالات، ارجع إلى خريطة تعلم الأمن السيبراني لطالب الجامعة وتابع المراحل بالترتيب.


شاركنا رأيك