Auteur Sujet: MITMproxy: comment font les OTT pour refuser de démarer un flux en cas de MITM ?  (Lu 3941 fois)

0 Membres et 1 Invité sur ce sujet

vivien

  • Administrateur
  • *
  • Messages: 47 085
    • Twitter LaFibre.info
MITMproxy (https://mitmproxy.org/) est très pratique pour récupérer le manifest de flux OTT qui sont en https.

Il va permettre, via un MOTM (L'attaque de l'homme du milieu) de déchirer le trafic HTTPS. Il faudra bien sur installer sur le client le certificat utilisé par MITMproxy, sans quoi les flux seront refusés par le navigateur (logique)


Exemple concret : Molotov TV utilise du https. Il est donc impossible de connaître la résolution.

Avec MITMproxy on récupère le manifest ce qui indique les résolutions, codecs et débits associés :

Exemple de Manifest avec la version gratuite de Molotov TV sur la chaîne TF1 : (limité donc à du 720p, les résolutions au-dessus sont réservés aux clients payants)


# variants
#EXT-X-STREAM-INF:BANDWIDTH=2079000,AVERAGE-BANDWIDTH=1890000,CODECS="mp4a.40.2,avc1.64001F",RESOLUTION=854x480,FRAME-RATE=25,AUDIO="audio-aacl-128",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE
tf1-video=1600000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1146000,AVERAGE-BANDWIDTH=1042000,CODECS="mp4a.40.2,avc1.64001E",RESOLUTION=640x360,FRAME-RATE=25,AUDIO="audio-aacl-128",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE
tf1-video=800000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=680000,AVERAGE-BANDWIDTH=618000,CODECS="mp4a.40.2,avc1.640015",RESOLUTION=426x240,FRAME-RATE=25,AUDIO="audio-aacl-128",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE
tf1-video=400000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3711000,AVERAGE-BANDWIDTH=3374000,CODECS="mp4a.40.2,avc1.64001F",RESOLUTION=1280x720,FRAME-RATE=25,AUDIO="audio-aacl-128",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE
tf1-video=3000000.m3u8

Les 4 résolutions proposés par Molotov TV sur TF1 sont :
- 426x240 25 images/s => 0,68 Mb/s pic 0,62 Mb/s de moyenne
- 640x360 25 images/s => 1,15 Mb/s pic  1,04 Mb/s de moyenne
- 854x480 25 images/s => 2,08 Mb/s pic 1,89 Mb/s de moyenne
- 1280x720 25 images/s => 3,71 Mb/s pic 3,37 Mb/s de moyenne

Dans les 4 cas on est en H.264.
L'audio est dans les 4 cas en AAC (Advanced Audio Coding) en 128 Kb/s

Ce que je cherche a comprendre, c'est comment fait MyCanal pour refuser de démarrer un flux depuis Safari si MITMproxy est utilisé : Le navigateur permet a un site de faire une action particulière si le certificat coté serveur que voit le client n'est pas le bon ?

Optix

  • AS41114 - Expert OrneTHD
  • Abonné Orne THD
  • *
  • Messages: 4 644
  • WOOHOO !
    • OrneTHD
Hum, c'est pas un peu limite de demander ça sur un forum ? Surtout pour des flux protégés par les ayants-droits ?  ::)

vivien

  • Administrateur
  • *
  • Messages: 47 085
    • Twitter LaFibre.info
Je dois te dire que je n'ai pas regardé si les flux ont des DRM, mon but étant de récupérer le débit vs résolution, mais cela me semble une obligation imposée par les ayants droits de plusieurs chaines diffusées par Molotov TV et pas une option facultative.

La bonne pratique est d'utiliser les DRM tel que Google Widevine, mettre du https ne protège de rien, cf Youtube qui est pourtant en https mais avec des flux sans DRM pour le moment (je pense que cela pourrait changer vu que les DRM sont bien supportés et que les ayants droits poussent pour éviter les copies de leurs clips). Autre exemple avec Netflix qui a lui choisit d'être en http a moins que cela ai évolué depuis (et bien sur les flux ont des DRM, certaines résolutions nécessitant certains DRM - 720p maximum soit le profil à 3 Mb/s pour Google Widevine dans un navigateur).

Pour revenir à ce qui m'intéresse, débit vs résolution, quand tu vois ça, la résolution est un gros manque : (capture d'écran Netflix)


Netflix permet d'avoir facilement la réponse regarder le flux :



hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
On ne voit pas la requête du manifest sur MyCanal avec l'inspecteur web de Safari ?

Au moins sur les contenus en clair, il y a "Information de débogage" en faisant un clic droit sur la vidéo.
Je vois des contenus en mp4, et d'autres en adaptive streaming, par exemple :
Core
Environment : mycanal-prod
State : PLAYING
Streaming type : smooth
Key system : widevine
Live : false
Downloading bitrate (Kbit/s) : 3400.000 / 128.000
Estimated bandwidth (Kbit/s) : 156375.084 / -
Location : https://hss-od.snl-lv3.canalplus-cdn.net/replay/cplus/ssd/cpl100036931-ant-1198739-26/ANT-1198739-26.ism/manifest
Language : fre
Volume : 1
Dans ce cas précis, le manifest n'est pas protégé (par un cookie ou autre), le flux est chiffré (widevine).
  <StreamIndex Type="video" Url="QualityLevels({bitrate})/Fragments(Video={start time})" Name="Video" Language="und" QualityLevels="6" Chunks="1509">
    <QualityLevel Index="0" Bitrate="3400000" FourCC="AVC1" CodecPrivateData="..." MaxWidth="1280" MaxHeight="720" />
    <QualityLevel Index="1" Bitrate="2099968" FourCC="AVC1" CodecPrivateData="..." MaxWidth="960" MaxHeight="540" />
    <QualityLevel Index="2" Bitrate="1499968" FourCC="AVC1" CodecPrivateData="..." MaxWidth="960" MaxHeight="540" />
    <QualityLevel Index="3" Bitrate="1099968" FourCC="AVC1" CodecPrivateData="..." MaxWidth="640" MaxHeight="360" />
    <QualityLevel Index="4" Bitrate="749952" FourCC="AVC1" CodecPrivateData="..." MaxWidth="480" MaxHeight="270" />
    <QualityLevel Index="5" Bitrate="189952" FourCC="AVC1" CodecPrivateData="..." MaxWidth="416" MaxHeight="234" />

vivien

  • Administrateur
  • *
  • Messages: 47 085
    • Twitter LaFibre.info
Excellente idée.

Merci, c'est ce que je cherchais.

Esco

  • Abonné Free fibre
  • *
  • Messages: 18
Sans doute pour une question de DRM, MyCanal propose des profils en 720p dans cet exemple.
Sur Apple TV et device IOS il existe des flux 1080p (avec codec audio Dolby 5.1).
Sur Apple TV 4K il existe des flux 4K (avec codec audio Dolby 5.1).

En fonction du client utilisé, le manifest reçu sera différent.

vivien

  • Administrateur
  • *
  • Messages: 47 085
    • Twitter LaFibre.info
Quand on regarde le flux Molotov TV, on peut se dire qu'il réparti le flux sur plusieurs connexions TCP pour améliorer le débit, mais non, c'est du mono-connexion.

Il y a bien 4 connexions TCP https ouvertes avec le serveur qui diffuse le contenu, mais chaque connexion a un usage particulier.

- Connexion 0 : 93,2% des paquets => Flux vidéo
- Connexion 1 : 6,0% des paquets => Flux audio
- Connexion 2 : 0,4% des paquets => DRM vidéo ?
- Connexion 3 : 0,4% des paquets => DRM audio ?

Les connexions 2 et 3 sont utilisées juste avant que les connexions 0 et 1 soient utilisées :

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Je ne pense pas qu'il fasse des requêtes DRM à chaque fois.
Si c'est un flux HLS, il récupère la master playlist d'abord (le m3u qui liste les m3u associés aux différentes qualités audio et vidéo), et les connexions 2 et 3 servent à récupérer les m3u des flux à jour (une nouvelle ligne à chaque nouveau segment, les anciens segments sont supprimés sauf si ça sert aussi pour autoriser le retour en arrière dans le flux).

Pour le fait que les segments soient téléchargés avec une seule connexion, peut-être qu'il a déterminé que le débit est suffisant, ou que le serveur ne supporte pas les requête Range (ou tout simplement ça peut très bien ne pas avoir été implèmenté dans l'application).