من فضلك تسجيل الدخول أو تسجيل لتفعل ذلك.

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

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

إفصاحات هامة: هذا المنشور مكتوب بالكامل بواسطة الإنسان، باستثناء معلومات مؤشرات الاختراق (IoC) التي ساعدني في استخراجها مساعد ذكاء اصطناعي. نظرًا لحساسية الوقت، استُخدم ‘كلود’ لتسريع تحليل برمجيات حصان طروادة (RAT) وإنشاء نص لاكتشاف IoC. نظرًا لكوني مقيمًا في كندا، فقد تم الإبلاغ عن هذه المعلومات إلى الوكالات الكندية المختصة (CCCS وجهات أخرى). هوية المهاجم مفبركة، وقد تم حذف أسماء أفراد غير متورطين لتجنب الخلط. تجدر الإشارة إلى أن هناك مطورين آخرين في مجتمع Rust ذكروا تعرضهم للاستهداف بهجمات مماثلة.

قبل أسبوع ونصف، تلقيت بريدًا إلكترونيًا من شخص يدعي أنه من ‘Lua Ventures’، وهي شركة رأس مال استثماري (غير معروفة لي في ذلك الوقت) يزعمون أنها تعمل في مجال التمويل اللامركزي في سنغافورة. اتضح لاحقًا أن هذه الشخصية كانت ملفقة بالكامل، ومن المحتمل أن الاسم قد اختير ليتم الخلط بينه وبين أسماء أفراد حقيقيين.

بدا البريد الإلكتروني الأول حقيقيًا، وتضمن رابطًا لملف شخصي على LinkedIn يبدو شرعيًا ولكنه ممل إلى حد ما. حتى أن المهاجم أشار إلى شركتين ضمن ‘استثماراتهم’ كانتا تبحثان عن استشارات: Lyrasing وRoadpay. لم يكشف البحث عن أي من الشركتين عن أي أعلام حمراء فورية؛ فكلاهما كان لهما تواجد بسيط على الويب، ولم يكن هناك ما يشير إلى أنهما مزيفتان، بل مجرد شركات في ‘مرحلة مبكرة’.

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

بعد المكالمة مباشرة، جاء الطعم الحقيقي: رسالة بريد إلكتروني للمتابعة تعرض ‘اختبارًا’ تقنيًا.

في هذه المرحلة، شعرت ببعض الانزعاج، لكن لم ينتابني الشك بعد. قمت باستنساخ المستودع، ولكن أول علم أحمر حقيقي ظهر لي هنا.

كان حظي جيدًا؛ لقد أرسلوا لي مستودع TypeScript. لم يبدُ الأمر منطقيًا بالنسبة لي، فبدت التعليمات أقرب إلى مقابلة عمل لـ TypeScript منها إلى تحليل معماري. قررت أن أضغط المستودع وأرسله إلى ‘كلود’ لإجراء فحص سريع، وهو ما كان مزيجًا من الحذر والكسل.

بعد لحظات قليلة، حدد ‘كلود’ بعض الشذوذ: ‘الحزمة الجذرية package.json لا تحتوي على رابط ما بعد التثبيت/التثبيت المسبق، وهو أمر مثير للاهتمام، لأنها تستخدم حزمة التصحيح، والتي عادة ما يتم ربطها بمرحلة ما بعد التثبيت. دعني أتحقق من كل package.json بحثًا عن البرامج النصية لدورة الحياة، ثم أدقق ملفات التصحيح (سطح الخطر الحقيقي، يمكن للتصحيحات إدخال تعليمات برمجية عشوائية في node_modules)’.

أثار هذا اهتمامي بشدة. قمت بفحص الدلائل بنفسي ولاحظت عددًا غير معقول من دلائل `patches/`. بدت الأجزاء القليلة الأولى التي تحققت منها بريئة بما فيه الكفاية، ولكن كما توقعت، كانوا يحاولون فقط إضافة الضجيج لإخفاء الحمولة الحقيقية، على سبيل المثال، اشتملت على مسارات مثل `packages/electron-benchmarks/patches/sumchecker+3.0.1.patch`.

بينما كنت أتحقق ببطء يدويًا، حدد ‘كلود’ العلامات الأولى لـ PinpinRAT: ‘لقد وجدتها. هذه حمولة ضارة. جزءا لا يتجزأ من ملف `typescript+5.9.2.patch`، داخل ما يتم تقديمه كتصحيح روتيني ‘لمحدد الوحدة النمطية’ لـ TypeScript، يوجد كعب تشويش ذاتي التنفيذ من نوع base64-blob يتم حقنه في الجزء العلوي من كل من `_tsc.js` و `typescript.js`.’ هذا الكعب البرمجي يتضمن كودًا مشفرًا بصيغة base64 يتم فك تشفيره باستخدام عملية XOR بمفتاح 73، ثم يُنفذ عبر دالة `new Function(…)` لتجنب الكشف المعتاد عن البرامج الضارة. وهذا يسمح بتنفيذ تعليمات برمجية مخفية في كل مرة يتم فيها تشغيل `tsc` أو أي شيء يستورد `typescript.js`، أي عند أول تشغيل لـ `npm` لفحص النوع أو البناء أو التطوير.

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

الفخ المحكم

تم تصميم المستودع كـ ‘تطبيق لحجز تذاكر العبارات’ يسمى ‘Ticket Harbour’. تضمنت حزمة `task.txt` مجموعة معقولة من المهام الروتينية، ولكنها انتهت بالتعليمات التالية: ‘قم بتشغيل فحص نوع المستودع ومجموعة الاختبار وأوامر إنشاء سطح المكتب/الخادم ذات الصلة قبل الإرسال.’ هذه التعليمات هي الفخ الذي يؤدي إلى الإصابة.

تعمل سلسلة الهجوم على النحو التالي:

  • أربعة أوامر `postinstall` منفصلة تقوم بتشغيل `patch-package`. ولكن أحدها يقوم أيضًا بتشغيل `git update-index –skip-worktree` على ملفات التصحيح، مما يخفيها من `git status`.
  • يقوم ملف `typescript+5.9.2.patch` بحقن كعب برمجي ذاتي التنفيذ في الجزء العلوي من `typescript.js` و `_tsc.js`. يتم تغذية هذا الكعب الغامض إلى `new Function(…)` (لتجنب `eval`، ويفترض لتجنب اكتشاف البرامج الضارة).
  • يقرأ هذا المُحمِّل القطعة المخفية الملحقة بملف يسمى `operators/3.png`، ويقوم بتشغيل كعب WASM صغير مضمن (في قطعة مخصصة `wAsm`)، ثم يولد عملية Node.js منفصلة وصامتة تحمل حمولة مبهمة للمرحلة الثانية تبلغ 1.68 ميجابايت.
  • يقوم بتنظيف آثاره الذاتية في ثلاث طبقات: خدعة `git skip-worktree`، يعيد القطارة كتابة `patch` لحذف الأسطر المحقونة بعد التشغيل لأول مرة، ويقوم الدليل المؤقت للمرحلة الثانية بالحذف الذاتي عند التنفي

الحمولة الفعلية هي حصان طروادة للوصول عن بعد (RAT). كنت قلقًا في الأصل من أن هذا كان يهدف إلى سرقة بيانات الاعتماد، لكنه أسوأ بكثير. تم إخفاء PinpinRAT في ثلاث طبقات مبهمة كان من الصعب فكها: `obfuscator.io` (الذي يزعم توفير حماية ضد نماذج اللغة الكبيرة، وهو أمر مثير للسخرية)، وطبقتين إضافيتين من Base64.

قدرات PinpinRAT

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

لكي أكون واضحًا تمامًا: كان ‘كلود’ قادرًا على إجراء هندسة عكسية لمستويات متعددة من التشويش في حوالي 5 دقائق، وهو أسرع بكثير مما كان بإمكاني فعله.

إن هذا ‘القطارة’ هو حصان طروادة كامل الميزات للوصول عن بعد، ويبدو أنه تم تجميعه بواسطة شخص على دراية بما يفعله. يقوم بإعداد مفتاح RSA محليًا ويستخدم AES-256-CBC كمفتاح جلسة.

عند بدء التشغيل، يستدعي إجراء تسجيل دخول يجمع بصمة المضيف ويخرجها، بما في ذلك:

  • عنوان IP الأساسي (يسرد جميع الواجهات غير الداخلية)، بالإضافة إلى جميع عناوين IP
  • اسم المستخدم (`os.userInfo().username`)
  • اسم المضيف
  • نوع نظام التشغيل + الإصدار + المنصة + المعمارية
  • معرّف العملية (PID) وجميع وسائط عملية (`process.argv`)
  • إصدار Node.js

يقوم بإنشاء زوج مفاتيح RSA-2048 ومفتاح جلسة AES-256 عشوائي (aes_psk)، ثم يتم تشفير كل حركة المرور اللاحقة باستخدام AES-256-CBC مع علامة تكامل HMAC-SHA256.

وهو يدعم الأوامر التالية:

  • `env` – تفريغ `JSON.stringify(process.env)` وإعادته.
  • `upload` – يقرأ مسار ملف عشوائي ويخرجه.
  • `download` – يكتب البايتات التي يوفرها المهاجم إلى أي مسار قابل للكتابة.
  • `spawn` – يقوم بتشغيل عملية عشوائية مع توسيع الصدفة الاختياري.
  • `ls` / `cd` / `pwd` / `cp` / `mv` – أوامر أساسية لنظام الملفات.
  • `dns` – يجعل المضيف يحل الأسماء التعسفية من خلال محلل محدد (لأنفاق DNS؟).
  • `dismantle` – إزالة ذاتية.

مؤشرات الاختراق (IoCs)

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

فيما يلي بعض مؤشرات الاختراق الموجودة في البرنامج الضار PinpinRAT:

  • خادم القيادة والتحكم (C2): `89.124.107.161:80`
  • المهمة المجدولة (ويندوز): `PinpinWrappedJs`
  • عملية تنكرية (macOS): `com.apple.WebKit.Networking`
  • متغيرات البيئة: `NODT_PAYLOAD_PATH`، `NODT_PAYLOAD_ARGS`
  • قطعة حماية PNG: `WASMPACK` (WASM)
  • `PINPIN_NO_AUTOSTART=1`: لإيقاف الثبات
  • وظيفة كرون (cronjob) مع `mutex.js` (فقط إذا كان RAT لديه إذن، قد لا يكون موجودًا على macOS)
  • سلاسل مرساة في `typescript.js`: `12ff4b51`، `ticket-harbor-tsc-shim-anchor`
  • ملف `typescript+5.9.2.patch` الذي يحتوي على الحمولة
  • أدلة القطع الأثرية:
  • undefined

أعلام كان يجب أن أراها مبكرًا

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

  • تحتوي الرسائل على بعض العبارات التي تكشف عن استخدام نماذج اللغة الكبيرة (LLM) عند التدقيق. ربما كانت هذه علامة على ضرورة التعامل مع أي شيء بهذا القدر من الشك.
  • يبدو الملف الشخصي على LinkedIn حقيقيًا للوهلة الأولى، ولكنه مليء ببيانات غير منطقية (مثل ‘BSc(Hons)، MA (Dist)، PGDipFM، CEng’ مجتمعة)، والتي كان يجب أن تثير نوعًا من الشك على الأقل. لم يكن هناك أي نشاط حقيقي عليه.
  • كان لرابط وسائل التواصل الاجتماعي على موقعهم الإلكتروني تاريخ حقيقي، ولكن تم تغيير الاسم في نوفمبر 2025. كانت جميع المنشورات فارغة جدًا، مجرد مدح غامض لشركات لم يتم وصفها بأي تفاصيل حقيقية.
  • لم يكن لأي من الشركات التي لديها مواقع ويب وجود حقيقي خارج مواقعها الإلكترونية البراقة.
  • لم يرسلوا دعوة اجتماع مناسبة أبدًا؛ كانت مجرد تحديد وقت وGoogle Meet. أي شركة رأس مال استثماري لا تستخدم تقويمًا رسميًا؟ كانت كاميراتهم مغلقة طوال الوقت وكانوا يبررون ذلك بأنهم ‘يسافرون’.
  • كان النهج العام هو إنشاء صندوق رأس مال استثماري مقره سنغافورة، يعمل خارج منطقة CEST الزمنية، ويتواصل مع مطور في كندا، مع نطاقات تستهدف العملاء الأمريكيين ولكنها تنتهي بـ `.cc`. من الصعب جدًا التحقق من وثائق اعتماد منظمة بعيدة جدًا.

لم يكن هناك شيء بديهي يمكن ملاحظته دون إدراك لاحق، ولكن القطع المفقودة كانت موجودة إذا نظرت إلى الصورة الكاملة.

من يقف وراء هذا الهجوم؟

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

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

لأكون صريحًا، الأمر المرعب والذي يدعو لليقظة بالنسبة لي هو أنه لو كان هذا مستودعًا للغة Rust يحتوي على سيناريو `build.rs` ملغوم، لربما وقعت ضحية له.

WordStar: إرث معالج الكلمات الأسطوري ومفضل الكتاب
إجابات الكلمات المتقاطعة البسيطة لصحيفة نيويورك تايمز اليوم السبت 27 يونيو

Reactions

0
0
0
0
0
0
بالفعل كان رد فعل لهذا المنصب.

ردود الفعل