إلى الخلف
استخبارات الخصم
جدول المحتوى

مقدمة

هناك فئة من السخرية في هذا المجال تتوقف عن كونها مضحكة بمجرد تتبعها عبر ثلاث سنوات مالية متتالية، وكان البرنامج الأكثر استهدافًا بشكل منهجي في سلسلة توريد البرامج هو برنامج الأمان نفسه. ليست واجهات برمجة تطبيقات الدفع الخاصة بالتكنولوجيا المالية. ليس مزودي اتحاد الهوية. ماسحات نقاط الضعف الأمنية. أدوات التحقق من سلامة CI/CD. مكتبة ضغط مدمجة في أنابيب مصادقة SSH لما يقرب من نصف أسطول Linux على كوكب الأرض.

هذا ليس حظًا سيئًا. إنه اختيار الهدف. وتستحق معايير الاختيار الفحص بعناية، لأنها تكشف شيئًا عن تطور المهاجم الذي يميل معظم البائعين الذين يبلغون عن حوادث البائعين لأسباب تجارية واضحة إلى التقليل من شأنه.

تغطي هذه المدونة أربعة تنازلات مؤكدة ومتميزة في سلسلة التوريد خلال مارس 2024 ومارس 2025 ومارس 2026، حيث انفجر الأخيران في غضون 24 ساعة من بعضهما البعض في نفس الشهر. تم توثيق الحوادث الفردية في مكان آخر. لم يتم نشر الارتباطات المرسومة هنا، على حد علمي، في هذا النموذج. سأوضح على وجه التحديد أين أعتقد أن الصناعة أخطأت في التأطير.

دراسة الحالة الأولى - XZ Utils (CVE-2024-3094): عملية الصبر لمدة عامين

الخلفية

في 28 مارس 2024، لاحظ أندريس فرويند، مهندس Microsoft الذي يقوم بقياس شيء لا علاقة له بنظام Debian sid الشخصي الخاص به، تأخر مصادقة SSH بحوالي 500 مللي ثانية. هذه الملاحظة هي السبب في أننا لا نكتب نوعًا مختلفًا تمامًا من الاستعادية في الوقت الحالي. سجل الباب الخلفي المضمن في XZ Utils 5.6.0 و 5.6.1 CVSS 10.0 وتم القبض عليه قبل ثلاثة أسابيع من الهبوط المستقر في ديبيان وفيدورا.

لعبة جيا تان لونج

يعمل ممثل التهديد تحت عنوان GitHub JiaT75، ويقدم باسم «جيا تان». تم إنشاء الحساب في أكتوبر 2021. ما تبع ذلك كان أكثر من 30 شهرًا من كونك مساهمًا مفيدًا حقًا. إصلاحات الأخطاء وتحسينات الأداء والمشاركة المختصة تقنيًا في سلاسل العلاقات العامة. اجتاز الحساب مراجعة الكود بشكل متكرر لأن الرمز كان في الواقع صحيحًا.

هذا هو الجزء الذي تقضي معظم عمليات الكتابة فيه جملة واحدة: قام المهاجم بعمل حقيقي. هذا ليس عرضيًا للعملية، إنها العملية. المعالم الرئيسية:

  • نوفمبر 2021: الالتزام الأول: إصلاح متواضع للتخزين المؤقت، يجتاز المراجعة بشكل نظيف
  • منتصف عام 2022: يبدأ الشخص الثاني المنسق جيجار كومار في الضغط على المشرف لاسي كولين لدمج بقع جيا تان بشكل أسرع؛ أما الحساب الثالث «هانز جانسن» فيمارس ضغطًا مشابهًا
  • يناير 2023: تم منح Jia Tan حق الوصول بعد مساهمات الجودة المستدامة
  • فبراير 2024: تم إدخال حمولة ضارة عبر ملفي اختبار ثنائيين: الاختبارات/الملفات/bad-3-corrupt_lzma2.xz و الاختبارات/الملفات/good-large_compressed.lzma

حملة الضغط هي أسلوب HUMINT في الكتب المدرسية، يصنع إجماعًا اجتماعيًا حول الهدف، ويتم تطبيقه على حوكمة المشاريع مفتوحة المصدر. منذ ذلك الحين، تحدث Lasse Collin علنًا عن ضغوط الصيانة الفردية تحت ضغط اجتماعي نشط.

الهندسة الفنية للباب الخلفي

تستحق آلية الحقن في وقت البناء مزيدًا من الاهتمام مما حصلت عليه في عام 2024 بأثر رجعي. أثناء الصنع، bad-3-lzma2.xz الفاسد تم إزالة الغموض عن ملف الاختبار باستخدام أداة Unix tr، وهي أداة ترجمة سلسلة بدون ارتباط بعمليات التشفير، مما يعني أنها لا تطلق أي استعلامات مسح وقت الإنشاء من أي ماسح ضوئي شائع الاستخدام. قام البرنامج النصي bash الناتج بحقن ملف كائن تم تجميعه مسبقًا في مرحلة إنشاء liblzma.

تم ربط الزرع النهائي فك تشفير RSA_Public_التشفير القرار في SSHD. في البنيات المرتبطة بالنظام حيث يربط libsystemd liblzma، أضعف الباب الخلفي مصادقة المفتاح العام - أوراكل المصادقة في مكدس SSH. قبل تسليح نفسها، قامت بإجراء فحوصات البيئة: بنية x86_64، وجود systemd، libsystemd في خريطة ذاكرة العملية. هذه الخصوصية هي سبب عدم اكتشافها في إصدارات macOS وبيئات CI غير النظامية أثناء اختبار ما قبل الإصدار.

Insight: The Firmware Tradecraft Parallel: Hiding executable payloads inside binary blobs that automated CI scanners categorize as "test data" and exclude from static analysis is documented in UEFI and firmware implant research since at least 2018. The XZ actor applied this technique to the open source build context, independently or consciously borrowed. The retrospective literature from 2024 did not draw this parallel. It should have, because it reframes the binary test fixtures in any open source repository as a legitimate threat vector, not just a quirky footnote.

رسم خرائط MITRE

Tactic Technique ID Technique Name How It Applied
Initial Access T1195.001 Compromise Software Dependencies & Dev Tools Malicious payload injected into liblzma build stage via binary test files
Persistence T1554 Compromise Client Software Binary Backdoored binary distributed via legitimate upstream release channels
Defense Evasion T1027 Obfuscated Files or Information Payload stored in binary test fixtures, de-obfuscated at build time via tr
Defense Evasion T1036 Masquerading Commits authored under a fake but credible contributor identity
Credential Access T1556 Modify Authentication Process RSA_public_decrypt hook weakened SSH authentication at liblzma
Resource Development T1585.001 Establish Accounts: Social Media Fake contributor personas used to pressure maintainer

دراسة الحالة الثانية - reviewdog → إجراءات tj (CVE-2025-30066/CVE-2025-30154): استغلال الثقة الآلي

الهندسة البيفوت

في 14 مارس 2025، إجراءات tj/الملفات المتغيرة، مضمن في أكثر من 23,000 مستودع، تم العثور عليه وهو ينفذ نصًا برمجيًا خبيثًا من Python على مشغلات CI. وضعت التقارير الأولية هذا كحل وسط أحادي الإجراء.

ال كلب المراجعة (جيت هاب) تم اختراق org من خلال نظام دعوة الفريق الآلي الخاص بـ GitHub، وفي ظل تكوينات معينة للمستودعات، يتلقى المساهمون الذين يصلون إلى حدود النشاط دعوات الفريق التلقائية مع إمكانية الوصول للكتابة. قام المهاجم بإلغاء هذا الحد، وتلقى دعوة إلى @reviewdog /actions-maintainer، ودفع بارتكاب ضار، وأعاد توجيه علامة v1. كل شيء في المراحل النهائية تبعه تغيير مؤشر علامة واحدة.

سلسلة قتل التبعية الكاملة:

الخطوة 1 - إعداد كلب المراجعة/الإجراء هو إجراء المنفعة - يقوم بتثبيت أداة فحص Reviewdog على عداء CI. إنها لبنة أساسية تعتمد عليها إجراءات المراجعة الأخرى.

الخطوة 2 - تستدعي أخطاء reviewdog/action-typos (وإجراءات reviewdog الأخرى) إعداد الإجراء أولاً لتثبيت الأداة قبل القيام بعملهم الخاص. لذلك عندما تم تسميم إعداد الإجراءات، كل إجراء استعمل لقد ورثت الشفرة الخبيثة بصمت.

الخطوة 3 - تستخدم ملفات tj-actions/eslint-changed-files إجراءات reviewdog داخليًا لمسح الملفات التي تم تغييرها، لذلك تم سحب إعداد الإجراء المسموم بشكل انتقالي.

الخطوة 4 - تعد tj-actions/الملفات المتغيرة واحدة من أكثر إجراءات GitHub استخدامًا في الوجود - فهي تكتشف الملفات التي تم تغييرها في العلاقات العامة. يعتمد الأمر داخليًا على الملفات التي تم تغييرها بواسطة eslint، لذا فقد جذب السم أيضًا.

الخطوة 5 - يحتوي أكثر من 23,000 مستودع على إجراءات tj-action/ملفات متغيرة في عمليات سير العمل الخاصة بهم. لم يغير أي منهم سطرًا واحدًا من الكود الخاص به. لقد قاموا فقط بتشغيل خطوط أنابيب CI العادية الخاصة بهم وتم تنفيذ حمولة تجريف الذاكرة الخبيثة بصمت على المتسابقين.

النقطة الأساسية: لم يلمس المهاجم أبدًا المستودعات المتأثرة البالغ عددها 23000 مستودع بشكل مباشر. لقد عرضوا للخطر إجراءً تأسيسيًا واحدًا يعتمد عليه كل شيء آخر، مثل تسميم محطة معالجة المياه بدلاً من طرق 23,000 باب فردي.

أجرى البرنامج النصي الضار وصولاً مباشرًا إلى ذاكرة العملية عبر /proc/ {PID} /mem في عملية GitHub Actions Runner:

  • عدد أرقام IPD المطابقة لـ Runner.Worker وRunner.Listener وrunsvc وrun.sh
  • تم تحليلها /proc/ {PID} /الخرائط لتحديد مناطق الذاكرة النشطة

الذاكرة الأولية الممسوحة ضوئيًا بواسطة Regex لبنية JSON السرية الداخلية لـ GitHub: «الاسم»: {«القيمة»:»...» ، «هو سر»: صحيح}

Insight: The Masking Layer Bypass: GitHub's secret masking operates at the log-rendering layer. It replaces known secret values with *** in log output. The memory scrape executes before the log renderer ever processes the data. These two mechanisms operate at different abstraction levels, and they don't interact. Any organization that considered private repo log restrictions a meaningful mitigating control was assessing the wrong threat model. The memory scrape works identically whether or not logs are publicly visible.

رسم خرائط MITRE

Tactic Technique ID Technique Name How It Applied
Initial Access T1195.001 Compromise Software Dependencies & Dev Tools reviewdog/action-setup poisoned via automated GitHub team invitation exploit
Execution T1059.006 Command & Scripting: Python Malicious Python script executed on CI runners to scrape process memory
Credential Access T1552.001 Unsecured Credentials: Credentials in Files /proc/{PID}/mem scraped for in-memory GitHub Actions secret JSON structures
Credential Access T1528 Steal Application Access Token GitHub Actions runner tokens and repository secrets extracted from process memory
Lateral Movement T1199 Trusted Relationship Transitive dependency chain used to propagate payload from reviewdogtj-actions → 23,000 repos
Exfiltration T1048 Exfiltration Over Alternative Protocol Secrets printed to public CI workflow logs as exfiltration channel

دراسة الحالة الثالثة - أكوا سيكيوريتي/تريفي (مارس 2026): أخصائي المعلومات متعدد المراحل والمدعوم ببلوكتشين

ثلاث موجات، ثلاثة أنماط فشل مختلفة

الموجة 1: التكوين الخاطئ لـ pull_request_target (أواخر فبراير 2026)

استغل الروبوت المستقل، hackerbot-claw، مشغل pull_request_target في سير عمل إجراءات GitHub الخاص بـ Trivy. على عكس حدث pull_request القياسي، يقوم هذا المشغل بتنفيذ سير عمل الفرع الأساسي مع الوصول الكامل لنطاق الكتابة إلى أسرار المستودع عند فتح PR خارجي. تم استخراج رمز الوصول الشخصي المميز.

الموجة 2: المعالجة غير المكتملة (1-19 مارس 2026)

كشفت شركة Aqua علنًا عن Wave 1 وقامت بتدوير أوراق الاعتماد في 1 مارس. أغفل التدوير الرمز المميز لحساب خدمة aqua-bot، والذي تم تزويده بأذونات توقيع الإصدار المتطابقة لـ PAT التي تم تدويرها. احتفظ المهاجم بالوصول المتبقي لمدة 18 يومًا من خلال رمز الروبوت الذي لم يتم إبطاله.

الموجة 3: تسمم العلامات + الباب الخلفي الثنائي (19 مارس، 17:43 بالتوقيت العالمي المنسق)

باستخدام بيانات اعتماد aqua-bot المحتفظ بها، دفع المهاجم بقوة 76 من 77 علامة إصدار في trivy-action وجميع علامات الإصدار السبعة في setup-trivy إلى ارتكاب ضار، مع نشر trivy v0.69.4 في نفس الوقت من خلال التشغيل الآلي للإصدار المخترق. كانت العلامة النظيفة الوحيدة الباقية - v0.35.0 - ترتكز على ميزة الاشتراك في الإصدارات غير القابلة للتغيير في GitHub.

الطب الشرعي للحمولة: دلتا entrypoint.sh

Source SHA256 of entrypoint.sh File Size
Tag 0.24.0 (malicious) 18a24f83e807479438dcab7a... 17,592 bytes
Parent commit (legitimate) 07500e81693c06ef7ac6bf210... 2,855 bytes

زيادة حجم الملف بمقدار 6.16 ×. لم تظهر واجهة مستخدم إصدار GitHub أي مؤشر على هذا التغيير. لا توجد أداة SCA سائدة تقوم بمراقبة سلامة الملفات الأثرية على نقاط إدخال الإجراءات عبر عمليات تشغيل خطوط الأنابيب.

نفذت الكتلة التي تم حقنها المكونة من 105 أسطر مسحًا كاملاً لبيانات الاعتماد قبل استدعاء الماسح الضوئي الشرعي، لذلك بدا أن خطوط الأنابيب تنجح بشكل طبيعي أثناء استنزافها. تشعبت عملية المسح حسب نوع العداء: حصل المتسابقون المستضافون على GitHub على تجريف ذاكرة العملية (تقنية مماثلة لإجراءات tj)؛ حصل المتسابقون المستضافون ذاتيًا على شبكة بحث واسعة لنظام الملفات تستهدف مفاتيح SSH وبيانات اعتماد AWS/GCP/Azure ورموز Kubernetes،

تكوينات Docker وحالة Terraform وأسرار Helm وملفات محفظة العملات المشفرة. تم تشفير البيانات المحصودة باستخدام AES-256-CBC تحت مفتاح جلسة ملفوف بـ RSA-4096، مما يجعل payload.enc غير قابل للاسترداد بدون المفتاح الخاص للمهاجم حتى إذا تم التقاط الملف الثنائي وتحليله.

بلوكتشين سي ٢: مشكلة البنية التحتية غير القابلة للإزالة

انخفض الملف الثنائي trivy v0.69.4 ~/.config/sysmon.py، الذي سمي بالاندماج في البيئات التي تعمل بأدوات النظام الشرعية، ونام لمدة 5 دقائق (التهرب من وضع الحماية)، ثم استطلع C2 في:

hxxps: //tdtqy-oyaaa-aaae-af2dq-cai.raw.icp0.io

يتم تقديم نقطة النهاية هذه بواسطة بلوكتشين كمبيوتر الإنترنت (ICP)، الذي تديره مؤسسة DFINITY. لا يوجد مسجل. لا يوجد مشغل DNS. لا يوجد مزود استضافة. لا يوجد عنوان abuse@ ينتج عنه إزالة. لا يعمل دليل الاستجابة للحوادث القياسي وشكوى المسجل ومسار BGP الفارغ وإشعار CISA ضد البنية التحتية التي يستضيفها ICP حسب التصميم. يعمل حظر *.icp0.io في محيط الشبكة، ولكنه سيؤدي إلى زيادة الأضرار الجانبية مع نمو تطبيقات ICP الشرعية في النشر.

تم النظر في مسار exfil الاحتياطي بنفس القدر: إذا تعذر الوصول إلى C2 الأساسي، فقد أنشأت البرامج الضارة مستودعًا عامًا على GitHub باسم tpcp-docs في المؤسسة الضحية، ونشرت إصدارًا مختومًا بالوقت، وحمّلت حزمة بيانات الاعتماد المشفرة بـ RSA كأصل إصدار، وتوجيه الاستخراج عبر objects.githubusercontent.com، وهو مجال لا يمكن للمنظمات حظره عمليًا دون كسر خطوط أنابيب CI/CD الخاصة بها.

Insight: Blockchain Architecture Weaponized: This is the first confirmed use of ICP blockchain infrastructure as C2 in a software supply chain attack. The censorship-resistance property that makes ICP compelling for decentralized applications is precisely what makes it hostile to incident response. The attacker found a way to route C2 traffic through infrastructure whose non-takedownability is a verified, documented, intentional design feature. Traditional IR playbooks have no answer for this beyond network-layer blocking.

رسم خرائط MITRE

Tactic Technique ID Technique Name How It Applied
Initial Access T1195.002 Compromise Software Supply Chain pull_request_target misconfig exploited to steal PAT; release tags force-pushed to malicious commit
Persistence T1098 Account Manipulation aqua-bot service account token retained after incomplete credential rotation
Defense Evasion T1036.005 Masquerading: Match Legitimate Name sysmon.py dropped to mimic legitimate sysmon monitoring artifact
Defense Evasion T1027.002 Obfuscated Files or Information: Software Packing AES-256-CBC + RSA-4096 encrypted payload rendered irrecoverable without attacker private key
Credential Access T1552 Unsecured Credentials Broad filesystem sweep targeting SSH keys, cloud credentials, K8s tokens, TFstate, wallet files
C2 T1102 Web Service ICP blockchain node used as primary C2 — first confirmed blockchain-hosted C2 in a supply chain attack
Exfiltration T1567.001 Exfiltration to Code Repository Encrypted credential bundle uploaded as release asset to attacker-created tpcp-docs GitHub repo
Exfiltration T1041 Exfiltration Over C2 Channel Primary exfil via HTTPS POST to typosquatted domain scan.aquasecurtiy[.]org

دراسة الحالة الرابعة - litellm v1.82.8 (PyPI، 24 مارس 2026): تصعيد التنفيذ التلقائي .pth

الخلفية

LiteLM، وهي واحدة من مكتبات Python الأكثر استخدامًا لتوجيه المكالمات عبر OpenAI و Anthropic و Cohere وواجهات برمجة تطبيقات LLM الأخرى، لديها إصدارات v1.82.7 و v1.82.8 تم نشرها على PyPI مع حمولة ضارة. تم تحميل الحزم بدون علامة GitHub أو إصدار مطابق، مما يعني أنه تم تجاوز خط أنابيب الإصدار القياسي تمامًا وتم دفع المهاجم مباشرة إلى سجل الحزمة باستخدام بيانات اعتماد المشرف المخترقة.

تم إغلاق قضية GitHub التي أثارها المجتمع باعتبارها «غير مخطط لها» في غضون ساعات وتم إغراقها على الفور بمئات حسابات الروبوتات لتخفيف خيط المناقشة - وهي تقنية قمع تشير إلى الأمن التشغيلي المخطط له مسبقًا، وليس الفاعل الانتهازي.

آلية التنفيذ التلقائي .pth

هذا هو التصعيد الفني الذي يميز هجوم litelm عن كل ما قبله في هذا التقرير. تطلبت الهجمات السابقة تنفيذ خط أنابيب CI/CD أو جلسة SSH نشطة لتشغيل الحمولة. استخدمت برامج ليتيلم الخبيثة ملف بايثون .pth المسمى litellm_init.pth.

ملفات Python .pth هي ملفات تكوين المسار تتم معالجتها تلقائيًا بواسطة مترجم Python عند كل بدء تشغيل، ولا يوجد بيان استيراد، ولا توجد مكالمة صريحة، ولا يلزم إجراء المستخدم. تعمل أي عملية Python يتم تشغيلها على جهاز مع تثبيت الحزمة على تشغيل الحمولة بصمت وتلقائيًا من لحظة التثبيت. يتضمن ذلك أجهزة الكمبيوتر المحمولة المطورة محليًا، وليس فقط أجهزة CI runners.

تخلق الآلية أثرًا جانبيًا غير مقصود للقنبلة الشوكية: ينتج ملف.pth عملية Python فرعية عبر Subprocess.popen، والتي تؤدي في حد ذاتها إلى تشغيل نفس ملف.pth عند بدء التشغيل، مما يؤدي إلى تقسيم العمليات بشكل كبير حتى يتعطل الجهاز. كان هذا خطأ في البرامج الضارة، وكان من الممكن أن يؤدي ملف القفل أو فحص PID إلى تشغيله بصمت إلى أجل غير مسمى. ومن المفارقات أن الحادث هو ما لفت الانتباه.

حمولة ثلاثية المراحل

Responsive Table
Stage Action
Collection SSH keys, .env files, AWS/GCP/Azure credentials, Kubernetes configs, DB passwords, .gitconfig, shell history, crypto wallet files, IMDS cloud metadata endpoint
Exfiltration AES-256-CBC encrypted + RSA-4096 session key wrap → POSTed to hxxps://models.litellm.cloud/ (typosquatted domain)
Persistence + Lateral Movement Read all Kubernetes cluster secrets across all namespaces, created privileged alpine:latest pod in kube-system mounting host filesystem, installed ~/.config/sysmon/sysmon.py + ~/.config/systemd/user/sysmon.service

رسم خرائط MITRE

Responsive Threat Table
Tactic Technique ID Technique Name How It Applied
Initial Access T1195.001 Compromise Software Dependencies & Dev Tools Malicious package uploaded directly to PyPI bypassing GitHub release pipeline
Execution T1546.004 Event Triggered Execution: Unix Shell Config .pth file auto-executes on every Python interpreter startup without user action
Persistence T1543.001 Create or Modify System Process: Systemd Service sysmon.service installed as persistent systemd user service
Credential Access T1552 Unsecured Credentials Broad filesystem sweep targeting SSH keys, cloud credentials, K8s configs, wallet files
Lateral Movement T1611 Escape to Host Privileged Kubernetes pod with host filesystem mount created in kube-system
Defense Evasion T1036.005 Masquerading: Match Legitimate Name Persistence installed as sysmon.py — identical naming to Trivy incident
Exfiltration T1041 Exfiltration Over C2 Channel AES-256/RSA-4096 encrypted bundle POSTed to typosquatted models.litellm.cloud

الفجوة: أين يفشل ATTACK في CI/CD

لا تحتوي ثلاثة نواقل هجوم محددة من هذه الحوادث على مخطط هجوم نظيف:

1. تصعيد امتياز pull_request_target
إن استغلال مشغل pull_request_target الخاص بـ GitHub للوصول إلى أسرار الفرع الأساسي من علاقات عامة خارجية غير موثوقة هو أسلوب وصول أولي خاص بـ CI/CD. T1195.001 هو أقرب تعيين ولكنه يصف حل وسط التبعية، وليس إساءة استخدام مشغل سير العمل. لا توجد تقنية ATTACK لـ «إساءة استخدام نطاق امتياز مشغل سير عمل CI/CD.»

2. انتشار التبعية المتعدية كحركة جانبية
لم تتضمن سلسلة القتل reviewdog → tj-actions أي سرقة لبيانات الاعتماد، ولا محور للشبكة، ولا ثغرة مستغلة بالمعنى التقليدي. لقد كان ميراثًا خالصًا للثقة من خلال الرسم البياني للتبعية. T1199 (علاقة موثوقة) تقترب من ذلك، ولكن تم تصميم هذه التقنية لعلاقات موفري تكنولوجيا المعلومات من الأطراف الثالثة، وليس الرسوم البيانية لتبعية الحزمة الآلية. التمييز مهم لهندسة الكشف.

3. C2 المستضافة بواسطة البلوك تشين
T1102 (خدمة الويب) هي أقرب خريطة لـ ICP blockchain C2، ولكن تم تصميم T1102 لاستخدام المهاجمين لخدمات الويب المشروعة مثل Twitter أو Pastebin. تختلف البنية التحتية لـ ICP blockchain بشكل قاطع، فهي لا مركزية وغير قابلة للتغيير وليس لها مسار للإبلاغ عن إساءة الاستخدام. لا يتم تسجيل ملف تعريف مقاومة الإزالة الخاص بـ blockchain C2 في أي مكان في إطار ATTACK الحالي. هذه فجوة حقيقية ستحتاج MITRE إلى معالجتها مع انتشار هذه التقنية.

الارتباطات بين الحوادث: ما لا ينشره البائعون

تأثير مارس

أدوات XZ: مارس 2024. الإجراءات التجارية/المراجعة: مارس 2025. تريفي/أكوا: مارس 2026.

قد يكون بعض هذا توقيت الكشف بدلاً من توقيت التفجير، وتستغرق التحقيقات أسابيع. ولكن هناك حجة هيكلية: شهر مارس هو الوقت الذي يصل فيه ضغط دورة الإصدار في الربع الأول إلى ذروته، وعندما يتم جذب المشرفين الأساسيين للسفر في المؤتمرات (تقع كل من RSA و KubeCon EU و S4 في الربع الأول من الربع الأول إلى الربع الثاني)، وعندما تعني دورات النشر في الربع الأول للمؤسسات أن الاعتماد النهائي للإصدارات الجديدة يصل إلى أعلى مستوياته السنوية. سيجد عامل التهديد الذي يستخدم تردد التزام GitHub ووقت استجابة مراجعة العلاقات العامة كبروكسيات الانتباه تجريبيًا أن شهر مارس هو نافذة الاستغلال المثلى. تشير ثلاث مسيرات متتالية إلى أن هذه الفرضية تستحق أن تؤخذ على محمل الجد.

أطروحة استهداف أداة الأمان

تشترك المشاريع الثلاثة المخترقة، xz-utils (المضمنة في sshd عبر liblzma)، و trivy-action (ماسح الأمان)، و tj-actions/الملفات المتغيرة (اكتشاف تغيير CI)، في خاصية لا تمتلكها مكتبات التطبيقات: فهي تعمل بثقة ضمنية مرتفعة عند التقاطع المميز لسطح النشر بأكمله للمؤسسة.

لا يقوم ماسح الأمان المخترق بجمع بيانات اعتماد خط أنابيب واحد. إنه يحصد بيانات الاعتماد لكل هدف يقوم بمسحه نيابة عن المؤسسة، وسجلات الحاويات، والحسابات السحابية، وتكوينات IaC، ومجموعات Kubernetes. إن مضاعف نطاق الانفجار لأداة الأمان المخترقة أعلى بشكل قاطع من مكتبة التطبيقات المخترقة. لقد اكتشفت الجهات الفاعلة في مجال التهديد ذلك بشكل واضح. كان مجتمع الدفاع أبطأ في التعبير عنها.

تطور البنية التحتية لـ C2: تقدم واضح

Incident Comparison Table
Incident Year Exfil / C2 Method Takedown Resistance
XZ Utils 2024 No active C2 — passive SSH auth oracle N/A (pre-positioned implant)
tj-actions 2025 Secrets printed to ephemeral CI logs N/A — no persistent infrastructure
Trivy (primary) 2026 HTTPS POST to typosquatted domain Low — domain seizure viable
Trivy (fallback) 2026 GitHub CDN tpcp-docs public repo exfil Medium — requires GitHub Trust & Safety
Trivy (binary C2) 2026 ICP blockchain node (icp0.io) Very high — no central takedown path
LiteLLM 2026 HTTPS POST to typosquatted models.litellm.cloud Low — domain seizure viable

يصف التقدم من الزرع السلبي ← حذف السجل المؤقت ← HTTPS المطبعي ← GitHub CDN ← blockchain C2 بحثًا منهجيًا عن البنية التحتية المقاومة للإزالة. ICP هي نقطة النهاية الحالية لهذا البحث.

مصيدة المعالجة غير المكتملة هيكلية

في كل من tj-actions و Trivy، تركت المعالجة اللاحقة للإفصاح الوصول المتبقي سليمًا. أكدت شركة أكوا سيكيوريتي أن رمز أكوا بوت نجا من اكتساح الدوران في 1 مارس. هذا ليس فشلًا خاصًا بـ Aqua، فهو يعكس كيفية إدارة رموز الروبوت عالميًا: يتم توفيرها مرة واحدة، ودمجها في أسرار المستودع، واستبعادها من نظام التناوب المطبق على بيانات الاعتماد البشرية.

تعيش الروبوتات البشرية في مديرين سريين لديهم مسارات تدقيق. الرموز المميزة لحساب الخدمة الآلية ليس لها مالك، ولا سياسة انتهاء صلاحية، وهي دائمًا أول شيء يتم تفويته في عملية التدوير. الإصلاح الهيكلي واضح ولم يتم تنفيذه على نطاق واسع: يجب أن يتم تدوير رموز الروبوت التي تم تحديد نطاقها للإصدار والوصول إلى كتابة العلامات وفقًا لنفس الجدول الزمني لبيانات الاعتماد البشرية المميزة ويجب أن تكون أول عملية تدقيق في أي مراجعة بعد التسوية.

ارتكاب انتحال البيانات الوصفية: الطوابع الزمنية لواجهة مستخدم GitHub غير موثوقة

حمل ارتكاب Trivy الضار طوابع زمنية للمؤلف يعود تاريخها إلى 2024-07-09، تم تعيينها عبر GIT_AUTHOR_DATE و GIT_COMMITTER_DATE، مع نسخ اسم المؤلف من ملتزم سابق شرعي ورسالة التزام مكتوب عليها «ترقية التوافه إلى v0.53.0 (#369)». عرضت واجهة مستخدم إصدار GitHub هذه البيانات الوصفية بشكل متماثل قبل وبعد إعادة تعيين العلامة. لا يوجد مؤشر مرئي يعكس التغيير.

تعمل أي عملية إعادة بناء للجدول الزمني للاستجابة للحوادث ترتكز على بيانات GitHub web UI الوصفية مع دليل يمكن للمهاجم تزويره باستخدام أمر shell واحد. المرساة الوحيدة الموثوقة من الناحية الجنائية هي SHA الملتزم، الذي تم التحقق منه مقابل شهادات مصدر SLSA، أو سجلات شفافية Sigstore، أو سجلات الإصدار الموقعة.

توقيع sysmon.py المستمر: مجموعة أدوات مشتركة أم ممثل مشترك؟

أسقط ثنائي تريفي (v0.69.4) بابًا خلفيًا عند ~/.config/sysmon.py. يقوم برنامج litell الضار بتثبيت الثبات عند ~/.config/sysmon/sysmon.py مع خدمة مستخدم systemd مطابقة. تتطابق اصطلاح التسمية وهيكل الدليل ونظام التشفير AES-256-CBC + RSA-4096 وحصاد نقطة نهاية البيانات الوصفية لـ IMDS في كلا الحادثتين - وتم تفجير كلا الحادثين في مارس 2026، في غضون خمسة أيام من بعضهما البعض.

هذا هو إما نفس عامل التهديد الذي يعيد استخدام نفس إطار الأدوات عبر هدفين منفصلين، أو ممثلين مختلفين باستخدام مجموعة برامج ضارة تجارية/سرية مشتركة. أي من التفسيرين أكثر إثارة للقلق من الصدفة. يجب الآن التعامل مع نمط تسمية sysmon.py كمؤشر لمجموعة التهديدات، وأي ملف يطابق ~/.config/sysmon*.py على جهاز مطور أو CI runner يتطلب الفرز الفوري.

هندسة الكشف: ما تفتقده الأدوات القياسية

الإشارة 1 - مراقبة حجم ملف نقطة الدخول

قم بتسجيل حجم البايت لكل إجراء GitHub Action entrypoint.sh تم تنزيله لكل {action} @ {sha} في وقت تنفيذ خط الأنابيب. تنبيه بشأن الانحرافات التي تتجاوز 50٪ عن خط الأساس المحدد. كان من الممكن اكتشاف حقنة Trivy، وهي زيادة في الحجم بمقدار 6.16 ×، قبل سرقة بيانات اعتماد واحدة. هذا غلاف مكون من 10 أسطر حول حذاء الجري الخاص بك. لم يقم أحد تقريبًا ببنائه.

الإشارة 2 - كشف الالتزام المتدلي

لا يمكن الوصول إلى ارتكاب Trivy الضار e0198fd2b6e1679e36d32933941182d9afa82f6f من الفرع الرئيسي، فهو موجود فقط لأن العلامة تشير إليه. تعرض واجهة برمجة تطبيقات GitHub إمكانية الوصول إلى الالتزام.

الإشارة 3 - خروج مجال بلوكتشين من CI Runners

ليس لدى المتسابقين الذين تستضيفهم GitHub أي سبب مشروع للاتصال بـ*.icp0.io أو *.ic0.app. كان الحظر على مستوى الشبكة على الشبكات الفرعية لـ CI runner بالإضافة إلى تسجيل استعلام DNS لهذه المجالات من شأنه أن يوفر اكتشافًا مسبقًا للاستغلال لدورة استطلاع C2 الخاصة بـ Trivy binary.

الإشارة 4 - يتضاعف الرمز الجديد/الشبكة الفرعية/الريبو ثلاث مرات في سجلات تدقيق GitHub

ضع علامة على أي حدث git.push حيث لم تظهر المجموعة (hashed_token، بادئة الشبكة الفرعية /16، target_repo) في خط الأساس السابق لمدة 7 أيام. نادرًا ما يقدم نشاط المطور الشرعي جميع الأبعاد الثلاثة في وقت واحد. سيتم استخدام الرموز المسروقة من البنية التحتية التي يتحكم فيها المهاجم للدفع إلى مستودعات غير مألوفة.

الإشارة 5 - حزمة PyPI بدون إصدار GitHub المقابل

تجاوز هجوم litellm GitHub تمامًا عن طريق التحميل مباشرة إلى PyPI باستخدام بيانات اعتماد المشرف المخترقة. راقب ملفات قفل تبعية Python الخاصة بك لأي إصدار حزمة لا يحتوي على علامة إصدار GitHub المقابلة أو شهادة المصدر الموقعة على PyPI. يمكن لأدوات مثل pip-audit جنبًا إلى جنب مع واجهة برمجة تطبيقات مصدر PyPI الإبلاغ عن حالات عدم التطابق بين الإصدار والإصدار. يجب التعامل مع أي إصدار حزمة على PyPI بدون إصدار GitHub مطابق على أنه لم يتم التحقق منه حتى يثبت خلاف ذلك.

أفضل 10 وجبات سريعة لفرق الأمن

1. توقف عن استخدام علامات الإصدار في إجراءات GitHub، واستخدم الالتزام بـ SHAs

العلامات هي مؤشرات قابلة للتغيير. يمكن للمهاجم الذي لديه حق الوصول للكتابة في الريبو إعادة توجيه العلامة بصمت إلى شفرة ضارة باستخدام طابع زمني مزور ومؤشر صفر لواجهة المستخدم. يتم إصلاح الالتزام الكامل لـ SHA بشكل مشفر ويزيل فئة هجوم التسمم بالعلامات بأكملها.

2. بعد أي حل وسط لـ CI/CD، قم بمراجعة رموز الروبوت قبل أي شيء آخر.

يتم تدوير المسارات البشرية؛ يتم نسيان رموز الروبوت. في كل من حوادث tj-actions و Trivy، أعطت الرموز المميزة لحساب الخدمة غير المبطلة ذات الأذونات المتطابقة المهاجمين وصولاً مستمرًا بعد الكشف العام. احتفظ بمخزون مخصص وقم بتدوير رموز الروبوت في نفس دورة 90 يومًا مثل بيانات الاعتماد البشرية المميزة.

3. ماسح الأمان هو الهدف الأعلى قيمة في خط الأنابيب الخاص بك.

وهو يحمل بيانات اعتماد متزامنة للحسابات السحابية وسجلات الحاويات ومجموعات Kubernetes وتكوينات IaC، وكل شيء يقوم بمسحه نيابة عنك. لا يكشف الماسح الضوئي المخترق عن خط أنابيب واحد؛ إنه يعرض كل هدف يُسمح لخط الأنابيب بالوصول إليه.

4. راقب أحجام ملفات نقطة إدخال GitHub Action بين عمليات تشغيل خطوط الأنابيب.

تضخمت نقطة إدخال Trivy الضارة من 2,855 إلى 17592 بايت، بزيادة قدرها 6.16 مرة لم يتم وضع علامة عليها لأي أداة. كان من الممكن أن يكتشف خط الأساس البسيط للحجم لكل {action} @ {sha}، الذي ينبه إلى الانحرافات التي تزيد عن 50٪، قبل سرقة بيانات اعتماد واحدة.

5. أنت مسؤول عن التبعيات التي لم تختارها صراحة.

أصاب هجوم tj-actions 23,000 مستودع من خلال إجراء المنفعة بثلاثة مستويات من التبعية في المنبع لم يشر إليها أي من هذه الفرق على الإطلاق. قم بتعيين شجرة تبعية الإجراء المتعدي الكاملة الخاصة بك وقم بوضع علامة على أي شيء باستخدام حق الوصول للكتابة أو تنفيذ shell التعسفي الذي لا يمكنك حسابه بشكل مباشر.

6. قم بحظر نطاقات خروج البلوكشين على الشبكات الفرعية التي تعمل بنظام CI بشكل استباقي.

وقد تمت استضافة تريفي سي 2 على بلوكشين ICP على العنوان *.icp0.io. لا يوجد مسجل ولا مزود استضافة ولا يوجد مسار للإزالة. يُعد حظر طبقة الشبكة هو عنصر التحكم الوحيد المتاح، ويجب أن يكون موجودًا قبل وقوع الحادث، وليس استجابة له.

7. الطوابع الزمنية لالتزام GitHub غير موثوقة من الناحية الجنائية.

يمكن خداع GIT_AUTHOR_DATE و GIT_COMMITTER_DATE بحرية. يعود تاريخ ارتكاب Trivy الضار إلى عام 2024 مع اسم مؤلف منسوخ ورسالة معقولة. بالنسبة لأي تحقيق بعد الحادث، يمكن الوثوق فقط بالالتزام الذي تم التحقق من صحة SHA مقابل مصدر SLSA أو سجلات شفافية Sigstore.

8. pull_request_target يمنح العلاقات العامة الخارجية الوصول إلى أسرارك.

على عكس pull_request، يقوم هذا المشغل بتنفيذ عمليات سير عمل الفرع الأساسي بنطاق سري كامل حتى على الانقسامات من المساهمين غير الموثوق بهم. قم بمراجعة كل سير عمل باستخدام هذا المشغل وتطبيق تحديد النطاق الأقل امتيازًا. إذا لم يكن هناك مبرر موثق لاستخدامه، فانتقل إلى pull_request.

9. تعامل مع شهر مارس باعتباره الشهر الأكثر خطورة وخطط وفقًا لذلك.

ثلاث مسيرات متتالية، وأربع تفجيرات مؤكدة لسلسلة التوريد، اثنتان في مارس 2026 وحده، والثانية في اليوم التالي لنشر هذا التقرير. يتقارب ضغط الإطلاق في الربع الأول وسفر الصيانة للمؤتمرات ودورات ذروة النشر في المؤسسة في نافذة استغلال موثوقة. قم بتشغيل تدقيق رمز الروبوت قبل الربع، وقم بزيادة مراقبة التبعية، وأضف تدقيقًا إضافيًا للمراجعة إلى مستودعات أدوات الأمان قبل حلول شهر مارس.

10. الاستهداف الدقيق والتعرض الجماعي لا يستبعد أحدهما الآخر.

تم تصميم حل وسط reviewdog خصيصًا للوصول إلى خط أنابيب CI الخاص بـ Coinbase. كانت المستودعات الأخرى البالغ عددها 23000 التي تم حصادها على طول الطريق عبارة عن غطاء جانبي. إذا قام خط الأنابيب الخاص بك بتنفيذ إجراء مخترق أثناء نافذة التعرض، فقد تم أخذ بيانات الاعتماد الخاصة بك، بغض النظر عما إذا كنت الهدف المقصود أم لا. تقييمات خرق النطاق وفقًا لذلك.

لم يتم اكتشاف أي من هذه الحوادث بواسطة أدوات الأمان الخاصة بالبائع

هذه هي الملاحظة التي يجب أن تكون في كل ملخص تنفيذي وليست كذلك: شركة Aqua Security، وهي شركة منتجها الأساسي هو أمن سلسلة توريد الحاويات والبرامج، تعرضت سلسلة التوريد الخاصة بها للخطر بطريقة لم تكتشفها أدواتها الخاصة. اكتشفت CrowdStrike تسوية Trivy من خلال التشوهات السلوكية في خطوط أنابيب العملاء، وليس من خلال البنية التحتية للمسح الضوئي الخاصة بـ Aqua. تم اكتشاف tj-actions بواسطة باحث تابع لجهة خارجية، وليس من قبل فريق أمان GitHub أو أي من أدوات الأمان الخاصة بالمنظمات المتأثرة. تم اكتشاف XZ Utils من قبل مهندس يلاحظ وجود خلل في الأداء أثناء القياس غير ذي الصلة. في جميع الحالات الثلاث، كان الاكتشاف عرضيًا أو خارجيًا أو سلوكيًا، ولم يكن أبدًا نتيجة لضوابط الأمان التي كانت موجودة اسميًا. تم اكتشاف مشكلة litellm لأن خطأ القنبلة الشوكية أدى إلى تعطل الآلات، وليس لأن أي أداة أمنية قامت بوضع علامة على الحزمة الضارة. كان من الممكن أن يعمل التنفيذ الأنظف بصمت إلى أجل غير مسمى. خمس حوادث، بدون أي اكتشافات استباقية من خلال عناصر التحكم الأمنية المعينة.

ذا إند

فوجئت بحدوث ذلك في مارس مرة أخرى؟ من الواضح أن الجهات الفاعلة في مجال التهديد لديها تخطيط ربع سنوي أفضل من معظم الفرق الأمنية. ثلاث سنوات، ثلاث مسيرات، ثلاث تنازلات، ولكن بالتأكيد، دعونا نحدد موعد اختبار القلم للربع الرابع. كانت الأداة المصممة لحماية أسرارك هي التي تسرقها، ولم يغض أحد الطرف. ارتكب المهاجم رمزًا نظيفًا بصبر لمدة عامين ونصف؛ وظل التصحيح الخاص بك معتمدًا لسنتين ونصف. وفي مكان ما الآن، تتم صياغة نصيحة CISA ستوصي بالتثبيت لارتكاب SHAs، بينما يتم بالفعل تنظيم حادثة خامسة في مارس المقبل، باستخدام مسار الثبات الذي لم يضيفه أحد إلى قواعد الكشف الخاصة به حتى الآن.

المراجع:

إرشاد أحمد
مستشار الأمن الإقليمي - SEA
آكاش كانان
البحث والقلم والرياضيات

مدونات ذات صلة