مهندس معکوس یک حمله زنجیره تأمین به سبک کره شمالی در قالب مصاحبه شغلی
خلاصهٔ کاملتر
یک توسعهدهنده تعریف میکنه که چطور هدف یک عملیات سایبری بسیار پیچیده و هدفمند قرار گرفت که در ظاهر یک مصاحبه شغلی Web3 به نظر میرسید. این نوع حملات دیگه به تایپواسکوات ساده روی npm اکتفا نمیکنن؛ بلکه از مهندسی اجتماعی سنگین استفاده میکنن تا قربانی رو مجبور کنن خودش کد آلوده رو اجرا کنه.
مهاجمان با یک پروفایل LinkedIn جعلی شروع کردن، یک لینک Calendly با نام واقعی شرکت 0G Labs ساختن، و یک جلسه Google Meet با کسی که ادعا میکرد CTO شرکته برگزار کردن. اونها یک سازمان گیتهاب با نام 0G-Labs-IO (بهجای نام اصلی) ساختن و یک ریپازیتوری جعلی به اسم MGVerse رو به عنوان «پلتفرم گیمینگ روی شبکه 0G» معرفی کردن. حتی یک Google Doc با برندینگ واقعی شرکت و جدول حقوق دقیق هم آماده کرده بودن.
وقتی محقق npm install رو روی ریپازیتوری اجرا کرد، یک هوک مخفی به اسم prepare در package.json فعال شد. این هوک یک پروسه Node.js رو در پسزمینه با nohup اجرا کرد تا حتی اگه ترمینال بسته بشه، فعال بمونه.
معماری حمله سه مرحله داشت. در مرحله اول، فایل routes/api/auth.js یک آدرس base64-encoded رو از process.env میخوند و یه درخواست POST به ipcheck-six.vercel.app/api میزد و کل محیط (env) رو براش میفرستاد. سرور در جواب یه کد جاوااسکریپت برمیگردوند که با یه تکنیک خطرناک اجرا میشد:
new Function("require", response.data)(require)این یعنی هر کدی که سرور مهاجم بفرسته، مستقیم با دسترسی کامل به require روی سیستم قربانی اجرا میشه. این primitive اصلی RCE (اجرای کد از راه دور) در این حملهست.
در مرحله دوم، پیلود دریافتی یک اتصال TCP دائمی به 216.250.249.176:1224 باز میکرد. این سرور روی یک هاست bulletproof در تگزاس بود و از HTTP ساده (بدون TLS) استفاده میکرد — همین باعث شد محقق بتونه کل پروتکل رو از روی packet capture بخونه. پیلود هر ۵ ثانیه یه GET به /api/checkStatus میزد و اطلاعات سیستم، محیط، و MAC address رو میفرستاد.
معماری جالب اینه که مهاجم دو اندپوینت جدا داشت: لودر Vercel که ephemeral و قابل تعویض سریع بود، و سرور C2 اصلی که کنترل دائمی رو حفظ میکرد. اگه لودر بسوزه، خیلی راحت با یه URL جدید جایگزین میشه.
محقق این حمله رو در یه VM ایزوله روی Hetzner با Docker و tcpdump بازسازی کرد و با tshark پروتکل C2 رو کامل آنالیز کرد. در طول مصاحبه، مهاجم از قربانی میخواست وبسایتها، ریپازیتوریها و بلاگش رو نشون بده — این ریکانسنس دستی بود تا در کنار دادههای env خودکار، زیرساخت دسترسیپذیر رو شناسایی کنن.
نکات کلیدی:
- هوک prepare در package.json میتونه بدون هیچ هشداری کد دلخواه رو هنگام npm install اجرا کنه
- تکنیک new Function("require", code)(require) اجازه میده هر کدی از سرور مهاجم با دسترسی کامل اجرا بشه
- مهاجمان delivery (Vercel) و control (TCP C2) رو از هم جدا کردن تا مقاومتر باشن
- مصاحبه زنده و اشتراک صفحه، فشار اجتماعی ایجاد میکنه تا قربانی بدون بررسی کد رو اجرا کنه
- آدرس ریپازیتوری رو هیچوقت از مصاحبهکننده نگیر؛ از طریق سایت رسمی شرکت پیداش کن
- همیشه npm install رو در یه محیط ایزوله مثل VM یا Docker اجرا کن
- با npm install --ignore-scripts میشه lifecycle hookها رو غیرفعال کرد




