Segurança de ReplayKit no iOS e iPadOS
O ReplayKit é uma estrutura que permite que desenvolvedores adicionem recursos de gravação e transmissão ao vivo a seus apps. Além disso, ele também permite que usuários usem a câmera frontal e o microfone do dispositivo para comentar em suas gravações e transmissões.
Gravação de filmes
Há várias camadas de segurança integradas à gravação de um filme:
Diálogo de permissões: antes da gravação ser iniciada, o ReplayKit apresenta um alerta de consentimento ao usuário, solicitando que ele reconheça sua intenção de gravar a tela, usar o microfone e a câmera frontal. Esse alerta é apresentado uma vez por processo de app, sendo apresentado novamente se o app permanecer em segundo plano por mais de oito minutos.
Captura de tela e áudio: a captura de tela e áudio ocorre fora do processo do app, no daemon replayd do ReplayKit. Isso é projetado para garantir que o conteúdo gravado nunca fique acessível ao processo do app.
Captura de tela e áudio dentro de apps: permite que um app obtenha buffers de vídeo e amostra, o que é protegido por meio do diálogo de permissões.
Criação e armazenamento de filmes: o arquivo de filme é gravado em um diretório acessível apenas aos subsistemas do ReplayKit e nunca fica acessível a nenhum app. Isso ajuda a impedir que as gravações sejam usadas por terceiros sem o consentimento do usuário.
Pré-visualização e compartilhamento pelo usuário final: o usuário é capaz de pré-visualizar e compartilhar o filme com uma interface de usuário oferecida pelo ReplayKit. A interface de usuário é apresentada fora do processo através da infraestrutura de Extensões do iOS e tem acesso ao arquivo de filme gerado.
Transmissão com ReplayKit
Há várias camadas de segurança integradas à transmissão de um filme:
Captura de tela e áudio: o mecanismo de captura de tela e áudio durante a transmissão é idêntico ao da gravação de filmes, ocorrendo no
replayd
.Extensões de transmissão: para que serviços de terceiros participem da transmissão do ReplayKit, é necessário que eles criem duas novas extensões que estejam configuradas pelo com.apple.broadcast-services:
Uma extensão de interface de usuário que permita ao usuário configurar a transmissão;
Uma extensão de envio que gerencie o envio de dados de vídeo e áudio para os servidores de retaguarda do serviço.
A arquitetura ajuda a garantir que os apps hosts não tenham nenhum privilégio sobre o conteúdo de vídeo e áudio da transmissão. Apenas o ReplayKit e as extensões de transmissão de terceiros possuem acesso.
Seletor de transmissão: com o seletor de transmissão, o usuário inicia transmissões do sistema diretamente do app com a mesma interface de usuário definida pelo sistema, que pode ser acessada através da Central de Controle. A interface de usuário é uma extensão que reside dentro do framework ReplayKit, implementada ao usar uma API privada. Ele não pode ser processado pelo app host.
Extensão de envio: a extensão implementada por serviços de transmissão de terceiros para gerenciar conteúdo de vídeo e áudio durante uma transmissão usa buffers de amostra não codificados e não processados. Durante esse modo de gerenciamento, os dados de vídeo e áudio são serializados e passados à extensão de envio do terceiro em tempo real por uma conexão XPC direta. Os dados de vídeo são codificados ao extrair o objeto IOSurface do buffer de amostra do vídeo, codificá-lo com segurança como um objeto XPC, enviá-lo através do XPC para a extensão de terceiros e descodificá-lo com segurança de volta em um objeto IOSurface.