- قامت حزم npm الخبيثة colortoolsv2 و mimelib2 بجلب عناوين URL C2 من عقد ذكي Ethereum للتهرب من الاكتشاف.
- تتيح التوجيه غير المباشر على السلسلة للمشغلين تدوير نقاط النهاية دون إعادة نشر الحزم؛ تمت إزالة colortoolsv2 في 7 يوليو قبل التحول إلى mimelib2.
- استخدمت حملة GitHub المنسقة مستودعات روبوتات التداول المزيفة، والنجوم المتضخمة، والالتزامات النصية لإخفاء التبعيات الضارة.
- تتضمن مؤشرات الأداء الرئيسية إصدارات الحزمة، وتجزئة SHA1، والعقد 0x1f171a1b07c108eae05a5bccbe86922d66227e2b، بالإضافة إلى الإرشادات للمدافعين.
لقد لجأ الجهات الفاعلة في مجال التهديد إلى خدعة جديدة: توجيه البنية التحتية الضارة من خلال عقد ذكي لإيثريوم لإخفاء مؤشرات القيادة والتحكم (C2) تستخدمها حزم npm. وفقًا لـ ReversingLabs، تواصلت حزمتان - colortoolsv2 وmimelib2 - بهدوء مع سلسلة الكتل لاسترجاع عناوين URL لحمولات المرحلة الثانية، متجاوزتين بذلك عمليات الفحص الروتينية التي تبحث عن النطاقات المبرمجة مسبقًا.
بدلاً من استغلال خطأ في Ethereum نفسه، يستفيد المخطط من الشبكة كـ طبقة غير مباشرة عامة ومرنةبعد حظر colortoolsv2 على npm في 7 يوليو، تحول المشغلون بسرعة إلى mimelib2 بمنطق متطابق تقريبًا، واستمروا في الإشارة إلى نفس العقد الموجود على السلسلة للخطوة التالية.
من تثبيت npm إلى البحث على السلسلة: كيف نجح التحويل

داخل colortoolsv2، يعمل محمل الحد الأدنى (index.js) كمرسل استدعى أمرًا خارجيًا وجلب هدفه من عقد ذكي بدلاً من نص برمجي محلي أو تكوين ثابت. يعرض Etherscan العقد عند 0x1f171a1b07c108eae05a5bccbe86922d66227e2b، حيث أعادت دوال القراءة الخاصة به عنوان URL المستخدم للوصول إلى خدمة C2.
أدى هذا المؤشر الموجود على السلسلة إلى تعقيد عملية الحظر: لم يتمكن المدافعون من الاعتماد ببساطة على العثور على المجال المبرمج أو إدراجه في القائمة السوداء في الحزمة لأن نقطة نهاية نشطة عاشت خلف عقد يتحكم فيه المشغلون. تتطلب الوجهات الدوارة تحديث تخزين العقد فقط، وليس إعادة نشر قطعة أثرية npm، ويتم دمج أي حركة مرور blockchain الناتجة على أنها شرعية.
بمجرد التنفيذ أثناء التثبيت أو وقت التشغيل، استعاد المحمل second-stage component (SHA1 021d0eef8f457eb2a9f9fb2260dd2e39ff009a21)، الذي عالج نشاط المتابعة. بمحاكاة سلوك colortoolsv2، أعاد mimelib2 استخدام نفس العقد لنفس الغرض مع مسارات كود متطابقة تقريبًا.
وصفت شركة ReversingLabs هذا النهج بأنه غير عادي في نظام npm البيئي: تمت استضافة عناوين URL الضارة عبر حالة العقد الذكي، وليس على خدمات الويب التقليدية التي غالبًا ما نراها في حملات سلسلة التوريد السابقة (على سبيل المثال، التخزين السحابي أو Gists).
دخان ومرايا GitHub: مستودعات روبوتات التداول المزيفة كغطاء

لم تظهر حزم npm بمعزل عن غيرها. فقد أنشأ المشغلون شبكة من مشاريع GitHub قُدّمت كأدوات لتداول العملات المشفرة.مستودعات مثل solana-trading-bot-v2—ثم ربطوها بالتبعيات الخبيثة. للمراقب العادي، بدت هذه المستودعات "حيوية"، إذ تضم آلاف الالتزامات، وصيانين متعددين، ونجومًا، ومراقبين.
كشفت نظرة أقرب أن الكثير من النشاط كان مخططًا له وسطحيًا، بما في ذلك عمليات تغيير ملفات الترخيص المتكررة و حسابات تم إنشاؤها حديثًا بمحتوى متفرق (بعضها أُنشئ حوالي ١٠ يوليو بملفات README بسيطة مثل "Hello"). ظهرت أسماء المستخدمين التي ظهرت في سجلات الالتزامات - بما في ذلك slunfuedrac وcnaovalles وpastimerles - بشكل متكرر في المشاريع المرحلية.
أظهرت الالتزامات بالضبط المكان الذي تم فيه ربط الحزم بقاعدة التعليمات البرمجية—إضافة colortoolsv2 والإصدارات الأحدث من mimelib2 كاعتماديات في ملفات bot.ts، والواردات المقابلة تظهر في src/index.ts. جعل الدليل الاجتماعي المُصنّع إدراج التبعية أقل وضوحًا بكثير أثناء المراجعة السطحية.
في الواقع، قامت واجهة GitHub بتضخيم إشارات الثقة بينما نقطة القرار الحقيقية للخطوة التالية للبرامج الضارة كانت على الإيثريوممن خلال فصل الهندسة الاجتماعية (GitHub) عن التحكم (العقد الذكي)، جعل المشغلون الحملة أكثر صعوبة في اكتشافها وتعطيلها.
مؤشرات الأداء العالمية والخطوات الملموسة للمدافعين

نشرت ReversingLabs قائمةً تفصيليةً بالقطع الأثرية المرتبطة بهذا النشاط، بالإضافة إلى المرجع الرئيسي على السلسلة الذي قاد المرحلة الثانية. يمكن استخدام العناصر التالية: البحث عن التعرضات وحظرها والتحقق منها في خطوط الأنابيب والبناء ومحطات عمل المطورين:
- npm packages: colortoolsv2 1.0.0 (SHA1 678c20775ff86b014ae8d9869ce5c41ee06b6215), 1.0.1 (1bb7b23f45ed80bce33a6b6e6bc4f99750d5a34b), 1.0.2 (db86351f938a55756061e9b1f4469ff2699e9e27)
- npm packages: mimelib2 1.0.0 (bda31e9022f5994385c26bd8a451acf0cd0b36da), 1.0.1 (c5488b605cf3e9e9ef35da407ea848cf0326fdea)
- Second stage: SHA1 021d0eef8f457eb2a9f9fb2260dd2e39ff009a21
- العقد الذكي المستخدم في التوجيه غير المباشر C2: 0x1f171a1b07c108eae05a5bccbe86922d66227e2b
سياق إضافي من مرحلة الإزالة: تمت إزالة colortoolsv2 من npm في 7 يوليو، وبعد ذلك قام المشغلون بالتبديل إلى mimelib2 بنفس المرجع الموجود على السلسلة وسلوك المحمل المتطابق تقريبًا.
تتضمن الإجراءات الموصى بها لفرق الهندسة والأمن ما يلي: عمليات البحث على السلسلة التي يتم إجراؤها بواسطة نصوص التثبيت؛ حظر أو تحذير من تنفيذ child_process في خطافات دورة حياة الحزمة؛ رفض الخروج من الشبكة أثناء تثبيت npm في CI؛ فرض قوائم السماح للسجلات والصيانات؛ قفل الإصدارات الانتقالية؛ ومراقبة الطلبات المرتبطة بعنوان العقد أعلاه.
على نطاق أوسع، تعامل مع مقاييس شعبية المستودع باعتبارها إشارات غير أمنية. يجب أن تنبع الثقة من الكود والتحف ومؤشرات الشبكةلا يتعلق الأمر بعدد النجوم، أو حجم الالتزامات، أو ظهور العديد من "المسؤولين عن الصيانة". يظل التحقق المستقل - التحليل الثابت، والتنفيذ في بيئة معزولة، وفحوصات المنشأ التي يقودها SBOM - أمرًا بالغ الأهمية.
ما يبرز في هذه الحملة ليس عيبًا في إيثريوم أو npm أو GitHub بشكل فردي، بل طريقة دمج البنية التحتية العامة في سلسلة توصيل خفية. نقل اكتشاف C2 إلى عقد ذكي وغسل المصداقية من خلال GitHubقام الممثلون بتمديد الكشف التقليدي بشكل غير صحيح. النظافة الدقيقة للاعتماد والتحكم متعدد الطبقات هما الثقل الموازن.
