일본에서 외부 브라우저 엔진 사용하기
iOS 26.2 이후 버전에서 일본 내 사용자는 두 유형의 앱에서 WebKit 이외의 브라우저 엔진을 사용할 수 있습니다. 즉, 전체 웹 브라우저 경험을 제공하는 전용 브라우저 앱과 임베드된 브라우저 엔진을 사용하여 앱 내 브라우징 경험을 제공하는 브라우저 엔진 운영자의 앱입니다.
Apple은 인증받은 개발자에게 중요한 기능을 구현하고 고성능의 최신 브라우저 엔진을 제공할 수 있도록 지원하는 시스템 내 기술에 대한 액세스 권한을 제공합니다. 이러한 기술에는 JIT(Just-In-Time) 컴파일, 다중 프로세스 지원 등이 포함됩니다.
하지만 브라우저 엔진은 신뢰할 수 없는 콘텐츠와 잠재적 악성 콘텐츠에 지속적으로 노출되고 민감한 사용자 데이터를 볼 수 있기 때문에 악성 해커의 가장 일반적인 공격 벡터 중 하나입니다. 사용자를 온라인에서 안전하게 보호하기 위해 Apple에서는 특정 기준을 충족하고 새로운 위협 및 취약성을 해결하기 위한 적시 보안 업데이트를 비롯하여 여러 지속적인 개인 정보 보호 및 보안 요구 사항을 준수하는 개발자만 외부 브라우저 엔진을 구현할 수 있도록 승인합니다.
웹 브라우저 엔진 Entitlement(권한)
브라우저 앱의 경우
웹 브라우저 엔진 Entitlement(권한)가 있으면 브라우저 앱에서 외부 브라우저 엔진을 사용할 수 있습니다. 브라우저 앱에서 외부 브라우저 엔진을 사용하는 데 관심이 있다면 아래의 요구 사항을 검토한 다음 웹 브라우저 엔진 Entitlement(권한)에 대한 요청을 제출하세요. 기술 지침은 다음을 참고하시기 바랍니다.
요구 사항
Entitlement(권한)를 이용하려면 앱이 다음을 충족해야 합니다.
- 일본 내 iOS에서만 배포됨(개발자가 해당 Entitlement(권한) 프로필을 마찬가지로 획득했으며 Apple이 개발자 계약(부록 포함)에 따라 명시적으로 허용한 다른 관할 지역 또는 Apple 플랫폼 제외)
- 기본 브라우저 Entitlement(권한)가 있음
- 앱에서 웹 기능의 기준을 제공하는 웹 브라우저 엔진을 사용할 수 있도록 다음 기능 요구 사항을 충족함:
- 개발자와 개발자의 앱이 다음 보안 요구 사항을 충족해야 함:
- 앱의 소프트웨어 공급망에 취약성이 있는지 모니터링하고 안전한 소프트웨어 개발에 대한 모범 사례(예: 개발 중인 새로운 기능에 대한 위협 모델링 수행)를 따르는 것을 비롯하여 개발 프로세스의 보안을 유지하기 위해 노력합니다.
- 제3자(Apple 포함 가능)가 보안 취약성 및 문제를 개발자에게 보고하기 위한 연락처 정보, 보고서에 제공해야 할 정보, 상태 업데이트가 예상되는 시점이 포함된 게시된 취약성 공개 정책의 URL을 제공합니다.
- 앱 또는 앱이 사용하는 외부 웹 브라우저 엔진 내에서 악용되고 있는 취약성을 적시(예: 적극적으로 악용되고 있는 가장 간단한 취약성 클래스의 경우 30일)에 완화하기 위해 노력합니다.
- 특정 버전의 브라우저 엔진 및 관련 앱 버전(다른 경우)에서 해결된 보고된 취약성에 대한 정보를 제공하는 공개 웹페이지의 URL을 제공합니다.
- 외부 웹 브라우저 엔진이 iOS SDK를 통해 액세스할 수 없는 루트 인증서 저장소를 사용하는 경우, 루트 인증서 정책에 공개적으로 액세스할 수 있도록 해야 하며, 해당 정책의 소유자는 Certification Authority/Browser Forum에 브라우저 소프트웨어 개발자로 참여해야 합니다.
- 브라우저 엔진을 사용 중인 경우 전송 중인 데이터 통신을 보호하기 위한 최신 전송 계층 보안 프로토콜에 대한 지원을 시연합니다.
프로그램 보안 요구 사항
다음 요구 사항을 충족해야 합니다.
- 웹 콘텐츠를 처리하는 모든 코드에 대한 최소한의 외부 웹 브라우저 엔진 내에서 메모리가 안전한 프로그래밍 언어를 사용하거나 다른 언어 내에서 메모리 안전성을 향상하는 기능을 사용합니다.
- 취약성 클래스를 제거하거나 악용 체인 개발을 훨씬 더 어렵게 만드는 최신 보안 강화 기능(예: 포인터 인증 코드)을 도입합니다. 여기에는 다음 사항의 도입이 포함됩니다.
- 포인터 인증 코드(PAC)
- (i) 콘텐츠 확장 프로그램의 시스템 제공 할당자 및 (ii) 네트워크 및 그래픽 렌더링 확장 프로그램을 비롯한 앱의 모든 프로세스 및 확장 프로그램 내의 맞춤형 또는 시스템 제공 할당자에 대한 메모리 무결성 강화(MIE) 적용
- 보안 설계 및 코딩 모범 사례를 따릅니다.
- 프로세스 분리를 사용하여 악용의 영향을 제한하고 외부 웹 브라우저 엔진 내에서 IPC(프로세스 간 통신)를 검증합니다.
- 제3자 소프트웨어 종속성과 앱의 광범위한 소프트웨어 공급망에 취약성이 있는지 모니터링하고, 취약성이 앱에 영향을 미치는 경우 최신 버전으로 마이그레이션합니다.
- 취약성에 대응하여 보안 업데이트를 더 이상 받지 않는 프레임워크 또는 소프트웨어 라이브러리를 사용하지 않습니다.
- 새로운 기능 개발보다 보고된 취약성을 신속하게 해결하는 것을 우선시합니다. 예를 들어 외부 웹 브라우저 엔진이 플랫폼의 SDK와 웹 콘텐츠 사이의 기능을 연결하여 웹 API를 지원하는 경우, 요청에 따라 취약성이 있는 것으로 식별된 이러한 웹 API 대한 지원을 제거해야 합니다. 대부분의 취약성은 30일 이내에 해결되어야 하지만, 일부 취약성은 더 복잡하고 해결하는 데 더 오래 걸릴 수 있습니다.
프로그램 개인 정보 보호 요구 사항
다음 요구 사항을 충족해야 합니다.
- 사용자가 사전 동의를 통해 교차 사이트 쿠키(즉, 제3자 쿠키)를 허용하도록 명시적으로 선택하지 않는 한 또는 열린 윈도우의 프레임과 상호 작용하는 팝업 윈도우의 경우 호환성의 필요에 따라 해당 쿠키를 기본적으로 차단합니다.
- 웹사이트에서 관찰할 수 있는 저장소 또는 상태를 최상위 웹사이트별로 분할하거나, 교차 사이트 사용 및 관찰 가능성으로부터 이러한 저장소 또는 상태를 차단합니다.
- 사용자가 두 앱 모두에 로그인하거나, 명시적 허가를 위한 다른 메커니즘을 통해 상태 동기화를 명시적으로 허가하지 않는 한, 어떠한 상태(쿠키 포함)도 해당 앱과 다른 앱(동일한 개발자가 제작한 다른 앱 포함) 간에 동기화하지 않습니다.
- 사전 동의 및 사용자 활성화 없이 기기 식별자를 웹사이트와 공유하지 않습니다.
- iOS에서 제공되는 API를 사용하여 앱 개인정보 보호 리포트를 생성하는 네트워크 연결에 레이블을 지정합니다(즉, 앱이 배포되는 모든 위치).
- PII에 대한 액세스를 제공하는 API를 비롯한 웹 API(예: 클립보드 또는 전체 화면 액세스)에 적절한 경우 정보에 기반한 사용자 활성화 및/또는 사용자 동의를 요구하는 경우에 대해 일반적으로 채택되는 웹 표준을 따릅니다.
임베드된 브라우저 엔진 Entitlement(권한)
앱 내 브라우징의 경우
임베드된 브라우저 엔진 Entitlement(권한)가 있으면 앱 내에 외부 브라우저 엔진을 임베드하여 앱 내 브라우징을 제공할 수 있습니다. 앱 내 브라우징은 웹 브라우저 앱 내에서 액세스할 수 있고 작동하는 콘텐츠를 웹에서 동적으로 표시하는 것입니다. 앱 내에 임베드되거나 앱을 통해서만 얻을 수 있는 콘텐츠는 포함되지 않습니다.
앱은 앱 내 브라우징을 제공하는 동안 웹 브라우징 기능을 제공하는 데 중점을 두어야 합니다. 앱 내 브라우징을 제공할 때 사용자 인터페이스는 다음과 같아야 합니다.
- 최종 사용자가 브라우징 세션을 제어할 수 있도록 해 주는 관련 제어 기능을 제외하고 디스플레이의 대부분을 차지합니다.
- 사용자가 전용 브라우저 앱을 열어 현재 표시되는 콘텐츠를 볼 수 있도록 시스템의 기본 브라우저로 연결되는 버튼 또는 링크를 제공합니다.
- 앱 내 브라우징으로 콘텐츠가 렌더링되는 도메인 또는 URL을 표시합니다.
앱에서 외부 브라우저 엔진을 사용하여 앱 내 브라우징 경험을 제공하는 데 관심이 있다면 아래의 요구 사항을 검토한 다음 임베드된 브라우저 엔진 Entitlement(권한)에 대한 요청을 제출하세요. 임베드하려는 엔진에 대한 정보(예: 엔진이 어떻게 요구 사항을 충족하는지, 어떻게 엔진을 앱에 통합하여 앱 내 브라우징 경험을 제공할 수 있는지 등)를 제공해야 합니다. 기술 지침은 예제 및 리소스 섹션을 참고하시기 바랍니다.
요구 사항
Entitlement(권한)를 이용하려면 해당 조직이 브라우저 엔진 운영자여야 합니다. 브라우저 엔진 운영자는 별도의 웹 브라우저 엔진 운영에 대해 주된 책임을 지는 기관입니다.
- 주된 책임이란 웹 브라우저 엔진에서 보안 또는 개인정보 보호 취약점이 발견되는 경우, 이에 대한 운영 통제권을 가지며, 최종 책임을 지고 대응을 조율하는 것을 의미합니다.
- 별도의 웹 브라우저 엔진은 다른 웹 브라우저 엔진과는 다른 기관이나 조직에서 유지 관리하며, 아키텍처와 웹 API 지원이 모두 다른 엔진과 크게 구별됩니다. 엔진은 일반적으로 포크에서 이루어진 변경 사항을 반영하도록 업데이트되지 않으며, 그 대신에 변경 사항을 포크로 내보냅니다.
앱 요구 사항
앱은 다음 요구 사항을 충족해야 합니다.
- 일본 내 iOS에서만 배포됨(개발자가 해당 Entitlement(권한) 프로필을 마찬가지로 획득했으며 Apple이 개발자 계약(부록 포함)에 따라 명시적으로 허용한 다른 관할 지역 또는 Apple 플랫폼 제외)
- 앱 내 브라우징을 위해서만 Entitlement(권한)를 사용함
- 기본 브라우저 Entitlement(권한)가 없음
- 앱에서 웹 기능의 기준을 제공하는 웹 브라우저 엔진을 사용할 수 있도록 다음 기능 요구 사항을 충족함:
- JIT(Just-In-Time) 컴파일을 사용할 수 없는 경우(예: 사용자가 차단 모드를 활성화한 경우) 위의 테스트 모음 요구 사항을 충족
- 애플리케이션의 소프트웨어 공급망에 취약성이 있는지 모니터링하고 안전한 소프트웨어 개발에 대한 모범 사례(예: 개발 중인 새로운 기능에 대한 위협 모델링 수행)를 따르는 것을 비롯하여 개발 프로세스의 보안을 유지하기 위해 노력합니다.
- 제3자(Apple 포함 가능)가 보안 취약성 및 문제를 개발자에게 보고하기 위한 연락처 정보, 보고서에 제공해야 할 정보, 상태 업데이트가 예상되는 시점이 포함된 게시된 취약성 공개 정책의 URL을 제공합니다.
- 앱 또는 외부 웹 브라우저 엔진 내에서 악용되고 있는 취약성을 적시(예: 적극적으로 악용되고 있는 가장 간단한 취약성 클래스의 경우 30일)에 완화하기 위해 노력합니다.
- 특정 버전의 브라우저 엔진 및 관련 앱 버전(다른 경우)에서 해결된 보고된 취약성에 대한 정보를 제공하는 공개 웹페이지의 URL을 제공합니다.
- 선택한 외부 웹 브라우저 엔진이 iOS SDK를 통해 액세스할 수 없는 루트 인증서 저장소를 사용하는 경우, 루트 인증서 정책에 공개적으로 액세스할 수 있도록 해야 하며, 해당 정책의 소유자는 Certification Authority/Browser Forum에 Certificate Consumer(인증서 소비자)로 참여해야 합니다.
- 브라우저 엔진을 사용 중인 경우 전송 중인 데이터 통신을 보호하기 위한 최신 전송 계층 보안 프로토콜에 대한 지원을 시연합니다.
프로그램 보안 요구 사항
다음 요구 사항을 충족해야 합니다.
- 외부 웹 브라우저 엔진 내에서 최소한 웹 콘텐츠를 처리하는 모든 코드에 대해 메모리 안전 프로그래밍 언어를 사용하거나 다른 언어 내에서 메모리 안전성을 향상하는 기능을 사용해야 합니다.
- 취약성 클래스를 제거하거나 악용 체인 개발을 훨씬 더 어렵게 만드는 최신 보안 강화 기능을 채택합니다.
- 보안 설계 및 보안 코딩, 모범 사례를 따릅니다.
- 제3자 소프트웨어 종속성과 앱의 광범위한 소프트웨어 공급망에 취약성이 있는지 모니터링하고, 취약성이 앱에 영향을 미치는 경우 최신 버전으로 마이그레이션합니다.
- 취약성에 대응하여 보안 업데이트를 더 이상 받지 않는 프레임워크 또는 소프트웨어 라이브러리를 사용하지 않습니다.
- 새로운 기능 개발보다 보고된 취약성을 신속하게 해결하는 것을 우선시합니다. 예를 들어 외부 브라우저 엔진이 플랫폼의 SDK와 웹 콘텐츠 사이의 기능을 연결하여 웹 API를 지원하는 경우, 요청에 따라 취약성이 있는 것으로 식별된 이러한 웹 API 대한 지원을 제거해야 합니다. 대부분의 취약성은 30일 이내에 해결되어야 하지만, 일부 취약성은 더 복잡하고 해결하는 데 더 오래 걸릴 수 있습니다.
프로그램 개인 정보 보호 요구 사항
다음 요구 사항을 충족해야 합니다.
- 사용자가 사전 동의를 통해 교차 사이트 쿠키(즉, 제3자 쿠키)를 허용하도록 명시적으로 선택하지 않는 한 또는 열린 윈도우의 프레임과 상호 작용하는 팝업 윈도우의 경우 호환성의 필요에 따라 해당 쿠키를 기본적으로 차단합니다.
- 웹사이트에서 관찰할 수 있는 저장소 또는 상태를 최상위 웹사이트별로 분할하거나, 교차 사이트 사용 및 관찰 가능성으로부터 이러한 저장소 또는 상태를 차단합니다.
- 사전 동의 및 사용자 활성화 없이 기기 식별자를 웹사이트와 공유하지 않습니다.
- iOS에서 제공되는 API를 사용하여 앱 개인정보 보호 리포트를 생성하는 네트워크 연결에 레이블을 지정합니다(즉, 앱이 배포되는 모든 위치).
- PII에 대한 액세스를 제공하는 API를 비롯한 웹 API(예: 클립보드 또는 전체 화면 액세스)에 적절한 경우 정보에 기반한 사용자 활성화 및/또는 사용자 동의를 요구하는 경우에 대해 일반적으로 채택되는 웹 표준을 따릅니다.
추가 요구 사항
- 앱에 임베드된 외부 웹 브라우저 엔진의 이름과 버전을 각 바이너리 제출과 함께 제출해야 합니다.
- 앱에 임베드된 외부 웹 브라우저 엔진의 새 버전을 사용할 수 있게 되면 15일 이내에 해당 새 버전으로 앱에 대한 업데이트를 제출해야 합니다.
예제 및 리소스
이 섹션에는 외부 브라우저 엔진을 사용하기 위한 요구 사항을 충족하는 데 도움이 되는 추가 리소스와 예제가 포함되어 있습니다.
보안 SDLC(소프트웨어 개발 수명 주기)
충족해야 하는 요구 사항의 대부분은 앱에 새로운 기능을 도입할 때 보안과 개인 정보 보호를 우선시하는 접근 방식을 개발하는 데 기반을 둡니다. 새로운 기능에 대한 개발을 시작할 때는 먼저 위협 모델을 개발하고 아키텍처와 앱의 출시 버전을 통해 식별된 위험을 완화한다는 확신을 어떻게 얻을지에 대한 계획을 수립해야 합니다. 확신을 얻을 수 있는 많은 기법이 있습니다. 예를 들어 시행하려는 보안 속성을 확인하기 위한 코드 감사, 퍼즈 테스트, 테스트 작성 등이 있습니다. 모든 웹 콘텐츠를 신뢰할 수 없는 잠재적 악성 콘텐츠로 간주해야 합니다.
리소스
- BrowserEngineKit 프레임워크에 대해 자세히 알아보기
- 브라우저 아키텍처 설계에 대해 자세히 알아보기
- 앱 보호하기: 위협 모델링 및 안티 패턴(WWDC20)
- 보안
- 퍼즈 테스트(MDN)
보안 강화 기능 및 메모리 안전성
iOS 또는 iPadOS에서 제공하는 최신 보안 강화 기능(예: 포인터 인증 코드 및 메모리 무결성 강화)과 개발자가 식별하는 각 위협을 완화하기 위해 사용할 수 있는 프로그래밍 언어(또는 언어 및 컴파일러 기능과 기타 도구)도 고려해야 합니다. 예를 들어 Swift는 기본적으로 메모리가 안전한 언어이며, 취약성 및 기타 메모리 관련 소프트웨어 버그의 여러 일반적인 소스를 방지하는 데 도움이 될 수 있습니다. 하지만 C++와 같이 메모리가 안전하지 않은 언어는 std::span과 같이 메모리 안전성 이점이 있는 기능을 제공합니다. 또한 컴파일러 옵션과 도구를 사용할 수 있습니다. 예를 들면, C에서 -fbounds-safety를 사용하면 기존 코드에 주석을 추가하여 범위를 벗어난 메모리 액세스를 완화할 수 있으며, 이때 기본적으로 메모리가 안전한 언어로 기능을 항상 다시 작성하지 않아도 됩니다.
리소스
취약성 관리
발견되지 않은 취약성이 브라우저 엔진 내에 항상 존재하거나 새로운 기능이 의도하지 않은 위험을 유발할 수 있다고 가정해야 합니다. 따라서 소프트웨어 공급망 내에서 테스트, 보안 및 개인 정보 보호를 보장하기 위한 노력을 통해 내부적으로 취약성을 발견하거나, 제3자에 의해 취약성이 공개된 경우 대응할 수 있는 절차를 갖추는 것이 중요합니다.
제3자(예: 보안 연구원)가 개발자에게 취약성을 보고할 수 있는 경로를 제공하는 경우, 문제의 유효성과 원인을 빠르게 파악하기 위해 제3자로부터 어떤 정보가 필요할지 고려해야 합니다. 또한 취약성에 대한 해결책의 우선순위를 지정한 다음 정규 일정과 다를 수 있는 업데이트를 출시하는 절차가 있는지 확인해야 합니다.
사용자가 관련 CVE-ID가 있는 어떤 공개 취약성이 어떤 앱(또는 외부 브라우저 엔진) 버전에서 해결되는지를 빠르게 파악할 수 있는 것 또한 중요합니다.
리소스
네트워크 보안
iOS SDK 특히 Network 프레임워크 또는 SecTrust API를 사용하면 웹 인증서의 신뢰성을 평가하고 현재 사용 중인 외부 브라우저 엔진에 해당하는 루트 인증서 보관함 및 프로그램을 유지 관리하거나 사용해야 할 책임을 줄일 수 있습니다. 프로그램을 운영하는 경우 - 프로그램은 루트 CA(인증 기관)가 프로그램 참여를 위해 신청할 수 있는 방법과 개발자가 조치를 취할 수 있도록 사고(예: 루트 인증 기관의 개인 키 자료가 노출됨)를 보고할 수 있는 방법에 대한 정보를 제공해야 합니다.
웹에서 사용되는 프로토콜은 새로운 위협에 대응하고 사용자 개인 정보를 보호하고 보안을 강화하기 위해 지속적으로 발전하고 있습니다. 외부 브라우저 엔진과 호환되어야 하는 최신 TLS 버전 중에 지원 중단되지 않은 버전은 TLS 1.2 및 1.3이지만 시간이 지남에 따라 변경될 수 있습니다. 외부 브라우저 엔진에서 지원 중단된 프로토콜을 지원할 수 있지만, 사용자가 이러한 프로토콜만 지원하는 사이트를 탐색하는 경우 사용자에게 알려야 합니다.