بسیاری از کاربران تصور می‌کنند باز کردن یک برگه در حالت ناشناس (Incognito) یا پنجره مرور خصوصی، تمامی شیوه‌های نظارت شبکه را بی‌اثر می‌سازد. در الگوهای سنتی امنیت، بستن پنجره خصوصی فایل‌های کوکی موقت، داده‌های ذخیره‌سازی محلی (localStorage) و پایگاه‌های داده IndexedDB را پاکسازی می‌کند. با این حال، شبکه‌های تحلیل داده‌های تبلیغاتی سازوکارهای عمیق‌تری را در لایه‌های بنیادین پروتکل‌های اینترنت به کار گرفته‌اند. با بهره‌گیری از ویژگی‌های حافظه پنهان پروتکل‌ها، شناسه‌های پایداری در میان نشست‌های مختلف شکل می‌گیرند که به ابربیسکویت (Supercookie) شهرت دارند.

دو شیوه برجسته و ماندگار در این زمینه، بردارهای وضعیت امنیت انتقال اکید (HSTS) و درخت‌های تغییر مسیر حافظه پنهان نمادهای وب‌سایت (فاوآیکون) هستند. این روش‌ها با سوءاستفاده از قابلیت‌های امنیتی و بهینه‌سازی سرعت مرورگر، کد شناسایی را مستقیماً روی دستگاه ثبت می‌کنند بدون اینکه نیازی به فایل‌های کوکی معمولی داشته باشند.

[مرورگر کاربر]
  │
  ├─ حافظه کوکی استاندارد     ──> [حذف پس از بستن حالت خصوصی]
  ├─ LocalStorage / IndexedDB ──> [حذف پس از بستن حالت خصوصی]
  │
  ├─ جدول وضعیت پروتکل HSTS   ──> [ماندگار در نمایه شبکه کاربر]
  └─ پایگاه داده فاوآیکون SQLite ──> [اشتراکی میان تمام پنجره‌ها]

سازوکار فنی ابربیسکویت‌های HSTS

استاندارد امنیت انتقال اکید HTTP (موسوم به HSTS) که در سند IETF RFC 6797 مشخص شده است، مرورگر را ملزم می‌سازد تا با دامنه‌ای مشخص صرفاً از طریق ارتباطات رمزنگاری‌شده HTTPS تبادل داده کند. هنگامی که سرور پاسخ سربرگ Strict-Transport-Security: max-age=31536000; includeSubDomains را ارسال می‌دارد، مرورگر یک خط‌مشی امنیتی محلی را به ثبت می‌رساند. طی ۳۶۵ روز پس از آن، هرگونه اقدام برای باز کردن آن دامنه با پروتکل ناامن HTTP، پیش از خروج بسته‌ها از کارت شبکه، به صورت خودکار به HTTPS ارتقا می‌یابد.

اگرچه هدف اولیه این استاندارد پیشگیری از حملات تنزل پروتکل است، اما این ساختار ناخواسته یک وضعیت ذخیره‌سازی تک‌بیتی دودویی ایجاد می‌کند: یک زیردامنه مشخص یا در جدول محلی HSTS ذخیره شده است (مقدار ۱) یا وجود ندارد (مقدار ۰).

شبکه سرورهای ردگیری (tracker-network.example)
  ├── bit00.tracker-network.example (وضعیت HSTS فعال  = ۱)
  ├── bit01.tracker-network.example (وضعیت HSTS غیرفعال = ۰)
  ├── bit02.tracker-network.example (وضعیت HSTS فعال  = ۱)
  └── ... (۳۲ تا ۶۴ زیردامنه مجزا)

موتورهای تحلیلی این پرچم‌های دودویی را برای بازسازی یک عدد شناسایی به کار می‌گیرند:

  1. مرحله ثبت وضعیت: با ورود کاربر به یک پایگاه اینترنتی حاوی اسکریپت ردیابی، برنامه‌ای مخفی مجموعه‌ای از درخواست‌ها را به سوی ۳۲ زیردامنه اختصاصی ارسال می‌کند. برای هر بیت از شناسه ۳۲ بیتی محاسبه‌شده (مانند 11010010...)، سرور تنها برای زیردامنه‌های معادل عدد یک، پاسخ HTTPS همراه با سربرگ HSTS ارسال می‌کند. زیردامنه‌های معادل صفر پاسخ ناامن می‌گیرند یا اساساً فراخوانی نمی‌شوند.
  2. مرحله خواندن وضعیت: در مراجعات بعدی یا در وب‌سایت‌های همکار، اسکریپت درخواست‌های دریافت تصویر ساده HTTP را به تمام ۳۲ زیردامنه می‌فرستد. اگر زیردامنه‌ای پیش‌تر در مرورگر ذخیره شده باشد، دستگاه به شکل خودکار آن را به https:// تبدیل می‌کند؛ در غیر این صورت درخواست به شکل ناامن http:// ارسال می‌گردد.
  3. بازسازی شناسه: سرور مشاهده می‌کند کدام درخواست‌ها به درگاه امن ۴۴۳ و کدام موارد به درگاه عادی ۸۰ رسیده‌اند. با اختصاص مقدار یک به درگاه ۴۴۳ و صفر به درگاه ۸۰، شناسه ۳۲ بیتی کاربر در کسری از ثانیه بازسازی می‌شود.

از آنجا که بخش‌های متداول پاکسازی مرورگر معمولاً داده‌های کوکی را از تنظیمات امنیتی پروتکل‌ها تفکیک می‌کنند، جدول HSTS پس از پاکسازی معمولی نیز باقی می‌ماند.

ایجاد نمایه شناسایی از طریق حافظه فاوآیکون

حافظه پنهان فاوآیکون شیوه پنهان‌تری برای ردگیری فراهم می‌کند. مرورگرهای پیشرفته نمادهای کوچک وب‌سایت‌ها را در یک پایگاه داده SQLite اختصاصی (مانند جدول Favicons در کرومیوم) ذخیره می‌سازند تا برگه، تاریخچه و نشانک‌ها بلافاصله و بدون تاخیر شبکه نمایش داده شوند.

برخلاف حافظه پنهان عمومی که بر مبنای فرامین Cache-Control عمل می‌کند، دریافت نماد سایت در گذشته خارج از محیط ایزوله سند وب انجام می‌گرفت:

[موتور ناوبری مرورگر]
  │
  ├─ گام ۱: درخواست سند اصلی وب
  │
  ├─ گام ۲: شناسایی پیوند فاوآیکون در صفحه
  │
  ├─ گام ۳: جستجو در پایگاه داده SQLite فاوآیکون
  │     ├── موجود در دیسک: استفاده از نماد ذخیره شده (بدون ارسال داده به شبکه)
  │     └── ناموجود در دیسک: ارسال درخواست شبکه HTTP GET به سرور
  │
  └─ سامانه ردگیری: تحلیل درخواست‌های دریافتی برای محاسبه کد دودویی

پژوهش‌های ارائه‌شده در همایش USENIX Security نشان دادند که یک سرور می‌تواند درختی از تغییر مسیرهای متوالی بر اساس HTTP 302 ایجاد کند. هرگاه مرورگر نمادی را در مراحل قبل ذخیره کرده باشد، از نسخه محلی استفاده نموده و ارتباط شبکه‌ای قطع می‌شود؛ در غیر این صورت درخواستی جدید ایجاد می‌گردد. تحلیل مسیر این درخواست‌ها، موقعیت دستگاه را در شاخه‌های متوالی مشخص کرده و شناسه‌ای سخت‌افزاری ایجاد می‌نماید.

محدودیت‌های دفاعی در سطح مرورگر

توسعه‌دهندگان نرم‌افزارهای مرورگر اقداماتی فنی برای کاهش این تهدیدات اعمال کرده‌اند:

  • بخش‌بندی وضعیت محلی (State Partitioning): مرورگرهای امروزی تفکیک دوکلیدی را اجرا می‌کنند (مانند حفاظت جامع از کوکی در فایرفاکس و جداسازی وضعیت شبکه در کرومیوم). کلید حافظه پنهان ترکیبی از دامنه اصلی و دامنه منبع است (top_level_site, resource_site). از این رو، مقدار ثبت‌شده در یک پایگاه، در پایگاه دیگر خوانده نمی‌شود.
  • جدول موقت HSTS در حالت خصوصی: نگارش‌های تازه مرورگرها جدول موقتی برای پنجره‌های ناشناس می‌سازند و با اتمام جلسه آن را از بین می‌برند.

با این وجود، ایزولاسیون محلی مرورگر نمی‌تواند مانع تطبیق فراداده‌های شبکه شود:

  1. پنهان‌کاری با CNAME دامنه اصلی: هنگامی که صاحبان سایت زیردامنه‌ای را از طریق رکورد CNAME به سرویس‌های تحلیلی می‌سپارند، این اسکریپت‌ها در قالب منبع اصلی فعالیت کرده و سد جداسازی را دور می‌زنند.
  2. استفاده از اجزای مشترک WebView در گوشی: در سیستم‌عامل‌های اندروید و آی‌او‌اس، برنامه‌ها صفحات را از طریق ابزار سیستمی WebView بارگذاری می‌کنند که معمولاً از پشته شبکه مشترک سود برده و تفکیک پنجره خصوصی را اعمال نمی‌کند.
  3. پیوند داده‌ها از طریق فراداده شبکه: حتی با جداسازی حافظه پنهان، سرورها می‌توانند با تطبیق نشانی IP عمومی، شماره سیستم مستقل ارائه‌دهنده اینترنت (ASN) و امضای TLS، بخش‌های گوناگون را به یکدیگر متصل نمایند.

خنثی‌سازی ردگیری با RiceGuard

تدابیر مرورگر تنها حافظه دیسک را مجزا می‌سازند، اما قادر به پنهان کردن مولفه‌های شبکه نیستند. هرگاه سرور تحلیلی درخواست‌هایی از بخش‌های گوناگون دریافت کند، با اتکا به نشانی IP و مسیر مسیریابی به پیوند داده‌ها اقدام می‌ورزد.

سامانه VPNRice با معماری متمرکز RiceGuard در لایه ۳ شبکه این ارتباط را قطع می‌کند:

[مرورگر و برنامه‌های دستگاه کاربر]
  │
  │ (پرس‌وجوهای HSTS / اسکن زیردامنه‌ها / دریافت فاوآیکون)
  ▼
[رابط شبکه مجازی RiceGuard]
  │
  ├─ تونل رمزنگاری‌شده Chacha20-Poly1305 (RFC 8439)
  ├─ کارگزار DNS امن با مهار نشت داده (درگاه‌های ۵۳ و ۸۵۳)
  │
  ▼
[خوشه سرورهای خروجی VPNRice]
  │
  ├─ نشانی IP عمومی مشترک میان انبوه کاربران
  ├─ جداسازی مشخصه‌های مسیریابی ASN ارائه‌دهنده اینترنت
  │
  ▼
[سرورهای مقصد و شبکه‌های ردیابی]
  1. گسستن لنگرهای هویت شبکه: پروتکل RiceGuard کلیه تبادلات دستگاه را از طریق تونل‌های مستحکم WireGuard هدایت می‌نماید. در لحظه‌ای که سامانه‌های تحلیلی درخواست‌های HSTS یا فاوآیکون را دریافت می‌کنند، نشانی مبدا سرورهای پرظرفیت VPNRice است. سامانه نظارتی نمی‌تواند ردپای حافظه را با خط اینترنت ثابت یا هویت دارنده اتصال تطبیق دهد.
  2. ایزوله‌سازی تفکیک‌نامه‌های DNS: خواندن ابربیسکویت HSTS به ارسال متوالی ده‌ها درخواست نام دامنه وابسته است. RiceGuard کلیه درخواست‌ها را به سوی سرورهای DNS اختصاصی بدون ثبت لاگ هدایت می‌کند و ناظران محلی امکان بازبینی این موج از پرس‌وجوها را نخواهند داشت.
  3. جابجایی مداوم نقاط خروجی: توزیع هوشمندانه داده‌ها در سرورهای گوناگون، مانع تشکیل پرونده‌های طولانی‌مدت رفتاری شده و راهکار تحلیل ترکیبی حافظه پنهان را مختل می‌سازد.

راهکارهای کاربردی برای ارتقای امنیت دستگاه

جهت مقابله با نفوذ از طریق حافظه پنهان پروتکل‌ها، این روش‌های پیکربندی پیشنهاد می‌شود:

  • پاکسازی دوره‌ای جدول HSTS: در مرورگرهای مبتنی بر کرومیوم به بخش داخلی chrome://net-internals/#hsts بروید و نام دامنه‌های مشکوک را در بخش «Delete domain security policies» پاک کنید.
  • بررسی جداسازی شبکه در فایرفاکس: در بخش about:config اطمینان حاصل کنید که گزینه privacy.partition.network_state روی مقدار true تنظیم شده باشد تا تفکیک سوکت‌ها و حافظه پنهان تضمین گردد.
  • برقراری پیوسته ارتباط VPN در لایه ۳: برنامه VPNRice را به صورت مداوم بر روی تلفن همراه و رایانه خود فعال نگه دارید. رمزنگاری سرتاسری ترافیک شبکه این اطمینان را ایجاد می‌کند که داده‌های حافظه پنهان و الگوهای پروتکلی هویت و مشخصات تجهیزات شما را آشکار نسازند.