
운영 체제 무결성
Apple의 운영 체제 소프트웨어는 보안을 핵심으로 설계되었습니다. 여기에는 보안 시동을 활성화하는 하드웨어 신뢰 루트와 함께 빠르고 안전한 보안 소프트웨어 업데이트 프로세스도 포함됩니다. 또한 Apple 운영 체제는 시스템이 실행될 때 악용되는 것을 방지하기 위한 목적으로 제작된 실리콘 기반 하드웨어 기능을 활용합니다. 이러한 런타임 기능은 신뢰하는 코드가 실행될 때 무결성을 보호합니다. Apple의 운영 체제 소프트웨어는 악성 앱, 웹 또는 다른 채널을 통해 발생하는 공격과 그러한 기술의 악용을 완화하는 데 도움이 됩니다. 이러한 보호는 Apple이 설계한 SoC 지원 기기에서 사용할 수 있습니다. 여기에는 iOS, iPadOS, Apple Silicon이 탑재된 Mac의 macOS, tvOS, visionOS 및 watchOS가 포함됩니다.
기능 | A10 | A11, S3 | A12-A14 S4-S10 | A15-A18 | M1 | M2-M4 | A19 M5 |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
1 |
2 |
|
| |
|
|
|
|
|
2 |
2 | |
|
|
|
|
|
|
|
1: 보안 페이지 테이블 모니터(SPTM)는 A15 이상 및 M2 이상 SOC에서 지원되며 지원 플랫폼에서 페이지 보호 레이어를 대체합니다.
2: 페이지 보호 레이어(PPL) 및 보안 페이지 테이블 모니터(SPTM)는 macOS를 제외한 모든 플랫폼에서 서명되고 신뢰할 수 있는 코드를 실행합니다(macOS는 모든 코드를 실행하도록 설계되었으므로 제외). 페이지 보호 테이블을 포함한 기타 모든 보안 속성은 지원되는 모든 플랫폼에 있습니다.
커널 무결성 보호
운영 체제 커널 초기화가 완료되면 커널 및 드라이버 코드 수정을 방지하기 위해 커널 무결성 보호(KIP)가 활성화됩니다. 메모리 컨트롤러는 iBoot가 커널 및 커널 확장 프로그램을 로드하는 데 사용하는 보호된 물리적 메모리 영역을 제공합니다. 시동이 완료되면 메모리 컨트롤러는 보호되는 물리적 메모리 영역에 쓰기를 거부합니다. 보호되는 메모리 영역 외부에 있는 물리적 메모리의 권한 코드 매핑을 방지하고 커널 메모리 영역 내에서 물리적 메모리의 쓰기 가능한 매핑을 방지하도록 응용 프로그램 프로세서의 MMU(메모리 관리 유닛)가 구성됩니다.
재구성을 방지하기 위해 시동 프로세스가 완료된 후 KIP를 활성화하는 데 사용된 하드웨어가 잠깁니다.
빠른 권한 제한
Apple A11 Bionic 및 S3 SoC부터는 새로운 하드웨어 프리미티브가 도입되었습니다. 빠른 권한 제한인 이 프리미티브에는 스레드당 권한을 빠르게 제한하는 CPU 레지스터가 포함되어 있습니다. 빠른 권한 제한(또는 APRR 레지스터)으로 지원되는 운영 체제는 시스템 호출 및 페이지 테이블 워크 또는 플러시 비용을 들이지 않고 메모리에서 실행 권한을 제거할 수 있습니다. 이러한 레지스터는 웹에서 발생하는 공격, 특히 런타임 동안 컴파일된 코드(Just In Time compiled)에 대해 한 단계 더 추가된 보완 기능을 제공합니다. 메모리는 메모리를 읽거나 기록할 때와 동시에 효과적으로 실행될 수 없기 때문입니다.
시스템 보조 프로세서 무결성 보호
보조 프로세서 펌웨어는 Secure Enclave, 이미지 센서 프로세서 및 동작 인식 보조 프로세서와 같은 여러 중요한 시스템 작업을 처리합니다. 따라서 보조 프로세서 펌웨어의 보안은 전체 시스템 보안의 핵심입니다. Apple은 보조 프로세서 펌웨어가 변경되는 것을 방지하기 위해 시스템 보조 프로세서 무결성 보호(SCIP)라는 메커니즘을 사용합니다.
SCIP는 KIP와 매우 유사합니다. 시동 시 iBoot는 각 보조 프로세서의 펌웨어를 KIP 영역과 별도로 구분되는 영역인 보호되는 메모리 영역으로 로드합니다. iBoot는 각 보조 프로세서의 메모리 유닛을 구성하여 다음을 방지합니다.
보호되는 메모리 영역의 해당 부분 외부에서 실행 가능한 매핑
보호되는 메모리 영역의 해당 부분 내부에서 쓰기 가능한 매핑
또한 시동 시 Secure Enclave에 대한 SCIP를 구성하기 위해 Secure Enclave 운영 체제가 사용됩니다. 시동 프로세스가 완료되면 SCIP를 활성화하는 데 사용된 하드웨어가 잠깁니다. 이는 재구성을 방지하기 위한 것입니다.
포인터 인증 코드
PAC(포인터 인증 코드)는 메모리 손상 버그 악용으로부터 보호하기 위해 사용됩니다. 시스템 소프트웨어와 내장 앱은 PAC를 사용하여 함수 포인터와 반환 주소(코드 포인터)의 수정을 방지합니다. PAC는 5개의 128비트 비밀 값을 사용하여 커널 지침 및 데이터에 서명하고, 각 사용자 공간 프로세스는 고유한 B 키를 지닙니다. 항목은 아래와 같이 암호로 솔트되고 서명됩니다.
항목 | 키 | 솔트 |
|---|---|---|
함수 반환 주소 | IB | 저장 장치 주소 |
함수 포인터 | IA | 0 |
블록 호출 함수 | IA | 저장 장치 주소 |
블록 디스크립터 포인터 | DA | 저장 장치 주소 + 0xC0BB |
Objective-C 메소드 캐시 | IB | 저장 장치 주소 + 클래스 + 선택자 |
Objective-C Isa 포인터 | DA | 저장 장치 주소 + 0x6AE1 |
Objective-C Super 포인터 | DA | 저장 장치 주소 + 0xB5AB |
셀렉터 타입 Objective-C ivars | DB | 저장 장치 주소 + 0x57C2 |
Objective-C 읽기 전용 등급 데이터 포인터 | DA | 저장 장치 주소 + 0x61F8 |
C++ V-Table 엔트리 | IA | 저장 장치 주소 + 해시(훼손된 메소드 이름) |
C++ V-Table 포인터 | DA | 저장 장치 주소 + 해시(훼손된 기본 V-Table 이름) |
계산된 Goto 레이블 | IA | 해시(함수 이름) |
커널 스레드 상태 | GA | • |
사용자 스레드 상태 레지스터 | IA | 저장 장치 주소 |
서명 값은 64비트 포인터의 상단에 있는 사용되지 않은 패딩 비트에 저장됩니다. 서명은 사용 전에 확인되며, 패딩은 작동하는 포인터 주소를 확인하기 위해 복원됩니다. 확인에 실패하면 작업이 중단됩니다. 이 확인 과정은 스택에 저장된 함수 반환 주소를 조작하는 방식으로 기기를 악의적으로 속여 기존 코드를 실행하게끔 시도하는 ROP(Return Oriented Programming) 공격과 같은 여러 공격을 감행하기 어렵게 만듭니다.
페이지 보호 레이어
iOS, iPadOS, visionOS 및 watchOS의 PPL(페이지 보호 레이어)은 코드 서명 확인이 완료된 후 사용자 공간 코드가 수정되지 않도록 방지하기 위해 설계되었습니다. KIP 및 빠른 권한 제한에 기반하여, PPL은 페이지 테이블 권한 오버라이드를 관리하여 PPL만 사용자 코드 및 페이지 테이블을 포함하는 보호된 페이지를 변경할 수 있도록 합니다. 이 시스템은 침해된 커널이 있더라도 시스템 전반 코드 무결성 시행을 지원하여 공격 표면을 크게 줄입니다. PPL은 실행된 모든 코드가 반드시 서명되어야 하는 시스템에서만 적용할 수 있기 때문에 이 보호 기능은 macOS에서는 제공되지 않습니다.
보안 페이지 테이블 모니터 및 신뢰하는 실행 모니터
iOS, iPadOS, macOS 및 visionOS에서 보안 페이지 테이블 모니터(SPTM) 및 신뢰하는 실행 모니터(TXM)를 함께 사용하면 사용자 및 커널 프로세스 모두의 페이지 테이블이 수정되지 않도록 보호할 수 있습니다. 공격자가 커널 쓰기 기능을 가지고 있고 제어 흐름 보호를 우회할 수 있는 경우도 포함합니다. SPTM은 커널보다 높은 권한 수준을 활용하고 코드 실행을 관리하는 정책을 실제로 시행하기 위해 낮은 권한을 가진 TXM을 활용하여 이를 수행합니다. 이 시스템은 이러한 권리 분리 및 권한 간 신뢰 관리에 의해 TXM 손상이 자동으로 SPTM 우회로 이어지지 않도록 설계되었습니다. A15 이상 및 M2 이상 SOC에서 SPTM(TXM과 조합)은 PPL을 대체하여, 시동 초기에도 커널 신뢰에 의존하지 않는 더 작은 공격 표면을 제공합니다. SPTM은 PPL이 활용하는 빠른 권한 제한을 발전시킨 새로운 실리콘 프리미티브를 사용하며, 위 테이블에 나열된 프로세서에서만 사용할 수 있습니다.
메모리 무결성 강제
메모리 무결성 강제(MIE)는 A19 및 M5 프로세서 이상에서 사용할 수 있는 Apple 플랫폼을 위한 종합적인 메모리 안전 방어 기능입니다. MIE는 Apple의 보안 메모리 할당자가 제공하는 견고한 기반 위에 구축되었으며, 동기화 모드의 향상된 메모리 태깅 확장(EMTE)과 함께 사용되며 광범위한 태그 기밀성 강제(Tag Confidentiality Enforcement) 정책을 지원합니다. MIE는 Apple Silicon에 탑재되어 있고, 사용자가 예상하는 전력 효율과 성능을 유지하면서도, 커널을 포함한 주요 공격 표면에 대해 탁월한 상시 메모리 안전 보호를 제공합니다. 추가 정보를 보려면 Apple 보안 리서치 블로그의 Memory Integrity Enforcement: A complete vision for memory safety in Apple devices의 내용을 참조하십시오.
메모리 태깅 확장(MTE)
ARM은 2019년 메모리 태깅 확장(MTE)을 발표했으며, 이 툴은 하드웨어가 메모리 손상 버그를 찾는데 도움을 줄 수 있습니다. MTE는 모든 메모리 할당에 비밀과 함께 태그된 메모리 태깅 및 태그 확인 시스템입니다. 하드웨어는 이후의 메모리 접근 요청이 올바른 비밀을 포함하는 경우에만 허용되도록 보장합니다. 비밀이 일치하지 않으면 앱이 충돌하고 이벤트가 기록됩니다. 이렇게 하면 개발자는 메모리 손상 버그가 발생하는 즉시 식별할 수 있습니다.
향상된 메모리 태깅 확장(EMTE)
EMTE는 더 안전한 동기화 모드만 지원하면서, MTE가 능동적으로 방어하지 못하게 하는 취약점을 보완합니다. 또한 태그된 메모리 영역에서 태그가 없는 메모리에 접근하려면 해당 영역의 태그를 알아야 하므로, 공격자가 동적으로 태그된 메모리에서 발생한 경계 밖의 버그를 이용해 태그가 없는 할당을 직접 수정하여, EMTE를 우회하는 것이 훨씬 더 어려워집니다.
태그 기밀성 강제
태그 기밀성 강제는 보안 할당자의 구현을 기술적 위협으로부터 보호하고, EMTE 태그의 기밀성을 보장합니다. 사이드 채널 및 예측 실행 공격에 대한 보호도 포함됩니다. 보안 페이지 테이블 모니터(SPTM)는 커널 할당자의 백업 공간과 태그 저장 공간을 보호합니다. 또한 이 시스템은 커널이 응용 프로그램을 대신하여 메모리에 접근할 때에도 사용자 공간과 동일한 태그 검사 규칙이 적용되었는지 확인합니다. 태그 기밀성 강제 기능은 또한 타이밍이나 추측적인 공격으로 인해 태그가 유출되는 문제를 줄이도록 설계되었으며, Spectre V1에 대한 보호를 포함합니다.