How_to_align_with_TLS_fingerprinting

تؤدي التحديات الأمنية الجديدة إلى تطور تدابير مكافحة الروبوتات، وأحياناً ما يقع حتى جامعو البيانات المبررون في مرمى هذه التدابير. ومن هذه التقنيات بصمة TLS، وهي طريقة خفية وغير معروفة جيداً حتى الآن وفعالة إلى حد كبير لتحديد جهاز يحاول الاتصال بخادم. لماذا لا يُعد تجاوزها الأسهل، وما الذي ينبغي فعله لتجريف البيانات التي تحتاج إليها بنجاح؟ يكشف هذا المقال كل التفاصيل. 

ما هو TLS أساساً؟

لفهم بصمة TLS، لنتعرف أولاً إلى TLS ذاته. TLS أو أمان طبقة النقل (وكان يسمى سابقاً SSL، طبقة المقابس الآمنة) هو بروتوكول يعمل فوق اتصال HTTP قياسي ويؤمّن أنشطتك على الإنترنت. عندما ترى رمز القفل قرب URL أو عندما يبدأ عنوان موقع الويب بـ https، فهذا يعني أن TLS نشط. في الواقع، يصعب الآن العثور على موقع ويب لا يستخدم TLS. وإذا حاولت زيارة موقع ويب يبدأ بـ “http” فقط، من دون “s”، فسيعرض متصفحك تحذيراً من اتصال غير آمن بدلاً من إعادة توجيهك إلى صفحة ويب. 

يشفّر TLS بياناتك قبل إرسالها إلى الخادم المستهدف، أي يحولها إلى سلاسل من رموز عشوائية مثل 9823h4brjhvbi، بحيث لا يتمكن الفاعلون الضارون من استخدامها حتى إن اعترضوا معلوماتك. لكن قبل إرسال بياناتك، يجب أن يتأكد TLS من أنه يرسل المعلومات إلى الخادم المبرر، وأن يفك الخادم الأخير تشفيرها بعد ذلك. لذلك، ينشئ TLS أولاً اتصالاً قبل إرسال البيانات، إذ يتبادل سلسلة من الرسائل مع الخادم المستهدف للتحقق منه، والاتفاق على طريقة تشفير، وإنشاء مفاتيح جلسة مشتركة تساعد على حماية البيانات وفك تشفيرها أثناء الاتصال. 

تسمى العملية برمتها مصافحة TLS، وتبدأ برسالة “ClientHello”. وهذه الرسالة هي ما يهمنا في بصمة TLS، لأنها مصدر البيانات الذي تستخدمه الخوادم لاحقاً لتحديد هويتك.  

مم تتكون رسالة “ClientHello”؟

بما أن رسالة “ClientHello” لا تحتوي بيانات حساسة، مثل بيانات الاعتماد، وتُنقل بصيغة غير مشفرة، يمكنك التقاطها بسهولة وعرض محتواها باستخدام أدوات تحليل الشبكة مثل Wireshark. وهي تحتوي على قدر كبير من البيانات. 

  • إصدار TLS، وهو أعلى إصدار يدعمه العميل.
  • العشوائي، وهو رقم عشوائي من العميل.
  • معرف الجلسة، ويستخدم للجلسات المستأنفة، لذا يكون فارغاً في المصافحة الأولى.  
  • حزم التشفير، وهي خوارزميات تشفير يدعمها العميل، وترد مرتبة حسب التفضيل.
  • طريقة الضغط، وهي اليوم 0 في الغالب تقريباً.
  • الامتدادات المدعومة، وهي ميزات إضافية قد يرغب العميل في استخدامها، مثل:
  • إشارة اسم الخادم (SNI)، وتحدد اسم المضيف الذي يطلبه العميل. 
  • بروتوكول تفاوض بروتوكول طبقة التطبيق (ALPN)، وهو امتداد للتفاوض بشأن البروتوكول الذي ينبغي التعامل معه عبر TLS. وهو فعال لأنه مستقل عن طبقة التطبيق. وعادةً ما تكون امتدادات TLS لخوادم الويب هي HTTP/1.1 أو HTTP/2. 
  • مكتبات TLS، وهي مجموعة من المكتبات التي يستخدمها العميل، لأن العملاء المختلفين يستخدمون مكتبات مختلفة.
  • خوارزميات التوقيع، وهي قائمة الخوارزميات المدعومة للتحقق من هوية الخادم.
  • المنحنيات الإهليلجية، إذ يستخدم الاتصال المشفر معادلات منحنية عبر حقول منتهية، ويشير هذا الجزء إلى المنحنى المطلوب استخدامه. 
  • تنسيقات نقاط المنحنى الإهليلجي، وتوضح كيفية ترميز النقاط. 

توجد امتدادات أخرى أيضاً. وبفضل كل ذلك، يستطيع موقع الويب استنتاج قدر كبير من البيانات عنك من رسالة “ClientHello”، بما في ذلك حزمة البرمجيات مثل عائلة المتصفح ونوع الجهاز ووضع الأمان، من بين أمور أخرى.  

طريقة البصمة JA3

حسناً، تلقى الخادم رسالة “ClientHello”. ماذا بعد؟ هنا يأتي دور تقنية JA3. تديرها Salesforce، وهي أشهر حلول البصمات. وتركز على خمسة مكونات رئيسية للرسالة: إصدار TLS، وحزم التشفير، ومعرفات الامتدادات، والمجموعات المدعومة (المنحنيات الإهليلجية)، وتنسيقات نقاط المنحنى الإهليلجي. يحول كل جزء إلى صيغة عشرية ويصل بفواصل وشرطات. لكن بيانات البصمة الفعلية سلسلة طويلة، لذا تستخدم دالة التجزئة التشفيرية MD5 للتيسير. وهي تنتج تجزئة ثابتة من 128 بت. ثم يقارن المتصفح النتيجة باحتمالات بصمات أخرى، غالباً من قاعدة بيانات داخلية، لكن تستخدم قواعد عامة أحياناً أيضاً. 

الهدف هو رصد الفروق: هل يبدو هذا العميل متصفح ويب عادياً، أم أن فيه ما يثير الشبهات؟ تكمن المشكلة في أن التجزئات التي ينتجها متصفح ويب عادي مثل Chrome، أو مكتبة برمجية مستخدمة لتجريف الويب، ستكون مختلفة لأن رسائل ClientHello الخاصة بها مختلفة. ولأن خوارزميات JA3 لا تأخذ في الحسبان إلا بضعة متغيرات، فلا توجد خيارات بصمات فريدة كثيرة، لذلك يسهل نسبياً التمييز بين مستخدم عادي وروبوت تجريف. 

وهذا يثبت فعالية بصمة TLS في صد جامعي البيانات ويجعلها مصدر إزعاج كبير لمن يعتمدون على تجريف الويب. 

توجد قواعد بيانات لمكافحة تجريف الويب تجمع احتمالات بصمة JA3. يمكنك حساب بصمتك والتحقق من إدراجها في القائمة المسموح بها لضمان وصول سلس. 

لكن بصمات JA3 ليست وحدها القادرة على كشف أن العميل المتصل جامع بيانات. فقد يؤدي حتى اختلاف القيم في رسالة ClientHello ذاتها إلى تشغيل أنظمة مكافحة الروبوتات. على سبيل المثال:

  • قد يكون غياب SNI إشارة تحذير، إذ يتوقع وجوده عادةً في الطلب.
  • قد تُعد طلبات ALPN القديمة علامة على نشاط مريب، لأن المتصفحات الحديثة تدعم HTTP/2 عادةً.
  • تختلف المنحنيات الإهليلجية التي تدعمها متصفحات مثل Chrome عن تلك التي تدعمها السكربتات البرمجية، ما قد يثير الشكوك.
  • ترتب قائمة حزم التشفير حسب الأولوية، ويجب أن تطابق قائمة المتصفحات الشائعة، بما في ذلك الترتيب. وينطبق الأمر نفسه على الامتدادات.

طرق التوافق مع بصمة TLS 

فيما يتعلق ببصمة TLS، هدفك هو جعل جامع البيانات لديك يطابق بصمات متصفح ويب شائع. ليست هذه مهمة سهلة، لكن توجد عدة أفكار يمكنك تجربتها. وقد ترغب حتى في مزج بعضها. 

عند استخدام متصفحات عالية الجودة مثل Puppeteer وPlaywright أو Selenium، فأنت تستخدم متصفحات حقيقية بالفعل وتحصل بالتالي على بصمات أصلية. وهي لا تغير بصمة TLS، لذلك لا تستطيع مواقع الويب تحديد ما إذا كان متصفح عادي أو متصفح بلا واجهة يحاول الاتصال. ثغرة أقل.

  • استخدم مجموعة من المتصفحات وإصدارات أنظمة التشغيل

تساعد هذه الحيلة على توزيع الاتصالات عبر بصمات متعددة، وهو مفيد إذا كنت تدير مشروع تجريف ويب كبيراً. 

  • استخدم عميل HTTP قائماً على LibCurl 

يمكنك تحديث هؤلاء العملاء لاستخدام curl-impersonate. وهو إصدار معدل من مكتبة libcurl، يطبق إصلاحات على بصمات TLS لجعلها تبدو كبصمات متصفح ويب عادي. وتشمل المكتبات التي تدعم libcurl: Typhoeus ‏(Ruby)، وGuzzle ‏(PHP)، وPyCurl ‏(Python)، ومكتبتي curl الافتراضية وcrul المجتمعية ‏(R). 

  • تعزيز TLS

إذا كنت تستخدم لغة Go، فأنت محظوظ، فهي إحدى اللغات التي تتيح انتحال TLS. المكتبات مثل utls التابعة لـ Refraction Networking، وja3transport، وCycleTLS هي ما تحتاج إليه.

لكن الأمور ليست سهلة إلى هذا الحد إذا كنت تستخدم Java أو Python. مع Java، يمكنك استخدام الطريقة sslconfig.enabledCipherSuites لإعادة تهيئة قائمة حزم التشفير المفعلة. ومع Python، يمكنك تهيئة متغيرات حزمة التشفير وإصدار TLS باستخدام requests وhttpx. قد يساعد انتحال هذه المتغيرات في حل انقطاعات الوصول، لكن بصماتك لن تبدو أصلية تماماً رغم ذلك. 

  • دوّر عناصر أخرى 

عندما تحمل كل حركة المرور بصمة TLS نفسها، حتى إن بدت أصلية، فقد يبدو ذلك مريباً. حاول تدوير العناصر القابلة للتدوير، مثل ملفات تعريف الارتباط ووكيل المستخدم والرؤوس وعنوان IP. سيغير ذلك رسالة ClientHello قليلاً، ونتيجة لذلك ستختلف بصمات JA3 إلى حد ما أيضاً. متصفحات متعددة الحسابات وبروكسيات عالية الجودة ستساعدك في ذلك. 

كلمة أخيرة

أخيراً وليس آخراً، قد يمثل العمل بما يتوافق مع بصمة TLS تحدياً، إذ تكيف مواقع الويب المختلفة بروتوكول TLS بصورة طفيفة ولديها معايير وقواعد بيانات خاصة بها للسماح بالوصول أو منعه. ولانتحال بصمات TLS بنجاح، ركز على كل موقع ويب تحديداً، وحدد ما الذي يطلق آليات البصمة فيه وكيف يخصص البروتوكول القياسي. وعلاوة على ذلك، تجمع مصادر الويب اليوم بين إشارات على مستوى الشبكة، مثل بصمة JA3، وإشارات على مستوى التطبيق مثل الخطوط ودقة الشاشة، لذا لن يكفي الاعتماد على انتحال TLS وحده، بل تحتاج إلى ضمان أن كل تفصيل في جامع البيانات لديك يبدو أصلياً. راجع كل شيء دورياً أيضاً، إذ تحدّث مواقع الويب سياساتها ومخططات الكشف باستمرار وتظهر أساليب جديدة لمكافحة الروبوتات، لذلك ينبغي أن تفعل الشيء نفسه للحصول على بيانات دقيقة. وبالطبع، ينبغي لك دائماً البقاء ضمن الحدود المسموح بها، وتجريف البيانات المتاحة فقط، وتجنب إثقال مواقع الويب المستهدفة، واستخدام أدوات جديرة بالثقة، مثل البروكسيات المشتقة بصورة مشروعة. يمكن لـ DataImpulse بالتأكيد مساعدتك في الجزء الأخير، اضغط زر “جرّب الآن” أو تواصل معنا عبر [email protected] إذا كانت لديك أي أسئلة.

Share article: