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:

  1. 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)

  2. 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).

  3. 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).

  4. 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:

v=0
o=<session owner> <session ID> IN IPV4 <IP>
s=<session name>
c=IN IPV4 <listening network address>
t=0 0
m=video <port> RTP/AVP ...
a=attribut 1
a=attribut 2
a=attribut 3

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:

v=0
c=IN IPV4 127.0.0.1
m=video <wanted port> RTP/AVP ...
a=attribut 1
a=attribut 2
a=attribut 3

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

$ git clone https://github.com/cu-irt/rtptools.git
$ cd rtptools
$ ./configure && make

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