⏪Replay de stream camera
Introduction
Prérequis: position de MITM (Man-In-The-Middle), voir attaques ARP poisoning et DHCP spoofing
Dans le cas ou la caméra ne possèderait pas de vulnérabilité connue, un attaquant qui gagne une position d'homme du milieu sur le réseau pourrait capter le trafic de tout canal de communication non sécurisé potentiel. Ici le but est dans un premier temps de capturer le trafic d'un streaming puis le sauvegarder dans un fichier .pcap.
Protocoles de streaming
Il existe trois protocoles liées au streaming fonctionnant la plupart du temps dépendamment les uns des autres:
Le RTSP (Real-Time Streaming Protocol): Est un protocole client-serveur qui agit comme une télécommande réseau pour les serveurs multimédia avec des flux en direct et des clips stockés comme sources de données.
Le RTP (Real-Time Transport Protocol): Est le protocol qui s'occupe de la transmission des données média (Fonctionne de pair avec le RTSP).
Le RTCP (Real-Time Transport Control Protocol): Envoie périodiquement des rapports hors bande qui annoncent des statistiques (par exemple, le nombre de paquets envoyés et perdus etc) au Participants RTP. Bien que RTP soit généralement envoyé sur un numéro de port UDP pait, RTCP est envoyé sur le port UDP suivant avec le numéro impair le plus élevé.
SRTP (Secure Real-Time Transport Protocol): Protocole RTP sécurisé avec une couche de chiffrement.
Le protocole SRTP est plus rare car la couche de chiffrement apportée ralentie considérablement la rapidité du protocole (perte de qualité) et n'est pas toujours compatible avec la caméra.
Anatomie du trafic RTSP/RTP
Les protocoles RTSP et RTP fonctionnent sous forme de session. Voici les différentes étapes par lesquelles ils passent:
Le client envoie un packet
RTSP OPTIONS
permettant comme pour le protocole HTTP par exemple de connaitre les méthodes qu'il peut utiliser. (exp: DESCRIBE, SETUP, TEARDOWN, PLAY, SET_PARAMETER, GET_PARAMETER, PAUSE)Le client envoie un packet
RTSP DESCRIBE
incluant l'url du stream (exp: rtsp://192.168.4.180:554/video.mp4). Avec cette requête, le client est invité à donner l'URL et le format que le client comprend en utilisant l'en-tête Accept (Accept:application/sdp)
.Le client va ensuite envoyer une requête
RTSP SETUP
qui va permettre de spécifier les deux ports du client pour la réception des données RTP (vidéo et audio) et Données RTCP (statistiques et informations de contrôle).Puis il envoie une requête
RTSP PLAY
qui va tout simplement demander au serveur de lancer le stream.
Extraire le stream vidéo
Le paquet SDP (Session Description Protocol) reçu via la réponse du serveur à la deuxième étape présentée ci-dessus contient des valeurs importantes sur la façon dont la vidéo est encodée, nous avons besoin de ces informations pour lire la vidéo. Pour l'extraire sur Wireshark, on va se rendre dans les information du packet puis faire un clic droit sur la partie "Session Description Protocol" et enfin cliquer sur "Export packet bytes..."
Une fois cela fait, en ouvrant le packet exporté on doit retrouver quelque chose comme ceci:
Les paramètres SDP:
V : Version du protocole SDP
O : Origine de la session
I : Information sur la session
U : URI (Uniform Ressource Identifier)
E : E-mail P : Téléphone
B : Bande passante requise
T : Timer (début et fin de la session)
M : Media ( Type, format, protocole de transport)
A : Attribut (contenant plusieurs informations : Codec, Ptime, fmtp, Silence suppression……
Falsification du SDP
On va ensuite modifier le packet SDP extrait pour avoir un résultat comme celui-ci:
L' étape suivante consiste à extraire le flux RTP de Wireshark. Le flux RTP contient les données vidéo codées. Ouvrez le fichier pcap qui contient les paquets RTP capturés au tout début puis cliquez sur "Téléphonie > RTP Stream". Sélectionnez le flux affiché, cliquez dessus avec le bouton droit de la souris et sélectionnez "Prepare Filter". Cliquez à nouveau avec le bouton droit de la souris et sélectionnez "Export as RTPDump". Enregistrez ensuite la sélection RTP Stream sous forme de fichier rtpdump (extension .rtpdump).
Lecture du fichier rtpdump
Pour extraire la vidéo du fichier rtpdump et la lire, vous aurez besoin les outils suivants:
RTP Tools: Pour lire et rejouer la session RTP
VLC: Pour rejouer le fichier vidéo finale
FFmpeg: Pour convertir le stream
La procédure à suivre ensuite est la suivante:
Conversion du stream avec FFmpeg
$ ffmpeg -v warning -protocol_whitelist file,udp,rtp -f sdp -i <fichier SDP falsifié>.sdp -copyts -c copy -y out.mkv
Lancer la session avec rtpplay
$ ./rtpplay -T -f path/to/exemple.rtpdump 127.0.0.1/<port defini dans fichier sdp>
Notez que vous devez exécuter la commande rtpplay immédiatement après vous démarrez FFmpeg, car par défaut FFmpeg se terminera s'il n'y a pas d'incom- ing stream arrive bientôt.
L'outil FFmpeg décodera alors la lecture session RTP et générera le fichier out.mkv.
Finalement, lire le fichier mkv avec VLC
$ vlc out.mkv
Outils
RTP Tools
RTP Tools est un ensemble de petites applications qui peuvent être utilisées pour traiter les données RTP.
Installation
Ressource: https://github.com/irtlab/rtptools/
FFmpeg
Une solution complète et multiplateforme pour enregistrer, convertir et diffuser de l'audio et de la vidéo.
Installation
$ apt install ffmpeg
ressource: https://ffmpeg.org/
Dernière mise à jour