iOS 및 iPadOS의 ReplayKit 보안
ReplayKit는 개발자가 앱에 녹화 및 라이브 방송 기능을 추가할 수 있도록 하는 프레임워크입니다. 또한, 사용자가 기기의 전면 카메라와 마이크를 사용하여 녹화 영상과 라이브 방송에 주석을 달 수 있게 합니다.
동영상 녹화
동영상 녹화에는 다음과 같이 여러 가지 보안 계층이 구축되어 있습니다.
권한 요청 알림: 녹화를 시작하기 전에 ReplayKit가 사용자 동의 요청 알림을 나타내 사용자가 화면을 녹화하고 마이크와 전면 카메라를 사용하는 목적을 사용자가 확인하도록 합니다. 이 알림은 앱 프로세스마다 한 번씩 나타나며 앱이 8분 이상 백그라운드에서 실행되는 경우 알림이 다시 나타납니다.
화면 및 오디오 캡처: 화면 및 오디오 캡처는 앱 프로세스가 아닌 ReplayKit의 데몬 replayd에서 이루어집니다. 이로 인해 녹화된 콘텐츠는 앱 프로세스에서 절대 접근할 수 없습니다.
앱 내 화면 및 오디오 캡처: 이는 권한 요청 알림에 의해 보호되는 앱이 비디오 및 샘플 버퍼를 가져오도록 허용합니다.
동영상 생성 및 저장: 동영상 파일은 ReplayKit의 보조 시스템에서만 접근할 수 있는 디렉토리에 작성되며 다른 앱에서는 절대 접근할 수 없습니다. 이 때문에 타사 개발자는 사용자의 동의 없이 녹화 영상을 사용할 수 없습니다.
최종 사용자 미리보기 및 공유: 사용자는 ReplayKit에서 제공된 사용자 인터페이스를 통해 동영상을 미리 보거나 공유할 수 있습니다. 해당 사용자 인터페이스는 iOS 확장 프로그램 인프라를 통해 프로세스 밖에서 제공되며 생성된 동영상 파일에 대한 접근 권한을 가집니다.
ReplayKit 방송
동영상 방송에는 다음과 같이 여러 가지 보안 계층이 구축되어 있습니다.
화면 및 오디오 캡처: 방송 중의 화면 및 오디오 캡처 메커니즘은
replayd
에서 사용하는 동영상 녹화 메커니즘과 동일합니다.방송 확장 프로그램: 타사 서비스에서 ReplayKit 방송에 참여하려고 하는 경우 com.apple.broadcast-services 엔드포인트로 구성된 아래와 같은 두 개의 새로운 확장 프로그램을 생성해야 합니다.
사용자가 방송을 설정하도록 하는 사용자 인터페이스 확장 프로그램
비디오 및 오디오 데이터를 서비스의 백엔드 서버로 업로드하는 업로드 확장 프로그램
이 아키텍처는 방송되는 비디오 및 오디오 콘텐츠에 대한 권한을 호스팅 앱에서 가질 수 없도록 합니다. ReplayKit 및 타사 방송 확장 프로그램만 접근할 수 있습니다.
방송 선택기: 방송 선택기로 사용자는 제어 센터를 통해 접근 가능한 동일한 시스템 정의 사용자 인터페이스를 사용하여 앱에서 직접 시스템 방송을 실행할 수 있습니다. 사용자 인터페이스는 프라이빗 API를 통해 구현되며 ReplayKit 프레임워크 내장 확장 프로그램입니다. 또한, 호스팅 앱 외부의 프로세스입니다.
업로드 확장 프로그램: 방송 중에 비디오와 오디오를 처리하기 위해 타사 방송 서비스에서 구현하는 확장 프로그램은 Raw 포맷으로 인코딩되지 않은 샘플 버퍼를 사용합니다. 처리 모드에서 비디오 및 오디오 데이터는 직렬화되어 직접 XPC 연결을 통해 타사 업로드 확장 프로그램에 실시간으로 전달됩니다. 비디오 데이터는 비디오 샘플 버퍼에서 IOSurface 대상체를 추출하여 인코딩된 다음, XPC 개체로 안전하게 인코딩되어 XPC를 통해 타사 확장 프로그램으로 전송되어 다시 IOSurface 대상체로 안전하게 디코딩됩니다.