Types de frames : I, P, B
Les codecs vidéo modernes distinguent trois types de frames selon leur relation avec les frames adjacentes :
I-frame
Intra-coded frame
Frame complète, encodée comme une image JPEG indépendante. Contient toutes les informations visuelles. La cible idéale pour la stéganographie.
P-frame
Predicted frame
N'encode que les différences par rapport à la I-frame précédente. Si on modifie une P-frame, les frames suivantes recalculent différemment.
B-frame
Bidirectional frame
Encodée par rapport aux frames précédentes ET suivantes. La plus compressée, la plus complexe à manipuler stéganographiquement.
GOP (Group of Pictures) typique H.264 : I B B P B B P B B P B B P B B P I B B P ... ↑ ↑ Keyframe Keyframe suivante Fréquence typique : 1 I-frame toutes les 30 frames (GOP=30) À 30 fps → 1 I-frame par seconde Pour 10 secondes de vidéo : ~10 I-frames disponibles Vidéo 1080p, I-frame seule : ~2 Mo bruts → ~250 Ko cachables (1 bit/pixel) 10 secondes → ~2.5 Mo cachables → énorme capacité !
Pourquoi la compression inter-frames pose problème
Si on modifie les données brutes d'une frame encodée (les bits LSB du flux binaire), puis qu'on re-encode la vidéo, le codec va recalculer les P-frames et B-frames suivantes par rapport à la I-frame modifiée. Le message est alors perdu ou corrompu.
La solution est de travailler en domaine décompressé : décoder entièrement la vidéo, modifier les pixels des frames sélectionnées, puis ré-encoder. Cela préserve le message mais change légèrement la vidéo.
⚠ Ne jamais modifier les bits du flux vidéo compressé directement ! Toujours décoder → modifier les pixels → ré-encoder. Exception : certains champs d'en-tête non-compressés (ex : NAL units padding).
Stratégies d'embedding
LSB sur I-frames uniquement
RECOMMANDÉDécoder → modifier LSB des pixels des I-frames → ré-encoder en forçant GOP fixe. La compression des P/B-frames se base sur les I-frames modifiées, préservant le message.
Format non compressé (AVI/RAW)
SIMPLEUtiliser un conteneur non compressé : AVI YUV 4:2:0 ou flux RAW. Chaque frame est stockée indépendamment → LSB classique applicable. Fichiers très volumineux.
Embedding dans les coefficients DCT des I-frames
AVANCÉModifier les coefficients DCT lors du ré-encodage JPEG des I-frames H.264. Meilleure robustesse que LSB spatial mais plus complexe à implémenter.
Métadonnées vidéo (MP4 atoms)
BASIQUECacher des données dans les champs de métadonnées non utilisés du conteneur MP4/MKV (atoms usdt, chap, etc.). Très facile mais limité en capacité.
Capacité et formats
| Résolution | Capacité / I-frame | 1 min 30fps GOP30 |
|---|---|---|
| 720p (1280×720) | ~345 Ko | ~20 Mo |
| 1080p (1920×1080) | ~777 Ko | ~46 Mo |
| 4K (3840×2160) | ~3.1 Mo | ~186 Mo |
| 8K (7680×4320) | ~12.4 Mo | ~744 Mo |
→ Une vidéo 4K de 1 minute peut théoriquement cacher 186 Mo de données. C'est le médium avec la plus grande capacité stéganographique absolue. En pratique on se limite à ~10% pour rester imperceptible.
Détection et forensics vidéo
La stéganalyse vidéo est un domaine de recherche actif. Les principales méthodes de détection examinent les incohérences dans les flux de compression : variations anormales de qualité entre I-frames consécutives, distribution statistique des coefficients DCT inhabituelle, ou résidus de bruit anormaux dans les frames keyframe.
→ Outils d'analyse vidéo : MediaInfo (inspecte les GOP et streams), ffprobe (analyse bitrate et frame types), StegDetect pour les frames extraites. Pour extraire toutes les I-frames : `ffmpeg -i video.mp4 -vf "select=eq(pict_type\,I)" frame_%04d.png`
Questions fréquentes
Peut-on cacher un message dans n'importe quelle vidéo ?
En théorie oui, mais en pratique la compression vidéo (H.264, HEVC) détruit les modifications LSB dans les B-frames et P-frames. Il faut cibler exclusivement les I-frames (frames de référence complète) ou utiliser un format non compressé. Une vidéo H.264 normale a une I-frame toutes les 30 frames environ.
La capacité est-elle vraiment aussi grande qu'annoncée ?
En théorie, une vidéo 4K offre des centaines de Mo par minute. En pratique, utiliser plus de 5-10 % de cette capacité crée des artefacts visibles et rend la stéganographie détectable. Pour une discrétion maximale : une seule I-frame, un bit par canal, maximum 5 % de la capacité totale.
Quels outils permettent de cacher des données dans une vidéo ?
OpenPuff supporte les vidéos AVI. Des scripts Python avec OpenCV permettent d'accéder aux frames individuelles. Pour H.264, FFmpeg peut extraire les I-frames individuellement. En CTF, les challenges vidéo impliquent souvent des frames individuelles à analyser plutôt que la vidéo entière.
Est-ce utilisé dans des vraies cyberattaques ?
Des malwares sophistiqués ont utilisé des vidéos ou images publiées sur des plateformes publiques comme vecteurs de C2 (command and control). En publiant une vidéo avec instructions encodées, un attaquant communique avec ses implants sans générer de trafic réseau suspect. Documenté dans plusieurs rapports de threat intelligence.
Comment un débutant peut-il s'initier à la stéganographie vidéo ?
Commencez par extraire les frames d'une vidéo avec FFmpeg (ffmpeg -i video.mp4 frame_%04d.png), puis appliquez les techniques de stéganographie image (LSB, DCT) sur les frames extraites. C'est la façon la plus simple d'expérimenter. OpenCV en Python permet aussi de lire et modifier les frames directement.
Techniques images connexes
La stéganographie vidéo LSB applique les mêmes principes que l'image LSB, frame par frame.