الـ Risk Matrix: الاحتمال في الـ Impact
ليه CVSS لوحده مش كفاية، وإزاي الـ Likelihood والـ Impact على البيزنس بيدّوا الـ Risk الحقيقي، والـ Context بيغيّر الخطورة.
نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
أهلاً بيك. تخيّل نفس الثَّغْرة بالزبط في موقعين. واحد متجر أونلاين فيه كروت العملا، وواحد صفحة wiki داخلية مش متوصلة بالإنترنت. نفس الـ CVSS… بس الخطر مختلف خالص.
الـ CVSS بيقيس الثَّغْرة نفسها. إنما الـ Risk بيقيس الثَّغْرة جوّه البيزنس بتاعك. والمعادلة البسيطة: Risk equals Likelihood times Impact. الـ Likelihood: احتمال إن حد يستغلها فعلاً. والـ Impact: الضرر على الشركة لو حصل.
إيه اللي بيرفع الـ Likelihood؟ الثَّغْرة على الإنترنت مش داخلية. فيه exploit جاهز ومنشور. ومش محتاجة login ولا مهارة عالية. نعمل Risk Matrix بسيطة: جدول بيجمع الـ Likelihood والـ Impact ويطلّع الـ Risk. نشغّل… الـ SQLi على المتجر Critical، والـ XSS على الـ wiki Low.
matrix = {
("High", "High"): "Critical",
("High", "Medium"): "High",
("Medium", "High"): "High",
("Medium", "Medium"): "Medium",
("Low", "High"): "Medium",
("High", "Low"): "Medium",
("Low", "Low"): "Low",
}
findings = [
("SQLi on public shop", "High", "High"),
("XSS on internal wiki", "Low", "Medium"),
("Old Apache version", "Medium", "Medium"),
]
for name, likelihood, impact in findings:
risk = matrix.get((likelihood, impact), "Low")
print(f"{name}: likelihood={likelihood}, impact={impact} -> {risk}")المخرجات
SQLi on public shop: likelihood=High, impact=High -> Critical XSS on internal wiki: likelihood=Low, impact=Medium -> Low Old Apache version: likelihood=Medium, impact=Medium -> Medium
في التقرير، اكتب الاتنين: الـ CVSS، علشان مقياس عالمي. والـ Risk بعد الـ Context، وفسّر ليه رفعته أو نزّلته. دورك: الـ matrix ناقصها حالتين: Low مع Medium، و Medium مع Low. ضيفهم وخلّي الاتنين Low.
ضيف ("Low", "Medium") و ("Medium", "Low") بقيمة Low.
الحل: نشغّل…
matrix = {
("High", "High"): "Critical",
("High", "Medium"): "High",
("Medium", "High"): "High",
("Medium", "Medium"): "Medium",
("Low", "High"): "Medium",
("High", "Low"): "Medium",
("Low", "Low"): "Low",
("Low", "Medium"): "Low",
("Medium", "Low"): "Low",
}
findings = [
("SQLi on public shop", "High", "High"),
("XSS on internal wiki", "Low", "Medium"),
("Old Apache version", "Medium", "Medium"),
]
for name, likelihood, impact in findings:
risk = matrix.get((likelihood, impact), "Low")
print(f"{name}: likelihood={likelihood}, impact={impact} -> {risk}")المخرجات
SQLi on public shop: likelihood=High, impact=High -> Critical XSS on internal wiki: likelihood=Low, impact=Medium -> Low Old Apache version: likelihood=Medium, impact=Medium -> Medium
الدرس الجاي: عندك عشرين Finding… تبدأ بأنهي واحد؟ يلا بينا.
03 / دروس المسار (21)
- 01ليه التقرير أهم حاجة في الـ Pentest
- 02مين بيقرا التقرير؟
- 03نظام Notes من أول دقيقة
- 04Activity Log: كل حاجة بالوقت
- 05خلّي الـ Terminal يسجّل لوحده
- 06الأدلة: إيه اللي يعتبر دليل؟
- 07سلامة الأدلة: Hash و Chain of Custody
- 08إخفاء البيانات الحساسة (Redaction)
- 09خطوات إعادة التنفيد (Steps to Reproduce)
- 10الـ Impact: الخطر الحقيقي على البيزنس
- 11CVSS: الخطورة برقم
- 12الـ Risk Matrix: الاحتمال في الـ Impactانت هنا
- 13ترتيب الأولويات والـ Quick Wins
- 14هيكل تقرير اختبار الاختراق
- 15الـ Executive Summary: صفحة للإدارة
- 16كتابة الـ Finding التقني
- 17توصيات الإصلاح اللي تتنفّد فعلاً
- 18خلّي Python يكتب التقرير
- 19المراجعة قبل التسليم والـ Retest
- 20تقرير امتحان OSCP
- 21المراجعة النهائية: من الـ Note للتقرير