second
هذا الالتزام موجود في:
73
q1-deploy-monitor/health-check.sh
Normal file
73
q1-deploy-monitor/health-check.sh
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Ghaymah Automated Security Check
|
||||
set -uo pipefail
|
||||
|
||||
echo "=========================================="
|
||||
echo " Ghaymah Automated Security Check "
|
||||
echo "=========================================="
|
||||
|
||||
TARGET_DOMAIN="ghaymah.systems"
|
||||
TARGET_PORT="443"
|
||||
WARNINGS=0
|
||||
|
||||
require_tool() {
|
||||
if ! command -v "$1" >/dev/null 2>&1; then
|
||||
echo "❌ ERROR: required tool '$1' not found. Skipping this check."
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# 1. Check Open Ports (is SSH port 22 exposed on this host?)
|
||||
echo "[1] Checking Network Ports (local host exposure)..."
|
||||
if require_tool nc; then
|
||||
if nc -z -v -w5 localhost 22 2>/dev/null; then
|
||||
echo "⚠️ WARNING: Port 22 (SSH) is OPEN on this host. Restrict it to a Bastion/VPN only."
|
||||
WARNINGS=$((WARNINGS+1))
|
||||
else
|
||||
echo "✅ Port 22 is properly closed or filtered on this host."
|
||||
fi
|
||||
fi
|
||||
|
||||
# 2. Check SSL/TLS Certificate validity for the public-facing domain
|
||||
echo ""
|
||||
echo "[2] Checking SSL Certificate for $TARGET_DOMAIN..."
|
||||
if require_tool openssl; then
|
||||
EXPIRATION_DATE=$(echo | openssl s_client -servername "$TARGET_DOMAIN" -connect "$TARGET_DOMAIN:$TARGET_PORT" 2>/dev/null \
|
||||
| openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
|
||||
|
||||
if [ -n "$EXPIRATION_DATE" ]; then
|
||||
echo "✅ SSL Certificate is valid. Expires on: $EXPIRATION_DATE"
|
||||
else
|
||||
echo "❌ ERROR: Could not retrieve SSL certificate. Check connection or HTTPS configuration."
|
||||
WARNINGS=$((WARNINGS+1))
|
||||
fi
|
||||
fi
|
||||
|
||||
# 3. Check File Permissions — integrity check, NOT a "secrets" check.
|
||||
# /etc/passwd holds account metadata (not password hashes — those live
|
||||
# in /etc/shadow). What matters here is that it's NOT writable by
|
||||
# anyone but root; 644 (or 600) is the safe baseline.
|
||||
echo ""
|
||||
echo "[3] Checking File Integrity Permissions..."
|
||||
if require_tool stat; then
|
||||
SENSITIVE_FILE="/etc/passwd"
|
||||
PERMISSIONS=$(stat -c "%a" "$SENSITIVE_FILE" 2>/dev/null)
|
||||
|
||||
if [ "$PERMISSIONS" == "644" ] || [ "$PERMISSIONS" == "600" ]; then
|
||||
echo "✅ Permissions for $SENSITIVE_FILE are secure ($PERMISSIONS) — not writable by non-root users."
|
||||
else
|
||||
echo "⚠️ WARNING: Permissions for $SENSITIVE_FILE are $PERMISSIONS (expected 644 or 600). This may allow unauthorized writes."
|
||||
WARNINGS=$((WARNINGS+1))
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
if [ "$WARNINGS" -eq 0 ]; then
|
||||
echo " ✅ All checks passed "
|
||||
else
|
||||
echo " ⚠️ Scan completed with $WARNINGS warning(s)"
|
||||
fi
|
||||
echo "=========================================="
|
||||
4
q1-deploy-monitor/health-check.sh:Zone.Identifier
Normal file
4
q1-deploy-monitor/health-check.sh:Zone.Identifier
Normal file
@@ -0,0 +1,4 @@
|
||||
[ZoneTransfer]
|
||||
ZoneId=3
|
||||
ReferrerUrl=https://claude.ai/chat/9fa43a27-d956-4973-b4e1-f5e0f3d01b8d
|
||||
HostUrl=https://claude.ai/api/organizations/395d2c2e-2371-4f19-8a01-771526d6a8e9/conversations/9fa43a27-d956-4973-b4e1-f5e0f3d01b8d/wiggle/download-file?path=%2Fmnt%2Fuser-data%2Foutputs%2Fq1-deploy-monitor%2Fhealth-check.sh
|
||||
65
q1-deploy-monitor/security-audit.md
Normal file
65
q1-deploy-monitor/security-audit.md
Normal file
@@ -0,0 +1,65 @@
|
||||
|
||||
---
|
||||
|
||||
## أولاً: Container Security
|
||||
|
||||
**1. منع تشغيل الحاوية بصلاحيات Root**
|
||||
التطبيق على غيمة: تعديل الـ `Dockerfile` لكل خدمة منشورة على غيمة لإنشاء مستخدم غير مميز (`RUN adduser appuser` ثم `USER appuser`) بدل الاعتماد على الـ root الافتراضي. لو الـ Container اتخرق، المهاجم مبيلاقيش صلاحيات كافية يوصل بيها لباقي النظام.
|
||||
|
||||
**2. استخدام Base Images مصغّرة (Minimal Base Images)**
|
||||
التطبيق على غيمة: استبدال صور زي `ubuntu:latest` بصور `alpine` أو `distroless` في خدمات غيمة، عشان نقلل الـ Attack Surface.
|
||||
|
||||
**3. فحص الثغرات قبل النشر (Image Scanning)**
|
||||
التطبيق على غيمة: دمج أداة زي Trivy أو Grype جوه الـ CI/CD Pipeline بتاع غيمة، بحيث لو الصورة فيها CVE بمستوى High/Critical، الـ Pipeline يوقف قبل ما يعمل Deploy، مش بعد ما ينزل على Production.
|
||||
|
||||
---
|
||||
|
||||
## ثانياً: Network
|
||||
|
||||
**4. تطبيق سياسات العزل (Network Policies)**
|
||||
التطبيق على غيمة: تفعيل Network Policies بحيث خدمة الـ Frontend تقدر تكلم الـ API بس، ومتقدرش توصل للـ Database مباشرة — أي Traffic خارج القاعدة ده بيتمنع افتراضياً (Default Deny).
|
||||
|
||||
**5. إغلاق المنافذ غير الضرورية (Port Restrictions)**
|
||||
التطبيق على غيمة: التأكد إن المنفذ 443 (HTTPS) بس هو المتاح للإنترنت، وإن أي منفذ إداري زي 22 (SSH) أو 8080 مقفول من برا ومتاح بس عن طريق VPN أو Bastion Host.
|
||||
|
||||
**6. تشفير الاتصال الداخلي (mTLS بين الـ Microservices)**
|
||||
التطبيق على غيمة: تفعيل Mutual TLS بين الخدمات الداخلية جوه بيئة غيمة، بحيث حتى لو حد قدر يوصل للشبكة الداخلية، مايقدرش يقرا أو يعدّل الترافيك اللي بين )(istoria)الخدمات.
|
||||
|
||||
---
|
||||
|
||||
## ثالثاً: OWASP
|
||||
|
||||
**7. التحكم في الوصول المكسور (Broken Access Control)**
|
||||
التطبيق على غيمة: تطبيق "الرفض الافتراضي" (Deny by Default) على كل مسارات الـ API، والتأكد إن كل Endpoint بيتحقق من الـ Token والصلاحية بتاعة صاحبه، مش بس إنه Logged in.
|
||||
|
||||
**8. فشل التشفير (Cryptographic Failures)**
|
||||
التطبيق على غيمة: فرض TLS 1.2 كحد أدنى على كل الـ Load Balancers، ومنع أي Cipher Suites ضعيفة، وعدم تخزين بيانات حساسة (Tokens, Secrets) كـ Plain Text في أي مكان.
|
||||
|
||||
**9. حقن الأكواد (Injection)**
|
||||
التطبيق على غيمة: استخدام Parameterized Queries / ORM بدل بناء الاستعلامات بالـ String concatenation، وتفعيل WAF على مدخل غيمة لفلترة الأنماط المشبوهة.
|
||||
|
||||
**10. التصميم غير الآمن (Insecure Design)**
|
||||
التطبيق على غيمة: عمل Threat Modeling بسيط قبل إضافة أي feature جديدة (مين ممكن يهاجمها وإزاي)، وتطبيق Rate Limiting على نقاط الدخول الحساسة زي الـ Login عشان نمنع Brute Force.
|
||||
|
||||
**11. الإعدادات الأمنية الخاطئة (Security Misconfiguration)**
|
||||
التطبيق على غيمة: إزالة أي صفحات أو توثيق افتراضي (زي Swagger UI) من بيئة الإنتاج، وإخفاء الـ Headers اللي بتكشف نوع السيرفر أو الإصدار.
|
||||
|
||||
---
|
||||
|
||||
## رابعاً: Data
|
||||
|
||||
**12. تشفير البيانات المخزنة (Encryption at Rest)**
|
||||
التطبيق على غيمة: تفعيل تشفير الـ Block Storage/Volumes بتاعة غيمة باستخدام مفاتيح تشفير مُدارة، بحيث لو حد وصل للديسك الفعلي مش هيقدر يقرا الداتا من غير المفتاح.
|
||||
|
||||
**13. إدارة نسخ احتياطي آمنة (Secure & Immutable Backups)**
|
||||
التطبيق على غيمة: عزل شبكة الـ Backup عن شبكة الإنتاج، وجعل النسخ الاحتياطية Immutable (مش قابلة للحذف أو التعديل) لفترة معينة، عشان لو حصل Ransomware attack نقدر نرجع للداتا.
|
||||
|
||||
---
|
||||
|
||||
## خامساً: IAM
|
||||
|
||||
**14. مبدأ أقل الصلاحيات (Principle of Least Privilege)**
|
||||
التطبيق على غيمة: استخدام RBAC بحيث المطورين معندهمش صلاحية تعديل البنية التحتية في بيئة الإنتاج، ودورهم يقتصر على بيئة الـ Staging/Testing.
|
||||
|
||||
**15. المصادقة الثنائية الإلزامية (Mandatory MFA)**
|
||||
التطبيق على غيمة: فرض تفعيل MFA على أي حساب عنده وصول للوحة تحكم غيمة أو صلاحية SSH على السيرفرات، عشان لو الباسورد اتسرق لوحده يفضل مش كفاية للدخول.
|
||||
4
q1-deploy-monitor/security-audit.md:Zone.Identifier
Normal file
4
q1-deploy-monitor/security-audit.md:Zone.Identifier
Normal file
@@ -0,0 +1,4 @@
|
||||
[ZoneTransfer]
|
||||
ZoneId=3
|
||||
ReferrerUrl=https://claude.ai/chat/9fa43a27-d956-4973-b4e1-f5e0f3d01b8d
|
||||
HostUrl=https://claude.ai/api/organizations/395d2c2e-2371-4f19-8a01-771526d6a8e9/conversations/9fa43a27-d956-4973-b4e1-f5e0f3d01b8d/wiggle/download-file?path=%2Fmnt%2Fuser-data%2Foutputs%2Fq1-deploy-monitor%2Fsecurity-audit.md
|
||||
المرجع في مشكلة جديدة
حظر مستخدم