Telegram contre-attaque DPI et verrous - Faux TLS

image

Telegram teste une nouvelle version de blocage de contournement - masquant le trafic sous TLS normal (https).
Contexte: Les tentatives de blocage de Telegram ont lieu dans différents pays, la première option de blocage était simple: bloquer les adresses IP des serveurs Telegram.

Telegram combat assez bien cette attaque, modifiant périodiquement l'adresse IP à partir de laquelle il est disponible, mais cela provoque une longue connexion initiale ...

Les proxys de chaussettes sont devenus disponibles un peu plus tard, mais le protocole n'implique pas de cryptage, ce qui a permis de regarder simplement «à l'intérieur» du tunnel des chaussettes, déterminant que Telegram était à l'intérieur, bloquant les proxys.

Le tour suivant a été la sortie de MTProto Proxy, un serveur proxy Telegram qui utilise son protocole MTProto, mais il a également eu quelques problèmes - la taille du paquet est assez caractéristique et spécifique, et de nombreux DPI ont commencé à déterminer Telegram après le premier paquet - bloquant l'accès.

La réponse à ce comportement a été l'introduction d'une nouvelle version du protocole MTProto - avec une longueur aléatoire, maintenant il est plus difficile de déterminer que le tunnel Telegram est en face de nous, une partie du DPI a commencé à classer le trafic comme une «autre» partie mais a encore appris à identifier un motif caractéristique et avec une certaine probabilité (pas 100%) déterminer que le trafic est lié à Telegram
Nous passons maintenant à l'étape suivante (elle semble finale ou préfinale) - la stéganographie .
Stéganographie (du grec. Στεγανός «caché» + γράφω «j'écris»; lettres. «Écriture secrète») - une méthode de transmission ou de stockage d'informations, en tenant compte de la confidentialité du fait même d'un tel transfert (stockage).
En d'autres termes, Telegram prétend désormais être un trafic TLS (https) régulier.

Pourquoi faire semblant?


La réponse se trouve à la surface - à l'heure actuelle, la plupart du trafic est TLS (https), lorsque vous utilisez ce protocole, c'est ce que votre fournisseur ou DPI verra:

  1. Votre IP
  2. Serveur IP
  3. Domaine de connexion (l'URL ne verra pas)

De plus, un travail actif est en cours sur le dernier élément à supprimer, et en plus de deux IP, il y avait juste un tunnel crypté avec un contenu inconnu.

Dans cette situation, tous les protocoles non standard commencent à attirer une attention supplémentaire et la solution à ce problème est une chose - si vous ressemblez à TLS (https), il y a moins de questions.

Implémentation technique


Lorsque vous utilisez le nouveau protocole, le flux MTProto est enveloppé dans HTTPS standard (les premiers messages de négociation de tunnel) dans lequel le domaine (faux) est transféré. Après négociation du protocole MTProto - Fake-TLS n'est pas utilisé, alors le trafic commence à aller avec le protocole MTProto habituel avec une longueur aléatoire (touches dd).

Pour référence: Telegram utilise 3 types de clés pour MTProto Proxy:

  1. Clés régulières (facilement déterminées par DPI)
  2. Les deux premières lettres - jj - longueur de message aléatoire (DPI ne peut déterminer le protocole que par les premiers paquets de négociation de connexion - il ressemble à https / TLS normal)
  3. Les deux premières lettres - ee - Faux TLS + longueur de message aléatoire (DPI ne peut pas déterminer le protocole, le premier message et tous les suivants ressemblent à HTTPS / TLS)

Où essayer?


Il existe déjà deux serveurs proxy qui prennent en charge la nouvelle norme (il n'y a toujours pas de serveur proxy officiel, bien qu'il y ait longtemps que les clés dd soient prises en charge)

Prise en charge du mode proxy TLS faux:

  1. Python github.com/alexbers/mtprotoproxy
  2. Erlang github.com/seriyps/mtproto_proxy/tree/fake-tls

Veuillez noter: au moment de la rédaction de l'article, la fausse fonctionnalité tls est expérimentale, vous devez donc utiliser les versions Beta- ou Alpha du logiciel (à la fois les proxys et les clients)

Quels clients prennent en charge le nouveau mode?


Versions bêta de Telegram Desktop, Telegram iOS et dites version stable sur Android.

Comment essayer?


  1. Par exemple, nous utiliserons un proxy en Python:
  2. Installer le proxy:

    git clone https://github.com/alexbers/mtprotoproxy.git; cd mtprotoproxy
  3. :

    python3 mtprotoproxy.py
  4. (experimental) — :

    tg: tg://proxy?server=8.8.8.8&port=443&secret=7gAAAAAAAAAAAAAAAAAAAABnb29nbGUuY29t (experimental)
  5. — , Fake TLS.

?


Google.com , DPI HTTPS Google.com IP — , , .
! (IP) Google.com

Fake TLS — ?


— HTTPS DPI :

  1. IP

( eSNI).

Fake TLS , , , Google - Google — , , - - Google HTTPS/TLS .

?


, — — ( ). , HTTPS . ? — , .

— + () — , — MTProto.

eSNI ( ) — .

?


, Telegram , https/TLS WebSocket — .


MTProto — , Telegram — .

, — () , .

— 443 ( HTTPS) ( dd ee), ee dd , .

— , eSNI — .


Source: https://habr.com/ru/post/fr463165/


All Articles