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: