운영 체제 무결성
Apple의 운영 체제 소프트웨어는 보안을 핵심으로 설계되었습니다. 여기에는 보안 시동을 활성화하기 위한 하드웨어 신뢰 루트와 함께 빠르고 안전한 보안 소프트웨어 업데이트 프로세스도 포함됩니다. 또한 Apple 운영 체제는 시스템이 실행될 때 악용되는 것을 방지하기 위한 목적으로 제작된 실리콘 기반 하드웨어 기능을 활용합니다. 이러한 런타임 기능은 신뢰하는 코드가 실행될 때의 무결성을 보호합니다. 간단히 말해서 Apple의 운영 체제 소프트웨어는 악성 앱, 웹 또는 다른 채널을 통해 발생하는 공격과 그러한 기술의 악용을 완화하는 데 도움이 됩니다. 여기에 나열된 보호 기능은 Apple이 설계한 SoC 지원 기기에서 사용할 수 있습니다. 여기에는 iOS, iPadOS, tvOS, watchOS 및 Apple Silicon이 탑재된 Mac의 macOS가 포함됩니다.
기능 | A10 | A11, S3 | A12, A13, A14 S4–S9 | A15, A16, A17 | M1, M2, M3 |
아래의 참고 1 내용 확인. | |||||
아래의 참고 2 내용 확인. |
참고 1: PPL(페이지 보호 레이어)는 플랫폼이 서명되고 신뢰할 수 있는 코드만 실행하도록 요구합니다. 이는 macOS에 적용되지 않는 보안 모델입니다.
참고 2: 보안 페이지 테이블 모니터(SPTM)는 A15, A16 및 A17에서 지원되며 지원 플랫폼에서 페이지 보호 레이어를 대체합니다.
커널 무결성 보호
운영 체제 커널 초기화가 완료되면 커널 및 드라이버 코드 수정을 방지하기 위해 커널 무결성 보호(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 | 저장 장치 주소 |
Objective-C 메소드 캐시 | IB | 저장 장치 주소 + 클래스 + 선택자 |
C++ V-Table 엔트리 | IA | 저장 장치 주소 + 해시(훼손된 메소드 이름) |
계산된 Goto 레이블 | IA | 해시(함수 이름) |
커널 스레드 상태 | GA | • |
사용자 스레드 상태 레지스터 | IA | 저장 장치 주소 |
C++ V-Table 포인터 | DA | 0 |
서명 값은 64비트 포인터의 상단에 있는 사용되지 않은 패딩 비트에 저장됩니다. 서명은 사용 전에 확인되며, 패딩은 작동하는 포인터 주소를 확인하기 위해 복원됩니다. 확인에 실패하면 작업이 중단됩니다. 이 확인 과정은 스택에 저장된 함수 반환 주소를 조작하는 방식으로 기기를 악의적으로 속여 기존 코드를 실행하게끔 시도하는 ROP(Return Oriented Programming) 공격과 같은 여러 공격을 감행하기 어렵게 만듭니다.
페이지 보호 레이어
iOS, iPadOS 및 watchOS의 PPL(페이지 보호 레이어)은 코드 서명 확인이 완료된 후 사용자 공간 코드가 수정되지 않도록 방지하기 위해 설계되었습니다. 커널 무결성 보호 및 빠른 권한 제한에 기반하여, PPL은 페이지 테이블 권한 오버라이드를 관리하여 PPL만 사용자 코드 및 페이지 테이블을 포함하는 보호된 페이지를 변경할 수 있도록 합니다. 이 시스템은 침해된 커널이 있더라도 시스템 전반 코드 무결성 시행을 지원하여 공격 표면을 크게 줄입니다. PPL은 실행된 모든 코드가 반드시 서명되어야 하는 시스템에서만 적용할 수 있기 때문에 이 보호 기능은 macOS에서는 제공되지 않습니다.
보안 페이지 테이블 모니터 및 신뢰하는 실행 모니터
보안 페이지 테이블 모니터(SPTM) 및 신뢰하는 실행 모니터(TXM)를 함께 사용하면 공격자가 커널 쓰기 기능을 가지고 있고 제어 흐름 보호를 우회할 수 있는 경우에도 사용자와 커널 프로세스 둘 다의 페이지 테이블이 수정되지 않도록 보호할 수 있습니다. SPTM은 커널보다 높은 권한 수준을 활용하고 코드 실행을 관리하는 정책을 실제로 시행하기 위해 낮은 권한을 가진 TXM을 활용하여 이를 수행합니다. 이 시스템은 이러한 권리 분리 및 권한 간 신뢰 관리에 의해 TXM 손상이 자동으로 SPTM 우회로 이어지지 않도록 설계되었습니다. A15, A16 및 A17 SOC에서 SPTM(TXM과 조합)은 PPL을 대체하여, 시동 초기에도 커널 신뢰에 의존하지 않는 더 작은 공격 표면을 제공합니다. 또한 SPTM은 PPL이 활용하는 빠른 권한 제한을 발전시킨 새로운 실리콘 프리미티브에 의존합니다.