Sicherheit beim ReplayKit für iOS und iPadOS
ReplayKit ist ein Framework, das es Entwicklern ermöglicht, ihre Apps mit Funktionen zur Aufzeichnung und Live-Übertragung auszustatten. Darüber hinaus ermöglicht es Benutzern, ihren Aufnahmen und Übertragungen mit der Frontkamera und dem Mikrofon des Geräts Kommentare hinzuzufügen.
Filmaufnahme
Das Aufnehmen eines Films umfasst verschiedene Sicherheitsstufen:
Berechtigungsfenster: Vor dem Beginn der Aufnahme fordert ReplayKit den Benutzer in einem Hinweisfenster auf zu bestätigen, dass der Bildschirm, das Mikrofon und die Frontkamera aufgezeichnet werden sollen. Dieser Hinweis erscheint einmal pro App-Prozess. Wenn die App länger als 8 Minuten im Hintergrund verbleibt, wird der Hinweis erneut angezeigt.
Bildschirm- und Audioaufzeichnung: Bildschirm- und Audioaufzeichnungen erfolgen außerhalb des App-Prozesses im ReplayKit-Daemon „replayd“. Auf diese Weise soll gewährleistet werden, dass der aufgezeichnete Inhalt für den App-Prozess stets unzugänglich bleibt.
Bildschirm- und Audioaufzeichnung in Apps: Dies ermöglicht einer App den Abruf von Video- und Sample-Puffern unter dem Schutz des Dialogfensters „Berechtigungen“.
Filmerstellung und -sicherung: Die Filmdatei wird in ein Verzeichnis geschrieben, das ausschließlich für ReplayKit-Subsysteme zugänglich ist und zu dem Apps keinerlei Zugang haben. Dadurch soll verhindert werden, dass Aufnahmen ohne Einwilligung des Benutzers von Dritten verwendet werden können.
Vorschau und Freigabe durch den Endbenutzer: Mit der von ReplayKit bereitgestellten Benutzeroberfläche kann der Benutzer den Film in einer Vorschau ansehen und ihn mit anderen teilen. Die Benutzeroberfläche wird außerhalb des Prozesses über die Infrastruktur für iOS-Erweiterungen angezeigt und hat Zugriff auf die generierte Filmdatei.
ReplayKit-Übertragung
Die Übertragung eines Films umfasst verschiedene Sicherheitsstufen:
Bildschirm- und Audioaufzeichnung: Der Mechanismus der Bildschirm- und Audioaufzeichnung während der Übertragung ist identisch mit der Filmaufnahme und erfolgt im Daemon
replayd
.Erweiterungen für die Übertragung: Damit Dienste anderer Anbieter an der ReplayKit-Übertragung teilnehmen können, müssen sie zwei neue Erweiterungen erstellen, die mit dem Endpunkt com.apple.broadcast-services konfiguriert wurden:
Eine Erweiterung der Benutzeroberfläche, die es dem Benutzer ermöglicht, seine Übertragung einzurichten.
Eine Upload-Erweiterung für das Hochladen von Video- und Audiodaten an die Back-End-Server des Dienstes.
Die Architektur stellt sicher, dass die bereitstellenden Apps keine Berechtigungen an den übertragenen Video- und Audioinhalten erhalten. Zugriff haben nur ReplayKit und die für die Übertragung genutzten Erweiterungen der anderen Anbieter.
Auswahl des Übertragungsdienstes: Der Übertragungsdienst ermöglicht es Benutzern, Systemübertragungen direkt aus der App zu starten und dabei die gleiche systemdefinierte Benutzeroberfläche zu verwenden, die über das Kontrollzentrum zugänglich ist. Die Benutzeroberfläche wird mit einer privaten API implementiert und ist eine Erweiterung, die innerhalb des ReplayKit-Frameworks verbleibt. Sie läuft außerhalb des Prozesses der bereitstellenden App.
Upload-Erweiterung: Dies ist die Erweiterung, die Übertragungsdienste anderer Anbieter implementieren, um die Video- und Audioinhalte während der Übertragung zu verarbeiten. Sie verwendet Sample-Puffer vom Typ „RAW uncodiert“. Während dieses Handhabungsmodus werden Video- und Audiodaten serialisiert und über eine direkte XPC-Verbindung in Echtzeit an die Upload-Erweiterung des anderen Anbieters übergeben. Die Videodaten werden codiert, indem das IOSurface-Objekt aus dem Video-Sample-Puffer extrahiert, als XPC-Objekt sicher codiert, via XPC an die Erweiterung des anderen Anbieters gesendet und schließlich wieder sicher in ein IOSurface-Objekt decodiert wird.