add the main file structure requirements
هذا الالتزام موجود في:
357
q5-ransomware-response/backup-recovery-strategy.md
Normal file
357
q5-ransomware-response/backup-recovery-strategy.md
Normal file
@@ -0,0 +1,357 @@
|
||||
# استراتيجية النسخ الاحتياطي والاستعادة - Ghaymah Backup & Recovery
|
||||
## مع RPO/RTO وقاعدة 3-2-1
|
||||
|
||||
---
|
||||
|
||||
## 1. فهم RPO و RTO
|
||||
|
||||
### تعريفات أساسية
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ │
|
||||
│ آخر نسخة الحادثة استعادة الخدمة │
|
||||
│ احتياطية ↓ ↓ │
|
||||
│ ↓ ↓ ↓ │
|
||||
│ ─────●───────────────●────────────────────●─────────────→ الوقت │
|
||||
│ │ │ │ │
|
||||
│ │←──── RPO ────→│←────── RTO ───────→│ │
|
||||
│ │ │ │ │
|
||||
│ البيانات التي وقت وقت العودة │
|
||||
│ قد تُفقد الحادثة للعمل │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
| المصطلح | التعريف | مثال |
|
||||
|---------|---------|------|
|
||||
| **RPO** (Recovery Point Objective) | أقصى كمية بيانات يمكن خسارتها | RPO = 1 ساعة → نسخ احتياطي كل ساعة |
|
||||
| **RTO** (Recovery Time Objective) | أقصى وقت للعودة للعمل | RTO = 4 ساعات → يجب استعادة الخدمة خلال 4 ساعات |
|
||||
|
||||
---
|
||||
|
||||
## 2. قاعدة 3-2-1 للنسخ الاحتياطي
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ قاعدة 3-2-1 │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 3️⃣ ثلاث نسخ من البيانات │
|
||||
│ ├── النسخة الأصلية (Production) │
|
||||
│ ├── النسخة الاحتياطية الأولى (Local Backup) │
|
||||
│ └── النسخة الاحتياطية الثانية (Remote Backup) │
|
||||
│ │
|
||||
│ 2️⃣ نوعان مختلفان من وسائط التخزين │
|
||||
│ ├── Block Storage (SSD) │
|
||||
│ └── Object Storage (S3-compatible) │
|
||||
│ │
|
||||
│ 1️⃣ نسخة واحدة على الأقل خارج الموقع (Offsite) │
|
||||
│ └── منطقة جغرافية مختلفة أو مزود سحابي آخر │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. تطبيق الاستراتيجية على غيمة
|
||||
|
||||
### البنية المقترحة
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ غيمة Cloud │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────────┐ │
|
||||
│ │ Production │ ← النسخة الأصلية (1) │
|
||||
│ │ Block Storage │ │
|
||||
│ │ (me-riyadh-1) │ │
|
||||
│ └────────┬────────┘ │
|
||||
│ │ │
|
||||
│ │ نسخ كل ساعة │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────┐ │
|
||||
│ │ Local Backup │ ← النسخة الاحتياطية (2) - وسيط مختلف │
|
||||
│ │ Object Storage │ │
|
||||
│ │ (me-riyadh-1) │ │
|
||||
│ └────────┬────────┘ │
|
||||
│ │ │
|
||||
│ │ نسخ يومي │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────┐ │
|
||||
│ │ Offsite Backup │ ← النسخة الخارجية (3) - موقع مختلف │
|
||||
│ │ Object Storage │ │
|
||||
│ │ (me-jeddah-1) │ │
|
||||
│ └─────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### تكوين النسخ الاحتياطي
|
||||
|
||||
```yaml
|
||||
# backup-config.yaml
|
||||
backup_strategy:
|
||||
name: "3-2-1 Backup Strategy"
|
||||
|
||||
# النسخة الأصلية
|
||||
production:
|
||||
type: block-storage
|
||||
location: me-riyadh-1
|
||||
volume: prod-data
|
||||
|
||||
# النسخة الاحتياطية المحلية
|
||||
local_backup:
|
||||
type: object-storage
|
||||
location: me-riyadh-1
|
||||
bucket: backups-local
|
||||
schedule:
|
||||
frequency: hourly
|
||||
retention: 72 # 72 ساعة = 3 أيام
|
||||
encryption: AES-256
|
||||
|
||||
# النسخة الخارجية
|
||||
offsite_backup:
|
||||
type: object-storage
|
||||
location: me-jeddah-1 # منطقة مختلفة
|
||||
bucket: backups-offsite
|
||||
schedule:
|
||||
frequency: daily
|
||||
time: "02:00"
|
||||
retention: 30 # 30 يوم
|
||||
encryption: AES-256
|
||||
|
||||
# أهداف الاستعادة
|
||||
objectives:
|
||||
rpo: 1h # أقصى خسارة = ساعة واحدة
|
||||
rto: 4h # أقصى وقت استعادة = 4 ساعات
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. تنفيذ النسخ الاحتياطي على غيمة
|
||||
|
||||
### أ. إنشاء Buckets للنسخ الاحتياطي
|
||||
|
||||
```bash
|
||||
# إنشاء bucket محلي
|
||||
ghaymah storage bucket create backups-local \
|
||||
--region me-riyadh-1 \
|
||||
--encryption AES-256 \
|
||||
--versioning enabled
|
||||
|
||||
# إنشاء bucket خارجي
|
||||
ghaymah storage bucket create backups-offsite \
|
||||
--region me-jeddah-1 \
|
||||
--encryption AES-256 \
|
||||
--versioning enabled
|
||||
```
|
||||
|
||||
### ب. إعداد جدول النسخ الاحتياطي
|
||||
|
||||
```bash
|
||||
# نسخ احتياطي كل ساعة (محلي)
|
||||
ghaymah backup schedule create \
|
||||
--name hourly-local \
|
||||
--source prod-data \
|
||||
--destination backups-local \
|
||||
--frequency hourly \
|
||||
--retention 72h
|
||||
|
||||
# نسخ احتياطي يومي (خارجي)
|
||||
ghaymah backup schedule create \
|
||||
--name daily-offsite \
|
||||
--source prod-data \
|
||||
--destination backups-offsite \
|
||||
--frequency daily \
|
||||
--time "02:00" \
|
||||
--retention 30d
|
||||
```
|
||||
|
||||
### ج. سكربت النسخ الاحتياطي
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# backup-script.sh - سكربت النسخ الاحتياطي التلقائي
|
||||
|
||||
set -e
|
||||
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
SOURCE_VOLUME="prod-data"
|
||||
LOCAL_BUCKET="backups-local"
|
||||
OFFSITE_BUCKET="backups-offsite"
|
||||
|
||||
echo "[$TIMESTAMP] بدء النسخ الاحتياطي..."
|
||||
|
||||
# 1. إنشاء snapshot من Block Storage
|
||||
echo "إنشاء snapshot..."
|
||||
SNAPSHOT_ID=$(ghaymah storage snapshot create \
|
||||
--volume $SOURCE_VOLUME \
|
||||
--name "backup-$TIMESTAMP" \
|
||||
--output json | jq -r '.id')
|
||||
|
||||
echo "تم إنشاء snapshot: $SNAPSHOT_ID"
|
||||
|
||||
# 2. نسخ إلى Object Storage المحلي
|
||||
echo "نسخ إلى التخزين المحلي..."
|
||||
ghaymah storage copy \
|
||||
--source "snapshot:$SNAPSHOT_ID" \
|
||||
--destination "s3://$LOCAL_BUCKET/backup-$TIMESTAMP.tar.gz" \
|
||||
--compress \
|
||||
--encrypt
|
||||
|
||||
# 3. نسخ إلى Object Storage الخارجي (يومياً فقط)
|
||||
HOUR=$(date +%H)
|
||||
if [ "$HOUR" == "02" ]; then
|
||||
echo "نسخ إلى التخزين الخارجي..."
|
||||
ghaymah storage copy \
|
||||
--source "s3://$LOCAL_BUCKET/backup-$TIMESTAMP.tar.gz" \
|
||||
--destination "s3://$OFFSITE_BUCKET/backup-$TIMESTAMP.tar.gz"
|
||||
fi
|
||||
|
||||
# 4. تنظيف النسخ القديمة
|
||||
echo "تنظيف النسخ القديمة..."
|
||||
ghaymah backup cleanup \
|
||||
--bucket $LOCAL_BUCKET \
|
||||
--older-than 72h
|
||||
|
||||
ghaymah backup cleanup \
|
||||
--bucket $OFFSITE_BUCKET \
|
||||
--older-than 30d
|
||||
|
||||
# 5. التحقق من النسخة
|
||||
echo "التحقق من سلامة النسخة..."
|
||||
ghaymah backup verify \
|
||||
--backup "s3://$LOCAL_BUCKET/backup-$TIMESTAMP.tar.gz"
|
||||
|
||||
echo "[$TIMESTAMP] اكتمل النسخ الاحتياطي بنجاح ✓"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. إجراءات الاستعادة
|
||||
|
||||
### سيناريو: استعادة بعد Ransomware
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# restore-script.sh - سكربت الاستعادة
|
||||
|
||||
echo "🔄 بدء عملية الاستعادة..."
|
||||
|
||||
# 1. تحديد آخر نسخة سليمة
|
||||
echo "البحث عن آخر نسخة سليمة..."
|
||||
LATEST_BACKUP=$(ghaymah backup list \
|
||||
--bucket backups-local \
|
||||
--status verified \
|
||||
--limit 1 \
|
||||
--output json | jq -r '.[0].name')
|
||||
|
||||
echo "آخر نسخة سليمة: $LATEST_BACKUP"
|
||||
|
||||
# 2. إنشاء volume جديد للاستعادة
|
||||
echo "إنشاء volume جديد..."
|
||||
ghaymah storage volume create \
|
||||
--name restored-data \
|
||||
--size 100GB \
|
||||
--type ssd
|
||||
|
||||
# 3. استعادة البيانات
|
||||
echo "استعادة البيانات..."
|
||||
ghaymah backup restore \
|
||||
--source "s3://backups-local/$LATEST_BACKUP" \
|
||||
--destination restored-data \
|
||||
--verify
|
||||
|
||||
# 4. التحقق من البيانات
|
||||
echo "التحقق من البيانات المستعادة..."
|
||||
ghaymah storage verify --volume restored-data
|
||||
|
||||
# 5. تبديل الـ volumes
|
||||
echo "تبديل إلى البيانات المستعادة..."
|
||||
ghaymah storage swap \
|
||||
--old prod-data \
|
||||
--new restored-data
|
||||
|
||||
echo "✅ اكتملت الاستعادة بنجاح!"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. جدول RPO/RTO حسب نوع البيانات
|
||||
|
||||
| نوع البيانات | RPO | RTO | تكرار النسخ | الاحتفاظ |
|
||||
|--------------|-----|-----|-------------|----------|
|
||||
| **قواعد البيانات** | 15 دقيقة | 1 ساعة | كل 15 دقيقة | 7 أيام |
|
||||
| **ملفات التطبيق** | 1 ساعة | 2 ساعة | كل ساعة | 30 يوم |
|
||||
| **سجلات النظام** | 4 ساعات | 8 ساعات | كل 4 ساعات | 90 يوم |
|
||||
| **الأرشيف** | 24 ساعة | 24 ساعة | يومي | سنة |
|
||||
|
||||
---
|
||||
|
||||
## 7. اختبار الاستعادة الدوري
|
||||
|
||||
### جدول الاختبار
|
||||
|
||||
| الاختبار | التكرار | المسؤول |
|
||||
|----------|---------|---------|
|
||||
| استعادة ملف واحد | أسبوعي | DevOps |
|
||||
| استعادة قاعدة بيانات | شهري | DBA |
|
||||
| استعادة كاملة (DR) | ربع سنوي | فريق الأمن |
|
||||
|
||||
### سكربت اختبار الاستعادة
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# test-restore.sh - اختبار الاستعادة
|
||||
|
||||
echo "🧪 بدء اختبار الاستعادة..."
|
||||
|
||||
# إنشاء بيئة اختبار
|
||||
ghaymah project create restore-test --temporary
|
||||
|
||||
# استعادة من آخر نسخة
|
||||
ghaymah backup restore \
|
||||
--source backups-local/latest \
|
||||
--destination restore-test \
|
||||
--verify
|
||||
|
||||
# اختبار البيانات
|
||||
ghaymah test run \
|
||||
--project restore-test \
|
||||
--suite data-integrity
|
||||
|
||||
# تنظيف
|
||||
ghaymah project delete restore-test --force
|
||||
|
||||
echo "✅ اختبار الاستعادة ناجح!"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. ملخص الاستراتيجية
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ ملخص استراتيجية 3-2-1 │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 📦 3 نسخ: │
|
||||
│ • Production (Block Storage - Riyadh) │
|
||||
│ • Local Backup (Object Storage - Riyadh) │
|
||||
│ • Offsite Backup (Object Storage - Jeddah) │
|
||||
│ │
|
||||
│ 💾 2 وسيط: │
|
||||
│ • Block Storage (SSD) │
|
||||
│ • Object Storage (S3) │
|
||||
│ │
|
||||
│ 🌍 1 خارج الموقع: │
|
||||
│ • منطقة جدة (me-jeddah-1) │
|
||||
│ │
|
||||
│ ⏱️ الأهداف: │
|
||||
│ • RPO: 1 ساعة (أقصى خسارة بيانات) │
|
||||
│ • RTO: 4 ساعات (أقصى وقت توقف) │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
189
q5-ransomware-response/emergency-plan.md
Normal file
189
q5-ransomware-response/emergency-plan.md
Normal file
@@ -0,0 +1,189 @@
|
||||
# خطة طوارئ لحادثة Ransomware
|
||||
## السيناريو: جميع ملفات Block Storage على غيمة تم تشفيرها برسالة فدية
|
||||
|
||||
---
|
||||
|
||||
## ⏱️ أول 60 دقيقة - خطة الاستجابة الطارئة
|
||||
|
||||
### الدقائق 0-5: الاكتشاف والتأكيد
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 🚨 تأكيد الحادثة │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ □ التحقق من رسالة الفدية │
|
||||
│ □ تحديد نطاق التشفير (أي volumes متأثرة؟) │
|
||||
│ □ توثيق الوقت الدقيق للاكتشاف │
|
||||
│ □ أخذ screenshots للأدلة │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**الإجراءات:**
|
||||
1. **لا تدفع الفدية** - لا ضمان لاسترجاع البيانات
|
||||
2. **لا تحذف رسالة الفدية** - قد تحتوي على معلومات مفيدة
|
||||
3. **وثّق كل شيء** - screenshots، أوقات، ملاحظات
|
||||
|
||||
### الدقائق 5-15: العزل الفوري
|
||||
|
||||
```bash
|
||||
# 1. فصل الأنظمة المتأثرة عن الشبكة
|
||||
# من لوحة تحكم غيمة:
|
||||
ghaymah network isolate --project affected-project
|
||||
|
||||
# 2. إيقاف جميع الحاويات المتأثرة
|
||||
ghaymah containers stop --all --project affected-project
|
||||
|
||||
# 3. منع الوصول الخارجي
|
||||
ghaymah firewall deny --all-inbound --project affected-project
|
||||
```
|
||||
|
||||
**قائمة العزل:**
|
||||
- [ ] فصل Block Storage المتأثر
|
||||
- [ ] إيقاف التطبيقات المتصلة
|
||||
- [ ] حظر جميع الاتصالات الواردة
|
||||
- [ ] تعطيل حسابات المستخدمين المشبوهة
|
||||
- [ ] فصل أي أنظمة متصلة بنفس الشبكة
|
||||
|
||||
### الدقائق 15-30: تقييم الضرر
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 📊 تقييم النطاق │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ الأسئلة المطلوب الإجابة عليها: │
|
||||
│ │
|
||||
│ 1. ما هي الـ Volumes المتأثرة؟ │
|
||||
│ □ Block Storage الرئيسي │
|
||||
│ □ قواعد البيانات │
|
||||
│ □ النسخ الاحتياطية │
|
||||
│ │
|
||||
│ 2. هل النسخ الاحتياطية سليمة؟ │
|
||||
│ □ فحص آخر نسخة احتياطية │
|
||||
│ □ التحقق من عدم تشفيرها │
|
||||
│ │
|
||||
│ 3. كيف دخل المهاجم؟ │
|
||||
│ □ مراجعة سجلات الدخول │
|
||||
│ □ فحص الثغرات المحتملة │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**أوامر الفحص:**
|
||||
```bash
|
||||
# فحص حالة الـ Volumes
|
||||
ghaymah storage list --status
|
||||
|
||||
# فحص النسخ الاحتياطية
|
||||
ghaymah backup list --project affected-project
|
||||
|
||||
# مراجعة سجلات الدخول
|
||||
ghaymah logs auth --since "24h" --project affected-project
|
||||
```
|
||||
|
||||
### الدقائق 30-45: التواصل والإبلاغ
|
||||
|
||||
**جهات الاتصال الفورية:**
|
||||
|
||||
| الجهة | الإجراء | الأولوية |
|
||||
|-------|---------|----------|
|
||||
| فريق الأمن الداخلي | إبلاغ فوري | 🔴 حرج |
|
||||
| دعم غيمة | فتح تذكرة طوارئ | 🔴 حرج |
|
||||
| الإدارة العليا | إبلاغ مختصر | 🟡 عالي |
|
||||
| الفريق القانوني | استشارة | 🟡 عالي |
|
||||
| الجهات الرقابية | إبلاغ (إذا مطلوب قانونياً) | 🟡 عالي |
|
||||
|
||||
**نموذج الإبلاغ:**
|
||||
```
|
||||
الموضوع: [طوارئ] حادثة Ransomware - [اسم المشروع]
|
||||
|
||||
الوقت: [التاريخ والوقت]
|
||||
النطاق: [الأنظمة المتأثرة]
|
||||
الحالة: [قيد الاحتواء]
|
||||
|
||||
الإجراءات المتخذة:
|
||||
1. عزل الأنظمة المتأثرة
|
||||
2. إيقاف الخدمات
|
||||
3. بدء التحقيق
|
||||
|
||||
الخطوات التالية:
|
||||
1. تقييم النسخ الاحتياطية
|
||||
2. تحديد نقطة الدخول
|
||||
3. بدء الاستعادة
|
||||
```
|
||||
|
||||
### الدقائق 45-60: بدء الاستعادة
|
||||
|
||||
```bash
|
||||
# 1. التحقق من سلامة النسخ الاحتياطية
|
||||
ghaymah backup verify --latest --project affected-project
|
||||
|
||||
# 2. إنشاء بيئة استعادة معزولة
|
||||
ghaymah project create recovery-environment --isolated
|
||||
|
||||
# 3. استعادة من آخر نسخة سليمة
|
||||
ghaymah backup restore \
|
||||
--backup-id [BACKUP_ID] \
|
||||
--to recovery-environment \
|
||||
--verify
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 قائمة التحقق الشاملة (أول 60 دقيقة)
|
||||
|
||||
### المرحلة 1: الاكتشاف (0-5 دقائق)
|
||||
- [ ] تأكيد أن الحادثة حقيقية وليست إنذار كاذب
|
||||
- [ ] توثيق رسالة الفدية (screenshot)
|
||||
- [ ] تسجيل الوقت الدقيق
|
||||
- [ ] إبلاغ قائد الاستجابة للحوادث
|
||||
|
||||
### المرحلة 2: العزل (5-15 دقيقة)
|
||||
- [ ] فصل الأنظمة المتأثرة عن الشبكة
|
||||
- [ ] إيقاف جميع الحاويات والخدمات
|
||||
- [ ] حظر الاتصالات الخارجية
|
||||
- [ ] تعطيل الحسابات المشبوهة
|
||||
- [ ] فصل VPN/API connections
|
||||
|
||||
### المرحلة 3: التقييم (15-30 دقيقة)
|
||||
- [ ] تحديد جميع الـ Volumes المتأثرة
|
||||
- [ ] فحص حالة النسخ الاحتياطية
|
||||
- [ ] مراجعة سجلات الدخول
|
||||
- [ ] تحديد نقطة الدخول المحتملة
|
||||
- [ ] تقدير حجم البيانات المتأثرة
|
||||
|
||||
### المرحلة 4: التواصل (30-45 دقيقة)
|
||||
- [ ] إبلاغ فريق الأمن
|
||||
- [ ] فتح تذكرة طوارئ مع غيمة
|
||||
- [ ] إبلاغ الإدارة
|
||||
- [ ] استشارة الفريق القانوني
|
||||
- [ ] تحضير بيان للعملاء (إذا لزم)
|
||||
|
||||
### المرحلة 5: الاستعادة (45-60 دقيقة)
|
||||
- [ ] التحقق من سلامة النسخ الاحتياطية
|
||||
- [ ] إنشاء بيئة استعادة معزولة
|
||||
- [ ] بدء استعادة البيانات الحرجة
|
||||
- [ ] اختبار البيانات المستعادة
|
||||
- [ ] توثيق جميع الإجراءات
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ ما يجب تجنبه
|
||||
|
||||
| ❌ لا تفعل | ✅ افعل بدلاً |
|
||||
|-----------|--------------|
|
||||
| دفع الفدية | استخدم النسخ الاحتياطية |
|
||||
| حذف الملفات المشفرة | احتفظ بها للتحليل |
|
||||
| إعادة تشغيل الأنظمة | اعزلها أولاً |
|
||||
| تجاهل الحادثة | وثّق كل شيء |
|
||||
| العمل بمفردك | أشرك الفريق |
|
||||
|
||||
---
|
||||
|
||||
## 📞 أرقام الطوارئ
|
||||
|
||||
```
|
||||
دعم غيمة (طوارئ): support@ghaymah.systems
|
||||
فريق الأمن الداخلي: [رقم الهاتف]
|
||||
قائد الاستجابة للحوادث: [رقم الهاتف]
|
||||
```
|
||||
558
q5-ransomware-response/prevention-plan.md
Normal file
558
q5-ransomware-response/prevention-plan.md
Normal file
@@ -0,0 +1,558 @@
|
||||
# خطة وقاية شاملة لمنع تكرار هجوم Ransomware
|
||||
|
||||
---
|
||||
|
||||
## 1. نظرة عامة
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ طبقات الحماية من Ransomware │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ طبقة 1: الوقاية │ │
|
||||
│ │ (منع الدخول - Access Prevention) │ │
|
||||
│ └─────────────────────────────────────────────────────────────┘ │
|
||||
│ ↓ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ طبقة 2: الكشف │ │
|
||||
│ │ (اكتشاف مبكر - Early Detection) │ │
|
||||
│ └─────────────────────────────────────────────────────────────┘ │
|
||||
│ ↓ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ طبقة 3: الاحتواء │ │
|
||||
│ │ (تقليل الضرر - Damage Limitation) │ │
|
||||
│ └─────────────────────────────────────────────────────────────┘ │
|
||||
│ ↓ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ طبقة 4: الاستعادة │ │
|
||||
│ │ (العودة للعمل - Recovery) │ │
|
||||
│ └─────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. طبقة الوقاية (Prevention)
|
||||
|
||||
### أ. إدارة الهوية والوصول (IAM)
|
||||
|
||||
```yaml
|
||||
# سياسة IAM صارمة
|
||||
iam_policy:
|
||||
# مبدأ أقل صلاحية
|
||||
principle: least_privilege
|
||||
|
||||
# المصادقة متعددة العوامل
|
||||
mfa:
|
||||
required: true
|
||||
methods:
|
||||
- authenticator_app
|
||||
- hardware_key
|
||||
enforce_for:
|
||||
- all_admin_accounts
|
||||
- api_access
|
||||
- ssh_access
|
||||
|
||||
# سياسة كلمات المرور
|
||||
password_policy:
|
||||
min_length: 14
|
||||
require_uppercase: true
|
||||
require_lowercase: true
|
||||
require_numbers: true
|
||||
require_symbols: true
|
||||
max_age_days: 90
|
||||
prevent_reuse: 12
|
||||
|
||||
# مراجعة الصلاحيات
|
||||
access_review:
|
||||
frequency: monthly
|
||||
auto_revoke_inactive: 30d
|
||||
```
|
||||
|
||||
**التنفيذ على غيمة:**
|
||||
```bash
|
||||
# تفعيل MFA لجميع المستخدمين
|
||||
ghaymah iam policy update \
|
||||
--require-mfa true \
|
||||
--apply-to all-users
|
||||
|
||||
# إنشاء أدوار محددة
|
||||
ghaymah iam role create \
|
||||
--name developer \
|
||||
--permissions "read:code,write:code,read:logs" \
|
||||
--deny "admin:*,delete:*"
|
||||
|
||||
ghaymah iam role create \
|
||||
--name operator \
|
||||
--permissions "read:*,restart:services" \
|
||||
--deny "delete:*,modify:iam"
|
||||
```
|
||||
|
||||
### ب. أمان الشبكة
|
||||
|
||||
```yaml
|
||||
# Network Security Configuration
|
||||
network_security:
|
||||
# جدار الحماية
|
||||
firewall:
|
||||
default_policy: deny
|
||||
allowed_inbound:
|
||||
- port: 443
|
||||
source: "0.0.0.0/0"
|
||||
protocol: tcp
|
||||
- port: 22
|
||||
source: "10.0.0.0/8" # VPN فقط
|
||||
protocol: tcp
|
||||
|
||||
# تقسيم الشبكة
|
||||
segmentation:
|
||||
- name: production
|
||||
cidr: "10.1.0.0/16"
|
||||
access: restricted
|
||||
- name: backup
|
||||
cidr: "10.2.0.0/16"
|
||||
access: isolated # معزولة تماماً
|
||||
- name: management
|
||||
cidr: "10.3.0.0/16"
|
||||
access: admin_only
|
||||
|
||||
# VPN إجباري للإدارة
|
||||
vpn:
|
||||
required_for: admin_access
|
||||
type: wireguard
|
||||
mfa: required
|
||||
```
|
||||
|
||||
**Network Policies:**
|
||||
```yaml
|
||||
# kubernetes network policy
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: isolate-backup-storage
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels:
|
||||
app: backup-storage
|
||||
policyTypes:
|
||||
- Ingress
|
||||
- Egress
|
||||
ingress:
|
||||
- from:
|
||||
- podSelector:
|
||||
matchLabels:
|
||||
role: backup-agent
|
||||
ports:
|
||||
- port: 443
|
||||
egress: [] # لا اتصال خارجي
|
||||
```
|
||||
|
||||
### ج. أمان النقاط الطرفية (Endpoint Security)
|
||||
|
||||
```yaml
|
||||
endpoint_security:
|
||||
# مكافح الفيروسات
|
||||
antivirus:
|
||||
enabled: true
|
||||
real_time_scan: true
|
||||
scheduled_scan: daily
|
||||
|
||||
# كشف التهديدات
|
||||
edr:
|
||||
enabled: true
|
||||
behavioral_analysis: true
|
||||
ransomware_protection: true
|
||||
|
||||
# التحديثات التلقائية
|
||||
patching:
|
||||
auto_update: true
|
||||
critical_patches: immediate
|
||||
regular_patches: weekly
|
||||
reboot_window: "02:00-04:00"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. طبقة الكشف (Detection)
|
||||
|
||||
### أ. نظام SIEM والمراقبة
|
||||
|
||||
```yaml
|
||||
# تكوين المراقبة
|
||||
monitoring:
|
||||
# مصادر السجلات
|
||||
log_sources:
|
||||
- nginx_access
|
||||
- nginx_error
|
||||
- auth_logs
|
||||
- app_logs
|
||||
- system_logs
|
||||
- audit_logs
|
||||
|
||||
# قواعد الكشف
|
||||
detection_rules:
|
||||
- name: mass_file_encryption
|
||||
description: كشف تشفير ملفات جماعي
|
||||
condition: |
|
||||
file_operations.encrypt > 100
|
||||
AND time_window < 5m
|
||||
severity: critical
|
||||
action: alert_and_isolate
|
||||
|
||||
- name: suspicious_process
|
||||
description: عملية مشبوهة
|
||||
condition: |
|
||||
process.name IN ['vssadmin', 'wmic', 'bcdedit']
|
||||
OR process.command CONTAINS 'shadow'
|
||||
severity: high
|
||||
action: alert
|
||||
|
||||
- name: unusual_network_activity
|
||||
description: نشاط شبكة غير طبيعي
|
||||
condition: |
|
||||
outbound_connections > baseline * 3
|
||||
OR connection_to_tor = true
|
||||
severity: high
|
||||
action: alert
|
||||
```
|
||||
|
||||
### ب. تنبيهات Prometheus
|
||||
|
||||
```yaml
|
||||
# prometheus-alerts.yaml
|
||||
groups:
|
||||
- name: ransomware_detection
|
||||
rules:
|
||||
- alert: MassFileModification
|
||||
expr: |
|
||||
rate(file_modifications_total[5m]) > 1000
|
||||
for: 1m
|
||||
labels:
|
||||
severity: critical
|
||||
annotations:
|
||||
summary: "🚨 كشف تعديل ملفات جماعي"
|
||||
description: "أكثر من 1000 ملف تم تعديله في 5 دقائق"
|
||||
action: "عزل النظام فوراً"
|
||||
|
||||
- alert: SuspiciousFileExtension
|
||||
expr: |
|
||||
increase(files_with_extension{ext=~".*encrypted.*|.*locked.*|.*crypto.*"}[5m]) > 10
|
||||
for: 0m
|
||||
labels:
|
||||
severity: critical
|
||||
annotations:
|
||||
summary: "🔒 كشف امتدادات ملفات مشبوهة"
|
||||
description: "ملفات بامتدادات ransomware معروفة"
|
||||
|
||||
- alert: BackupDeletionAttempt
|
||||
expr: |
|
||||
backup_deletion_attempts > 0
|
||||
for: 0m
|
||||
labels:
|
||||
severity: critical
|
||||
annotations:
|
||||
summary: "⚠️ محاولة حذف النسخ الاحتياطية"
|
||||
description: "كشف محاولة حذف النسخ الاحتياطية"
|
||||
```
|
||||
|
||||
### ج. File Integrity Monitoring (FIM)
|
||||
|
||||
```yaml
|
||||
# تكوين مراقبة سلامة الملفات
|
||||
fim_config:
|
||||
monitored_paths:
|
||||
- path: /etc
|
||||
recursive: true
|
||||
alert_on: [create, modify, delete]
|
||||
- path: /var/www
|
||||
recursive: true
|
||||
alert_on: [modify, delete]
|
||||
- path: /home
|
||||
recursive: true
|
||||
alert_on: [mass_modify] # أكثر من 100 ملف
|
||||
|
||||
baseline:
|
||||
update_frequency: daily
|
||||
time: "03:00"
|
||||
|
||||
exclusions:
|
||||
- "*.log"
|
||||
- "*.tmp"
|
||||
- "/var/cache/*"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. طبقة الاحتواء (Containment)
|
||||
|
||||
### أ. العزل التلقائي
|
||||
|
||||
```python
|
||||
# auto_isolate.py - سكربت العزل التلقائي
|
||||
|
||||
import subprocess
|
||||
import requests
|
||||
from datetime import datetime
|
||||
|
||||
def isolate_system(reason: str):
|
||||
"""عزل النظام تلقائياً عند كشف تهديد"""
|
||||
|
||||
timestamp = datetime.now().isoformat()
|
||||
|
||||
# 1. قطع الاتصال بالشبكة
|
||||
subprocess.run([
|
||||
"ghaymah", "network", "isolate",
|
||||
"--project", "production",
|
||||
"--reason", reason
|
||||
])
|
||||
|
||||
# 2. إيقاف الخدمات غير الحرجة
|
||||
subprocess.run([
|
||||
"ghaymah", "services", "stop",
|
||||
"--exclude", "backup,monitoring",
|
||||
"--project", "production"
|
||||
])
|
||||
|
||||
# 3. تفعيل وضع القراءة فقط للتخزين
|
||||
subprocess.run([
|
||||
"ghaymah", "storage", "readonly",
|
||||
"--volume", "prod-data",
|
||||
"--enable"
|
||||
])
|
||||
|
||||
# 4. إرسال تنبيه
|
||||
send_alert({
|
||||
"type": "system_isolated",
|
||||
"reason": reason,
|
||||
"timestamp": timestamp,
|
||||
"severity": "critical"
|
||||
})
|
||||
|
||||
# 5. بدء النسخ الاحتياطي الطارئ
|
||||
subprocess.run([
|
||||
"ghaymah", "backup", "create",
|
||||
"--emergency",
|
||||
"--source", "prod-data",
|
||||
"--destination", "emergency-backups"
|
||||
])
|
||||
|
||||
def send_alert(alert: dict):
|
||||
"""إرسال تنبيه للفريق"""
|
||||
webhook_url = os.environ.get("ALERT_WEBHOOK")
|
||||
requests.post(webhook_url, json=alert)
|
||||
```
|
||||
|
||||
### ب. Immutable Backups (نسخ احتياطية غير قابلة للتعديل)
|
||||
|
||||
```yaml
|
||||
# تكوين النسخ الاحتياطية غير القابلة للتعديل
|
||||
immutable_backup:
|
||||
enabled: true
|
||||
|
||||
# فترة عدم القابلية للتعديل
|
||||
retention_lock:
|
||||
min_days: 7
|
||||
max_days: 365
|
||||
|
||||
# حماية من الحذف
|
||||
deletion_protection:
|
||||
enabled: true
|
||||
require_mfa: true
|
||||
require_approval: 2 # موافقة شخصين
|
||||
cooling_period: 72h # فترة انتظار قبل الحذف
|
||||
|
||||
# التشفير
|
||||
encryption:
|
||||
algorithm: AES-256-GCM
|
||||
key_management: customer_managed
|
||||
key_rotation: 90d
|
||||
```
|
||||
|
||||
**التنفيذ:**
|
||||
```bash
|
||||
# إنشاء bucket مع حماية WORM
|
||||
ghaymah storage bucket create secure-backups \
|
||||
--worm-enabled \
|
||||
--retention-days 30 \
|
||||
--deletion-protection \
|
||||
--require-mfa-delete
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. طبقة الاستعادة (Recovery)
|
||||
|
||||
### أ. خطة استمرارية الأعمال
|
||||
|
||||
```yaml
|
||||
business_continuity:
|
||||
# أولوية الاستعادة
|
||||
recovery_priority:
|
||||
tier_1: # أول 4 ساعات
|
||||
- name: "قاعدة البيانات الرئيسية"
|
||||
rto: 1h
|
||||
- name: "API الأساسي"
|
||||
rto: 2h
|
||||
|
||||
tier_2: # 4-8 ساعات
|
||||
- name: "واجهة المستخدم"
|
||||
rto: 4h
|
||||
- name: "خدمات الدفع"
|
||||
rto: 4h
|
||||
|
||||
tier_3: # 8-24 ساعة
|
||||
- name: "التقارير"
|
||||
rto: 12h
|
||||
- name: "الأرشيف"
|
||||
rto: 24h
|
||||
|
||||
# موقع الاستعادة البديل
|
||||
dr_site:
|
||||
location: me-jeddah-1
|
||||
sync_frequency: hourly
|
||||
failover_time: 30m
|
||||
```
|
||||
|
||||
### ب. Runbook الاستعادة
|
||||
|
||||
```markdown
|
||||
## Runbook: استعادة من Ransomware
|
||||
|
||||
### المتطلبات المسبقة
|
||||
- [ ] تأكيد عزل الأنظمة المتأثرة
|
||||
- [ ] تحديد آخر نسخة احتياطية سليمة
|
||||
- [ ] تجهيز بيئة الاستعادة
|
||||
|
||||
### خطوات الاستعادة
|
||||
|
||||
1. **إنشاء بيئة نظيفة**
|
||||
```bash
|
||||
ghaymah project create recovery-env --from-template secure-base
|
||||
```
|
||||
|
||||
2. **استعادة قاعدة البيانات**
|
||||
```bash
|
||||
ghaymah backup restore \
|
||||
--source secure-backups/db-latest \
|
||||
--destination recovery-env/database \
|
||||
--verify
|
||||
```
|
||||
|
||||
3. **استعادة الملفات**
|
||||
```bash
|
||||
ghaymah backup restore \
|
||||
--source secure-backups/files-latest \
|
||||
--destination recovery-env/storage \
|
||||
--verify
|
||||
```
|
||||
|
||||
4. **اختبار الخدمات**
|
||||
```bash
|
||||
ghaymah test run --suite smoke-test --project recovery-env
|
||||
```
|
||||
|
||||
5. **تبديل DNS**
|
||||
```bash
|
||||
ghaymah dns update \
|
||||
--domain app.example.com \
|
||||
--target recovery-env
|
||||
```
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. التدريب والتوعية
|
||||
|
||||
### برنامج التدريب
|
||||
|
||||
| الفئة | التدريب | التكرار |
|
||||
|-------|---------|---------|
|
||||
| جميع الموظفين | التوعية بالتصيد | ربع سنوي |
|
||||
| فريق IT | الاستجابة للحوادث | شهري |
|
||||
| المطورين | البرمجة الآمنة | ربع سنوي |
|
||||
| الإدارة | إدارة الأزمات | نصف سنوي |
|
||||
|
||||
### محاكاة الهجمات
|
||||
|
||||
```yaml
|
||||
# جدول تمارين المحاكاة
|
||||
simulation_exercises:
|
||||
- name: "تمرين Ransomware"
|
||||
frequency: quarterly
|
||||
scope: full_organization
|
||||
objectives:
|
||||
- اختبار خطة الاستجابة
|
||||
- قياس وقت الاكتشاف
|
||||
- اختبار الاستعادة
|
||||
|
||||
- name: "اختبار التصيد"
|
||||
frequency: monthly
|
||||
scope: random_sample
|
||||
objectives:
|
||||
- قياس الوعي
|
||||
- تحديد نقاط الضعف
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. ملخص خطة الوقاية
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ ملخص خطة الوقاية الشاملة │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 🛡️ الوقاية: │
|
||||
│ ✓ MFA إجباري لجميع الحسابات │
|
||||
│ ✓ تقسيم الشبكة وعزل النسخ الاحتياطية │
|
||||
│ ✓ تحديثات أمنية تلقائية │
|
||||
│ ✓ سياسة أقل صلاحية │
|
||||
│ │
|
||||
│ 🔍 الكشف: │
|
||||
│ ✓ SIEM مع قواعد كشف Ransomware │
|
||||
│ ✓ مراقبة سلامة الملفات (FIM) │
|
||||
│ ✓ تنبيهات فورية │
|
||||
│ │
|
||||
│ 🚧 الاحتواء: │
|
||||
│ ✓ عزل تلقائي عند الكشف │
|
||||
│ ✓ نسخ احتياطية غير قابلة للتعديل (WORM) │
|
||||
│ ✓ وضع القراءة فقط للتخزين │
|
||||
│ │
|
||||
│ 🔄 الاستعادة: │
|
||||
│ ✓ قاعدة 3-2-1 للنسخ الاحتياطي │
|
||||
│ ✓ RPO: 1 ساعة | RTO: 4 ساعات │
|
||||
│ ✓ اختبار استعادة دوري │
|
||||
│ │
|
||||
│ 📚 التدريب: │
|
||||
│ ✓ توعية ربع سنوية │
|
||||
│ ✓ محاكاة هجمات │
|
||||
│ ✓ تمارين استجابة للحوادث │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. قائمة التحقق النهائية
|
||||
|
||||
### أسبوعياً
|
||||
- ✅ مراجعة تنبيهات SIEM
|
||||
- ✅ التحقق من نجاح النسخ الاحتياطي
|
||||
- ✅ فحص تحديثات الأمان
|
||||
|
||||
### شهرياً
|
||||
- ✅ اختبار استعادة عشوائي
|
||||
- ✅ مراجعة صلاحيات المستخدمين
|
||||
- ✅ تحديث قواعد الكشف
|
||||
|
||||
### ربع سنوياً
|
||||
- ✅ تمرين محاكاة Ransomware
|
||||
- ✅ مراجعة خطة الاستجابة
|
||||
- ✅ تدريب الموظفين
|
||||
|
||||
### سنوياً
|
||||
- ✅ تدقيق أمني شامل
|
||||
- ✅ تحديث خطة استمرارية الأعمال
|
||||
- ✅ مراجعة العقود مع المزودين
|
||||
المرجع في مشكلة جديدة
حظر مستخدم