lundi 7 juillet 2014

Retour d'expérience sur le sniffing VOIP en pratique

J'ai commencé par tester l'excellent outil windows: Cain par Oxid. Ce sniffer/cracker évolué a le mérite d'offrir en plus une fonction d'arp spoofing accessible au plus novice en sécurité. Je n'ai même pas eu besoin de cette fonction puisque j'ai expérimenté sur un logiciel de VOIP directement installé sur le même PC. J'ai effectué un appel en TCP et RTP clair avec le codec G711 (ou PCMA en Europe), Cain a directement reconnu l'appel et lancé l'enregistrement de la conversation que j'ai pu réécouter une fois l'appel terminé. En revanche il semble que Cain ne supporte que ce codec, du moins je n'ai pas pu réécouter une conversation effectuée avec un autre codec (Comme le récent Opus par exemple).

Voip cain abel oxid
J'ai réédité le même sniffing clair avec Wireshark. Là aussi il est assez facile de transformer un .pcap en fichier audio directement écoutable, mais wireshark souffre de la même limitation que Cain, à savoir le support unique du G711.

Dans la pratique une communication VOIP classique est le plus souvent chiffrée au niveau signalisation via du SIP en TLS, et au niveau données par du SRTP. La clé de chiffrement du SRTP est échangée en SIP via le format SDP. Il serait donc inefficace de ne chiffrer que les données, puisque la clé pourrait être récupérée dans du SIP en simple TCP. Ci-dessous un exemple de clé en clair dans le champ "inline:" v=0
o=sam 2890844526 2890842807 IN IP4 10.47.16.5
s=SRTP Discussion
i=A discussion of Secure RTP
u=http://www.example.com/seminars/srtp.pdf
e=marge@example.com (Marge Simpson)
c=IN IP4 168.2.17.12
t=2873397496 2873404696
m=audio 49170 RTP/SAVP 0
a=crypto:1 AES_CM_128_HMAC_SHA1_80inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz|2^20|1:4
FEC_ORDER=FEC_SRTP
Si l'on a affaire à une connexion SRTP il faudra d'abord récupérer la clé de chiffrement dans le SIP (s'il est en clair) ou préalablement contourner le chiffrement TLS (par un MITM par exemple) pour y accéder.

Pour décoder le SRTP j'ai d'abord tenté l'outil pcaputil de la suite PJSIP
pcaputil -c AES_CM_128_HMAC_SHA1_80 -k AABBCCDDEEFF112233445566 ./srtp.pcap ./rtp.pcap Mais l'utilitaire a lamentablement échoué par un "pjmedia_transport_srtp_create: Assertion `endpt && tp && p_tp' failed"; et ceci malgré mes nombreuses tentatives. J'ai du abandonner cet outil.

Je suis donc passé à srtp-decrypt, qui comme sa documentation l'indique utilise le code SRTP de VLC de manière isolée pour pouvoir réaliser la fonction de déchiffrage. J'ai du tâtonner pour trouver une syntaxe permettant de donner une entrée et une sortie au programme:
srtp-decrypt -k AABBCCDDEEFF112233445566 < ./srtp.pcap > ./rtp.pcap Malheureusement là aussi ce fut un échec, car strp-decrypt m'a constamment renvoyé. "frame XXX dropped: decoding failed 'Permission denied'", Comme si je n'avais pas la bonne clé de chiffrage. A noter pour la clé de chiffrage que chaque direction de flux utilise une clé différente. Il ne faut pas se tromper.

Je n'ai absolument pas eu le temps d'explorer d'autres outils, j'ai testé les outils que j'ai trouvés facilement sur le net. Nul doute que Kali Linux doit être plus riche en outillage sur ce plan. La publication de ces échecs pourra peut-être en aider certains, ou les mettre sur la bonne piste.

Aucun commentaire:

Enregistrer un commentaire