Seguridad de ReplayKit en iOS y iPadOS
ReplayKit es una estructura que permite a los desarrolladores añadir a sus apps la posibilidad de grabar contenido y retransmitirlo en directo. Además, permite a los usuarios comentar sus grabaciones y retransmisiones con el micrófono y la cámara frontal del dispositivo.
Grabación de vídeo
En la grabación de un vídeo, hay varias capas de seguridad integradas:
Cuadro de diálogo de permisos: Antes de empezar a grabar, ReplayKit muestra un aviso de consentimiento del usuario en el que se solicita al usuario que confirme su intención de grabar la pantalla, el micrófono y la cámara frontal. Este aviso aparece una vez por cada proceso de la app y vuelve a aparecer si la app se deja en segundo plano durante más de 8 minutos.
Grabación de la pantalla y del audio: La grabación de la pantalla y del audio no se incluye en el proceso de la app en el daemon replayd de ReplayKit, lo cual garantiza que dicho proceso no podrá acceder nunca al contenido grabado.
Grabación de la pantalla y del audio integrada en la app: Esto permite que la app obtenga búferes de muestra y de vídeo que están protegidos por el cuadro de diálogo de permisos.
Creación del vídeo y almacenamiento: El archivo de vídeo se guarda en un directorio al que solo pueden acceder los subsistemas de ReplayKit, por lo que ninguna app puede acceder a él. Esto contribuye a que ningún tercero pueda utilizar las grabaciones sin el consentimiento del usuario.
Previsualización y compartición por parte del usuario final: El usuario puede previsualizar y compartir el vídeo con la interfaz de usuario que provee ReplayKit. La interfaz de usuario se presenta fuera del proceso mediante la infraestructura de extensiones de iOS y tiene acceso al archivo de vídeo generado.
Retransmisión con ReplayKit
En la retransmisión de un vídeo, hay varias capas de seguridad integradas:
Grabación de la pantalla y del audio: El mecanismo de grabación de la pantalla y del audio durante la retransmisión es el mismo que el de la grabación de vídeo y se da en
replayd
.Extensiones de retransmisión: Para que los servicios de terceros puedan participar en la retransmisión de ReplayKit, es necesario que creen dos extensiones nuevas configuradas con el endpoint “com.apple.broadcast‑services”:
Una extensión de interfaz de usuario que permita al usuario configurar la retransmisión.
Una extensión de carga que gestione la carga de los datos de vídeo y audio en los servidores del servicio.
Esta arquitectura ayuda a garantizar que las apps de alojamiento no tengan privilegios sobre el contenido de vídeo y audio transmitido. Únicamente tienen acceso ReplayKit y las extensiones de retransmisión de terceros.
Selector de retransmisión: Con el selector de retransmisión, los usuarios inician las retransmisiones del sistema directamente desde su app mediante la misma interfaz de usuario definida por el sistema que es accesible a través del centro de control. La interfaz de usuario se implementa mediante una API privada y es una extensión que se encuentra en la estructura de ReplayKit. No está incluida en el proceso de la app de alojamiento.
Extensión de carga: La extensión que implementan los servicios de retransmisión de terceros para gestionar el contenido de audio y vídeo durante la retransmisión utiliza búferes de muestra no codificados en formato nativo. Cuando se utiliza este modo de gestión, los datos de audio y vídeo se serializan y envían a la extensión de carga de terceros en tiempo real a través de una conexión XPC directa. Los datos del vídeo se codifican mediante la extracción del objeto IOSurface del búfer de muestra del vídeo, la codificación de dicho objeto de forma segura como un objeto XPC, su envío por XPC a la extensión de terceros y su descodificación de forma segura como el objeto IOSurface inicial.