
هجمات المتصفحات مقطوعة الرأس: كيف تُكشف Puppeteer وPlaywright وإضافات التخفي
من أدوات اختبار إلى أسلحة هجومية
صُممت أطر أتمتة المتصفحات مثل Puppeteer وPlaywright وSelenium أصلاً لخدمة المطورين في اختبار تطبيقات الويب آلياً. لكن القدرات ذاتها التي تجعلها أدوات اختبار ممتازة -- التحكم الكامل في المتصفح، وتنفيذ JavaScript، ومحاكاة تفاعل المستخدم -- جعلتها أيضاً الأدوات المفضلة للمهاجمين.
تُستخدم هذه الأدوات اليوم في مجموعة واسعة من الهجمات: من استخراج البيانات (Web Scraping) واختبار بيانات الاعتماد المسروقة (Credential Stuffing)، إلى إنشاء حسابات وهمية بالجملة وشراء التذاكر والمنتجات المحدودة آلياً (Scalping). تقرير Imperva Bad Bot Report 2025 يشير إلى أن أكثر من 30% من حركة البوتات المتقدمة تستخدم متصفحات مقطوعة الرأس.
بنية المتصفح مقطوع الرأس: كيف يعمل
المتصفح "مقطوع الرأس" (Headless) هو متصفح ويب كامل يعمل بدون واجهة رسومية مرئية. يتحكم فيه المهاجم برمجياً عبر بروتوكول Chrome DevTools Protocol (CDP) أو بروتوكول WebDriver، مما يتيح تنفيذ أي إجراء يمكن للمستخدم البشري القيام به: التنقل بين الصفحات، ملء النماذج، النقر على الأزرار، وحتى التقاط لقطات شاشة.
الخطورة تكمن في أن المتصفح مقطوع الرأس يُنفذ JavaScript بالكامل ويُحمّل CSS ويبني شجرة DOM تماماً مثل المتصفح العادي. هذا يعني أن الفحوصات البسيطة المعتمدة على JavaScript (مثل التحقق من وجود عناصر DOM معينة) قد لا تكشفه.
إضافات التخفي: سباق التمويه والكشف
مع تطور تقنيات كشف المتصفحات مقطوعة الرأس، ظهرت إضافات تخفي (Stealth Plugins) مصممة خصيصاً لإخفاء آثار الأتمتة. أشهر هذه الإضافات هي puppeteer-extra-plugin-stealth وplaywright-stealth. تقوم هذه الإضافات بسلسلة من التعديلات لإخفاء التشغيل الآلي:
إزالة خاصية navigator.webdriver: الخاصية التي يضبطها المتصفح تلقائياً عند التشغيل بواسطة WebDriver.
تزييف خصائص navigator.plugins: إضافة إضافات وهمية (مثل Chrome PDF Plugin) لمحاكاة متصفح عادي.
تعديل نتائج WebGL وCanvas: لمنع كشف أن GPU الخادم يختلف عن GPU حاسوب المستخدم العادي.
إخفاء خصائص Chrome الخاصة: مثل window.chrome وPermissions API لتبدو كمتصفح Chrome عادي.
لكن هذه التعديلات ذاتها تترك آثاراً يمكن كشفها، كما سنرى في القسم التالي.
أساليب الكشف المتقدمة: ما وراء فحص WebDriver
كشف بروتوكول CDP
بروتوكول Chrome DevTools Protocol (CDP) هو الآلية التي تتحكم بها Puppeteer وPlaywright في المتصفح. حتى مع إضافات التخفي، يترك CDP آثاراً يصعب إخفاؤها. على سبيل المثال، عند استخدام CDP لإضافة كود JavaScript قبل تحميل الصفحة (عبر Page.addScriptToEvaluateOnNewDocument)، يمكن كشف ذلك عبر فحص ترتيب تنفيذ النصوص البرمجية وتوقيتها.
كذلك، بعض وظائف CDP مثل Runtime.enable وNetwork.enable تُنشط مستمعات أحداث إضافية في المتصفح يمكن الكشف عنها من داخل صفحة الويب عبر قياس الأداء وتوقيت العمليات.
كشف تزوير النماذج الأولية (Prototype Tampering)
إضافات التخفي تعمل عادة بتعديل خصائص كائنات JavaScript المدمجة (مثل navigator وwindow). لكن هذه التعديلات تترك بصمات يمكن كشفها عبر فحص سلسلة النماذج الأولية (Prototype Chain). على سبيل المثال:
فحص toString() للدوال المُعدّلة -- الدوال الأصلية تعيد "[native code]" بينما الدوال المُعدّلة قد لا تفعل ذلك بشكل صحيح.
فحص Object.getOwnPropertyDescriptor() -- يكشف ما إذا كانت الخصائص أصلية أو مُعاد تعريفها.
فحص Proxy -- بعض إضافات التخفي تستخدم وكلاء JavaScript (Proxy) لاعتراض الوصول للخصائص، ويمكن كشفها عبر اختبارات معينة.
فحص إطار iframe المعزول
أسلوب كشف فعّال يعتمد على إنشاء iframe بسياق معزول وفحص كائناته. إضافات التخفي تُعدّل عادة السياق الرئيسي للصفحة لكن قد تفشل في تعديل سياقات iframe الجديدة. مقارنة خصائص navigator وwindow بين السياق الرئيسي وسياق iframe المعزول يمكن أن يكشف التناقضات الناتجة عن إضافات التخفي.
بصمة TLS: الكشف قبل تحميل JavaScript
جميع أساليب الكشف السابقة تعمل بعد تحميل صفحة الويب وتنفيذ JavaScript. لكن ماذا لو كان بإمكانك كشف البوت قبل أن يُحمّل أي كود؟ هنا يأتي دور بصمة TLS.
عند إنشاء اتصال HTTPS، يرسل المتصفح رسالة "Client Hello" تحتوي على معلومات تقنية مفصلة: إصدارات TLS المدعومة، خوارزميات التشفير، المنحنيات البيضاوية، والامتدادات. هذه المعلومات تُشكّل بصمة فريدة تُعرف بـبصمة JA3/JA4.
المتصفحات الحقيقية (Chrome، Firefox، Safari) لها بصمات TLS مميزة ومعروفة. المتصفحات مقطوعة الرأس، حتى مع إضافات التخفي، غالباً ما تُنتج بصمات TLS مختلفة لأنها تستخدم إصدارات معدّلة من محرك المتصفح أو تتصل عبر مكتبات HTTP مختلفة.
أنظمة مثل gkcaptcha تستخدم بصمة TLS كطبقة كشف أولى. إذا لم تتطابق بصمة TLS مع أي متصفح معروف، يُرفع مستوى الاشتباه فوراً -- قبل أن يصل أي كود JavaScript إلى المتصفح. هذه الطبقة فعالة بشكل خاص لأن تعديل بصمة TLS يتطلب تغييرات على مستوى مكتبة TLS ذاتها، وهو أصعب بكثير من تعديل خصائص JavaScript.
التحقق المتقاطع من البصمات: كشف المتصفحات المضادة للكشف
ظهرت فئة جديدة من الأدوات تُسمى المتصفحات المضادة للكشف (Anti-detect Browsers) مثل Multilogin وGoLogin وAdsPower. هذه المتصفحات تتيح للمهاجم إنشاء ملفات تعريف متصفح متعددة بهويات فريدة لكل منها -- بصمة مختلفة لـ Canvas وWebGL والخطوط والشاشة.
لكشف هذه المتصفحات، يُستخدم أسلوب التحقق المتقاطع من البصمات (Cross-fingerprint Validation). الفكرة بسيطة: في المتصفح الحقيقي، جميع البصمات متسقة داخلياً. فمتصفح يدّعي أنه Chrome 120 على Windows 11 يجب أن تتطابق بصمة TLS الخاصة به مع Chrome 120، وبصمة WebGL مع GPU موجود فعلاً في الأجهزة المعروفة، ودقة الشاشة مع أجهزة حقيقية.
المتصفحات المضادة للكشف غالباً ما تفشل في الحفاظ على هذا التناسق الداخلي. مثلاً، قد تُظهر بصمة WebGL لبطاقة رسومات لا تتوافق مع نظام التشغيل المُعلن، أو بصمة TLS لا تتطابق مع إصدار المتصفح المُدّعى.
علامة WebDriver وما بعدها
علامة navigator.webdriver هي أبسط أساليب الكشف وأكثرها سهولة في التجاوز. تضبط المتصفحات هذه العلامة على true تلقائياً عند التشغيل بواسطة بروتوكول WebDriver. إضافات التخفي تحذفها أو تضبطها على false.
لكن الكشف المتقدم لا يكتفي بفحص هذه العلامة مباشرة، بل يبحث عن آثار جانبية. حتى بعد حذف navigator.webdriver، قد تبقى آثار في:
متغيرات البيئة: مثل CDPSession ووجود أغراض تصحيح الأخطاء في الذاكرة.
خصائص النافذة: أبعاد النافذة المقطوعة الرأس تختلف عن أبعاد المتصفح العادي (مثلاً outerWidth === innerWidth في المتصفح المقطوع).
سلوك الأداء: واجهة Performance API تُظهر توقيتات مختلفة في المتصفحات المقطوعة مقارنة بالعادية.
بناء دفاع متعدد الطبقات
لا يوجد أسلوب كشف واحد يكفي بمفرده. الدفاع الفعال يعتمد على تراكب طبقات كشف متعددة، حيث يجب على البوت تجاوز جميعها معاً:
الطبقة الأولى -- بصمة TLS (JA3/JA4): كشف قبل تحميل أي كود. فعالة ضد المكتبات البسيطة ومتصفحات الـ headless غير المعدّلة.
الطبقة الثانية -- فحص البيئة: كشف WebDriver، CDP، تزوير النماذج الأولية، فحص iframe المعزول. فعالة ضد إضافات التخفي الأساسية.
الطبقة الثالثة -- التحقق المتقاطع من البصمات: كشف التناقضات بين بصمة TLS وبصمة المتصفح وWebGL والخطوط. فعالة ضد المتصفحات المضادة للكشف.
الطبقة الرابعة -- التحليل السلوكي: تحليل حركة الماوس وديناميكيات لوحة المفاتيح. فعالة ضد البوتات الأكثر تطوراً التي تتجاوز جميع الفحوصات البيئية.
خلاصة: لا يوجد حل سحري واحد
سباق التسلح بين مطوري البوتات وأنظمة الكشف مستمر ولن يتوقف. كل أسلوب كشف جديد يُطور، يجد مطورو البوتات طريقة للتحايل عليه. لكن الدفاع الفعال لا يعتمد على فحص واحد "غير قابل للاختراق"، بل على تراكم عشرات الفحوصات المتقاطعة التي يجب على البوت تجاوزها جميعاً في آن واحد.
تجاوز فحص واحد سهل. تجاوز عشرة فحوصات ممكن. تجاوز مائة فحص متسق داخلياً في نفس الوقت -- هذا ما يجعل الكشف الفعال ممكناً.
المؤسسات السعودية التي تواجه تهديدات متزايدة من البوتات المتقدمة تحتاج إلى حلول كشف متعددة الطبقات تجمع بين التحليل على مستوى الشبكة (بصمة TLS) والتحليل على مستوى المتصفح (فحص البيئة والبصمات) والتحليل على مستوى المستخدم (القياسات الحيوية السلوكية). الاعتماد على طبقة واحدة فقط يعني أن البوت المتقدم التالي سيتجاوزها.