هذا الالتزام موجود في:
mazen hassan
2026-07-27 04:07:58 +03:00
الأصل 96b8825f06
التزام 368c37d147
20 ملفات معدلة مع 333 إضافات و0 حذوفات

عرض الملف

@@ -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 "=========================================="

عرض الملف

@@ -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

عرض الملف

@@ -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 على السيرفرات، عشان لو الباسورد اتسرق لوحده يفضل مش كفاية للدخول.

عرض الملف

@@ -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

عرض الملف

@@ -0,0 +1,119 @@
# Incident Postmortem Report: API Brute Force & Data Breach
**Date:** July 2026 | **Target:** ghaymah.systems API
---
## 1. Attack Timeline
- **02:00 AM (بداية الهجوم):**
رصد ارتفاع مفاجئ وغير طبيعي في عدد طلبات الـ HTTP POST الموجهة إلى نقطة الدخول (Endpoint) `api.ghaymah.systems/v1/auth/login`. الطلبات قادمة من عناوين IP متعددة (Distributed Attack).
- **02:15 AM (غياب الحماية):**
نظراً لعدم وجود إعدادات Rate Limiting فعالة أو نظام قفل الحساب (Account Lockout) بعد المحاولات الفاشلة، استمر المهاجم في إرسال آلاف الطلبات بمعدل 500 طلب/ثانية دون أن يتم حظر عناوين الـ IP الخاصة به.
- **02:27 AM (نجاح الاختراق):**
تطابقت إحدى محاولات التخمين مع حساب موظف (Service Account) يمتلك صلاحيات قراءة واسعة. قام نظام الـ API بتوليد وإرجاع `JWT Token` صالح للمهاجم. رد السيرفر اختلف من `401 Unauthorized` إلى `200 OK`.
- **02:30 AM (الاستكشاف الداخلي):**
استخدم المهاجم الـ Token للوصول إلى مسارات API أخرى لاستكشاف البنية، وتم تسجيل طلبات ناجحة على `api.ghaymah.systems/v1/users/export`.
- **02:35 AM (تسريب البيانات - Exfiltration):**
قام المهاجم بتحميل قاعدة بيانات العملاء بنجاح. تم رصد استهلاك غير طبيعي لعرض النطاق الترددي الصادر (Outbound Egress Traffic) يقدر بحوالي 5 جيجابايت من خوادم قاعدة البيانات.
- **03:00 AM (الاكتشاف - Discovery):**
أطلق نظام الـ SIEM الداخلي تنبيهاً متأخراً (Alert) بسبب الارتفاع الكبير في حجم البيانات الصادرة (Data Egress Spike)، وبدأ فريق الاستجابة (Blue Team) في التدخل. **الفجوة الأساسية هنا: مرّت 33 دقيقة كاملة بين لحظة الاختراق (02:27) ولحظة الاكتشاف (03:00)** — ده بالظبط اللي هيتحل في قسم الـ Alert Rule تحت.
---
## 2. Incident Response Plan
بناءً على معايير الاستجابة للحوادث (NIST SP 800-61)، يتم تنفيذ الخطوات التالية فور اكتشاف الهجوم:
### 2.1 الاحتواء (Containment)
- **عزل المهاجم:** حظر (Block) عناوين الـ IPs المشبوهة فوراً على مستوى الـ WAF والـ Load Balancer.
- **إبطال التصريحات (Token Revocation):** إبطال جميع الـ JWT Tokens النشطة حالياً لإجبار جميع المستخدمين على تسجيل الدخول مجدداً، مما يقطع اتصال المهاجم بالـ API فوراً حتى لو كان الـ Token لسه صالح تقنياً.
- **عزل الخدمة:** تحجيم حركة المرور الصادرة (Egress Traffic) من قاعدة البيانات لمنع المزيد من تسريب البيانات.
### 2.2 الاستئصال (Eradication)
- إعادة تعيين (Reset) كلمة المرور للحساب المخترق وجميع حسابات الـ Service Accounts ذات الصلاحيات المشابهة.
- تفعيل الـ Rate Limiting المؤقت (Hard Limit) على مسار `/login`.
- فرض المصادقة الثنائية (MFA) الإلزامية على جميع الحسابات ذات الصلاحيات العالية.
### 2.3 التعافي (Recovery)
- استعادة الخدمة للعمل بشكل طبيعي مع مراقبة حثيثة (Enhanced Monitoring) لسجلات الدخول لمدة 48 ساعة للتأكد من عدم عودة المهاجم.
- إخطار الإدارة القانونية وإدارة الامتثال بتفاصيل تسريب البيانات لاتخاذ الإجراءات القانونية اللازمة وإبلاغ العملاء المتضررين.
---
## 3. Prevention on Ghaymah
### 3.1 Network Policies (سياسات الشبكة)
- **تقييد الـ Egress (حركة المرور الصادرة):** الخطأ الأكبر كان السماح للـ Pods أو خوادم الـ API بالاتصال المباشر بالإنترنت لتسريب الداتا. سيتم تطبيق Network Policy تمنع أي حركة مرور خارج الكلاستر (Default Deny Egress) إلا للخدمات المصرح لها فقط (Allowlist).
- **WAF & Ingress Controller:** إعداد قاعدة Rate Limiting على مستوى الـ Ingress (مثل NGINX `limit-req`) تحد من عدد طلبات الـ POST على مسار الـ Login لتكون مثلاً 5 طلبات في الدقيقة لكل عنوان IP.
### 3.2 Container Security (أمن الحاويات)
- **Read-Only Root Filesystem:** تشغيل حاويات الـ API بملف نظام للقراءة فقط (Read-only rootfs) لمنع المهاجم من كتابة سكربتات خبيثة أو تخزين البيانات المسربة مؤقتاً داخل الحاوية.
- **Network Segmentation:** وضع حاويات قاعدة البيانات في Namespace معزول تماماً، لا يمكن الوصول إليه إلا من حاويات الـ Backend API وفقط عبر منافذ محددة.
### 3.3 IAM & Authentication Hardening (تعزيز الهوية والمصادقة)
الهجوم في جوهره مشكلة Authentication، فالحل المتكامل لازم يشمل الهوية مش بس الشبكة:
- **Account Lockout Policy:** قفل الحساب مؤقتاً (مثلاً 15 دقيقة) بعد 5 محاولات فاشلة متتالية على نفس الـ Username.
- **CAPTCHA تدريجي:** تفعيل CAPTCHA بعد المحاولة الفاشلة الثالثة لإبطاء أي هجوم آلي بدون التأثير على المستخدم الشرعي.
- **Conditional Access:** رصد تسجيل الدخول من موقع جغرافي أو جهاز غير معتاد لحساب الـ Service Account، وطلب تحقق إضافي أو رفض تلقائي.
---
## 4. Alert Rule Design
**Rule 1 — كشف الـ Brute Force حسب كل IP على حدة:**
```yaml
groups:
- name: API_Security_Alerts
rules:
- alert: HighBruteForceAttemptPerIP
expr: |
sum by (client_ip) (
increase(http_requests_total{status="401", path="/v1/auth/login"}[1m])
) > 50
for: 1m
labels:
severity: critical
team: secops
annotations:
summary: "High number of failed login attempts from a single IP"
description: "IP {{ $labels.client_ip }} has more than 50 failed login attempts on /login within the last minute. Potential Brute Force attack in progress."
```
**Rule 2 — كشف الهجوم الموزّع (Distributed):**
```yaml
- alert: DistributedBruteForceAttempt
expr: |
sum(increase(http_requests_total{status="401", path="/v1/auth/login"}[1m])) > 150
for: 1m
labels:
severity: critical
team: secops
annotations:
summary: "Aggregate spike in failed logins across multiple IPs"
description: "Total failed login attempts across all sources exceeded 150 in the last minute — possible distributed brute force campaign."
```
**Rule 3 — كشف النجاح المريب بعد سلسلة فشل:**
```yaml
- alert: SuccessfulLoginAfterFailureBurst
expr: |
(
sum by (client_ip) (increase(http_requests_total{status="401", path="/v1/auth/login"}[5m])) > 20
)
and
(
sum by (client_ip) (increase(http_requests_total{status="200", path="/v1/auth/login"}[1m])) > 0
)
for: 0m
labels:
severity: critical
team: secops
annotations:
summary: "Successful login immediately following a failed-login burst"
description: "IP {{ $labels.client_ip }} had 20+ failed logins in 5 minutes then succeeded — classic brute force compromise pattern, escalate immediately."
```

عرض الملف

@@ -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%2Fq2-postmortem%2Fpostmortem-report.md

ملف ثنائي غير معروض.

بعد

العرض:  |  الارتفاع:  |  الحجم: 87 KiB

عرض الملف

@@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
HostUrl=https://gemini.google.com/

ملف ثنائي غير معروض.

بعد

العرض:  |  الارتفاع:  |  الحجم: 121 KiB

عرض الملف

@@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
HostUrl=https://gemini.google.com/

ملف ثنائي غير معروض.

بعد

العرض:  |  الارتفاع:  |  الحجم: 93 KiB

عرض الملف

@@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
HostUrl=https://gemini.google.com/

ملف ثنائي غير معروض.

بعد

العرض:  |  الارتفاع:  |  الحجم: 246 KiB

عرض الملف

@@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
HostUrl=https://gemini.google.com/

ملف ثنائي غير معروض.

بعد

العرض:  |  الارتفاع:  |  الحجم: 121 KiB

عرض الملف

@@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
HostUrl=https://gemini.google.com/

ملف ثنائي غير معروض.

بعد

العرض:  |  الارتفاع:  |  الحجم: 138 KiB

عرض الملف

@@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
HostUrl=https://gemini.google.com/

عرض الملف

@@ -0,0 +1,42 @@
# Privacy & Security Assessment Report: mithal.space
**Auditor:** Mazen | **Role:** SecOps Engineer | **Date:** July 2026
## 1. DevTools Inspection Findings
فحص تقني مباشر لـ `mithal.space` باستخدام Chrome DevTools (Network, Application, Security tabs)، بالأدلة:
- **Cookies:** لا توجد أي ملفات ارتباط مسجّلة تحت `Application → Storage → Cookies` (`assets/cookies-empty.jpg`). توافق كامل مع مبدأ Privacy-by-Design.
- **Trackers:** لا توجد أي طلبات لدومينات تتبّع/إعلانات معروفة (لا Google Analytics ولا Meta Pixel) في قائمة الـ 20 طلب بالكامل (`assets/network-requests.jpg`). الاستثناء الوحيد: الـ CSP بترخّص الاتصال بعدة نطاقات فرعية على `*.hosted.ghaymah.systems` (searxng-service, translate, perplexica...) — دي مش Trackers، دي **خدمات Backend مملوكة للموقع نفسه** (بنية Meta-search/AI ذاتية الاستضافة)، فمفيش تسريب لطرف ثالث حقيقي هنا.
- **HTTPS/TLS:** شهادة صالحة وموثوقة من Let's Encrypt (Issued: 17 June 2026)، الاتصال بـ **TLS 1.3** باستخدام `X25519MLKEM768` — وده Hybrid Key Exchange بيدمج تشفير كلاسيكي مع خوارزمية مقاومة للحوسبة الكمية (Post-Quantum Ready)، حماية استباقية ضد هجمات "Harvest Now, Decrypt Later" (`assets/certificate.jpg`, `assets/security-overview.png`).
- **Security Headers:** الموقع مطبّق `X-Frame-Options: DENY`، `X-Content-Type-Options: nosniff`، `X-XSS-Protection`، وكمان `Permissions-Policy: geolocation=(), microphone=(), camera=()` (تعطيل كامل لهذه الـ APIs)، و`Referrer-Policy: strict-origin-when-cross-origin`. كمان لاحظت وجود `X-Ratelimit-Limit/Remaining/Reset` — يعني فيه Rate Limiting فعّال على مستوى الـ API (`assets/response-headers.jpg`). **الناقص الحقيقي: `Strict-Transport-Security` (HSTS) مش موجودة**، فالموقع عرضة لـ SSL Stripping في أول زيارة.
- **CSP:** موجودة ومفصّلة، وفيها `frame-ancestors 'none'` (طبقة حماية إضافية من الـ Clickjacking، تكرار جيد مع X-Frame-Options). لكن فيها نقطتين ضعف حقيقيتين (`assets/csp-header.jpg`):
1. `'unsafe-inline'` موجودة في كل من `script-src` و`style-src`، بتضعف الحماية من XSS.
2. `style-src`/`script-src` بترخّص تحميل موارد من `https://fonts.gstatic.com` (دومين جوجل)، وده تسريب لعنوان IP الزائر لجوجل عند تحميل الخطوط.
3. **الأخطر:** واحد من روابط الـ `connect-src` (خدمة `perplexica`) مسموح ليها تتصل عبر `http://` مش `https://` — يعني موقع مؤمّن بالكامل بـ TLS 1.3 لكن سياسة الـ CSP نفسها بتفتح ثغرة Mixed Content / Downgrade على endpoint واحد.
---
## 2. Privacy Comparison
| الميزة | Google | DuckDuckGo | mithal.space |
| :--- | :--- | :--- | :--- |
| استخدام الكوكيز | كثيف جداً | شبه معدوم | **معدوم تماماً** |
| اعتماد على أطراف خارجية | خوادم داخلية | خوادم داخلية | فقط خط جوجل واحد (`fonts.gstatic.com`) |
| HSTS مفروض | نعم | نعم | **لا** |
| CSP صارمة (بدون unsafe-inline) | نعم | نعم | لا (موجودة لكن بها ثغرات) |
| Permissions-Policy | جزئي | نعم | **نعم (شامل)** |
| المستوى العام | منخفض | عالي جداً | عالي، مع ثلاث نقاط ضعف قابلة للإصلاح |
---
## 3. Recommended Security Improvements
1. **فرض HTTPS بلا استثناء:** إضافة `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload`، وفي نفس الوقت تحويل رابط `perplexica` في الـ `connect-src` من `http://` إلى `https://` — الاتنين وجهين لنفس المشكلة (فرض التشفير على كل الاتصالات بلا استثناء).
2. **تشديد الـ CSP:** إزالة `'unsafe-inline'` من `script-src` و`style-src`، واستخدام Nonces أو Hashes بدلها، لإغلاق الباب أمام أي XSS حتى لو حصل حقن كود.
3. **استضافة الخطوط ذاتياً بالكامل:** نقل ملفات الخطوط لتُخدَّم من نفس نطاق `mithal.space` (أو من بنية غيمة التحتية) بدل `fonts.gstatic.com`، عشان نقفل آخر تسريب IP متبقّي لطرف خارجي.
---

عرض الملف

@@ -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%2Fq3-privacy%2Fprivacy-assessment.md