add the main file structure requirements
هذا الالتزام موجود في:
209
q2-attack-simulation /incident-response-plan.md
Normal file
209
q2-attack-simulation /incident-response-plan.md
Normal file
@@ -0,0 +1,209 @@
|
||||
# خطة الاستجابة للحوادث - Incident Response Plan
|
||||
|
||||
## نوع الحادثة
|
||||
هجوم Brute Force ناجح على API Login أدى إلى تسريب بيانات
|
||||
|
||||
---
|
||||
|
||||
## المرحلة 1: الاحتواء (Containment) - أول 30 دقيقة
|
||||
|
||||
### الإجراءات الفورية:
|
||||
|
||||
```bash
|
||||
# 1. إلغاء جميع الـ JWT tokens النشطة
|
||||
# في قاعدة البيانات أو Redis
|
||||
redis-cli FLUSHDB # إذا كانت sessions في Redis
|
||||
|
||||
# أو عبر API إداري
|
||||
curl -X POST https://app.ghaymah.systems/api/admin/invalidate-all-tokens \
|
||||
-H "Authorization: Bearer $ADMIN_TOKEN"
|
||||
|
||||
# 2. حظر IP المهاجم
|
||||
# في iptables
|
||||
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
|
||||
|
||||
# أو في nginx
|
||||
echo "deny 192.168.1.100;" >> /etc/nginx/conf.d/blocked-ips.conf
|
||||
sudo nginx -s reload
|
||||
|
||||
# 3. تعطيل الحساب المخترق
|
||||
UPDATE users SET status = 'suspended',
|
||||
password_hash = 'COMPROMISED_RESET_REQUIRED'
|
||||
WHERE username = 'admin';
|
||||
```
|
||||
|
||||
### قائمة التحقق:
|
||||
- [ ] إلغاء جميع الـ tokens
|
||||
- [ ] حظر IP المهاجم
|
||||
- [ ] تعطيل الحساب المخترق
|
||||
- [ ] إبلاغ فريق الأمن
|
||||
- [ ] توثيق وقت الاكتشاف
|
||||
|
||||
---
|
||||
|
||||
## المرحلة 2: التحقيق (Investigation) - 1-4 ساعات
|
||||
|
||||
### جمع الأدلة:
|
||||
|
||||
```bash
|
||||
# 1. حفظ الـ logs
|
||||
cp /var/log/nginx/access.log /incident/access.log.$(date +%Y%m%d)
|
||||
cp /var/log/nginx/error.log /incident/error.log.$(date +%Y%m%d)
|
||||
|
||||
# 2. تحليل الطلبات المشبوهة
|
||||
grep "POST /api/login" /var/log/nginx/access.log | \
|
||||
awk '{print $1}' | sort | uniq -c | sort -rn | head -20
|
||||
|
||||
# 3. تتبع نشاط المهاجم بعد الدخول
|
||||
grep "192.168.1.100" /var/log/nginx/access.log | \
|
||||
grep -E "200|201" > /incident/attacker-activity.log
|
||||
|
||||
# 4. تحديد البيانات المسربة
|
||||
grep "192.168.1.100" /var/log/nginx/access.log | \
|
||||
grep -E "/api/users|/api/export"
|
||||
```
|
||||
|
||||
### الأسئلة المطلوب الإجابة عليها:
|
||||
1. متى بدأ الهجوم؟
|
||||
2. كم محاولة تمت قبل النجاح؟
|
||||
3. ما البيانات التي تم الوصول إليها؟
|
||||
4. هل يوجد backdoors؟
|
||||
5. هل تأثرت أنظمة أخرى؟
|
||||
|
||||
---
|
||||
|
||||
## المرحلة 3: الاستئصال (Eradication) - 4-8 ساعات
|
||||
|
||||
### الإجراءات:
|
||||
|
||||
```bash
|
||||
# 1. إعادة تعيين كلمات مرور جميع المستخدمين
|
||||
# إرسال بريد إلكتروني لجميع المستخدمين
|
||||
|
||||
# 2. فحص النظام من backdoors
|
||||
# فحص cron jobs
|
||||
crontab -l
|
||||
cat /etc/crontab
|
||||
|
||||
# فحص authorized_keys
|
||||
cat ~/.ssh/authorized_keys
|
||||
|
||||
# فحص الملفات المعدلة مؤخراً
|
||||
find /app -mtime -1 -type f
|
||||
|
||||
# 3. تحديث التبعيات
|
||||
npm audit fix
|
||||
# أو
|
||||
pip install --upgrade -r requirements.txt
|
||||
```
|
||||
|
||||
### قائمة التحقق:
|
||||
- [ ] إعادة تعيين كلمات المرور
|
||||
- [ ] فحص backdoors
|
||||
- [ ] مراجعة صلاحيات المستخدمين
|
||||
- [ ] تحديث التبعيات الأمنية
|
||||
|
||||
---
|
||||
|
||||
## المرحلة 4: الاستعادة (Recovery) - 8-24 ساعة
|
||||
|
||||
### خطوات الاستعادة:
|
||||
|
||||
1. **تفعيل الحماية الجديدة:**
|
||||
```javascript
|
||||
// إضافة Rate Limiting
|
||||
const rateLimit = require('express-rate-limit');
|
||||
app.use('/api/login', rateLimit({
|
||||
windowMs: 15 * 60 * 1000,
|
||||
max: 5,
|
||||
message: 'محاولات كثيرة، حاول لاحقاً'
|
||||
}));
|
||||
```
|
||||
|
||||
2. **تفعيل Account Lockout:**
|
||||
```javascript
|
||||
// قفل الحساب بعد 5 محاولات فاشلة
|
||||
if (failedAttempts >= 5) {
|
||||
await lockAccount(userId, 30 * 60 * 1000); // 30 دقيقة
|
||||
}
|
||||
```
|
||||
|
||||
3. **إعادة تشغيل الخدمات:**
|
||||
```bash
|
||||
# إعادة نشر التطبيق على غيمة
|
||||
git push origin main # النشر التلقائي
|
||||
```
|
||||
|
||||
### قائمة التحقق:
|
||||
- [ ] تفعيل Rate Limiting
|
||||
- [ ] تفعيل Account Lockout
|
||||
- [ ] إضافة CAPTCHA
|
||||
- [ ] تفعيل MFA للحسابات الإدارية
|
||||
- [ ] إعادة تشغيل الخدمات
|
||||
- [ ] اختبار الحماية الجديدة
|
||||
|
||||
---
|
||||
|
||||
## المرحلة 5: إبلاغ المتأثرين - 24-48 ساعة
|
||||
|
||||
### نموذج البريد الإلكتروني:
|
||||
|
||||
```
|
||||
الموضوع: إشعار أمني مهم - [اسم التطبيق]
|
||||
|
||||
عزيزي المستخدم،
|
||||
|
||||
نود إبلاغك بحادثة أمنية وقعت بتاريخ [التاريخ].
|
||||
تم الوصول غير المصرح به إلى بعض بيانات المستخدمين.
|
||||
|
||||
البيانات المتأثرة:
|
||||
- الاسم
|
||||
- البريد الإلكتروني
|
||||
- [أي بيانات أخرى]
|
||||
|
||||
الإجراءات المتخذة:
|
||||
1. تم إيقاف الهجوم فوراً
|
||||
2. تم تعزيز الحماية
|
||||
3. تم إعادة تعيين جميع كلمات المرور
|
||||
|
||||
ما يجب عليك فعله:
|
||||
1. تغيير كلمة المرور فوراً
|
||||
2. تفعيل المصادقة الثنائية
|
||||
3. مراقبة حساباتك الأخرى
|
||||
|
||||
نعتذر عن أي إزعاج.
|
||||
|
||||
فريق الأمن
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## المرحلة 6: الدروس المستفادة - أسبوع
|
||||
|
||||
### اجتماع Post-Mortem:
|
||||
|
||||
| السؤال | الإجابة |
|
||||
|--------|---------|
|
||||
| ما الذي حدث؟ | هجوم brute force ناجح |
|
||||
| لماذا حدث؟ | عدم وجود rate limiting + كلمة مرور ضعيفة |
|
||||
| كيف اكتشفناه؟ | مراجعة يدوية للـ logs |
|
||||
| كم استغرق الاحتواء؟ | [X] دقيقة |
|
||||
| ما الذي يجب تحسينه؟ | إضافة تنبيهات تلقائية |
|
||||
|
||||
### التحسينات المطلوبة:
|
||||
1. [ ] تفعيل Rate Limiting على جميع APIs
|
||||
2. [ ] فرض سياسة كلمات مرور قوية
|
||||
3. [ ] تفعيل MFA إلزامياً للإداريين
|
||||
4. [ ] إضافة تنبيهات للنشاط المشبوه
|
||||
5. [ ] تدريب الفريق على الاستجابة للحوادث
|
||||
|
||||
---
|
||||
|
||||
## جهات الاتصال
|
||||
|
||||
| الدور | الاسم | الهاتف | البريد |
|
||||
|-------|-------|--------|--------|
|
||||
| قائد الحادثة | [الاسم] | [الرقم] | [البريد] |
|
||||
| فريق DevOps | [الاسم] | [الرقم] | [البريد] |
|
||||
| المستشار القانوني | [الاسم] | [الرقم] | [البريد] |
|
||||
| دعم غيمة | - | - | support@ghaymah.systems |
|
||||
المرجع في مشكلة جديدة
حظر مستخدم