أمان التطبيقات
نمذجة التهديدات
نمذجة التهديدات هي مهارة حاسمة لمهندسي الأمن. يغطي هذا الدرس الأطر والمنهجيات التي ستُسأل عنها في المقابلات.
ما هي نمذجة التهديدات؟
نمذجة التهديدات هي نهج منظم لتحديد وقياس ومعالجة مخاطر الأمان في النظام. تجيب على أربعة أسئلة رئيسية:
- ماذا نبني؟ (رسم النظام)
- ما الذي يمكن أن يحدث خطأ؟ (تحديد التهديدات)
- ماذا سنفعل حيال ذلك؟ (التخفيفات)
- هل قمنا بعمل جيد؟ (التحقق)
إطار STRIDE
إطار STRIDE من Microsoft هو الأكثر شيوعاً في المقابلات:
| التهديد | الوصف | مثال | التخفيف |
|---|---|---|---|
| Spoofing (الانتحال) | انتحال هوية مستخدم/نظام آخر | بيانات اعتماد مسروقة | مصادقة قوية، MFA |
| Tampering (التلاعب) | تعديل البيانات بدون تفويض | Man-in-the-middle | فحوصات السلامة، التوقيع |
| Repudiation (الإنكار) | إنكار حدوث إجراء | "لم أقم بهذا الشراء" | سجلات التدقيق، عدم الإنكار |
| Information Disclosure (كشف المعلومات) | الوصول غير المصرح به للبيانات | اختراق قاعدة البيانات | التشفير، ضوابط الوصول |
| Denial of Service (رفض الخدمة) | جعل النظام غير متاح | هجوم DDoS | تحديد المعدل، التكرار |
| Elevation of Privilege (رفع الصلاحيات) | الحصول على وصول غير مصرح به | تصعيد الصلاحيات | أقل الصلاحيات، العزل |
سؤال المقابلة
س: "كيف ستنمذج تهديدات نظام مصادقة المستخدم؟"
الإجابة باستخدام STRIDE:
- الانتحال: هجمات القوة الغاشمة ← تحديد المعدل، قفل الحساب
- التلاعب: طلبات تسجيل دخول معدلة ← HTTPS، رموز CSRF
- الإنكار: إنكار محاولات تسجيل الدخول ← سجلات تدقيق شاملة
- كشف المعلومات: تسريب كلمات المرور ← تجزئة Argon2id، بدون تلميحات
- رفض الخدمة: إغراق صفحة تسجيل الدخول ← CAPTCHA، تحديد المعدل
- رفع الصلاحيات: وصول المشرف عبر الحقن ← استعلامات معلمة، التحقق من المدخلات
تقييم مخاطر DREAD
DREAD يحدد شدة التهديد (مقياس 1-10):
| العامل | السؤال | المقياس |
|---|---|---|
| Damage (الضرر) | ما مدى سوء التأثير؟ | 1 (أدنى) - 10 (اختراق كامل) |
| Reproducibility (قابلية التكرار) | ما سهولة التكرار؟ | 1 (صعب) - 10 (تافه) |
| Exploitability (قابلية الاستغلال) | ما سهولة الاستغلال؟ | 1 (يتطلب خبرة) - 10 (آلي) |
| Affected Users (المستخدمون المتأثرون) | كم عدد المستخدمين المتأثرين؟ | 1 (مستخدم واحد) - 10 (كل المستخدمين) |
| Discoverability (قابلية الاكتشاف) | ما سهولة الإيجاد؟ | 1 (مخفي) - 10 (واضح) |
درجة المخاطر = (D + R + E + A + D) / 5
مثال الحساب
حقن SQL في نموذج تسجيل الدخول:
- الضرر: 10 (وصول كامل لقاعدة البيانات)
- قابلية التكرار: 9 (استغلال متسق)
- قابلية الاستغلال: 7 (أدوات متاحة)
- المستخدمون المتأثرون: 10 (كل المستخدمين)
- قابلية الاكتشاف: 8 (اختبار شائع)
الدرجة: (10+9+7+10+8)/5 = 8.8 (حرج)
رسوم تدفق البيانات
┌─────────────────────────────────────────────────────────────┐
│ حدود الثقة │
│ ┌─────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ المستخدم│─HTTPS──▶│ API │─TLS────▶│ قاعدة │ │
│ │ المتصفح │◀────────│ الخادم │◀────────│ البيانات │ │
│ └─────────┘ └──────────┘ └──────────────┘ │
│ │ │ │
│ │ │ gRPC │
│ │ ▼ │
│ │ ┌──────────┐ │
│ └─WebSocket───▶│ الذاكرة │ │
│ │ (Redis) │ │
│ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
نقاط التهديد:
1. المتصفح ← API: المصادقة، التحقق من المدخلات
2. API ← قاعدة البيانات: حقن SQL، التحكم في الوصول
3. API ← الذاكرة: اختطاف الجلسة
4. عبور حدود الثقة: كل المدخلات الخارجية غير موثوقة
أشجار الهجوم
تمثيل بصري لمسارات الهجوم:
الهدف: سرقة بيانات اعتماد المستخدم
├── هجوم التصيد
│ ├── إرسال بريد تسجيل دخول مزيف
│ └── استنساخ صفحة تسجيل الدخول
├── حشو بيانات الاعتماد
│ ├── الحصول على قاعدة بيانات الاختراق
│ └── أتمتة محاولات تسجيل الدخول
├── Man-in-the-Middle
│ ├── انتحال ARP على الشبكة
│ └── هجوم تجريد SSL
└── الوصول المباشر لقاعدة البيانات
├── حقن SQL
└── استغلال ثغرة غير مرقعة
تمرين اللوحة البيضاء للمقابلة
المطلوب: "نمذج تهديدات ميزة رفع الملفات"
استجابة منظمة:
-
الأصول: ملفات المستخدم، تخزين الخادم، سلامة التطبيق
-
حدود الثقة: المتصفح ← API ← خدمة التخزين
-
التهديدات (STRIDE):
- الانتحال: الرفع كمستخدم آخر ← فحص المصادقة
- التلاعب: محتوى ملف ضار ← التحقق من المحتوى
- الإنكار: إنكار رفع برامج ضارة ← سجلات التدقيق
- كشف المعلومات: الوصول لملفات مستخدمين آخرين ← فحوصات AuthZ
- رفض الخدمة: رفع ملفات ضخمة ← حدود الحجم، الحصص
- رفع الصلاحيات: تنفيذ الكود المرفوع ← تنظيف اسم الملف، تخزين منفصل
-
التخفيفات الرئيسية:
def secure_upload(file, user_id):
# 1. التحقق من نوع الملف (ليس الامتداد فقط)
if not validate_mime_type(file):
raise InvalidFileError()
# 2. فحص البرامج الضارة
if not virus_scan(file):
raise MalwareDetectedError()
# 3. إنشاء اسم ملف آمن
safe_name = f"{uuid4()}{get_safe_extension(file)}"
# 4. التخزين خارج جذر الويب
path = f"/secure-storage/{user_id}/{safe_name}"
# 5. تسجيل الرفع
audit_log(user_id, "upload", safe_name)
return store_file(file, path)
نصيحة المقابلة: عند طلب نمذجة التهديدات، ارسم رسماً بيانياً أولاً. يُظهر التفكير المنظم ويساعدك على تحديد التهديدات بشكل منهجي في كل مكون واتصال.
في الدرس التالي، سنغطي أنماط أمان API. :::