Final Submission for SecOps Exam
هذا الالتزام موجود في:
27
q1-security-audit/audit-checklist.md
Normal file
27
q1-security-audit/audit-checklist.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# Security Audit Checklist for Ghaymah Platform
|
||||
|
||||
## 1. Container Security
|
||||
* **1.1 Base Image Scanning:** استخدام الصور الرسمية والموثوقة فقط في ghaymah Container Registry وتفعيل الفحص الآلي للثغرات قبل النشر.
|
||||
* **1.2 Least Privilege Execution:** إعداد Dockerfile لضمان عدم تشغيل التطبيق بصلاحيات الـ Root داخل حاويات غيمة لمنع تصعيد الصلاحيات.
|
||||
* **1.3 Immutable Containers:** ضبط نظام ملفات الحاوية على Read-Only لمنع المهاجمين من كتابة أي نصوص برمجية خبيثة داخل الحاوية أثناء التشغيل.
|
||||
|
||||
## 2. Network Security
|
||||
* **2.1 Network Segmentation:** استخدام قواعد الشبكة في غيمة لفصل حاويات الـ Frontend عن الـ Backend، بحيث لا يُسمح بالوصول المباشر لقاعدة البيانات من الخارج.
|
||||
* **2.2 TLS/SSL Encryption:** فرض استخدام بروتوكول HTTPS لجميع الاتصالات الخارجية، وتكوين شهادات SSL لتتجدد تلقائياً.
|
||||
* **2.3 Minimal Exposed Ports:** حظر جميع المنافذ افتراضياً، وفتح المنافذ الضرورية فقط للخدمات (مثل 80 و 443) وإغلاق منافذ الإدارة (مثل 22) عن الإنترنت العام.
|
||||
|
||||
## 3. OWASP Top 5
|
||||
* **3.1 Broken Access Control:** تطبيق سياسة "الرفض الافتراضي" والتأكد من التحقق من صلاحيات المستخدم في كل طلب API يُرسل للتطبيق.
|
||||
* **3.2 Cryptographic Failures:** تشفير البيانات الحساسة باستخدام أدوات إدارة الأسرار وعدم تخزينها كنصوص واضحة في متغيرات البيئة على غيمة.
|
||||
* **3.3 Injection:** استخدام الاستعلامات المجهزة للتعامل مع مدخلات المستخدمين قبل تخزينها في قواعد بيانات غيمة.
|
||||
* **3.4 Insecure Design:** إجراء "نمذجة التهديدات" للتطبيق قبل النشر على غيمة لاكتشاف العيوب المنطقية في التصميم.
|
||||
* **3.5 Security Misconfiguration:** إزالة أي خدمات غير ضرورية، تعطيل رسائل الخطأ التفصيلية في بيئة الإنتاج، وتطبيق إعدادات الأمان الافتراضية لمنصة غيمة.
|
||||
|
||||
## 4. Data Security
|
||||
* **4.1 Encryption at Rest:** تفعيل خاصية التشفير لأقراص التخزين ghaymah Block Storage لضمان سرية البيانات.
|
||||
* **4.2 Automated Backup Strategy:** جدولة النسخ الاحتياطي التلقائي عبر ghaymah Backup وتطبيق قاعدة (3-2-1) لضمان توافر البيانات.
|
||||
|
||||
## 5. IAM
|
||||
* **5.1 MFA:** فرض المصادقة الثنائية على جميع حسابات المطورين ومديري النظام.
|
||||
* **5.2 RBAC:** تعيين الصلاحيات بناءً على الأدوار الوظيفية الدقيقة.
|
||||
* **5.3 Audit Logging:** تفعيل تسجيل الأحداث لجميع محاولات الدخول وحفظها في مساحة تخزين منفصلة وآمنة على غيمة.
|
||||
46
q1-security-audit/security-check.sh
Normal file
46
q1-security-audit/security-check.sh
Normal file
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🔒 Starting Security Audit Check..."
|
||||
echo "------------------------------------"
|
||||
|
||||
echo "🔍 [1] Checking Risky Open Ports..."
|
||||
OPEN_PORTS=$(netstat -tuln | awk '{print $4}' | grep -E ':(22|3306|21)$')
|
||||
if [ -z "$OPEN_PORTS" ]; then
|
||||
echo "✅ PASS: No unauthorized risky ports are open."
|
||||
else
|
||||
echo "❌ WARNING: The following risky ports are exposed:"
|
||||
echo "$OPEN_PORTS"
|
||||
fi
|
||||
echo "------------------------------------"
|
||||
|
||||
echo "🌐 [2] Checking SSL Certificate Expiry for mithal.space..."
|
||||
DOMAIN="mithal.space"
|
||||
EXPIRY_DATE=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -dates | grep notAfter | cut -d= -f2)
|
||||
if [ -n "$EXPIRY_DATE" ]; then
|
||||
EXPIRY_SEC=$(date -d "$EXPIRY_DATE" +%s)
|
||||
NOW_SEC=$(date +%s)
|
||||
DAYS_LEFT=$(( ($EXPIRY_SEC - $NOW_SEC) / 86400 ))
|
||||
if [ $DAYS_LEFT -gt 30 ]; then
|
||||
echo "✅ PASS: SSL certificate is valid. Expires in $DAYS_LEFT days."
|
||||
else
|
||||
echo "⚠️ WARNING: SSL certificate expires soon (in $DAYS_LEFT days)!"
|
||||
fi
|
||||
else
|
||||
echo "❌ ERROR: Could not retrieve SSL certificate."
|
||||
fi
|
||||
echo "------------------------------------"
|
||||
|
||||
echo "📁 [3] Checking Sensitive File Permissions..."
|
||||
SENSITIVE_FILE=".env"
|
||||
if [ -f "$SENSITIVE_FILE" ]; then
|
||||
PERMISSIONS=$(stat -c "%a" "$SENSITIVE_FILE")
|
||||
if [ "$PERMISSIONS" -le 600 ]; then
|
||||
echo "✅ PASS: Permissions for $SENSITIVE_FILE are secure ($PERMISSIONS)."
|
||||
else
|
||||
echo "❌ WARNING: Permissions for $SENSITIVE_FILE are too open ($PERMISSIONS)!"
|
||||
fi
|
||||
else
|
||||
echo "ℹ️ INFO: No $SENSITIVE_FILE found."
|
||||
fi
|
||||
echo "------------------------------------"
|
||||
echo "🏁 Security Audit Check Completed."
|
||||
المرجع في مشكلة جديدة
حظر مستخدم