Supply Chain Attacks — SolarWinds و XZ من جوّه
npm و PyPI و build systems — هجمات بتدخل من بعيد
هجمات سلسلة التوريد: لما المصدر "الموثوق" يبقى هو السكة الأقصر
طب لو قلتلك إن أكبر اختراق حصل لأمريكا في العقد الأخير، ماحدش فيه دق password، ولا استغل zero-day، ولا حتى بعت phishing email؟
طب إزاي بقى؟
نزّلوا update عادي. update موقّع رقمياً. من شركة معروفة. من سيرفر شرعي. والـ update ده هو اللي كان فيه الباب الخلفي.
ده SolarWinds. 18,000 شركة (وزارات أمريكية، Microsoft، FireEye، الخزانة الأمريكية) نزّلوا الـ malware بإيدهم. لأنهم وثقوا في المورّد. والمورّد ماكانش عارف إنه نفسه اتخترق.
ده هو عالم الـ supply chain attacks. مش إنت اللي بتتخترق — اللي إنت بتثق فيه هو اللي بيتخترق. وأنت بتفتح له الباب بإيدك.
[!danger] حد قانوني واضح الكلام ده هدفه تفهم إزاي المهاجمين بيفكروا عشان تحمي شركتك. أي محاولة تنفيذ حقيقي على مورّد شرعي = جريمة دولية + سجن طويل + بلاك ليست مدى الحياة.
غلطات الـ junior في موضوع supply chain
- بيركّب من غير ما يبص في
npm install.package-lock.json - بيستخدم من غير hash pinning، فأي مرة الـ resolver بيختار "الأحدث" — ممكن المهاجم نشر نسخة 99.99 منذ ساعة.
pip install - بيستخدم Docker image بـ tag في production.
latest - بيدّي صلاحيات OAuth واسعة لتطبيق "ضغطت زرار accept على طول" وما راجعش الـ scopes.
- بيظن إن "التوقيع الرقمي" معناه إن البرنامج آمن — ده غلط. التوقيع معناه إن المورّد عارف. مش معناه إن الكود مفيش فيه backdoor.
ليه الهجوم ده بيشتغل دايماً؟
أي شركة النهاردة بتعتمد على:
- مئات المكتبات Open Source.
- عشرات المورّدين (CRM، monitoring، email، backup، إلخ).
- آلاف الـ OAuth apps الموصّلة بـ Microsoft 365 أو Google Workspace.
إنت بتدقّق في كودك أنت. ماحدش بيدقّق في كود الـ vendor. ماحدش بيقرا diff الـ update. الثقة عمياء، والمهاجم عارف ده كويس.
المعادلة: اختراق مورّد واحد = الوصول لآلاف الشركات في ضربة واحدة. ROI خرافي، حتى للـ APTs المدعومة من دول.
الأنماط الأربعة الأساسية
1. اختراق الـ Build (نموذج SolarWinds)
المهاجم ما بيلمسش الكود المصدر. هو بيدخل على سيرفر البناء (CI/CD) وبيحقن الكود الخبيث وقت الـ compile. النتيجة:
- الكود في GitHub نضيف.
- المبرمجين شايفين كل حاجة عادية.
- الـ binary اللي بيطلع للعملاء فيه backdoor.
- موقّع رقمياً لأنه طلع من سيرفر البناء الرسمي.
SolarWinds (2020): SUNBURST اتزرع في DLL اسمه
SolarWinds.Orion.Core.BusinessLayer.dll2. التلاعب بالمكتبات (Dependency Attacks)
السكة دي بترجع للمبرمج مباشرة:
- Typosquatting: نشر مكتبة باسم قريب جداً من الأصلية. بدل
colour.colorsبدلrequets. كم مرة كتبت اسم مكتبة من غير ما تبص؟requests - Dependency Confusion: المهاجم عرف إن شركة عندها مكتبة داخلية اسمها (من leak في GitHub، أو من error message). يروح ينشر مكتبة بنفس الاسم على npm public بـ version أعلى. resolver بياخد الـ public لأنها "أحدث". كارثة. Alex Birsan في 2021 كسب bug bounties بـ 130k$ بالطريقة دي ضد Apple و Microsoft و PayPal.
company-internal-utils - Account Takeover للمشرف: event-stream في 2018 — المشرف الأصلي سلّم المكتبة لمتطوّع جديد "عشان مفيش وقت". المتطوّع نشر نسخة فيها كود يسرق محافظ Bitcoin من تطبيق Copay. ملايين النزولات قبل ما حد ياخد باله.
3. قضية XZ Utils (2024) — التحفة الفنية
دي بقت أساطير. Jia Tan (الاسم وهمي) فضل سنتين بيتطوّع في مشروع xz Utils. كان مساهم محترم. كتب patches، رد على issues، كان جزء من الـ community. المشرف الأصلي كان مرهق ومريض، فدّاه السلطة تدريجياً. ده اسمه Trust Building over years.
بعد ما خد السلطة، زرع backdoor في liblzma، بيتفعّل بس لو اسم الـ binary اللي بيلوده هو
sshdاتكشف بالصدفة. Andres Freund (مهندس في Microsoft، مش حتى security researcher) لاحظ إن sshd بياخد 500ms زيادة على ايامنا. بدل ما يعدّي، قعد يحفر. لقا backdoor.
500 مللي ثانية فرق بين العالم وبين كارثة.
4. اختراق MSP (نموذج Kaseya 2021)
Kaseya VSA هي أداة بيستخدمها MSPs لإدارة بنية عملاءهم. ثغرة في الـ VSA + REvil ransomware = 1500 شركة اتشفّرت في يوم واحد. لأن MSP واحد بيخدم 50 عميل، والثغرة وصلت لكل عميل.
السلاح الأخير: Wipers
الـ wiper شكله ransomware. بس مفيش فك تشفير. هو بيمسح. NotPetya (2017) كان wiper متنكر في زي ransomware. الـ Maersk خسرت 300 مليون دولار في 10 أيام. WPP، Merck، FedEx — كلهم اتضربوا. البداية كانت update لمحاسبة أوكرانية اسمها MEDoc اتخترق.
Update واحد لشركة محاسبة صغيرة في كييف = خسائر 10 مليار دولار عالمياً.
الحماية — المنظومة كاملة
على مستوى الكود
bash# Pin بالـ hash مش بالاسم # package-lock.json أو requirements.txt مع hashes pip install --require-hashes -r requirements.txt # SBOM (Software Bill of Materials) لكل artifact syft packages docker-image:latest -o cyclonedx-json > sbom.json grype sbom:./sbom.json
على مستوى الـ build
- SLSA Level 3 كهدف — provenance غير قابلة للتزوير.
- Sigstore + cosign لتوقيع الـ artifacts.
- Reproducible builds — أي حد يقدر يبني نفس الـ binary من نفس المصدر.
- Ephemeral runners فقط — مفيش runner بيعيش بين jobs.
على مستوى الـ vendor
- SBOM إلزامي في عقود الموردين.
- حق التفتيش على بناء الـ vendor.
- خطة exit لكل مورّد كبير — لو اختراق حصل، إزاي تقفل التواصل في 24 ساعة.
- OAuth review ربع سنوي — اقفل أي تطبيق ما اتستخدمش 90 يوم.
السؤال للقيادة
لو أكبر 3 موردين عندك اتخترقوا في ليلة واحدة، إيه أقصى ضرر ممكن يحصل؟ عندك خطة فصل فورية؟
لو الإجابة "لأ"، أنت مش بتدير risk، أنت بتأمّل في ربنا.
الخلاصة الناشفة
الثقة في supply chain مش مجانية. ليها تكلفة، والتكلفة دي بتتدفع وقت الكارثة، مش قبلها.
لو ما عندكش SBOM، أنت مش عارف عندك إيه. لو ما عندكش provenance، أنت مش عارف الكود ده جاي منين. لو الـ pipeline بتاع المورّد مش mature، الـ pipeline بتاعك أنت ما عندوش معنى.
اللي حصل لـ SolarWinds مش حادثة. هو نتيجة طبيعية لمنظومة كل واحد فيها واثق في اللي تحته من غير ما يبص.
والمنظومة دي لسه قايمة. مفيش حاجة اتغيّرت بعد 2020 إلا إن المهاجمين بقوا أحسن.