كشف باحثون أمنيون عن هجوم سلسلة توريد جديد يستهدف المطورين الذين يستخدمون لغة البرمجة Go، حيث تم نشر وحدة ضارة شبيهة بمكتبة التشفير الرائدة golang.org/x/crypto. تهدف هذه الوحدة الخبيثة إلى سرقة كلمات المرور ونشر أبواب خلفية (backdoors) على الأنظمة المستهدفة، مما يشكل تهديدًا كبيرًا لبيئات تطوير البرمجيات.
يُعد هذا الاكتشاف تذكيرًا بأن حتى أسماء الاعتماديات (dependencies) الموثوقة يمكن التلاعب بها لاستهداف المطورين الذين قد لا يشكون أبدًا في أن مكتبة مألوفة تعمل ضدهم.
وحدة Go الخبيثة لسرقة كلمات المرور
الوحدة الخبيثة المسماة github[.]com/xinfeisoft/crypto، تم نشرها علنًا على pkg.go.dev بالإصدار v0.15.0. لقد قام المهاجم بنسخ الهيكل الكامل لمستودع golang.org/x/crypto الشرعي، بما في ذلك الحزم الفرعية المألوفة مثل bcrypt و argon2. هذا التشابه سمح لها بالاندماج في رسوم التبعية (dependency graphs) دون إثارة الشكوك الفورية.
من جهة أخرى، استغل المهاجم اعتماد نظام Go البيئي على GitHub كمرآة لمستودع go.googlesource.com/crypto الأصلي. هذا سمح للوحدة ذات الاسم المشابه بالظهور كاعتماد عادي أثناء مراجعة التعليمات البرمجية.
تمكن باحثو Socket.dev من تحديد الوحدة الخبيثة بعد أن اكتشف ماسح الذكاء الاصطناعي لديهم بابًا خلفيًا مدمجًا في الملف ssh/terminal/terminal.go. استهدف التعديل دالة ReadPassword المساعدة، وهي الدالة التي تستخدمها الأدوات التي تتعامل مع عبارات مرور SSH، وتسجيلات الدخول إلى قواعد البيانات، ومفاتيح API التي يتم إدخالها بشكل تفاعلي.
تم تصميم الباب الخلفي ليعمل فقط أثناء الاستخدام التفاعلي النشط، مما يجعله صامتًا أثناء تشغيل الاختبارات الآلية. هذا يقلل بشكل كبير من فرصة اكتشافه بالصدفة.
آلية عمل الوحدة الخبيثة
بمجرد استدعاء الدالة المعرضة للخطر ReadPassword بواسطة تطبيق المطور، فإنها تلتقط بيانات الاعتماد في نص عادي وتقوم بكتابتها إلى المسار /usr/share/nano/.lock، وهو مسار تم اختياره لتجنب الكشف. بعد ذلك، تقوم بجلب مؤشر مرحلي من مستودع الجهة الفاعلة للتهديد المستضاف على GitHub، ثم ترسل كلمة المرور المسروقة إلى نقطة نهاية يتم حلها ديناميكيًا.
أخيرًا، تقوم باستلام نص برمجي (shell script) وتنفيذه عبر /bin/sh. يتيح هذا التصميم للمهاجم تغيير عناوين URL للبنية التحتية دون الحاجة إلى إعادة نشر الوحدة. أصدر فريق أمان Go لاحقًا حظرًا على الوحدة عند الوكيل العام، مما يؤدي إلى استجابة خطأ أمني 403.
تمثل الآثار المترتبة على هذا الهجوم مصدر قلق كبير، خاصة للفرق التي تعمل في بيئات Linux قائمة على Go، وخاصة تلك التي تشغل أجهزة افتراضية سحابية، أو مشغلات CI/CD، أو خوادم تمركز إدارية. يمكن لأي تطبيق يستورد هذه الوحدة ويستدعي ReadPassword أن يصبح نقطة حصاد بيانات اعتماد نشطة، مما يعرض عبارات مرور SSH وكلمات مرور قواعد البيانات ومفاتيح API قبل أن تتمكن أي عملية تجزئة (hashing) أو تشفير من حمايتها.
سلسلة تسليم الباب الخلفي متعددة المراحل
تبدأ سلسلة التنفيذ من خطاف ReadPassword الخلفي عبر مؤشر GitHub Raw (update.html)، والخادم المرحلي (img[.]spoolsv[.]cc)، وصولًا إلى تسليم الباب الخلفي Rekoobe النهائي. يقوم المهاجمون بتحديث مسارات البنية التحتية الخاصة بهم بشكل دوري، مما يجعل تتبعهم أكثر صعوبة.
بعد تنفيذ النص البرمجي الأولي، تبدأ سلسلة إسقاط (dropper) Linux مكونة من خمس مراحل. تقوم دالة ReadPassword الخلفية بجلب update.html من مستودع GitHub الخاص بالمهاجم، والذي يقوم بإعادة التوجيه إلى seed.php في img[.]spoolsv[.]cc. تقوم نقطة النهاية هذه بإرجاع مشغل curl | sh يقوم بجلب وتنفيذ snn50.txt.
يعمل smn50.txt كجهة مرحلية رئيسية تقوم بإعداد المضيف وتسليم الحمولات النهائية. يقوم هذا النص البرمجي بإلحاق مفتاح SSH يتحكم فيه المهاجم بـ /home/ubuntu/.ssh/authorized_keys، مما ينشئ وصولاً عن بعد دائمًا لا يتأثر بتغييرات كلمة المرور. كما يقوم بتعيين سياسات iptables الافتراضية إلى ACCEPT، مما يضعف جدار الحماية على المضيف.
إضافة إلى ذلك، يقوم بتنزيل sss.mp5 و 555.mp5 من img[.]spoolsv[.]cc، والتي تمويهها بملحقات تشبه الوسائط لتجاوز الفحص الأساسي للملفات، ثم يقوم بتنفيذها وحذفها من القرص لتقليل الأدلة الجنائية. أكد باحثو Socket.dev أن 555.mp5 هو باب خلفي Rekoobe لـ Linux، وهو برنامج له صلات موثقة بـ APT31 (Zirconium) وله نسب جزئي من قاعدة كود Tiny SHell.
يتواصل الثنائي مع 154[.]84[.]63[.]184 عبر منفذ TCP 443 دون مصافحة TLS قياسية، مما يشير إلى حركة مرور مشفرة مخصصة تهدف إلى الظهور كـ HTTPS. يعمل العينة sss.mp5 بشكل منفصل كحمل (loader) ومكون استطلاع (reconnaissance) خلال نفس المرحلة.
يجب على المدافعين مراجعة ملفات go.mod و go.sum بحثًا عن تغييرات غير متوقعة في جذور الوحدة، واعتبار أي إضافة تبعية جديدة كبند للمراجعة الأمنية. يجب مراقبة نقاط النهاية بحثًا عن كتابات إلى /usr/share/nano/.lock، وتعديلات غير مصرح بها على authorized_keys، وإعادة تعيين سياسات iptables إلى ACCEPT.
سيساعد حظر img[.]spoolsv[.]cc و img[.]spoolsv[.]net، والتنبيه على العمليات التي تربط عمليات جلب GitHub Raw باستدعاءات HTTP POST الصادرة، في اكتشاف هذا النمط مبكرًا قبل اكتمال تسليم الباب الخلفي.

