신뢰 캐시
보안 시동 체인에 포함된 개체 중 하나는 정적 신뢰 캐시로, 서명된 시스템 볼륨에 마스터되는 모든 Mach-O 바이너리의 신뢰하는 레코드입니다. 각 Mach-O는 코드 디렉토리 해시로 표현됩니다. 효율적인 검색을 위해 이러한 해시는 신뢰 캐시에 넣기 전에 정렬됩니다. 코드 디렉토리는 codesign(1)
에 의해 수행된 서명 작업의 결과입니다. 신뢰 캐시를 실행하려면 SIP을 활성화해야 합니다. Apple Silicon이 탑재된 Mac에서 신뢰 캐시 실행을 비활성화하려면 보안 시동이 최소 보안으로 구성되어야 합니다.
바이너리가 실행되면 새로운 프로세스 생성 또는 기존 프로세스에 실행 코드를 매핑하는 작업의 일부로서 해당 코드 디렉토리가 추출되고 해시됩니다. 결과 해시가 신뢰 캐시에서 발견되는 경우, 바이너리에 대해 생성된 실행 가능한 매핑에 플랫폼 권한이 부여됩니다. 즉, 서명의 진위 여부에 대한 추가 확인 없이 권한을 소유하고 이행할 수 있습니다. 이는 바이너리에 서명하는 Apple 인증서를 통해 플랫폼 권한이 운영 체제 콘텐츠에 전달되는 Intel 기반 Mac과는 대조적입니다. (이 인증서는 바이너리가 소유하는 권한을 제한하지 않음.)
비플랫폼 바이너리(예 : 공증된 타사 코드)를 실행하려면 유효한 인증서 체인이 있어야 하며, Apple Developer Program에서 개발자에게 발급한 서명 프로파일에 의해 소유할 수 있는 권한이 제한됩니다.
macOS에 포함된 모든 바이너리는 플랫폼 식별자로 서명됩니다. Apple Silicon이 탑재된 Mac에서 이 식별자는 Apple에서 바이너리에 서명한 경우에도, 실행하려면 해당 코드 디렉토리 해시가 신뢰 캐시에 있어야 한다는 것을 나타내는 데 사용됩니다. Intel 기반 Mac에서 플랫폼 식별자는 이전 릴리즈의 macOS에서 바이너리의 해지를 수행합니다. 이는 최신 버전에서 바이너리가 실행되지 않도록 방지하는 데 사용됩니다.
정적 신뢰 캐시는 주어진 macOS 버전에 바이너리 세트를 완전히 잠급니다. 이러한 동작으로 공격자가 이점을 얻을 수 있도록 이전 운영 체제에서 합법적으로 Apple이 서명한 바이너리가 새로운 운영 체제에 도입되는 것을 방지할 수 있습니다.
운영 체제 외부에 제공된 플랫폼 코드
Apple은 플랫폼 식별자로 서명되지 않은 일부 바이너리(예: Xcode 및 개발 도구 스택)를 제공합니다. 그러한 경우에도 Apple Silicon이 탑재된 Mac 및 T2 칩이 탑재된 Mac에서 플랫폼 권한으로 바이너리를 실행하도록 허용됩니다. 이 플랫폼 소프트웨어는 macOS와 별도로 제공되기 때문에 정적 신뢰 캐시에 의해 부과되는 해지 동작에 영향을 받지 않습니다.
로드 가능한 신뢰 캐시
Apple은 로드 가능한 신뢰 캐시가 있는 특정 소프트웨어 패키지를 제공합니다. 이러한 캐시는 정적 신뢰 캐시와 동일한 데이터 구조를 갖습니다. 하지만 정적 신뢰 캐시는 하나뿐이며, 커널의 초기 초기화가 완료된 후 해당 콘텐츠가 항상 읽기 전용 범위로 잠기도록 보장하지만 로드 가능한 신뢰 캐시가 런타임 동안 시스템에 추가됩니다.
이러한 신뢰 캐시는 시동 펌웨어를 인증하는 동일 메커니즘(Apple이 신뢰하는 서명 서비스를 사용하여 개인 맞춤화)을 통하거나 전역 서명된 개체(대상체의 서명이 특정 기기에 바인딩하지 않음)로 인증됩니다.
개인 맞춤화된 신뢰 캐시의 예로 Apple Silicon이 탑재된 Mac에서 현장 진단을 수행하는 데 사용되는 디스크 이미지와 함께 제공되는 캐시가 있습니다. 이 신뢰 캐시는 디스크 이미지와 함께 개인 맞춤화되며 진단 모드로 시동되는 동안 대상 Mac 컴퓨터의 커널에 로드됩니다. 신뢰 캐시는 디스크 이미지 내의 소프트웨어를 플랫폼 권한으로 실행할 수 있도록 합니다.
전역 서명된 신뢰 캐시의 예시가 macOS 소프트웨어 업데이트와 함께 제공됩니다. 이 신뢰 캐시는 소프트웨어 업데이트(업데이트 브레인) 내의 코드 청크가 플랫폼 권한으로 실행되는 것을 허용합니다. 업데이트 브레인은 호스트 시스템이 여러 버전에서 일관된 방식으로 수행할 용량이 부족한 소프트웨어 업데이트를 준비하는 모든 작업을 수행합니다.