مقدمة في اختبار اختراق الذكاء الاصطناعي
ديناميكيات الفريق الأحمر مقابل الفريق الأزرق
2 دقيقة للقراءة
يتطلب أمن الذكاء الاصطناعي الفعال التعاون بين المهاجمين (الفريق الأحمر) والمدافعين (الفريق الأزرق). يعزز هذا التعاون العدائي الوضع الأمني العام من خلال دورات التحسين المستمر.
أدوار الفريق
┌─────────────────────────────────────────────────────────────┐
│ هيكل فريق الأمان │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────┐ ┌───────────────┐ │
│ │ الفريق الأحمر │ ضد │ الفريق الأزرق │ │
│ │ (الهجوم) │◄─────────►│ (الدفاع) │ │
│ ├───────────────┤ ├───────────────┤ │
│ │ • إيجاد الثغرات│ │ • إصلاح الثغرات│ │
│ │ • الهجوم │ │ • الكشف │ │
│ │ • الاستغلال │ │ • الاستجابة │ │
│ │ • الإبلاغ │ │ • التقوية │ │
│ └───────────────┘ └───────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────┐ │
│ │ الفريق البنفسجي │ │
│ │ (التعاون) │ │
│ ├───────────────────┤ │
│ │ • مشاركة النتائج │ │
│ │ • تمارين مشتركة │ │
│ │ • تحسين الطرفين │ │
│ └───────────────────┘ │
└─────────────────────────────────────────────────────────────┘
نهج الفريق البنفسجي
يفضل الأمن الحديث "الفريق البنفسجي" - التعاون النشط بين الأحمر والأزرق:
from dataclasses import dataclass, field
from datetime import datetime
from typing import List, Optional
from enum import Enum
class FindingSeverity(Enum):
CRITICAL = "critical" # حرج
HIGH = "high" # عالي
MEDIUM = "medium" # متوسط
LOW = "low" # منخفض
INFO = "informational" # معلوماتي
@dataclass
class SecurityFinding:
"""
اكتشاف مشترك بين الفرق الحمراء والزرقاء.
"""
id: str
title: str
severity: FindingSeverity
description: str
attack_vector: str
affected_systems: List[str]
discovered_at: datetime
discovered_by: str # عضو الفريق الأحمر
# حقول استجابة الفريق الأزرق
remediation_status: str = "open"
remediation_owner: Optional[str] = None
remediation_notes: str = ""
resolved_at: Optional[datetime] = None
def time_to_remediate(self) -> Optional[float]:
"""حساب الساعات من الاكتشاف إلى الحل."""
if self.resolved_at:
delta = self.resolved_at - self.discovered_at
return delta.total_seconds() / 3600
return None
@dataclass
class PurpleTeamSession:
"""
جلسة تعاونية بين الفرق الحمراء والزرقاء.
"""
session_id: str
date: datetime
red_team_members: List[str]
blue_team_members: List[str]
findings_reviewed: List[SecurityFinding] = field(default_factory=list)
action_items: List[str] = field(default_factory=list)
def generate_summary(self) -> dict:
severity_counts = {}
for finding in self.findings_reviewed:
sev = finding.severity.value
severity_counts[sev] = severity_counts.get(sev, 0) + 1
return {
"session_id": self.session_id,
"total_findings": len(self.findings_reviewed),
"by_severity": severity_counts,
"action_items": len(self.action_items),
"participants": len(self.red_team_members) + len(self.blue_team_members)
}
الجدول الزمني للإفصاح المسؤول
| المرحلة | الإطار الزمني | الأنشطة |
|---|---|---|
| الاكتشاف | اليوم 0 | الفريق الأحمر يجد الثغرة |
| التقرير الأولي | اليوم 0-1 | التوثيق وإخطار الفريق الأزرق |
| الفرز | اليوم 1-3 | الفريق الأزرق يقيّم الخطورة |
| المعالجة | اليوم 3-30 | الفريق الأزرق ينفذ الإصلاح |
| التحقق | اليوم 30+ | الفريق الأحمر يؤكد عمل الإصلاح |
إطار الاتصال
from enum import Enum
from typing import List
class CommunicationChannel(Enum):
SECURE_CHAT = "secure_chat" # دردشة آمنة
ENCRYPTED_EMAIL = "encrypted_email" # بريد مشفر
TICKET_SYSTEM = "ticket_system" # نظام التذاكر
EMERGENCY_CALL = "emergency_call" # اتصال طوارئ
@dataclass
class DisclosureProtocol:
"""
كيف يتواصل الفريق الأحمر مع الفريق الأزرق.
"""
channels: List[CommunicationChannel]
encryption_required: bool = True
max_disclosure_delay_hours: int = 24
def select_channel(self, severity: FindingSeverity) -> CommunicationChannel:
"""اختيار القناة المناسبة بناءً على الخطورة."""
if severity == FindingSeverity.CRITICAL:
return CommunicationChannel.EMERGENCY_CALL
elif severity == FindingSeverity.HIGH:
return CommunicationChannel.SECURE_CHAT
else:
return CommunicationChannel.TICKET_SYSTEM
# مثال على البروتوكول
protocol = DisclosureProtocol(
channels=[
CommunicationChannel.EMERGENCY_CALL,
CommunicationChannel.SECURE_CHAT,
CommunicationChannel.TICKET_SYSTEM,
],
encryption_required=True,
max_disclosure_delay_hours=24
)
# اكتشاف حرج - استخدم قناة الطوارئ
finding = SecurityFinding(
id="VULN-2025-001",
title="استخراج محث النظام عبر هجوم متعدد الأدوار",
severity=FindingSeverity.CRITICAL,
description="يمكن استخراج محث النظام الكامل في 5 أدوار",
attack_vector="multi_turn_escalation",
affected_systems=["customer-chatbot"],
discovered_at=datetime.now(),
discovered_by="alice@redteam.com"
)
channel = protocol.select_channel(finding.severity)
print(f"استخدم {channel.value} للاكتشاف {finding.severity.value}")
اختبار الاختراق المستمر
النهج الأكثر فعالية هو المستمر، وليس الاختبار لمرة واحدة:
الأسبوع 1-2: التقييم الأولي
↓
الأسبوع 3-4: الفريق الأزرق يعالج
↓
الأسبوع 5: إعادة اختبار المشاكل المُصلحة
↓
الأسبوع 6+: المراقبة المستمرة
↓
(تكرار الدورة كل ربع سنة)
رؤية أساسية: الفرق الحمراء التي تعمل مع (وليس ضد) الفرق الزرقاء تنتج نتائج أمنية أفضل. الهدف هو تحسين المؤسسة، وليس "الفوز."
في الوحدة التالية، سنُعد بيئة اختبار الاختراق الخاصة بك بأدوات احترافية. :::