
Sécurité de ReplayKit pour iOS et iPadOS
ReplayKit est un cadre d’application qui permet aux développeurs d’ajouter aux apps des fonctionnalités d’enregistrement et de diffusion en direct. De plus, il permet aux utilisateurs d’annoter les enregistrements et les diffusions à l’aide de la caméra avant et du micro de l’appareil.
Enregistrement vidéo
L’enregistrement d’une vidéo comprend plusieurs couches de sécurité :
Boîte de dialogue Autorisations : Avant de démarrer l’enregistrement, ReplayKit demande à l’utilisateur, au moyen d’une alerte de consentement, de confirmer son intention d’enregistrer l’écran et les contenus capturés par le micro et la caméra avant. Cette alerte est présentée une fois par processus d’app et présentée à nouveau si l’app est mise en arrière‑plan pendant plus de huit minutes.
Captures d’écran et audio : Les captures d’écran et audio ont lieu en dehors du processus de l’app dans le démon replayd de ReplayKit, ce qui vise à garantir que le contenu enregistré n’est jamais accessible au processus de l’app.
Captures d’écran et audio dans l’app : Elles permettent à une app d’obtenir des tampons vidéo et d’échantillons, qui sont protégés par la boîte de dialogue des autorisations.
Création et stockage de vidéos : Le fichier vidéo est écrit dans un répertoire qui est seulement accessible aux sous‑systèmes de ReplayKit et n’est jamais accessible aux apps. Cela contribue à empêcher l’utilisation des enregistrements par des tiers sans le consentement de l’utilisateur.
Prévisualisation et partage par l’utilisateur final : L’utilisateur peut prévisualiser et partager la vidéo avec l’interface utilisateur promue par ReplayKit. L’interface utilisateur est présentée en dehors du processus au moyen de l’infrastructure des extensions iOS et a accès au fichier vidéo généré.
Diffusion ReplayKit
La diffusion d’une vidéo comprend plusieurs couches de sécurité :
Captures d’écran et audio : Le mécanisme de capture d’écran et audio pendant la diffusion est identique à l’enregistrement de vidéos et a lieu dans
replayd
.Extensions de diffusion : Pour pouvoir participer à la diffusion ReplayKit, les services de tiers doivent créer deux nouvelles extensions qui sont configurées à l’aide du terminal com.apple.broadcast‑services :
une extension d’interface utilisateur qui permet à l’utilisateur de configurer sa diffusion;
une extension de téléversement qui permet de télécharger les données vidéo et audio vers les serveurs principaux du service.
L’architecture contribue à garantir que les apps hôtes ne bénéficient d’aucun privilège sur le contenu audiovisuel diffusé. Seuls ReplayKit et les extensions de diffusion tierces y ont accès.
Sélecteur de diffusion : Cette fonction permet à l’utilisateur de lancer des diffusions du système directement depuis l’app à l’aide de la même interface utilisateur que celle définie par le système, qui est accessible à partir du centre de contrôle. L’interface utilisateur est implémentée à l’aide d’une API privée et réside sous forme d’extension dans le cadre d’application de ReplayKit. Cette fonction se trouve en dehors du processus de l’app hôte.
Extension de téléversement : L’extension que les services de diffusion tiers implémentent pour traiter le contenu audiovisuel pendant la diffusion utilise des tampons d’échantillon bruts non codés. Lorsque ce mode de traitement est appliqué, les données vidéo et audio sont sérialisées et transmises en temps réel à l’extension de téléversement tierce au moyen d’une connexion XPC directe. Les données vidéo sont codées en extrayant l’objet IOSurface du tampon d’échantillon de la vidéo, en les codant de façon sécurisée comme objet XPC, en les envoyant à l’extension tierce au moyen de la connexion XPC et en les décodant de façon sécurisée dans un objet IOSurface.