گوگل و مایکروسافت پس از شناسایی یک ماژول خفته جمعآوری داده (Dormant Data Collector) در نسخه رسمی افزونه ModHeader، این افزونه را از فروشگاههای کروم و مایکروسافت اج (Microsoft Edge) حذف کردند. بررسی پژوهشگران نشان میدهد افزونه ModHeader با وجود ثبت حدود 1.6 میلیون نصب، حاوی کدی برای جمعآوری، رمزنگاری و ذخیرهسازی تاریخچه وبگردی (Browsing History) کاربران بوده است؛ با این حال، این ماژول تنها برای مرورگرهای موجود در فهرست مجاز (Allow-list) فعال میشود و از آنجا که این فهرست فاقد هرگونه ورودی بود، تاکنون هیچ مدرکی از جمعآوری یا ارسال اطلاعات کاربران به دست نیامده است.
بررسی کد افزونه ModHeader و شناسایی ماژول جمعآوری داده
تحلیلهای انجامشده توسط شرکت امنیتی بریتانیایی Stripe OLT نشان داد که ماژول جمعآوری داده در نسخه رسمی این افزونه قرار داشته و این موضوع مربوط به یک نسخه جعلی یا دستکاریشده نبوده است. پژوهشگران این شرکت با بررسی کد افزونه و تطبیق آن با امضای رسمی فروشگاه وب گوگل (Google Web Store Signature) تأیید کردند که این ماژول در همان نسخه اصلی منتشرشده در فروشگاه قرار داشته است.
بررسی Stripe OLT روی نسخه کروم این افزونه و حدود 900 هزار کاربر آن انجام شده است؛ در حالی که ردیابهای شخص ثالث (Third-party Trackers) تخمین میزنند حدود 700 هزار نصب دیگر مربوط به نسخه مایکروسافت اج بوده است. مایکروسافت در تاریخ 3 جولای و گوگل نیز یک هفته بعد، در 10 جولای، این افزونه را از فروشگاه رسمی خود حذف کردند.
عملکرد پنهان نسخه 7.0.18
نسخه 7.0.18 با شناسه افزونه idgpnmonknjnojddfkpgkljpfnnfcklj همچنان عملکرد اصلی خود، یعنی ویرایش هدرهای HTTP را مطابق توضیحات رسمی ارائه میدهد. با این حال، بررسی کدهای پسزمینه فشردهشده (Minified Background Code) نشان داد که در کنار قابلیت اصلی، یک سازوکار دوم نیز در این نسخه تعبیه شده است.
این کد در نخستین اجرا، یک شناسه منحصربهفرد برای دستگاه کاربر ایجاد کرده و یک کلید رمزنگاری هاردکدشده را بارگذاری میکند. سپس هنگام وبگردی، دامنه هر صفحهای را که کاربر باز میکند استخراج، رمزنگاری و بهصورت لوکال روی دستگاه ذخیره میکند. این سازوکار میتواند اطلاعات مربوط به حداکثر 1000 دامنه منحصربهفرد را ذخیره کند.
سازوکار ارسال دادههای جمعآوریشده
این ماژول روزانه یکبار، فهرست رمزنگاریشده دامنههای جمعآوریشده را به همراه شناسه منحصربهفرد دستگاه در قالب یک بسته داده آماده کرده و آن را به آدرس زیر ارسال میکند:
api.stanfordstudies[.]comپس از ارسال دادهها، نسخه لوکال ذخیرهشده روی دستگاه نیز پاک میشود.
زمان ارسال دادهها برای هر نصب بهصورت متفاوت تنظیم شده است؛ بنابراین اگر این ماژول فعال شود، همه مرورگرها بهطور همزمان اقدام به ارسال بیکن (Beacon) یعنی برقراری ارتباط دورهای با سرور نمیکنند و این ارتباطها در زمانهای متفاوت برقرار میشوند.
تحلیلهای مستقل HackIndex روی نسخه 7.0.18 و Yunus Aydin روی نسخه 7.0.17 نیز همین پایپلاین مربوط به جمعآوری، پردازش و انتقال دادهها را تأیید کردهاند.
شرط فعالسازی ماژول خفته جمعآوری داده
در بررسی عملکرد افزونه ModHeader مشخص شد که ماژول خفته جمعآوری داده تنها زمانی فعال میشود که مرورگر کاربر با یکی از ورودیهای تعریفشده در فهرست مجاز داخلی مطابقت داشته باشد. با این حال، در نسخه منتشرشده هیچ ورودی برای این فهرست تعریف نشده بود؛ در نتیجه، بررسی شرط فعالسازی در هر بار اجرا ناموفق میماند و پایپلاین جمعآوری داده پیش از استخراج حتی یک دامنه متوقف میشد.
پژوهشگران هشدار دادهاند که اضافه کردن تنها یک ورودی به این فهرست، تغییر کوچکی است که میتواند از طریق یک بهروزرسانی معمولی انجام شود؛ بدون آنکه کاربر نیازی به کلیک، تأیید یا اعطای مجوز جدید داشته باشد. دلیل این موضوع آن است که تمام اجزای لازم برای اجرای این سازوکار، از جمله کلید رمزنگاری هاردکدشده، آدرس Endpoint، ماژول زمانبندی و منطق ذخیرهسازی (Storage Logic)، از قبل همراه با افزونه روی سیستم کاربر وجود دارند.
بخشهایی که حتی در حالت غیرفعال فعال باقی مانده بودند
اگرچه ماژول اصلی جمعآوری داده در این افزونه فعال نشده بود، اما همه اجزای آن در وضعیت غیرفعال قرار نداشتند. افزونه ModHeader هنگام نصب، بهروزرسانی و حذف با برقراری ارتباط با دامنه دیگری به نام extensions-hub[.]com، اطلاعاتی مانند نام محصول، نسخه افزونه و نوع مرورگر را به این دامنه ارسال میکرد.
علاوه بر این، اسکریپتی که در تمامی صفحات وب اجرا میشد، پیشتر متادیتای درخواستها (Request Metadata) را بهصورت متن ساده (Plain Text) در فضای ذخیرهسازی لوکال ثبت کرده بود. این موضوع نشان میدهد که این بخش از قابلیتهای افزونه برخلاف ماژول جمعآوری داده، از قبل فعال و در حال اجرا بوده است.
طراحی چندلایه ModHeader و دشوار شدن شناسایی عملکرد مشکوک
ابزارهای خودکار ارزیابی امنیت، این افزونه را کمریسک شناسایی کرده بودند و برخی سرویسهای تحلیل امنیتی حتی امتیاز 95 از 100 را برای آن ثبت کرده بودند. دلیل این ارزیابی نادرست، ساختار چندلایه کد بود؛ بهگونهای که هر بخش از آن میتوانست فرآیند شناسایی عملکرد مشکوک را برای برخی ابزارهای تحلیل دشوارتر کند.
هر بخش از این ساختار، یک لایه محافظتی در برابر روشهای معمول تحلیل ایجاد میکرد. برای مثال، دادهها پیش از ارسال رمزنگاری میشدند؛ بنابراین ابزارهای تحلیل تنها با خروجی رمزنگاریشده مواجه میشدند و امکان بررسی محتوای واقعی اطلاعات را نداشتند. همچنین، فرآیند ارسال دادهها تا زمان فعال شدن شرط تعیینشده متوقف میماند؛ به همین دلیل، محیطهای سندباکس (Sandbox) نیز هیچ ترافیک خروجی مشکوکی مشاهده نمیکردند.
کد مشکوک در میان یک کدبیس (Codebase) قانونی و معتبر، بهصورت فشردهشده (Minified) قرار گرفته بود؛ موضوعی که شناسایی آن را برای ابزارهای تحلیل دشوارتر میکرد. علاوه بر این، Endpointهای مورد استفاده نیز سابقه مخربی نداشتند و در فهرستهای هشدار امنیتی قرار نگرفته بودند.
از سوی دیگر، یک افزونه محبوب با امضای رسمی معمولاً از سوی کاربران و ابزارهای امنیتی قابل اعتماد تلقی میشود. با این حال، امضای فروشگاه تنها اصالت منبع انتشار فایل را تأیید میکند و هیچ تضمینی درباره عملکرد یا محتوای داخلی آن ارائه نمیدهد.
زیرساخت دامنهها و نشانههای احتمالی ارتباط با یک اپراتور
بررسیهای شرکت امنیتی Stripe OLT نشان داد که دامنههای مرتبط با این افزونه روی زیرساختهایی واقعی و فعال قرار دارند. دامنه stanfordstudies[.]com هیچ ارتباطی با دانشگاه استنفورد (Stanford) ندارد؛ بلکه یک دامنه قدیمی است که دوباره مورد استفاده قرار گرفته و بهعنوان پوششی برای یک بکاند (Backend) مبتنی بر OpenSearch استفاده میشود. در مقابل، دامنه extensions-hub[.]com برای فعالیتهای تبلیغاتی راهاندازی شده است.
در زمان تحلیل، هر دو Endpoint مربوط به API به یک سرور آمازون مشترک متصل شدند. این موضوع میتواند نشاندهنده مدیریت هر دو زیرساخت توسط یک عامل واحد باشد، اما بهطور قطعی نمیتواند این ارتباط را اثبات کند.
برخی نشانههای محدود نیز احتمال ارتباط این زیرساخت با یک اپراتور چینیزبان را مطرح میکنند؛ از جمله استفاده از زبان چینی سادهشده ، وجود مقدار salt با کاراکتر چینی 盐 و استفاده از یک سرویس ایمیل با منشأ چین که در مجموع میتوانند چنین احتمالی را تقویت کنند. با این حال، پژوهشگران هیچ گروه یا عامل مشخصی را مسئول این فعالیت معرفی نکرده و هیچ ادعایی درباره هویت عامل پشت این عملیات مطرح نکردهاند.
سابقه فعالیتهای مشکوک
نشانههای هشدار درباره افزونه ModHeader پیش از این نیز مشاهده شده بود. این افزونه در سال 2023 با شکایتهایی درباره تزریق تبلیغات در نتایج جستوجو مواجه شد و گزارشها نشان میداد که در همان دوره به سمت مدل درآمدی مبتنی بر تبلیغات حرکت کرده است.
با این حال، هنوز مشخص نیست چه فرد یا مجموعهای کنترل این افزونه را در اختیار گرفته است. پژوهشگران نیز هیچ ادعایی درباره دخالت یا نقش توسعهدهنده اصلی در این تغییرات مطرح نکردهاند.
وبسایت رسمی ModHeader همچنان طرح درآمدی مبتنی بر تبلیغات خود را ارائه میکند و در آن ادعا شده است که این افزونه اطلاعات کاربران را جمعآوری نمیکند. با این حال، وجود یک ماژول داخلی برای جمعآوری تاریخچه وبگردی، حتی اگر این ماژول فعال نشده باشد، با این ادعا همخوانی ندارد. توسعهدهنده افزونه نیز تا زمان انتشار این گزارش، هیچ واکنشی به یافتههای پژوهشگران نشان نداده است.
برایان کربس (Brian Krebs) در سال 2021، درباره الگویی هشدار داده بود که در آن افزونههای محبوب مرورگر بهصورت پنهانی خریداری شده و پس از تغییر مالکیت، به ابزارهایی برای انتقال داده تبدیل میشوند. پرونده ModHeader نیز شباهتهایی به همین الگو دارد؛ با این تفاوت که در این مورد، از رمزنگاری و یک سازوکار فعالسازی شرطی استفاده شده است تا ابزارهای تحلیل نتوانند فرآیند ارسال داده را بهراحتی مشاهده کنند.
تنها در سال جاری، چندین افزونه کروم به دلیل جمعآوری دادههای کاربران تحت عنوان تحلیل آماری ناشناس (Anonymous Analytics) شناسایی شدند. همچنین گروه دیگری از افزونهها با جعل هویت ابزارهای سازمانی مانند Workday و NetSuite تلاش کردند کوکیهای نشست کاربران را سرقت کنند.
افزونههایی که برای ویرایش هدرها یا مدیریت کوکیها طراحی میشوند، بهدلیل ماهیت عملکرد خود به سطح دسترسی گستردهای نیاز دارند؛ به همین دلیل، در صورت سوءاستفاده از چنین ابزارهایی، دامنه تأثیرگذاری میتواند بسیار گسترده باشد.
توصیههای امنیتی برای کاربران و تیمهای دفاعی
اگر از افزونه ModHeader استفاده میکنید، آن را از مرورگرهای کروم و اج حذف کنید؛ هرچند ممکن است مرورگر شما پیشتر بهصورت خودکار آن را غیرفعال کرده باشد. با حذف افزونه، دادههای ذخیرهشده آن نیز پاک میشوند؛ با این حال، بررسی کنید که همگامسازی پروفایل (Profile Sync) یا سیاستهای مدیریت افزونهها (Managed Extension Policy) باعث نصب دوباره آن نشوند.
اگر اطلاعات حساسی مانند کلیدهای API، توکنهای Bearer یا کوکیهای نشست را در این افزونه وارد کردهاید، آنها را تغییر دهید؛ زیرا پژوهشگران دریافتند قابلیت ذخیره تاریخچه هدرها در این افزونه، تمام هدرهای HTTP را روی دیسک ذخیره کرده است.
تیمهای دفاعی نیز باید دامنههای زیر را در سطح DNS و پروکسی مسدود کرده و لاگهای مرتبط با آنها را ثبت کنند:
stanfordstudies[.]com
extensions-hub[.]comهمچنین توصیه میشود لاگها برای یافتن شناسه افزونه و هرگونه درخواست POST به مسیر زیر بررسی شوند:
api.stanfordstudies[.]com/app/logشرکت Stripe OLT نیز کوئریهای آماده شکار تهدید (KQL Hunting Queries) برای ابزارهای Defender و Sentinel منتشر کرده است.
