PDA

Voir la version complète : Tor + Asterisk || questions réseau, codecs et ZRTP



Arnold487
21/06/2016, 00h23
Bonjour à tous. C'est mon premier post sur ce forum alors je voudrais déjà vous saluer !

"Hello :)"

Je poste dans cette section parce que ça ne concerne pas la "configuration" d'Asterisk proprement dite...
Alors Voilà, il y a de ça quelques temps je me suis mis en tête de faire tourner une solution de VoIP au travers de Tor qui soit la plus sécurisée possible. Avant de bondir sur votre fauteuil je voudrais faire une première mise au point à ce sujet :

Pourquoi Tor, pourquoi ce projet ?

-Déjà par défi technique, parce que ça a le mérite d'être intéressant (en tout cas "de m'interesser"), ce qui en soi est suffisant.
-Parceque je veux apprendre et parceque je PEUX.
-Pour protéger les identités des appelants et éviter le leack de métadonnées gravitant autour d'un appel, ce que le chiffrement seul ne permet pas (quelle IP appelle quelle autre IP avec quel protocole, à quelle heure, longueur de l'appel etc).
-Parce que ça ajoute une couche de chiffrement supplémentaire non négligeable qui rendrai les tentatives de cryptanalyse plus hardues. http://www.france24.com/fr/20141229-nsa-cryptographie-snowden-spiegel-outil-tor-zoho-pgp-zrtp-otr-communiction-internet
-Parceque l'existence de mon serveur est protégé (en grande partie), dans Tor, par "HiddenServiceAuthorizeClient stealth". https://www.torproject.org/docs/tor-manual.html.en
-Parce que je peux faire passer le flux Tor pour ce que je veux.... et que c'est super classe :) https://www.torproject.org/docs/pluggable-transports.html.en

Bref. Vous allez me dire que faire passer de la VoIP sur Tor pose des problèmes importants de latence. Ensuite vous allez me dire que Tor ne prend en charge que les paquets TCP/IP et pas les paquets UDP qui sont nécessaires au bon fonctionnement de la VoIP en général (confirmation de la cohérence des paquets inhérant au protocole TCP etc.). Ca pose un certain nombre de problèmes, c'est VRAI. Etant donnée que je suis extrêmement têtu, j'ai commencé par valider la "viabilité" du projet en installant Tor et Murmur (codec OPUS) sur un serveur OpenBSD (pour ceux que ça intéresse j'ai commencé le projet sous une 5.7, nous en sommes à la 5.9, j'y vais à mon rythme).

Les premiers tests n'étaient pas très concluants car la voix était hachée et j'avais des microcoupures désagréables. J'ai fait quelques réglages sur Tor que je ne vais pas approfondir ici et surtout sur le serveur Mumble : j'ai entre autres baissé l’échantillonnage maximum autorisé sur le codec Opus de moitié, résultat ça fonctionne très bien. Les clients ont une latence comprise entre 250 et 370ms pour joindre le serveur, ça parait beaucoup mais à l'usage les conversations sont vraiment fluides et très audibles, en d'autres termes -tout à fait praticables-. En ce qui concerne le flux "voix", mumble propose un mode "pure TCP". Un rapide TShark sur le serveur et sur les clients, un bref coup d'oeuil sur ARM (pour monitorer le trafic du serveur Tor) montrent que ma solution fonctionne comme voulu, tous les paquets passent en TCP/IP par tor, tout est chiffré.

Vous allez me dire que cela ne concerne pas un forum Asterisk. Avant de me tirer dessus lisez la suite s'il vous plait :)

Comme vous le savez, Mumble (le client) / Murmur (le serveur) est une solution opensource dédiée à la communication d'équipes de jeux vidéos. Il chiffre le canal de voix en AES256-SHA mais étant donnée que le projet Mumble ne vise pas la sécurité mais bien la facilité d'utilisation et d'administration je n'ai aucune confiance dans l'implémentation du cypher. D'autre part, un échange de clefs AES pose toujours des problèmes de sécurité (attaques MITM entre autres), ce qui dans un environnement aussi dangereux que Tor est un problème majeur.

J'ai donc décidé de pousser le vice et de "professionnaliser" ma solution en installant Asterisk en lieu et place de mon serveur Mumble. Au cas ou ça ne serai pas clair, comme avec la solution précédente les communications ne sortiraient pas de Tor et chaque client devrait se connecter sur Tor pour pouvoir communiquer avec les autres terminaux. La solution a (aurait) des avantages indéniables :

-Chiffrement poste à poste possible, contrairement à Mumble qui chiffre les connexions entre le serveur et les clients uniquement (je compte utiliser ZRTP, ce qui protègera aussi les appelants des attaques MITM)
-Possibilité de choisir le client SIP que je veux, ce qui est un atout.
-Flexibilité / proffondeur sans commune mesure avec Mumble (sans blague).
-Un large choix de codecs, contrairement à Mumble qui ne propose qu'Opus (à ma connaissance). Peut-être existe-t-il un codec plus léger et plus éfficace dans ce genre d'environnement qu'Opus ?
-Parce qu'Asterisk est disponnible dans l'arbre de ports d'OpenBSD, l'OS que j'utilise pour mes serveurs (je ne compte pas en changer, ça marche très bien et j'en suis content).
-Parce qu'Asterisk est réputé stable sur cette plateforme.

J'en arrive ENFIN à mes questions. Avant de hurler au scandale je vous prie de m'excuser quand à mon niveau technique sur Asterisk, je suis nouveau (comprendre "je suis une grosse quiche sur Asterisk parce que la SIP, c'est un métier, et ce n'est pas mon métier").

1. J'ai vu qu'il existait une option dans le fichier /etc/asterisk/sip.conf. Il s'agit de "tcpenable=no". Il y a écrit dans la doc "Enable server for incoming TCP connections (default is no)". Il est difficile de trouver des infos claires à ce sujet.... Dans un forum j'ai lu que cette option remplaçait les paquets UDP par des paquets TCP mais que les paquets RTP restaient en RTP.... s'agit-il bien d'un mode "force TCP" ? Que pouvez-vous me dire la dessus ?

2. Imaginons qu'Asterisk supporte bel et bien un mode "force TCP", quels sont les ports que je dois router sur Tor ? (comprendre simplement quels sont les ports utilisés par Asterisk pour fonctionner correctement ?). Sont-ils éditables ou sont-ils hardcodés ? J'ai cru comprendre que c'est "légèrement bordélique" -.-

3. Dans Murmur il est possible de modifier l'échantillonage d'Opus. Etant donnée que d'après mes tests préliminaires sur Mumble cette option est indispensable au fonctionnement de mon projet, est-elle disponnible dans Asterisk ? Peut-ons modifier l'échantillonage maximum des codecs ? (si ça n'est pas possible, le problème est bel et bien bloquant).

4. Avez-vous des choses à me dire à propos du ZRTP dans Asterisk ? Le protocole est-il bien implémenté ? Pensez-vous que je vais rencontrer des problèmes importants pour configurer tout ça ? :-/

=====> Vous qui connaissez bien Asterisk avez-vous des suggestions à me faire ?
=====> Personne pour bosser avec moi la dessus ? :D

Pour finir, sachez qu'il me reste une cartouche dans mon fusil si jamais ce mode "force TCP" n'existe pas.... OnionCat. https://www.onioncat.org/. C'est un outil qui permet d'encapsuler TOUT le trafic réseau souhaité dans Tor, TCP/IP mais aussi UDP etc. Ca ouvre une interface "Tun" sur le terminal et y attribut une IPV6 à laquelle les applications peuvent se connecter de façon totalement transparente. Cette solution à l'air plantée sur OpenBSD.... (j'ai réussi à la mettre en place sous FreeBSD, mais OpenBSD me donne des erreurs) Avant de changer d'OS ou de me prendre la tête encore plus la dessus je voudrais tenter la solution "gros bordel avec les ports d'Asterisk" même si c'est plus compliqué.

Je m'excuse pour la tartine et vous remercie de m'avoir lu !

quintana
21/06/2016, 02h41
Salut,

La voix est du temps réel et utilise le rtp dans asterisk ou srtp qui sont de l'udp, oublies rtp en tcp ;-)

Si tu veux chiffrer tu as du sips et du srtp. Je n'ai jamais joué avec tor, mais j'ai un doute sur le réel intérêt surtout que tes appels publique passeront chez un provider dont tu ne maitrises aucunement tes données.

Sinon asterisk ne supporte pas zrtp, y a peut être quelques patchs qui existent encore ou sinon tu peux utiliser freeswitch.

Je comprends l'idée mais je ne comprends pas ce que cela apporte par contre, faudrait que je joue avec tor, peut être que ça allumerai ;-)

Sylvain

Arnold487
21/06/2016, 12h19
Merci pour ta réponse !

Par rapport aux appels "extérieurs" je ne compte pas faire passer mes appels sur les lignes du grand réseau et je ne compte pas faire sortir les appels de Tor. Tout resterait à l'intérieur du réseau Tor, exactement comme avec ma solution Mumble/Murmur. Dans ce cas de figure, tu maîtrise tes données parce que tout ce qui passe dans Tor est chiffré, personne (même ton provier) ne sais ce qui s'y passe.... c'est un peu comme un VPN distribué / décentralisé. Ton provider sait que tu utilises Tor (comme il saurait que tu utilises un VPN) mais il ne voit pas que que tu fais avec.

En ce qui concerne le ZRTP, je suis sur la FAQ de ZFone la.... apparemment, comme toi, ils recommandent FreeSwitch pour cet usage. J'ai aussi lu dans un forum que le plugin ZRTP pour Asterisk ne fonctionne que sur une patte (même peut-être plus du-tout). Ce qui m'embête c'est qu'il n'y a pas de port FreeSwitch propre pour OpenBSD, je vais tout devoir faire à la mano via qmake en espérant que ça ne soit pas trop planté sur cette plateforme et que les librairies n'ai pas 14 ans.

Bon bah je crois que je vais devoir aller sévir sur un forum FreeSwitch haha :pt1cable: