في كود عملاء Telegram
، تمت إضافة القدرة على تمويه كـ HTTPS (TLS + HTTP / 2.0).

لاستخدام هذه الميزة ، أضافوا بادئة سرية جديدة -
"هه" . بالإضافة إلى ذلك ، أضافوا القدرة على تشفير السر في عنوان الخادم الوكيل كـ base64 ، بالإضافة إلى سداسي عشرية.
قبل الخوض في التفاصيل ، دعونا نحاول معرفة كيفية تطور دعم خوادم بروكسي في Telegram.
قبل التاريخ
- في البداية ، دعم Telegram بروكسي SOCKS. ساعد هذا على تجاوز حظر الخادم بواسطة IP ، ولكن كان البروتوكول ملحوظًا في حركة المرور ، وتم إرسال كلمة المرور بنص واضح.
- منذ حوالي عام ، أطلقوا وكيلًا رسميًا يعمل على بروتوكول MTProto الجديد. على عكس SOCKS ، لم يتم نقل كلمة المرور في MTProto بنص واضح. في البروتوكول ، تخلصوا من أي رؤوس خدمات يمكن للمرء من خلالها فهم أنه هو حقاً. أضفنا أيضًا القدرة على عرض الإعلانات لمستخدمي الخادم الوكيل
- اتضح أنه يمكن اكتشاف الوكلاء الذين يقومون بتشغيل بروتوكول MTProto من خلال طول الحزم. عند إنشاء اتصال ، يقوم العميل والخادم الوكيل بتبادل حزم ذات طول معين ، وخلال العملية - حزم من نفس الطول القياسي 4. بدأ استخدام هذه الميزة بواسطة مزودي الخدمة الكبار لحظر برنامج المراسلة. تفاعل مطورو Telegram عن طريق تعديل البروتوكول بإضافة عدد من وحدات البايت العشوائية إلى كل حزمة. منذ أن توقف التغيير عن التوافق ، اضطررت إلى استكمال التنسيق السري بالبادئة "dd" الخاصة ، مما يعني استخدام بروتوكول معدل:
tg://proxy?server=178.62.232.110&port=3256&secret=dd00000000000000000000000000000000
- عند دراسة ميزات حظر الخادم الوكيل في الصين وإيران ، اتضح أن المشرفين يستخدمون هجمات الإعادة للكشف. في تطبيقات بديلة للخوادم الوكيلة في Python و Erlang و Go ، ظهرت حماية جزئية ضد هذا النوع من الهجوم. لذلك ، تخزن الخوادم الوكيلة البيانات المنقولة في المرحلة الأولى من إنشاء اتصال ولا تسمح بإعادة الاتصال مع نفس البيانات. النهج لديه مشكلة مع وكلاء كبيرة ، كما تتطلب الذاكرة كمية كبيرة من ذاكرة الوصول العشوائي
- في الصين وإيران ، يتم استخدام التكتيكات التالية: إذا كان البروتوكول غير معروف ، فعندئذ فقط في حالة انخفاض سرعة عمله بشدة. في الممارسة العملية ، هذا يعني إمكانية استخدام Telegram فقط لإرسال الرسائل النصية ، دون الصور ومقاطع الفيديو. وفي الصين عرفوا كيفية القيام بذلك لفترة طويلة ، لكنهم تعلموا في إيران مؤخرًا نسبيًا. روسيا لم تتعلم بعد ، لكن القانون قد صدر بالفعل. تبدو محاولة من قِبل مطوري برامج messenger لإخفاء حركة المرور بموجب بروتوكول شائع مقابل هذه الخلفية طبيعية.
ما الذي تغير؟
في البروتوكول بين عميل Telegram والخادم الوكيل ، تمت إضافة طبقة أخرى من التغليف عبر TCP. بدلاً من إرسال البيانات عبر TCP ، يتم التفاف البيانات في إدخالات TLS التالية:

في بداية العمل ، تمت إضافة مرحلة مضاهاة مصافحة TLS. تحتوي الحزمة من العميل إلى الخادم الوكيل على البنية التالية:

جميع الحقول تقريبًا غير منطقية لعملاء Telegram وهي مطلوبة فقط للتظاهر بأنها TLS. يتم تنفيذ الوظيفة الأكثر أهمية بواسطة حقل
Random ، حيث تنجم
HMAC عن السر المشترك ويتم وضع البيانات الموجودة في الحزمة ، مما يسمح للعميل بإثبات أنه يعرف السر. أيضًا ، يقوم العميل بتدوين البايتات الأربعة الأخيرة من حقل Random مع وقته بتنسيق unixtime ، مما يسمح للخادم الوكيل بتحديد وقت إنشاء الحزمة. هذا مفيد للحماية من هجمات الإعادة. إذا تم إنشاء الحزمة منذ فترة طويلة أو في المستقبل ، يمكن للخادم الوكيل إسقاطها على الفور.
عندما يتصل العميل ، يتحقق الخادم الوكيل من HMAC المنقول. إذا كان يطابق الحساب المحسوب ، يستجيب الوكيل بحزمة مع البنية التالية:

كما أن حقل
Random فيه ليس عشوائيًا ، ولكنه ناتج عن HMAC من السر المشترك والبيانات الموجودة في الحزمة ، وعند حساب HMAC ، يتم تعيين القيمة العشوائية المرسلة من قبل العميل قبل بيانات الحزمة نفسها. عند نقل البيانات نفسها ، يتم تجاهل الرسالة الأولى من قبل العميل ، والذي يسمح لك بإرسال بيانات ذات طول عشوائي ، مما يزيد من تعقيد عملية الكشف.
أين تحاول؟
للتوضيح ، تم تعديل
الخادم الوكيل في Python ورفعه ، حيث يمكنك الاتصال بأحدث عميل لسطح المكتب Telegram ومشاهدة حركة المرور المنقولة باستخدام Wireshark:
tg://proxy?server=178.62.232.110&port=3256&secret=7gAAAAAAAAAAAAAAAAAAAABnb29nbGUuY29t
أيضًا ، تمت إضافة دعم إخفاء TLS
إلى خادم وكيل Erlang . على الأرجح ، في المستقبل القريب ، ستتم إضافة هذه الوظيفة إلى تطبيقات أخرى للخوادم الوكيلة.