ترتيب الأولويات
إزاي ترتّب الثغرات المتأكد منها علشان العميل يعرف يصلّح إيه الأول: مش الـ CVSS بس، لكن كمان EPSS و KEV والسياق، وتحوّل ده لمستويات أولوية بـ Python.
نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
دلوقتي عندك ثغرات متأكد منها. بس ممكن يكونوا عشرين أو تلاتين، والعميل مش هيصلّحهم كلهم مرة واحدة. شغلتك إنك تقوله: ابدأ بإيه. وده ترتيب الأولويات.
الغلطة الشائعة: ترتّب بالـ CVSS بس. الـ CVSS بيقيس الخطورة النظرية، بس ما بيقولش إيه اللي بيتهاجم فعلًا دلوقتي. ثَغْرة CVSS بتاعها سبعة ونص وبتتهاجم كل يوم، أخطر من عشرة محدش بيستغلها.
العوامل اللي بنرتّب بيها، واتعلمناها في أول الكورس: CVSS: الخطورة. EPSS: احتمال إنها تتستغل في الأيام الجاية. KEV: قايمة CISA للثغرات اللي فعلًا بتتهاجم. أي ثَغْرة في KEV، دي أولوية قصوى على طول.
وفيه عامل الأدوات ما بتعرفوش: السياق. الجهاز ده متعرّض للنت ولا جُوّه الشبكة؟ عليه data حسّاسة ولا لأ؟ نفس الثَغْرة على server عام أخطر منها على جهاز داخلي. السياق ده إنت اللي بتضيفه، مش الأداة. هنا الثغرات المتأكد منها، وكل واحدة معاها CVSS و EPSS و KEV. بنطبعهم كلهم بالأرقام، قبل ما نحوّلهم لمستويات أولوية. نشغّل… أربع ثغرات بأرقامها.
# Verified findings with CVSS, EPSS (chance of being exploited soon) and CISA KEV.
findings = [
{"name": "Apache 2.4.49 Path Traversal", "cvss": 7.5, "epss": 0.94, "kev": True},
{"name": "Samba 3.0.20 Command Injection", "cvss": 10.0, "epss": 0.90, "kev": False},
{"name": "SSH Weak Encryption Algorithms", "cvss": 4.3, "epss": 0.01, "kev": False},
{"name": "Missing X-Frame-Options Header", "cvss": 2.6, "epss": 0.00, "kev": False},
]
for f in findings:
print(f"{f['cvss']:4} EPSS {f['epss']:.2f} KEV {str(f['kev']):5} {f['name']}")المخرجات
7.5 EPSS 0.94 KEV True Apache 2.4.49 Path Traversal 10.0 EPSS 0.90 KEV False Samba 3.0.20 Command Injection 4.3 EPSS 0.01 KEV False SSH Weak Encryption Algorithms 2.6 EPSS 0.00 KEV False Missing X-Frame-Options Header
دورك: حوّل الأرقام لمستوى أولوية. اكتب function اسمها priority: لو KEV ترجّع P1. لو الـ CVSS تسعة أو أكتر، أو EPSS نص أو أكتر، ترجّع P2. لو الـ CVSS أربعة أو أكتر، P3. غير كده P4.
def priority(f): لو f["kev"] رجّع P1، وهكذا بالترتيب لحد P4
الحل: نشغّل… P1 للي في KEV، وبعدين P2 و P3 و P4 بالترتيب.
# Verified findings with CVSS, EPSS (chance of being exploited soon) and CISA KEV.
findings = [
{"name": "Apache 2.4.49 Path Traversal", "cvss": 7.5, "epss": 0.94, "kev": True},
{"name": "Samba 3.0.20 Command Injection", "cvss": 10.0, "epss": 0.90, "kev": False},
{"name": "SSH Weak Encryption Algorithms", "cvss": 4.3, "epss": 0.01, "kev": False},
{"name": "Missing X-Frame-Options Header", "cvss": 2.6, "epss": 0.00, "kev": False},
]
def priority(f):
if f["kev"]:
return "P1"
if f["cvss"] >= 9 or f["epss"] >= 0.5:
return "P2"
if f["cvss"] >= 4:
return "P3"
return "P4"
for f in findings:
print(priority(f), f["name"])المخرجات
P1 Apache 2.4.49 Path Traversal P2 Samba 3.0.20 Command Injection P3 SSH Weak Encryption Algorithms P4 Missing X-Frame-Options Header
كده خلّصنا تحليل النتايج: جمّعنا، أكّدنا، ورتّبنا. الجزء الأخير: نأتمت كل ده بـ Python، وبعدين مراجعة شاملة للكورس. يلا بينا.
03 / دروس المسار (16)
- 01يعني إيه ثغرة؟ ومن الـ Recon للـ Vulnerabilities
- 02CVE و CWE: أسماء الثغرات
- 03الخطورة: CVSS و EPSS و KEV
- 04البحث في NVD
- 05Exploit-DB و searchsploit
- 06GitHub و Metasploit
- 07الفحص بـ Nmap NSE
- 08الفحص بـ Nuclei
- 09الفحص بـ Nikto
- 10الفحص بـ OpenVAS
- 11فحص بصلاحيات ومن غيرها
- 12تجميع وتنظيم النتايج
- 13False Positives والتأكد اليدوي
- 14ترتيب الأولوياتانت هنا
- 15أتمتة الفحص بـ Python
- 16مراجعة شاملة