Le SIP par Orange : analyse technique

Mise à jour : Orange n'aime pas trop ça. Allez savoir.

Il y a SIP, et SIP par Orange.

Orange : not open !

Source image : trollab.org

En effet, l'opérateur historique a décidé de migrer une partie de ses clients ADSL et Fibre vers le protocole SIP pour la signalisation téléphonique de la téléphonie par Internet de la Livebox.

Orange propose ainsi trois manières d'exploiter la téléphonie par IP incluse dans ses connexions Internet :

  • on peut tout simplement brancher un bon vieux téléphone analogique (ou une interface FXO) en insérant la prise RJ11 à l'arrière de la Livebox ;
  • on peut aussi connecter directement des téléphones DECT compatibles à la box ;
  • enfin, et potentiellement le plus intéressant : on peut aussi utiliser l'application Livephone pour utiliser son PC comme un "softphone" qui a l'avantage de sonner lorsqu'un appelant externe compose le numéro fixe associé à la Livebox.

Cette application, uniquement disponible sous Windows malheureusement, n'est pas compatible avec toutes les connexions, et je conjecture qu'elle ne fonctionne qu'avec les abonnés utilisant la signalisation SIP pour le téléphone. Ce qui signifie qu'il serait théoriquement possible d'utiliser n'importe quel softphone avec ce service. Pour moi, cela me permettrait de m'affranchir du câble RJ11 entre mon serveur et la box, et de bénéficier d'une méthode plus élégante pour détecter le début et la fin d'un appel téléphonique.

Hélas, il n'en est rien ! Une analyse plus détaillée révèle en effet que le Livephone implémente une version modifiée du mécanisme d'authentification SIP, que je n'ai pu relever qu'après un long travail d'ingénierie inverse (légale, dans ce cas particulier). Ces modifications violent bien entendu la RFC 3261, cassant de fait la compatibilité avec les clients SIP autres que le Livephone.

Constatant que des demandes d'informations antérieures ont été infructueuses, j'ai donc été contraint de me lancer dans une analyse technique plus poussée. Les informations que je publie ici sont principalement des résultats d'analyses de trames réseau et de traces de débogueur ; néanmoins, j'ai également été amené à décompiler le programme pour comprendre entièrement le mécanisme d'authentification.

C'est dans une démarche d'interopérabilité que j'exposerai dans les grandes lignes le fonctionnement de l'authentification SIP par Orange. Nous constaterons très rapidement pourquoi un téléphone SIP conforme à la RFC ne pourra jamais utiliser en l'état le réseau SIP Orange, puis j'expliquerai dans une dernière partie une solution possible pour contourner ces modifications propriétaires.

Certains paragraphes seront délibérément vagues ou peu détaillés, par manque de recherches, ou afin d'éviter les ennuis (comme ceux que j'aurais pu avoir avec la SNCF il y a quelques temps et qui m'ont conduit à censurer des morceaux d'article).

Le SIP par Orange en trois étapes

Le schéma ci-dessous résume le processus d'authentification du Livephone auprès du proxy SIP Orange.

MSC décrivant l'authentification SIP Orange
Échange de messages entre le client et les différents serveurs

On voit déjà immédiatement que le processus est beaucoup plus compliqué qu'une simple requête REGISTER auprès du proxy. Reprenons chacune des trois étapes en plus de détails.

Login

Tout d'abord, le client envoie en HTTPS (mais sans vérifier le certificat, ce qui est bien pratique pour faire du sslstrip comme un gros dégueulasse) une requête au serveur d'authentification. On dirait que celui-ci reconnaît l'utilisateur en se basant sur l'IP source (du moins, je crois), mais substituer ses propres serveurs DNS à ceux d'Orange permet de "forcer" un downgrade vers une authentification par login et mot de passe. Il semblerait que la toute première authentification se fait toujours par login et mot de passe.

Récupération de la configuration

Si l'authentification passe, le client reçoit entre autres un token qui est une chaîne hexadécimale tellement longue qu'il faut trois segments TCP pour la transmettre. Il envoie ce token (concaténé à d'autres variables, comme le nom et les versions de l'OS et du client) à un serveur de paramètres par HTTPS lui aussi, cette fois pour récupérer une liste de paramètres SIP : nom du proxy SIP, URI SIP de l'utilisateur (de la forme +33123456789@orange-multimedia.fr) entre autres, mais aussi une étrange chaîne de caractères en base64 appelée AuthentData.

Enregistrement auprès du proxy SIP

Enfin, la troisième étape consiste à faire l'enregistrement du client auprès du proxy SIP. Cela se fait avec un message REGISTER, comme le décrit la RFC 3261. Comme on peut le voir, l'authentification se déroule par challenge-response, de la même manière que l'authentification HTTP Digest, décrite dans la RFC 2617.

En réalité, le calcul de la réponse au challenge est un peu compliquée. La seule différence est que le paramètre H(A1) n'est pas égal à md5("${username}:${realm}:${password}"). Il faut en effet (censuré).

En conclusion, j'ignore si cela a été fait sciemment ou par flemme, mais le résultat ressemble presque à un échange conforme à la RFC 2617, alors qu'il n'en est rien en réalité.

Récapitulatif

En résumé, on dégage les informations suivantes :

  • l'authentification se fait en trois étapes auprès de trois serveurs différents, au lieu du seul proxy SIP ;

  • un des paramètres pour le calcul de la réponse au challenge envoyé par le proxy SIP ne correspond pas à ce qui est prescrit par la RFC. Au lieu de ça, il s'agit d'un bloc binaire, récupéré depuis une source extérieure, et chiffré avec un algorithme dont je suis à peu près sûr que (censuré).

  • de fait, il est impossible de se passer des deux premières étapes de l'authentification car celles-ci permettent d'obtenir des informations essentielles à l'authentification SIP.

Se défaire des extensions propriétaires

Se pose maintenant la vraie question : quelle est la solution la plus simple pour assurer l'interopérabilité entre l'infrastructure SIP Livephone d'une part, dont on a vu qu'elle ne respecte pas les RFC, et l'ensemble des clients SIP d'autre part ?

Une première possibilité aurait été de mettre au point des patchs pour Asterisk, car c'était dans l'optique de faire fonctionner le Livephone avec ce serveur de téléphonie que je m'étais lancé dans ce travail.

Cependant, j'ai préféré privilégier la solution d'un proxy SIP, qui serait alors utilisable directement avec n'importe quel client SIP, y compris Asterisk, et éviterait à ceux qui souhaiteraient tenter la même chose d'être obligé d'installer Asterisk chez eux, et d'avoir juste besoin de ce proxy et d'Ekiga ou de Linphone.

Le proxy ne ferait que du bête forwarding de requêtes et de réponses entre les deux parties, sauf dans le cas du REGISTER qu'il intercepterait pour faire l'authentification « à la sauce Orange » à la place, tout en répondant "OK" au client si tout s'est bien passé.

Le seul problème restant est la dernière étape d'authentification. Cet aspect risque de rendre l'interopérabilité bien plus difficile à obtenir que ce que j'aurais espéré. La réalisation d'un proxy en devient à la limite de la légalité, car à part décompiler l'algo de hachage pour l'analyser plus en détail et voir avec quels paramètres il est appelé, je vois mal comment faire autrement.

Conclusion

Ces recherches sont incomplètes, dans la mesure où je n'ai pu valider mes analyses que partiellement à l'aide de preuves de concept incomplètes.

Bien que je puisse comprendre qu'Orange ait pu décider de fournir une méthode centralisée de distribution d'éléments de configuration (après tout, j'imagine qu'ils font la même chose pour la Livebox elle-même de toute façon), une modification aussi lourde au processus d'authentification SIP proprement dit (c'est-à-dire le challenge-response) a tout d'une action délibérée. Modification difficilement justifiable d'un point de vue technique, qui plus est.

Comme je le disais au-dessus, la prochaine étape consistera bien évidemment à concevoir et implémenter un proxy SIP faisant le lien entre un client SIP lambda, et l'infrastructure SIP propriétaire du Livephone. Ce proxy ne fonctionnera que sur la connexion Internet Orange de l'utilisateur, entre autres parce que beaucoup de noms de serveurs que j'ai pu voir passer dans tcpdump ne sont résolvables que par le biais des serveurs DNS Orange (rappelez-vous du serveur SMTP d'Orange, par exemple). Tous mes essais sont concluants jusqu'à maintenant, et si je parviens à implémenter un proxy qui fonctionne, le résultat fera bien entendu l'objet d'une autre publication sur ce site.

Étant donné que ces modifications protocolaires sont manifestement intentionnelles dans le but de casser la compatibilité avec les matériels et logiciels respectant les normes, cet effort de reverse engineering en est d'autant plus légitimisé.

Mise à jour du 4 mai : correction de quelques inexactitudes, notamment liés à l'authentification.

Mise à jour du 28 mai : faire un plugin pour siproxd : ça, c'est fait.

Posté par x0r à 7 commentaires • Tags : sip orange livebox voip livephone paramètres asterisk téléphone reversing

Commentaires

Poster un commentaire

#1 — Tol Phobos

Je suis admiratif du travail fourni et du niveau d'information obtenu. Vos résultats corroborent ceux des différentes initiatives vous ayant précédé, et bien que la conclusion me déçoive, cela m'épargne un rude travail qui n'aurait sans doute pas mieux abouti (et probablement pas aussi loin).

Quand je vois l'ampleur du vice développé par Orange dans sa volonté d'incompatibilité, je commence à me dire qu'une ligne SIP OVH à 14.4€/an TTC, parfaitement compatible RFC3261, est peut-être la solution la plus simple et abordable pour le geek lambda. Mais quelle frustration de ne pouvoir utiliser un service que l'on paye.

Si vous persistez dans votre odyssée, et atteignez les rivages mirifiques du succès, j'imagine que vous développerez un proxy SIP "Egnaro" pour OpenWRT (j'avais déjà lu attentivement votre post "Profiter de la fibre Orange pour les geeks"). Je serai alors enchanté de participer à l'adaptation de vos développements (si vous les publiez librement bien entendu) à la plate-forme pfSense sur laquelle je suis en train de m'initier dans la perspective de me passer moi aussi de cette laborieuse Livebox Fibre le jour venu.

Merci encore d'avoir publié les résultats de vos recherches, et veuillez recevoir mes plus vifs encouragements.

#2 — MaîtreDesCactus

Super, bravo pour cet article !!!!

J'ai beaucoup aimé ton travail sur les applis SNCF également.

> Cette application, uniquement disponible sous Windows

Elle semble pourtant être aussi disponible sous Android et iOS : https://play.google.com/store/apps/details?id=com.orange.livephoneapplication

Et comme tu dois le savoir, le bytecode Java décompilé avec jd-gui ou autre est largement plus lisible que de l'assembleur ou du pseudo-code sorti d'IDA. Si les protocoles sont bien les mêmes qu'avec la version Windows, ça pourrait t'aider...

#3 — MaîtreDesCactus

...ou pas en fait, après vérification une bonne partie de l'application est écrite en langage machine (bibliothèque ARM complémentaire à la partie Java). Mais si tu es à l'aise avec l'ARM ça pourrait t'aider quand même :)

#4 — Michel

Pour avoir des informations interessantes simple faire la requete suivante sur la livebox à l'aide de curl :

curl -X POST -d '{"parameters":{}}' http://192.168.1.1/sysbus/VoiceService/VoiceApplication:listTrunks

Je suis pas expert SIP , mais peut être qu'on pourrait obtenir le précieux sésame de connexion en SIP.....

#5 — x0r

Je suis déjà tombé dessus (cf. « Surveiller sa Livebox 3 avec Nagios » [1]), mais il n'y a pas toutes les infos dedans.

[1]: http://x0r.fr/blog/33

#6 — waqa

Bonjour à tous, Avec votre permission, je vais remettre à flot le sujet Je vous écris à partir du Maroc ... Bon, j'ai contracté ca fait 3 ans ce qu'ils appellent ici la MTBOX (ADSL + appels vers fixe + TV); le mien est un sagem 3304 v2 (mon numéro fixe habituel qui commence par 053 ******* ils nous le laissent por recevoir et appeller vers mobile et fixe international ) . La Mtbox a 1 entrée adsl, 4 sorties rj45 ethernet normal et deux sorties RJ11 vonvertisseurs voip avec le même nombre qui commence par 0808 ****** pour appeller gratos àux fixes de notre opérateur (si les 2 voip appellent simultanement l'un des 2 doit coupe parceq ca entend tres mal) ... Bon ca ce n'est pas mon problème ....

Ce qui m'enerve c'est que dernièrement je dois redemarrer la Mtbox a chaque fois car ca se deconecte tout seul; Je veux acheter un autre routeur qui peut me donner le même service et mieux Je me demande si c'est possible et si oui, Me conseillez vous acheter des routers espagnols que je peux avoir d' orange ou vodafone? .... J'ai la possibilité d'acheter le livebox 2.0, 2.1 ou même 2.2 et vodafone 556A, 842N Je m'excuse si j'ai trop parlé Merci d'avance http://www.iam.ma/Particuliers/PublishingImages/maroc-telecom_routeur-Sagem-F@st-3304_Comment-brancher-mon-routeur_1.png https://i.ytimg.com/vi/LZNiN0hfbdg/maxresdefault.jpg

#7 — isa

je voudrai utiliser mon telephone SIP C 610 Siemens pour utiliser la ligne téléphone de ma lifebox. Y 'a t il une solution pour une debutante ??

Poster un commentaire