Module 5: فحص الثغرات (Vulnerability Scanning)

اكتشاف الثغرات جزء أساسي من أي تقييم أمني. عملية تحديد سطح الهجوم لقطعة سوفت وير، نظام، أو شبكة بتتسمى Vulnerability Scanning. ماسحات الثغرات بتيجي بأشكال كتير، من سكربتات فردية بتحدد ثغرة واحدة، لحلول تجارية معقَّدة بتفحص مجموعة واسعة من الثغرات. الماسحات الآلية ممكن تكون لا تقدّر بثمن لمختبري الاختراق لأنها بتساعد ترسّخ خط أساس سريع على شبكة الهدف قبل تنفيذ تحليل اختبار يدوي أشمل للحصول على تغطية كافية.

في الموديول ده هنحلل الفحص الآلي لثغرات الشبكة، نبدأ بنظرية فحص الثغرات، وبعدين نستخدم Nessus وNmap لتنفيذ أنواع مختلفة من فحوصات الثغرات.


01نظرية فحص الثغرات (Vulnerability Scanning Theory)

أهداف الوحدة

فهم أساسي لعملية فحص الثغرات | التعرّف على الأنواع المختلفة لفحوصات الثغرات | فهم اعتبارات فحص الثغرات

إزاي ماسحات الثغرات بتشتغل

كل ماسح ثغرات ليه سير عمل مخصَّص خاص بيه، لكن العملية الأساسية ورا فحص الثغرات مستقلة عن طريقة التنفيذ. العملية الأساسية لماسح ثغرات آلي ممكن توصَف كالتالي:

1. Host Discovery                              → اكتشاف الـ Host
2. Port Scanning                                → فحص البورتات
3. OS, Service, and Version Detection          → تحديد نظام التشغيل، الخدمة، والإصدار
4. Matching Results to a Vulnerability Database → مطابقة النتائج بقاعدة بيانات الثغرات

Host Discovery بتوضّح للماسح إذا كان الهدف شغّال ومستجيب. الماسح بعدين بيستخدم تقنيات متنوعة عشان يحدد كل البورتات المفتوحة على النظام ويكتشف كل الخدمات القابلة للوصول عن بُعد مع إصداراتها المقابلة. بالإضافة لكده، تحديد نظام التشغيل بيتم في الخطوة دي.

بناءً على كل المعلومات المجمَّعة، ماسح الثغرات بعدين بيستعلم قاعدة بيانات ثغرات عشان يطابق البيانات المكتشَفة بثغرات معروفة. أمثلة قواعد بيانات الثغرات: National Vulnerability Database (NVD) وبرنامج Common Vulnerabilities and Exposures (CVE).

CVE وCVSS

الثغرات بتتحدد بنظام CVE. رغم إن ده بيسمح لنا نحدد ونلاقي ثغرات موثَّقة، معرّف CVE مابيوفّرش أي معلومة عن خطورة الثغرة.

Common Vulnerability Scoring System (CVSS) هو إطار للتعامل مع خصائص وخطورة الثغرات. كل CVE له درجة CVSS مُعيَّنة. الإصدارين الرئيسيين هما CVSS v2 وCVSS v3، والاتنين بيستخدموا مدى من 0 لـ 10 لتقييم الثغرات بمستويات خطورة مختلفة.

النطاق (CVSS v3.x)مستوى الخطورة
0.0None
0.1 – 3.9Low
4.0 – 6.9Medium
7.0 – 8.9High
9.0 – 10.0Critical

للحصول على درجة CVSS، نقدر نراجع الـ CVE في قاعدة بيانات ثغرات، أو لو مفيش CVE مُعيَّن، نقدر نستخدم CVSS calculator. في 2019، CVSS v3.1 اتطلق، وده وضّح وحسّن الإصدار الموجود.

الإيجابيات الكاذبة والسلبيات الكاذبة

False Positive بيحصل لما ثغرة بتتكشف لكن الهدف فعليًا مش عرضة ليها. ده ممكن يحصل بسبب تحديد خدمة وإصدار غلط، أو إعداد بيخلّي الهدف غير قابل للاستغلال. الإيجابيات الكاذبة كمان ممكن تحصل لما patches أو تحديثات تتعمل backport (إصلاحات أمنية بتتطبّق على إصدار قديم من السوفت وير).

False Negative مصطلح مهم تاني — بيحصل لما ثغرة بتفوت ماسح الثغرات تمامًا.

التوازن بين الفحص اليدوي والآلي

في اختبار اختراق، غالبًا محتاجين نلاقي التوازن الصح بين الفحص اليدوي والآلي. الفحص اليدوي حتميًا هيكون مكثّف الموارد ومستهلك للوقت. لما يكون فيه كمية ضخمة من البيانات نحللها، غالبًا بنوصل لحدنا المعرفي بسرعة ونفوّت تفاصيل حيوية. من ناحية تانية، الفحص اليدوي بيسمح باكتشاف ثغرات معقَّدة ومنطقية صعبة الاكتشاف بأي نوع من الماسحات الآلية.

الفحوصات الآلية لا تقدّر بثمن في المهام لأسباب عديدة: أولًا، في معظم أنواع التقييمات، عندنا قيود وقت — لو عندنا شبكة مؤسسية ضخمة نفحصها، مش هنقدر نراجع كل نظام يدويًا. ثانيًا، باستخدام الماسحات الآلية، نقدر نحدد بسرعة ثغرات سهلة الاكتشاف وفرص "low-hanging fruit" تانية.

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

أنواع فحوصات الثغرات

Location: External vs Internal

النوعالوصف
External Vulnerability Scanتحليل نظام أو أكتر قابلين للوصول من الإنترنت. الأهداف غالبًا تطبيقات ويب، أنظمة في الـ DMZ، وخدمات مواجهة للعامة. العميل عايز نظرة عامة على الحالة الأمنية لكل الأنظمة القابلة للوصول من مهاجم خارجي
Internal Vulnerability Scanوصول مباشر لجزء أو كل الشبكة الداخلية للعميل — إما عبر VPN أو بتنفيذ الفحص على الموقع. الهدف الحصول على نظرة عامة على الحالة الأمنية للشبكة الداخلية، وتحليل المتجهات اللي المهاجم يقدر يستخدمها بعد اختراق المحيط

ملاحظة واقعية: رغم إن الشركة المفروض دايمًا تعرف أنهي أنظمة بتاعتها متاحة للعامة، مش دايمًا بيكون ده الحال — وغالبًا هنلاقي أنظمة وخدمات حساسة مكشوفة خارجيًا الشركة مش واعية بوجودها.

Credentials: Authenticated vs Unauthenticated

النوعالوصف
Unauthenticated Scanفحص بدون بيانات اعتماد. بيرسم خريطة النظام بكل البورتات المفتوحة ويوفّر سطح هجوم بمطابقة المعلومات بقواعد بيانات الثغرات. لكن مفيش معلومة عن عيوب أمنية محلية، زي patches مفقودة، سوفت وير قديم، أو ثغرات إعداد على النظام نفسه
Authenticated Scanالماسح بيدخل للهدف ببيانات اعتماد صالحة، غالبًا حساب ذو صلاحية عشان أفضل رؤية. الهدف: الفحص عن حزم عرضة للخطر، patches مفقودة، أو ثغرات إعداد

مثال توضيحي: في فحص ثغرات بدون توثيق على هدف Windows، مانقدرش نحدد إذا كان النظام محصَّن ضد ثغرة HiveNightmare، اللي بتسمح لمستخدم غير مميَّز يقرأ ملفات نظام حساسة. هنا بالظبط فحوصات التوثيق بتيجي في دورها.

اعتبارات في فحص الثغرات

1. مدة الفحص (Scanning Duration)

حسب نوع الفحص وعدد الأهداف، مدة الفحص الآلي ممكن تختلف بشكل كبير. بما إن الفحوصات الخارجية عبر الإنترنت ممكن تاخد وقت بسبب عدد الـ hops والأنظمة الوسيطة على مسار الشبكة، لازم نخطط حسب كده لو عندنا قايمة كبيرة من عناوين IP.

2. رؤية الهدف (Target Visibility)

مهم نحدد إذا كانت أهدافنا قابلة للوصول من غير الحاجة لـ VPNs أو أذونات في firewall.

مثال: عميل دولي عنده أنظمة في دول متعددة، وبيقيّد الوصول من كل عناوين IP خارج الدولة اللي النظام موجود فيها. من موقعنا، هنقدر نوصل بس للأنظمة الموجودة في دولتنا، بينما الباقي مش متاح لنا.

في المهام الداخلية، مهم نفكر في موقعنا في الشبكة عشان نحصل على نتائج ذات معنى، خاصةً لما عايزين نفحص أنظمة من subnets تانية. Firewalls, IPS, وأجهزة شبكة وسيطة (زي routers) ممكن تفلتر أو تعدّل حركة المرور بتاعتنا — مثلًا، لما ماسح الثغرات بيبعت ICMP packets في خطوة Host Discovery والجهاز الوسيط مابيمررهاش، الماسح بيعلّم الهدف كـ offline.

3. Rate Limiting

الفحص بتاعنا ممكن يتأثر بـ rate limiting، اللي بيُستخدم لتقييد كمية الترافيك على شبكة. لما الفحص بتاعنا يتخطى حدود زي throughput، عدد packets، أو عدد الاتصالات، النظام المصدري لفحص الثغرات بتاعنا ممكن يتقيّد بشكل كبير. لما host discovery وservice detection probes بيبقوا مقيَّدين بالمعدل وبالتالي بيبطّوا، ماسح الثغرات ممكن يفوّت hosts أو خدمات حية.

معظم ماسحات الثغرات تقدر تتعامل مع ده بتحديد delays، timeouts، وتقييد الاتصالات المتوازية.

4. التأثير على الشبكة والنظام

ماسح الثغرات بينتج ترافيك شبكة كتير في معظم الإعدادات، خاصةً لو عايزين نفحص أهداف متعددة بالتوازي — ده ممكن بسهولة يخلّي الشبكة غير قابلة للاستخدام. للتعامل مع ده، نقدر نقلل عدد الفحوصات المتوازية أو سرعة الفحص.

مشكلة أكبر هي التأثير المحتمل على استقرار نظام — لازم نحسب إن كل فحص ثغرات يقدر يقدّم عدم استقرار لأي نظام أو خدمة بنفحصها.


02فحص الثغرات باستخدام Nessus

أهداف الوحدة

تثبيت Nessus | فهم مكونات Nessus المختلفة | إعداد وتنفيذ فحص ثغرات | فهم والتعامل مع نتائج فحص ثغرات بـ Nessus | توفير بيانات اعتماد لتنفيذ فحص ثغرات موثَّق | فهم أساسي لـ Nessus Plugins

Nessus متاح كـ Nessus Essentials وNessus Professional. هنستخدم النسخة المجانية، Nessus Essentials، واللي بتيجي بقيود معينة — مثلًا، نقدر نفحص بس 16 عنوان IP مختلف، وبعض القوالب والوظائف مش متاحة. لكن Nessus Essentials هتدّينا رؤية عن إزاي نستخدم النسخة التجارية الكاملة، والمفاهيم العامة المتناقَشة هنا هتنطبق على معظم الماسحات التجارية.

تثبيت Nessus

Nessus مش متاح في مستودعات Kali ولازم يتثبّت يدويًا. هنحمّل الإصدار الحالي من Nessus كملف .deb بنظام 64-bit لـ Kali من موقع Tenable، مع اختيار Linux - Debian - amd64 كمنصة.

ملاحظة لمستخدمي Apple Silicon: المتعلّمين اللي بيستخدموا نظام Apple بشريحة ARM يقدروا يثبّتوا Nessus على Kali VM بتحميل المثبِّت لمنصة Linux - Ubuntu - arch64.

بعد تحميل المثبِّت، نتحقق من checksum الـ SHA256 للتأكد منه:

# بعد نسخ الـ SHA256 checksum من موقع Tenable
echo "<copied_checksum>  Nessus-x.x.x-debian10_amd64.deb" > sha256sum_nessus
sha256sum -c sha256sum_nessus

لو النتيجة أظهرت إن الـ checksums متطابقة، يبقى نقدر نثبّت الحزمة:

sudo apt install ./Nessus-x.x.x-debian10_amd64.deb

بعد اكتمال التثبيت، نبدأ خدمة nessusd:

sudo systemctl start nessusd.service

بمجرد ما Nessus شغّال، نفتح متصفح ونروح لـ https://127.0.0.1:8834. هنتقابل بتحذير بيوضّح جهة إصدار شهادة غير معروفة — ده متوقَّع بسبب استخدام شهادة self-signed. نضغط Advanced... ثم Accept the Risk and Continue.

قوالب الفحص (Scan Templates)

Nessus بيوفّر مجموعة واسعة من قوالب الفحص، مجمَّعة لـ 3 فئات: Discovery، Vulnerabilities، وCompliance.

Nessus كمان بيوفّر 3 قوالب فحص ثغرات عامة:

القالبالوصف
Basic Network Scanفحص كامل بمعظم الإعدادات مُعرَّفة مسبقًا. بيكتشف مجموعة واسعة من الثغرات، وده القالب الموصى به من Nessus. فيه كمان خيار تخصيص الإعدادات والتوصيات دي
Advanced Scanقالب من غير إعدادات مُعرَّفة مسبقًا — نستخدمه لما عايزين نخصّص فحص الثغرات بالكامل أو عندنا احتياجات محددة
Advanced Dynamic Scanقالب فحص عام أخير، كمان من غير إعدادات أو توصيات مُعرَّفة مسبقًا

تنفيذ وتحليل نتائج فحص

العرض الأولي بيعرض صفحة Hosts، اللي بتسرد كل الـ hosts المفحوصة وبتوفّر تمثيل بصري لبيانات الثغرات. ده بيسمح لنا نحدد نتائج مهمة بنظرة واحدة وبيدّينا نظرة عامة على الحالة الأمنية لكل نظام.

عمود Severity بيدّينا مؤشر سريع إذا كانت دي نتيجة حرجة أو لأ. Nessus بيستخدم خطورة MIXED لما بيجمّع نتائج مع بعض — عمود Count بيوضّح عدد النتائج في المجموعة المقابلة. نقدر نضغط على نتيجة مجمَّعة عشان نعرض قايمة بكل النتائج في المجموعة دي (مثلًا: Apache Httpd (Multiple Issues) تحت فئة Web Servers).

تنفيذ فحص ثغرات موثَّق (Authenticated Scan)

في القسم ده، هننفّذ فحص ثغرات موثَّق بتوفير بيانات اعتماد لـ Nessus. زي ما اتناقش قبل كده، الفحوصات الموثَّقة بتنتج معلومات أكتر تفصيلًا وبتقلل عدد الإيجابيات الكاذبة.

هنستخدم قالب Credentialed Patch Audit، اللي جاي مُعدّ مسبقًا لتنفيذ فحوصات أمان محلية ضد الهدف. الفرق بين ده وبين Basic Network Scan ببيانات اعتماد هو إن Credentialed Patch Audit بيستخدم بس فحوصات أمان محلية، ومش هينفّذ فحص ثغرات اعتيادي من منظور خارجي. القالب ده مش بس هيفحص عن patches نظام التشغيل الناقصة، لكن كمان تطبيقات قديمة ممكن تكون عرضة لهجمات تصعيد صلاحيات.

إعداد بيانات الاعتماد:

  1. اعطِ اسم للفحص وحدد الهدف (مثلًا DESKTOP)
  2. روح لتبويب Credentials واختار SSH في فئة Host
  3. في Authentication method اختار password
  4. أدخل username وpassword (مثلًا offsec / lab)
  5. اختار sudo في Elevate privileges with، وأدخل root كـ sudo user ونفس الباسورد

للحصول على قائمة بكل آليات التوثيق المتاحة، نقدر نضغط على dropdown الفئات ونختار All.

لأنظمة Linux/macOS، SSH هو المستخدَم. رغم إن SSH ممكن يُستخدم كمان على Windows، في معظم الحالات هنستخدم SMB (Server Message Block) وWMI (Windows Management Instrumentation) لتنفيذ فحوصات ثغرات موثَّقة ضد أهداف Windows.

اعتبارات مهمة للحصول على نتائج ذات معنى:

المفروض نراجع توثيق Tenable قبل ما نبدأ أول فحص موثَّق لينا.

بعد تنفيذ الفحص ومراجعة النتائج، نقدر نعطّل تجميع النتائج (grouping) بالضغط على أيقونة الترس واختيار Disable Groups. هنلاقي قائمة ثغرات من Ubuntu فيها عائلة plugins اسمها Ubuntu Local Security Checks.

Plugins مجمَّعة في plugin families بتفحص ثغرات في نفس السياق — مثلًا فيه عائلات منفصلة لفحص ثغرات في قواعد بيانات، firewalls، أو سيرفرات ويب. عائلة Ubuntu Local Security Checks فيها مجموعة كبيرة من الـ plugins اللي بتفحص عن ثغرات محلية وpatches ناقصة لـ Ubuntu.

عمود Name بيوفّر إصدارات Ubuntu العرضة للخطر ووصف موجز وكمان رقم الـ patch للثغرات.

العمل مع Nessus Plugins

افتراضيًا، Nessus بيفعّل plugins متعددة وراء الكواليس لما بيشغّل قالب افتراضي. ده مفيد في سيناريوهات كتير، لكن كمان نقدر نضبط الخيارات بدقة عشان نشغّل plugin واحد بسرعة — مفيد للتحقق من نتيجة سابقة أو لاكتشاف سريع لكل الأهداف في بيئة عرضة لثغرة محددة.

مثال: فحص هل جهاز DESKTOP عرضة لـ CVE-2021-3156

CVE-2021-3156 ثغرة قابلة للاستغلال محليًا بتسمح لمستخدم غير مميَّز يصعّد صلاحياته لـ root.

لاستخدام فلتر الـ plugin الديناميكي، نبدأ بـ New Scan جديد، ونستخدم المرة دي قالب Advanced Dynamic Scan. القالب ده بيسمح لنا نستخدم فلتر plugin ديناميكي بدل تفعيل أو تعطيل plugins يدويًا.

بعد توفير نفس بيانات اعتماد SSH وsudo (يعني كمان هننفّذ فحص موثَّق)، نقدر نختار الـ plugins اللي عايزينها في فحص الثغرات.

استخدام الفلتر الديناميكي:

  1. روح لتبويب Dynamic Plugins
  2. في الـ dropdown الشمال، اختار CVE لتنقّي ثغرة محددة
  3. في الـ dropdown النص، اختار سلوك المطابقة
  4. في الـ dropdown اليمين، أدخل رقم الـ CVE (CVE-2021-3156)
  5. اضغط Preview Plugins (ممكن تاخد كذا دقيقة)

ميزة مفيدة جدًا: فلتر الـ plugin الديناميكي بيسمح بدمج فلاتر متعددة. بما إننا عارفين إن الهدف نظام Ubuntu Linux، نقدر نستخدم فلتر ثاني لتحديد عائلة الـ plugin ذات الصلة — بإضافة فلتر جديد بالضغط على زر الـ plus جنب الفلتر الأول.

بعد الضغط على Preview Plugins تاني، هنلاقي قائمة بالـ plugins اللي الفلاتر بتاعتنا حددتها — نختار Ubuntu Local Security Checks من الـ dropdown. Nessus بيعرض معلومات عن الـ plugin، بما فيها إصدارات Ubuntu المتأثرة، وصف موجز، رقم الـ patch، وكمان الـ Plugin ID.


03فحص الثغرات باستخدام Nmap

أهداف الوحدة

فهم أساسيات Nmap Scripting Engine (NSE) | تنفيذ فحص ثغرات خفيف الوزن بـ Nmap | التعامل مع سكربتات NSE مخصَّصة

كبديل لـ Nessus، نقدر كمان نستخدم NSE (Nmap Scripting Engine) لتنفيذ فحوصات ثغرات آلية. سكربتات NSE بتوسّع الوظائف الأساسية لـ Nmap عشان تنفّذ مجموعة متنوعة من مهام الشبكات. المهام دي مجمَّعة في فئات حول حالات زي اكتشاف الثغرات، brute forcing، واكتشاف الشبكة. السكربتات كمان ممكن توسّع قدرات تحديد الإصدار وجمع المعلومات بتاعة Nmap.

فئات سكربتات NSE

سكربت NSE ممكن يكون ليه أكتر من فئة واحدة. مثلًا، ممكن يتصنّف كـ safe وvuln، أو intrusive وvuln.

الفئةالوصف
safeمفيهاش تأثير محتمل على الاستقرار
intrusiveممكن تخرّب خدمة أو نظام الهدف
vulnبتفحص عن ثغرات محددة

على Kali VM، سكربتات NSE موجودة في دليل /usr/share/nmap/scripts/ بصيغة .nse. الدليل ده كمان فيه ملف script.db، اللي بيعمل كفهرس لكل سكربتات NSE المتاحة حاليًا. نقدر نستخدمه عشان نجيب قايمة بالسكربتات في فئة vuln:

grep -l "categories.*vuln" /usr/share/nmap/scripts/*.nse

سكربت vulners

بعض سكربتات NSE القياسية قديمة نوعًا ما. لحسن الحظ، سكربت vulners اتدمج، وده بيوفّر معلومات ثغرات حالية عن إصدارات الخدمات المكتشَفة من قاعدة بيانات Vulners Vulnerability Database. السكربت نفسه له الفئات safe، vuln، وexternal.

باراميتر --script

قبل ما نبدأ أول فحص ثغرات بـ NSE، نفحص باراميتر --script بتاع Nmap. الباراميتر ده مسؤول عن تحديد أنهي سكربتات NSE هتتنفّذ في فحص معين.

الأرجومنتات لباراميتر --script ممكن تكون:

- فئة (category)                              → --script vuln
- تعبير Boolean                                → --script "vuln and safe"
- قايمة فئات مفصولة بفواصل                     → --script "vuln,discovery"
- اسم كامل أو wildcard لسكربت NSE في script.db  → --script "http-vuln-*"
- مسار مطلق لسكربت محدد                        → --script /path/to/script.nse

مثال تطبيقي: فحص ثغرات خفيف الوزن

nmap --script vuln -p 80,443 target_ip

Nmap اكتشف خدمة Apache بإصدار 2.4.49 وجرّب كل سكربتات NSE من فئة vuln. معظم الخرج جاي من سكربت vulners، اللي بيستخدم المعلومات من الخدمة والإصدار المكتشَف عشان يوفّر بيانات ثغرات مرتبطة.

سكربت vulners مش بس بيوضّح معلومات عن الـ CVEs المكتشَفة، لكن كمان درجات CVSS وروابط لمعلومات إضافية. مثلًا:

PORT    STATE SERVICE VERSION
80/tcp  open  http    Apache httpd 2.4.49

| vulners:
|   cpe:/a:apache:http_server:2.4.49:
|       CVE-2021-41773   9.8   https://vulners.com/cve/CVE-2021-41773
|_      ...

Nmap بالاشتراك مع سكربت vulners اكتشف إن الهدف عرضة لـ CVE-2021-41773 (ثغرة Path Traversal في Apache HTTP Server 2.4.49 المشهورة).


الخلاصة العامة للموديول

الموديول ده وفّر نظرة عامة على فحص الثغرات بـ Nessus وNmap، وأدّى لرؤية في الأنواع والاعتبارات المختلفة لفحص الثغرات.

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

أخيرًا، المفروض نفتكر دايمًا إن أدوات فحص الثغرات ممكن تنفّذ أفعال ممكن تكون ضارة لبعض الشبكات أو الأهداف، فلازم نمارس الحذر لما بنستخدمها.


نهاية نوتس الموديول الخامس — OSCP: Vulnerability Scanning