المقاييس والتقارير والمعالجة
تسجيل المخاطر وتحديد الأولويات
3 دقيقة للقراءة
لا تتطلب جميع الثغرات اهتماماً فورياً. يساعد نهج تسجيل المخاطر المنهجي المؤسسات على ترتيب أولويات جهود المعالجة بناءً على التأثير الفعلي على الأعمال.
تكييف CVSS لثغرات LLM
يتطلب نظام تسجيل الثغرات الشائع (CVSS) تكييفاً للمخاطر الخاصة بالذكاء الاصطناعي:
| مكون CVSS | تطبيق ويب تقليدي | تطبيق LLM |
|---|---|---|
| متجه الهجوم | شبكة/محلي | واجهة المحث |
| تعقيد الهجوم | مهارة تقنية | صياغة المحث |
| الصلاحيات المطلوبة | المصادقة | الوصول للجلسة |
| تفاعل المستخدم | نقرة مطلوبة | تدفق المحادثة |
| النطاق | حدود النظام | سلوك النموذج |
| السرية | الوصول للبيانات | بيانات التدريب/المحثات |
| النزاهة | تعديل البيانات | التلاعب بالمخرجات |
| التوفر | رفض الخدمة | تدهور الاستجابة |
إطار المخاطر الخاص بـ LLM
أنشئ نظام تسجيل مخصص لثغرات الذكاء الاصطناعي:
from dataclasses import dataclass
from enum import Enum
from typing import List
class ExploitabilityLevel(Enum):
"""ما مدى سهولة استغلال هذه الثغرة؟"""
TRIVIAL = 4 # محث واحد، لا مهارة مطلوبة
EASY = 3 # محاولات قليلة، هندسة محثات أساسية
MODERATE = 2 # متعدد الأدوار، يتطلب فهماً
DIFFICULT = 1 # تقنيات متقدمة، بمساعدة الأدوات
class ImpactLevel(Enum):
"""ما هو التأثير المحتمل على الأعمال؟"""
CRITICAL = 4 # خرق بيانات، انتهاك تنظيمي
HIGH = 3 # ضرر بالسمعة، تكلفة كبيرة
MODERATE = 2 # تعرض محدود للبيانات، قابل للاسترداد
LOW = 1 # إزعاج بسيط، لا فقدان للبيانات
class DetectionDifficulty(Enum):
"""ما مدى صعوبة اكتشاف الاستغلال؟"""
UNDETECTABLE = 4 # لا سجلات، يبدو طبيعياً
DIFFICULT = 3 # يتطلب مراقبة متقدمة
MODERATE = 2 # التسجيل القياسي يلتقطه
EASY = 1 # واضح، تنبيهات فورية
@dataclass
class LLMRiskScore:
"""
حساب درجة المخاطر لثغرات LLM.
نطاق الدرجة: 1-100 (حرجة: 80+، عالية: 60-79، متوسطة: 40-59، منخفضة: <40)
"""
vulnerability_name: str
owasp_category: str
exploitability: ExploitabilityLevel
impact: ImpactLevel
detection_difficulty: DetectionDifficulty
affected_users_percentage: float # 0.0 إلى 1.0
data_sensitivity: str # PII، مالي، صحي، عام
def calculate_base_score(self) -> float:
"""حساب الدرجة التقنية الأساسية."""
exp_weight = 0.3
imp_weight = 0.4
det_weight = 0.3
base = (
(self.exploitability.value * exp_weight) +
(self.impact.value * imp_weight) +
(self.detection_difficulty.value * det_weight)
)
# تطبيع إلى 0-100
return (base / 4) * 100
def calculate_environmental_score(self) -> float:
"""التعديل للعوامل البيئية."""
base = self.calculate_base_score()
# التعديل لتعرض المستخدمين
user_multiplier = 0.5 + (self.affected_users_percentage * 0.5)
# التعديل لحساسية البيانات
sensitivity_multipliers = {
"health": 1.3,
"financial": 1.25,
"PII": 1.2,
"general": 1.0
}
sens_mult = sensitivity_multipliers.get(self.data_sensitivity, 1.0)
return min(100, base * user_multiplier * sens_mult)
def get_severity(self) -> str:
"""الحصول على تصنيف الخطورة من الدرجة."""
score = self.calculate_environmental_score()
if score >= 80:
return "حرجة"
elif score >= 60:
return "عالية"
elif score >= 40:
return "متوسطة"
else:
return "منخفضة"
def get_remediation_timeline(self) -> str:
"""الجدول الزمني المقترح للمعالجة بناءً على الخطورة."""
severity = self.get_severity()
timelines = {
"حرجة": "فوري (24-48 ساعة)",
"عالية": "عاجل (1-2 أسابيع)",
"متوسطة": "مخطط (30-60 يوماً)",
"منخفضة": "قائمة الانتظار (90+ يوماً)"
}
return timelines[severity]
# مثال: تسجيل ثغرة حقن متعدد الأدوار
vuln = LLMRiskScore(
vulnerability_name="حقن المحث متعدد الأدوار",
owasp_category="LLM01",
exploitability=ExploitabilityLevel.EASY,
impact=ImpactLevel.HIGH,
detection_difficulty=DetectionDifficulty.DIFFICULT,
affected_users_percentage=1.0, # جميع المستخدمين
data_sensitivity="PII"
)
print(f"الثغرة: {vuln.vulnerability_name}")
print(f"الدرجة الأساسية: {vuln.calculate_base_score():.1f}")
print(f"الدرجة البيئية: {vuln.calculate_environmental_score():.1f}")
print(f"الخطورة: {vuln.get_severity()}")
print(f"الجدول الزمني للمعالجة: {vuln.get_remediation_timeline()}")
مصفوفة تحديد الأولويات
ادمج درجة المخاطر مع جهد المعالجة:
from dataclasses import dataclass
from typing import List
import json
from pathlib import Path
@dataclass
class RemediationEffort:
"""تقدير الجهد المطلوب لإصلاح الثغرة."""
development_hours: float
testing_hours: float
deployment_complexity: str # منخفض، متوسط، عالي
requires_model_retrain: bool
def total_effort_score(self) -> float:
"""حساب درجة الجهد الإجمالية (أقل = أسهل)."""
base = self.development_hours + self.testing_hours
complexity_mult = {
"low": 1.0,
"medium": 1.5,
"high": 2.0
}
base *= complexity_mult.get(self.deployment_complexity, 1.0)
if self.requires_model_retrain:
base *= 3.0 # إعادة التدريب مكلفة
return base
@dataclass
class PrioritizedVulnerability:
"""دمج المخاطر والجهد لتحديد الأولويات."""
risk_score: LLMRiskScore
effort: RemediationEffort
def priority_score(self) -> float:
"""
درجة أعلى = أولوية أعلى.
الصيغة: المخاطر / الجهد (تعظيم تقليل المخاطر لكل جهد)
"""
risk = self.risk_score.calculate_environmental_score()
effort = self.effort.total_effort_score()
# تجنب القسمة على صفر
return risk / max(effort, 1)
def get_priority_tier(self) -> str:
"""التعيين لمستوى الأولوية."""
score = self.priority_score()
if score > 5:
return "المستوى 1 - فوري"
elif score > 2:
return "المستوى 2 - السبرنت القادم"
elif score > 1:
return "المستوى 3 - قائمة الانتظار"
else:
return "المستوى 4 - قبول المخاطر"
def prioritize_vulnerabilities(
vulns: List[PrioritizedVulnerability]
) -> List[PrioritizedVulnerability]:
"""ترتيب الثغرات حسب درجة الأولوية."""
return sorted(vulns, key=lambda v: v.priority_score(), reverse=True)
# مثال على تحديد الأولويات
vulnerabilities = [
PrioritizedVulnerability(
risk_score=LLMRiskScore(
vulnerability_name="استخراج محث النظام",
owasp_category="LLM01",
exploitability=ExploitabilityLevel.TRIVIAL,
impact=ImpactLevel.MODERATE,
detection_difficulty=DetectionDifficulty.MODERATE,
affected_users_percentage=1.0,
data_sensitivity="general"
),
effort=RemediationEffort(
development_hours=4,
testing_hours=2,
deployment_complexity="low",
requires_model_retrain=False
)
),
PrioritizedVulnerability(
risk_score=LLMRiskScore(
vulnerability_name="استخراج بيانات التدريب",
owasp_category="LLM06",
exploitability=ExploitabilityLevel.DIFFICULT,
impact=ImpactLevel.CRITICAL,
detection_difficulty=DetectionDifficulty.UNDETECTABLE,
affected_users_percentage=0.1,
data_sensitivity="PII"
),
effort=RemediationEffort(
development_hours=80,
testing_hours=40,
deployment_complexity="high",
requires_model_retrain=True
)
)
]
prioritized = prioritize_vulnerabilities(vulnerabilities)
for v in prioritized:
print(f"{v.risk_score.vulnerability_name}:")
print(f" الأولوية: {v.get_priority_tier()}")
print(f" الدرجة: {v.priority_score():.2f}")
إيصال قرارات الأولوية
اعرض تحديد الأولويات على أصحاب المصلحة:
| مستوى الأولوية | الإجراء | تخصيص الموارد |
|---|---|---|
| المستوى 1 - فوري | إيقاف العمل الحالي | فريق مخصص |
| المستوى 2 - السبرنت القادم | التخطيط في السبرنت | تخصيص عادي |
| المستوى 3 - قائمة الانتظار | الجدولة عند توفر القدرة | حسب التوفر |
| المستوى 4 - قبول المخاطر | التوثيق والمراقبة | الحد الأدنى |
رؤية أساسية: الثغرة الأعلى خطورة ليست دائماً الأولى في الإصلاح. وازن بين تقليل المخاطر والجهد لتعظيم عائد الاستثمار الأمني. :::