حملات «زنجیره تامین نرمافزار» وارد مرحلهای پیچیدهتر شدهاند و یک مثال تازه نشان میدهد هکرها ابزارهای روزمره برنامهنویسان را هدف گرفتهاند. محققان «جیفراگ» دو بسته آلوده در مخزن npm به نامهای html-to-gutenberg و fetch-page-assets شناسایی کردند که با روشی تازه، برخی سازوکارهای امنیتی متداول را دور میزدند. با اینکه بستههای آلوده اکنون حذف شدهاند، اما بررسی فرایندی که طی میشد، درسی مهم برای توسعهدهندگان به همراه دارد.
بدافزار با سوءاستفاده از قابلیت اجرای خودکار در VS Code و با استفاده از بلاکچین بهعنوان کانال مخفی تبادل داده (Dead Drop)، اطلاعات حساس، اعتبارنامهها و کیفپولهای رمزارز توسعهدهندگان را هدف قرار میداد.
تلهای پنهان در تنظیمات ویرایشگر
بستههای آلوده معمولاً کدها را هنگام نصب اجرا میکنند که بهسادگی توسط ابزارهای امنیتی رصد میشود. اما در این موج جدید، مهاجمان کدهای مخرب را خارج از مسیرهای نصب قرار دادند. آنها کد اجرایی را در یک فایل فونت جعلی به آدرس public/fonts/fa-solid-400.woff2 پنهان کردند تا احتمال شناسایی توسط برخی ابزارهای امنیتی را کاهش دهند.
برای فعالسازی بدافزار، فایلی به نام tasks.json در پوشه پنهان .vscode ایجاد میشد که حاوی وظیفهای با نام eslint-check بود. با تنظیم گزینه runOn روی folderOpen، در صورتی که کاربر پروژه را «Trusted Workspace» اعلام میکرد، این وظیفه هنگام باز شدن پوشه اجرا میشد. ضمناً فایل با حجم زیادی فضای خالی آغاز میشد تا در نگاه نخست خالی و بیخطر به نظر برسد، در حالی که کدهای جاوا اسکریپت مخرب در انتهای آن پنهان بودند.
بلاکچین در نقش کانال مخفی تبادل داده
تکنیک متمایز این حمله، استفاده از شبکههای عمومی بلاکچین برای دریافت مرحله دوم بدافزار بود. برای کاهش وابستگی به سرورهای فرمان و کنترل، بارگذار اولیهی (Loader) بدافزار به سرویس TronGrid و شبکه Aptos متصل میشد تا هَش یک تراکنش مشخص را بازیابی کند.
سپس با فراخوانی شبکه هوشمند BNB، دادههای رمزگذاریشدهای که بهصورت هگزادسیمال در ورودی تراکنش قرار گرفتهاند، رمزگشایی و در حافظه اجرا میشوند. این روش، وابستگی بدافزار به سرورهای فرمان سنتی را کاهش میدهد و تا زمانی که این شبکههای بلاکچین در دسترس باشند، مهاجمان میتوانند مرحله بعدی بدافزار را بهروزرسانی کنند.
هدف نهایی: سرقت هویت و داراییها
بدافزار پس از ایجاد مسیر نفوذ، یک اسکریپت پایتون برای سرقت اطلاعات اجرا میکرد. این اسکریپت طیف گستردهای از دادههای حساس را هدف قرار میداد که در جدول زیر دستهبندی شدهاند:
| دستهبندی هدف | نرمافزارهای مورد حمله | دادههای سرقتشده |
| مرورگرهای وب | کروم، فایرفاکس، اِج، بریو | کوکیها، رمزهای عبور، اطلاعات کارتهای بانکی و فایلهای کلیدی پایگاهداده |
| کیف پولهای رمزارز | اکسودوس، الکتروم، لجر لایو، ترزور، سولانا | سرقت کلیدهای خصوصی و در نتیجه امکان دسترسی به داراییهای رمزارزی |
| ابزارهای توسعهدهنده | گیتهاب، دیسکورد، نشستهای SSH | توکنهای دسترسی سازمانی، اعتبارنامههای سورسکد |
چرا این حمله برای توسعهدهندگان ایرانی اهمیت دارد؟
این حمله میتواند برای برخی از توسعهدهندگان ایرانی نیز اهمیت ویژهای داشته باشد. با توجه به شرایط اقتصادی کشور، بعضی از برنامهنویسان به پروژههای رمزارز، وب۳ و کار فریلنسری بینالمللی روی آوردهاند؛ حوزههایی که در سالهای اخیر بیش از سایر بخشها هدف چنین حملاتی قرار گرفتهاند. از سوی دیگر محدودیتهای ناشی از تحریم نیز دسترسی تیمهای داخلی به برخی ابزارهای امنیتی تجاری را دشوارتر کرده است.
عادت خطرناک کلیک سریع روی دکمه «Yes, I trust the authors» هنگام باز کردن پروژههای کلونشده یا تستهای نصب نرمافزار در VS Code، بزرگترین نقطه ضعف امنیتی برنامهنویسان در این نوع حملههاست. توسعهدهندگان برای مقابله با این تهدید، بهتر است پیش از اعتماد و اجرای پروژههای ناشناس، محتوای پوشه .vscode، بهویژه فایل tasks.json را بررسی کنند.
در پایان…
این حمله نشان میدهد که زنجیره تأمین نرمافزار دیگر تنها به «وابستگیهای پروژه» محدود نیست و فایلهای پیکربندی محیط توسعه هم میتوانند به نقطه شروع آلودگی تبدیل شوند. برای کاهش این خطر، توسعهدهندگان باید پیش از اعتماد به پروژههای ناشناس، فایلهای پیکربندی را بررسی کنند و از تأیید شتابزده Workspaceها بپرهیزند. همین اقدام ساده میتواند از اجرای خودکار کدهای مخرب و سرقت اطلاعات حساس جلوگیری کند.
