ترتيب الأولويات

جارٍ التحميل…

01 / ملخص الدرس

ترتيب الأولويات

إزاي ترتّب الثغرات المتأكد منها علشان العميل يعرف يصلّح إيه الأول: مش الـ CVSS بس، لكن كمان EPSS و KEV والسياق، وتحوّل ده لمستويات أولوية بـ Python.

02 / شرح الدرس مكتوبًا

نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.

دلوقتي عندك ثغرات متأكد منها. بس ممكن يكونوا عشرين أو تلاتين، والعميل مش هيصلّحهم كلهم مرة واحدة. شغلتك إنك تقوله: ابدأ بإيه. وده ترتيب الأولويات.

الغلطة الشائعة: ترتّب بالـ CVSS بس. الـ CVSS بيقيس الخطورة النظرية، بس ما بيقولش إيه اللي بيتهاجم فعلًا دلوقتي. ثَغْرة CVSS بتاعها سبعة ونص وبتتهاجم كل يوم، أخطر من عشرة محدش بيستغلها.

العوامل اللي بنرتّب بيها، واتعلمناها في أول الكورس: CVSS: الخطورة. EPSS: احتمال إنها تتستغل في الأيام الجاية. KEV: قايمة CISA للثغرات اللي فعلًا بتتهاجم. أي ثَغْرة في KEV، دي أولوية قصوى على طول.

وفيه عامل الأدوات ما بتعرفوش: السياق. الجهاز ده متعرّض للنت ولا جُوّه الشبكة؟ عليه data حسّاسة ولا لأ؟ نفس الثَغْرة على server عام أخطر منها على جهاز داخلي. السياق ده إنت اللي بتضيفه، مش الأداة. هنا الثغرات المتأكد منها، وكل واحدة معاها CVSS و EPSS و KEV. بنطبعهم كلهم بالأرقام، قبل ما نحوّلهم لمستويات أولوية. نشغّل… أربع ثغرات بأرقامها.

main.py
# 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 بالترتيب.

main.py
# 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)
  1. 01يعني إيه ثغرة؟ ومن الـ Recon للـ Vulnerabilities
  2. 02CVE و CWE: أسماء الثغرات
  3. 03الخطورة: CVSS و EPSS و KEV
  4. 04البحث في NVD
  5. 05Exploit-DB و searchsploit
  6. 06GitHub و Metasploit
  7. 07الفحص بـ Nmap NSE
  8. 08الفحص بـ Nuclei
  9. 09الفحص بـ Nikto
  10. 10الفحص بـ OpenVAS
  11. 11فحص بصلاحيات ومن غيرها
  12. 12تجميع وتنظيم النتايج
  13. 13False Positives والتأكد اليدوي
  14. 14ترتيب الأولوياتانت هنا
  15. 15أتمتة الفحص بـ Python
  16. 16مراجعة شاملة