یک فروشگاه مدرن آنلاین ممکن است در ظاهر کاملاً سالم به نظر برسد، در حالی که کدهای مخرب جاوا اسکریپت (JavaScript) در پسزمینه در حال فعالیت هستند: به سرقت بردن درآمدهای بازاریابی وابسته، ربودن جستجوها و کلیکها، دستکاری ابزارهای تحلیلی، یا پرسیدن از یک سرور راه دور برای اینکه چه چیزی را در مرحله بعد اجرا کند. صفحات بارگذاری میشوند، محصولات ظاهر میشوند و تسویه حساب کار میکند — با این حال مرورگر ممکن است به آرامی کاری را انجام دهد که صاحب سایت هرگز آن را مجاز ندانسته است.
این همان نقطه کوری است که مدل یادگیری ماشین (ML) بخش امنیت سمت کاربر (Client-Side Security) ما برای آشکار کردن آن ساخته شده است. این مقاله چهار عملیات را دنبال میکند که شامل هشت پیلود (Payload) میشود و مدل یادگیری ماشین Page Shield آنها را در طبیعت کشف کرده است.
تشخیص این پیلودهای مخرب خودکار بود؛ انسانها هر یافته را تنها پس از اینکه سیستم آن را علامتگذاری کرده بود، تأیید کردند. هنگامی که ما پس از آن کمپینها را با استفاده از ابزارهای اسکن امنیتی بررسی کردیم، هفت مورد از هشت پیلود به طور کامل از VirusTotal غایب بودند و URLScan هیچ قضاوت مخربی را برای هیچکدام باز نگرداند. Page Shield ML، در همین حال، هر هشت مورد را در ترافیک زنده صید کرد.
به عنوان مثال، در حالی که تحقیقات امنیتی خانواده گستردهتر Lnkr را سالها قبل مستند کرده بودند، یک نسخه پیلود خاص نزدیک به دو سال و نیم توسط URLScan با برچسب «بدون دستهبندی» ایندکس شده بود، از جمله در طول یک اسکن مستقیم در ژانویه ۲۰۲۴. فقط در این مورد بود که VirusTotal پیلود را زودتر جذب کرده بود: در حالی که در حال حاضر اسکریپت را به عنوان مخرب پرچمگذاری میکند، تاریخچه عمومی فاش نمیکند که آن قضاوت چه زمانی برای اولین بار اختصاص داده شده است. در همین حال، Page Shield ML به طور مستقل دقیقاً همان بایتها را در فروشگاه یک خردهفروش آنلاین به صورت زنده ظاهر کرد. به طور گستردهتر، یک هش میتواند مدتها قبل از اینکه کد پشت آن به عنوان مخرب دستهبندی شود، شناخته شود. اگر دفاع شما منتظر آن برچسب بماند، شما از قبل دیر کردهاید. شما به یادگیری ماشینی نیاز دارید که بتواند خود جاوا اسکریپت را باز کرده و آن را در مقیاس قضاوت کند.
در واقع، دیدن یک فایل به معنای درک آن نیست. قسمت دشوار این بود که این چهار عملیات هیچ امضا یا تکنیک پنهانسازی جهانی مشترکی نداشتند. یکی تا زمانی که دستگاه، کشور، زمان، ارجاعدهنده (Referrer) یا وضعیت مرورگر با آنچه منتظرش بود مطابقت نداشت، غیرفعال باقی ماند. دیگری یک درخواست وابسته بدون کلیک را در یک iframe نامرئی پنهان کرد. بقیه کلیکها را رهگیری کردند، نظارت را سرکوب کردند یا به طور مشروط کد اضافی را از سرورهای راه دور بارگذاری کردند. برای گرفتن آنها، باید تماشا کنید که چگونه آن قطعات با هم کار میکنند: چه زمانی اسکریپت بیدار میشود، چه چیزی را پنهان میکند، چه چیزی را رهگیری میکند و چه چیزی را در مرحله بعد میآورد. بررسی یک بار صفحه کافی نیست؛ همانطور که این موارد نشان میدهد، چنین اسکریپتهایی ساخته شدهاند تا زمانی که قربانی مناسب ظاهر شود ساکت بمانند. به همین دلیل است که دید مداوم مرورگر تفاوت بین گرفتن یک حمله و از دست دادن کامل آن را ایجاد میکند.
نحوه تشخیص و برچسبگذاری جاوا اسکریپت در مقیاس
همان شبکه عصبی گراف (GNN) که چهار عملیات را در این پست پرچمگذاری کرد، قبلاً بستههای مخرب npm و یک اسلایمر پرداخت Magecart در حال اجرا در طبیعت را گرفته بود. GNN با جاوا اسکریپت به عنوان یک تکه متن مسطح رفتار نمیکند؛ بلکه کد را به عنوان یک گراف استدلال میکند: یک درخت نحوی که نمادهای کد را به هم متصل میکند و نشان میدهد چه چیزی چه چیزی را صدا میزند، مهاجر چه چیزی را سعی کرده است دفن کند، و چه چیزی هنوز با خانه تماس میگیرد. این ساختار به آن کمک میکند تا الگوهای مشکوک را در میان کوچکسازی (Minification)، تغییر نام و مقداری مبهمسازی بدون تکیه بر یک آدرس اینترنتی شناخته شده یا امضای بایت تشخیص دهد.
چند اسکریپتی که GNN آنها را به عنوان مخرب پرچمگذاری میکند (کمتر از 0.3 درصد از کل ترافیک تحلیلشده) به یک مدل زبان بزرگ (LLM) سبکوزن روی Workers AI برای دریافت نظر دوم زنده میروند. این کار بیشتر مثبتهای کاذب را کاهش میدهد در حالی که بازبینی را بالا نگه میدارد. هنگامی که LLM، GNN را تأیید میکند، به مشتریان هشدار داده میشود.
برای بررسی پیچیدهترین اسکریپتها در مقیاس، ما از گروهی از مدلهای پیشرو استفاده میکنیم که به آنها معلمان (مجموعهای از قاضیان خودکار) میگوییم. این گروه مدلهای پیشرو را از حدود شش خانواده مختلف، از جمله مدلهای با وزن باز که روی Workers AI اجرا میشوند، جذب میکند. ما هر کدام را به عنوان یک عامل (Agent) راهاندازی میکنیم تا اسکریپت مشکوک را در جلسه تازه و مستقل خود تجزیه و تحلیل کند. در صورت مفید بودن، دسترسی ابزار عاملی آنها به آنها اجازه میدهد از یک ارزیاب محدود جاوا اسکریپت برای باز کردن قطعات کوچک و آشکار کردن رفتار پنهان استفاده کنند. ما به زودی این جریان کار را با Cloudflare Sandbox برای تجزیه و تحلیل عمیقتر در محیطهای ایزوله گسترش خواهیم داد.
مدلهای پیشرو گاهی اوقات اختلاف نظر دارند، به ویژه در مورد پیچیدهترین اسکریپتها. ما آن اختلاف نظر را به عنوان سیگنال تلقی میکنیم، نه نویز. هر برچسب به یک رأی تبدیل میشود که با امتیاز مدل در شاخص هوش تحلیل مصنوعی (Artificial Analysis Intelligence Index) وزندهی میشود و توزیع احتمالی را روی چهار برچسب ایجاد میکند: خوشخیم، اسکیمینگ پرداخت (Magecart)، بدافزارهای دیگر و استخراج رمزارز. بنابراین بازبینیکنندگان انسانی فقط باید اسکریپتهایی را بررسی کنند که به عنوان مخرب پرچمگذاری شدهاند یا فاقد اکثریت مشخص دو سوم هستند. سپس آن توزیعهای برچسب را به آموزش GNN بازمیگردانیم و به آن کمک میکنیم تا موارد حتی ظریفتر را تشخیص دهد. این حلقه بازخورد هنوز تا حدی دستی است، اگرچه ما در حال شروع خودکارسازی آن هستیم.
چهار عملیات مخرب جاوا اسکریپت که ما کشف کردیم
این چهار عملیات کارهای بسیار متفاوتی انجام میدهند، از سرقت کمیسیون گرفته تا تحلیلهای به سرقت رفته در مورد خریدارانی که فروشگاه قبلاً برای به دست آوردن آنها هزینه کرده است. سرقت یک کمیسیون مانند اسکیم کردن کارت اعتباری نیست؛ به همین ترتیب، ربودن جستجو مانند سرقت رمز عبور نیست. اگر یک مدل یادگیری ماشین فقط یکی از آن ترفندها را بداند، در طول بقیه موارد خواهد خوابید. در عوض، Page Shield ML ما باید با هر نوع رفتار خصمانه هماهنگ بماند.
اکنون، بیایید عمیقتر به هر عملیات و نحوه کار آن بپردازیم.
عملیات ۱: رباتربای کمیسیون بازاریابی وابسته پس از ساعت کار
یک بعدازظهر آرام یکشنبه را تصور کنید: یک خریدار روی تلفن روی یک محصول ضربه میزند. اسکریپت به جای دنبال کردن عادی ضربه، یک صفحه فرود محصول یا کمپین را از یک لیست پیشانتخاب شده توسط مهاجم در یک برگه جدید باز میکند و برگه اصلی را از طریق یک مسیر وابسته (Affiliate) ارسال میکند. فروشگاه هنوز کار میکند. اگر خریدار خرید را تکمیل کند (در آن زمان یا بعداً)، انحراف انتساب را ربوده است و فروش (و هر کمیسیون حاصل) را به حسابی اعتبار میدهد که ارجاع را به دست نیاورده است.
آنچه فروشگاه از دست داد
فروشگاه میتواند یک کمیسیون نادیده گرفته شده را به حسابی بپردازد که خریدار را نیاورده است. بدتر از آن، اگر یک شریک مشروع ارجاع را انجام داده بود، درخواست اجباری میتوانست آن را به اشتباه منتسب کند، اعتبار و پرداخت احتمالی را از شریکی که کار را انجام داده بود منحرف کند. آسیب میتواند بیش از یک کمیسیون باشد: شرکایی که به سیستم انتساب اعتماد ندارند ممکن است به خردهفروش پشت آن نیز اعتماد نکنند.
زنجیره حمله
بازدیدکننده واجد شرایط موبایل ← ضربه محصول رهگیری شده ← صفحه انتخاب شده توسط اسکریپت در برگه جدید باز می شود + برگه اصلی مسیر وابسته مهاجم را دنبال می کند
چگونه پنهان ماند
ما پنج نسخه اسکریپت مرتبط پیدا کردیم: دو مورد فعال و سه مورد متوقف شده در هنگام ضبط. هر نوع فعال از مجموعه متفاوتی از دروازهها قبل از عمل استفاده میکند، مواردی مانند دستگاه بازدیدکننده و زمان محلی، اینکه آیا ترفند اخیراً اجرا شده است، آیا دکمه محصول ظاهر شده است و آیا کسی واقعاً روی آن کلیک میکند را بررسی میکند. این هزارتو از قوانین، رفتار مخرب را در طول یک بازدید خودکار کوتاه پنهان نگه میدارد، مگر اینکه شرایط خاص نوع آن برآورده شود. اسکریپتهای فعال از یک MutationObserver (یک API جاوا اسکریپت) برای تماشای کاشیها و دکمههای محصول که پس از بارگذاری اولیه صفحه به طور پویا ظاهر میشوند، استفاده میکنند. این به آنها اجازه میدهد تا روی کلیکهای روی آن عناصر دیررس رهگیری کنند، در حالی که یک خزنده که HTML را یک بار بارگذاری کرده و در آنجا متوقف شده است، میتواند مسیر تغییر مسیر را به طور کامل از دست بدهد.
در نسخههای بعدی فعال، اسکریپت یک کلیک واجد شرایط را رهگیری میکند و یک خنککننده سه روزه را در localStorage مینویسد (روزها در آن دستگاه غیرفعال میماند). سپس یک مانور دو برگه را اجرا میکند: بالا آوردن یک صفحه محصول انتخاب شده توسط مهاجم در یک برگه تازه برای درگیر نگه داشتن خریدار، در حالی که برگه اصلی یک سفر رفت و برگشت سریع و متوجه نشده از طریق لینک پیگیری وابسته مهاجم و برگشت به فروشگاه انجام میدهد، تا کوکی انتساب مهاجم را در پسزمینه بکارد. ماسک زدن کنسول و بررسیهای منبع خودمحافظت بازرسی را سختتر میکند، در حالی که خنککنندهها و برنامههای باریک محدود میکنند که هر چند وقت یکبار مسیر مخرب میتواند در طول خرید طبیعی دیگر ظاهر شود.
گزیده ضدعفونیشده زیر نشان میدهد که چگونه پیلود کاشیهای پویای محصول را قلاب میکند و انحراف دو برگه را اجرا میکند. ما شناساییکنندهها را ساده کردیم، کد را مجدداً فرمت کردیم و URLهای مقصد را برای خوانایی خنثی کردیم.
ساختهای متوقف شده نشان دادند که چگونه کمپین میتواند بدون حذف اسکریپت تاریک شود. تنظیمات جاسازی شده آنها status: "paused" را نشان میداد، بنابراین قبل از نصب کنترلکنندههای کلیک خارج شدند. این اسکریپتهای متوقف شده دارای پیکربندیهای خنککننده متفاوتی به ازای هر خریدار (۳، ۴ و ۵ روز) بودند. یکی از اسکریپتهای متوقف شده حتی یک نظر تاریخچه نسخه را ثبت کرد که به صراحت مستند میکرد کمپین پس از جمعه سیاه متوقف شده است.
برای رسیدن به بازدیدکنندگان در وهله اول، این عملیات از زنجیره تامین بازاریابی سایت بهرهبرد: اسکریپتهای شخص ثالث و مدیران تگ تعبیه شده توسط سایتهای تجارت الکترونیک برای ردیابی کمپینهای تبلیغاتی و تجزیه و تحلیل. یک مسیر تحویل تأیید شده از طریق دو مدیر تگ معمولی دیگر اجرا شد: Google Tag Manager ← مدیر تگ دیگر ← اسکریپت مخرب. اینگونه است که پیلود به مرورگر رسید، نه مدرکی مبنی بر اینکه هر یک از مدیران تگ به خطر افتادهاند.
مهاجم حتی دامنه میزبانی اسکریپت را برای گذراندن یک بررسی بازاریابی سریع پنهان کرد. یک میزبان تحویل در چشم ساده پنهان شد: adtargett[.]com با یک "t" واحد از adtarget[.]com، یک دامنه تبلیغاتی ثبت شده در سال ۱۹۹۸، متفاوت بود. این دامنه مشابه در سال ۲۰۲۵ ثبت شد و هنگامی که ما بررسی کردیم، صفحه اصلی آن خود را «Adtarget.com - آژانس بازاریابی عملکرد» نامید. این تایپواسکاتینگ است: با تقلید از یک آژانس تبلیغاتی واقعی، میزبان با تگهای بازاریابی رودین ترکیب شد و به آرامی پیلود مخرب را که کلیکهای خریدار را ربوده و آنها را از طریق لینکهای پرداخت وابسته هدایت میکرد، سرویس داد.
عملیات ۲: سرقت وابسته بدون کلیک
در حالی که کلاهبرداری اول همچنان به یک کلیک نیاز داشت، این یکی به حتی کمتری نیاز دارد. یک خریدار میتواند یک صفحه رزرو را باز کند، روی گزینههای محصول مکث کند و هرگز به یک تبلیغ دست نزند. با این حال، در پسزمینه، اسکریپت ممکن است قبلاً یک درخواست وابسته ارسال کرده باشد که میتواند باعث شود یک فروش بعدی به نظر برسد که شخص دیگری خریدار را ارجاع داده است. در واقع، هنگامی که شرایط اسکریپت برآورده میشود، پیلود آن درخواست را از طریق یک iframe پنهان یا یک لیز که خود به خود کلیک میکند ارسال میکند.
عملیات ۳: خرابکار جستجوی قدیمی، اکنون درب پشتی فروشگاه
سالها پیش، خانواده بدافزار Lnkr با پنهان شدن در داخل افزونههای مشکوک مرورگر، رهگیری جستجوهای گوگل و بینگ برای هدایت مجدد نتایج و جیب زدن پول تبلیغات، سر و صدا به پا کرد. اکنون، مهاجمان پایگاه کد را برای ایجاد یک درب پشتی در وبسایت یک خردهفروش آنلاین تغییر کاربری دادهاند.
عملیات ۴: پوششدهنده موبایل پولی
فروشگاه قبلاً برای آوردن این بازدیدکننده از یک تبلیغ موبایلی یا کمپین بازاریابی هزینه کرده است. اسکریپت مخرب به آن اجازه میدهد...
منبع: blog.cloudflare.com
