Apple Silicon이 탑재된 Mac용 LocalPolicy 파일의 콘텐츠
LocalPolicy는 Secure Enclave로 서명된 Image4 파일입니다. Image4는 ASN.1(Abstract Syntax Notation One) DER로 인코딩된 데이터 구조 형식이며, Apple 플랫폼에서 보안 시동 체인 개체 정보를 설명하는 데 사용됩니다. Image4 기반 보안 시동 모델에서 보안 정책은 Apple 중앙 서명 서버에 서명을 요청하여 실행된 소프트웨어 설치 시 요청됩니다. 정책에서 허용 가능한 경우 서명 서버는 서명된 Image4 파일을 반환하며, 여기에는 여러 가지 4CC(4자리 코드) 배열이 포함됩니다. Boot ROM 또는 LLB와 같은 소프트웨어는 시동 시 이렇게 서명된 Image4 파일 및 4CC를 평가합니다.
운영 체제 간 소유권 이전
OIK(소유자 신원 키) 접근을 ‘소유권’이라고 합니다. 소유권은 정책이나 소프트웨어 변경 후 사용자가 LocalPolicy에 재서명하는 데에 필요합니다. OIK는 SKP(봉인 키 보호)에서 설명된 것과 같은 키 계층으로 보호되며 이때 OIK는 VEK(볼륨 암호화 키)와 같은 KEK(키 암호화 키)로 보호됩니다. 이는 일반적으로 사용자 암호와 운영 체제 및 정책 측정으로 보호된다는 뜻입니다. Mac의 운영 체제에는 단 하나의 OIK가 있습니다. 그리하여 두 번째 운영 체제를 설치하는 경우 해당 운영 체제의 사용자에게 소유권을 이전하기 위해서는 첫 번째 운영 체제의 사용자로부터 명시적인 동의가 필요합니다. 하지만 설치 프로그램이 첫 번째 운영 체제를 통해 실행되는 동안 두 번째 운영 체제의 사용자는 아직 존재하지 않습니다. 해당 운영 체제가 시동되고 설정 지원이 실행되어야 운영 체제의 사용자가 생성됩니다. 그러므로 Apple Silicon이 탑재된 Mac에 두 번째 운영 체제를 설치할 때 두 가지의 새로운 작업이 필요합니다.
두 번째 운영 체제에 LocalPolicy 생성하기
소유권 이전을 위한 ‘사용자 설치’ 준비하기
설치 지원을 실행하고 두 번째 여유 볼륨에 설치를 진행하면 메시지가 나타나 현재 볼륨의 사용자를 복제하여 두 번째 볼륨의 첫 번째 사용자로 지정할지 묻습니다. 사용자가 이를 수락하면 실제로는 KEK(선택된 사용자 암호 및 하드웨어 키에서 파생)에서 생성된 ‘사용자 설치’가 OIK를 암호화하는 데에 사용됩니다. 동시에 OIK는 두 번째 운영 체제로 전달됩니다. 그러면 두 번째 운영 체제의 설치 지원에서 사용자의 암호를 사용해 새로운 운영 체제의 Secure Enclave에 있는 OIK에 접근할지 묻는 메시지가 나타납니다. 사용자가 해당 사용자를 복제하지 않도록 선택해도 사용자 설치가 동일한 방법으로 생성되지만 사용자의 암호 대신 빈 암호가 사용됩니다. 이 두 번째 흐름은 특정 시스템 관리 시나리오를 위한 것입니다. 그러나 여러 볼륨에 설치를 하거나 가장 안전한 방법으로 소유권 이전을 수행하려는 사용자는 항상 첫 번째 운영 체제에서 두 번째 운영 체제로 사용자 복제하기를 선택해야 합니다.
Apple Silicon이 탑재된 Mac의 LocalPolicy
Apple Silicon이 탑재된 Mac 컴퓨터의 경우, 로컬 보안 정책 제어는 Secure Enclave에서 실행되는 응용 프로그램에 위임되어 왔습니다. 이 소프트웨어는 사용자의 자격 증명과 기본 CPU의 시동 모드를 활용하여 보안 정책을 변경할 수 있는 사용자와 시동 환경을 결정합니다. 이렇게 하면 악성 소프트웨어가 사용자에 대한 보안 정책 제어 권한을 다운그레이드하여 더 많은 권한을 얻지 못하도록 방지할 수 있습니다.
LocalPolicy 매니페스트 속성
LocalPolicy 파일에는 특정 Apple CHIP(칩)을 지칭하는 BORD(보드 또는 모델 ID) 또는 ECID(Exclusive Chip Identification) 같이 대부분의 Image4 파일에서 찾아볼 수 있는 일부 아키텍처 4CC가 포함됩니다. 단, 다음의 4CC에서는 사용자 구성이 가능한 보안 정책에만 초점을 맞춥니다.
참고: Apple은 1TR(페어링 One True recoveryOS) 용어를 사용하여 물리적 전원 버튼을 한 번 길게 눌러 실행되는 페어링된 복구용 OS로 시동할 수 있음을 나타냅니다. 이는 NVRAM을 사용하여 실행하거나, 두 번 길게 눌러 실행하거나, 시동 시 오류가 발생할 경우 시행되는 일반적인 복구용 OS 시동과는 다릅니다. 특정한 종류의 물리적 버튼을 누르면 macOS에 침입하는 소프트웨어 전용 공격자가 시동 환경에 접근할 수 없어져 신뢰도가 높아집니다.
lpnh(LocalPolicy nonce 해시)
유형: OctetString(48)
변경 가능한 환경: 1TR, 복구용 OS, macOS
설명:
lpnh
는 LocalPolicy의 재전송 방지에 사용됩니다. 이 해시는 보안 저장 장치 구성 요소에 저장되는 LPN(LocalPolicy nonce)의 SHA384 해시이며, Secure Enclave Boot ROM 또는 Secure Enclave를 통해 접근할 수 있습니다. 원시 nonce는 응용 프로그램 프로세서에 공개되지 않으며, sepOS에만 표시됩니다. LLB가 공격자가 캡처한 이전 LocalPolicy가 유효하다고 믿게 만들려면 공격자는 보안 저장 장치 구성 요소에 값을 넣어야 하며, 이 칩은 재전송하려는 LocalPolicy에 있는lpnh
값과 동일하게 해시되어야 합니다. 소프트웨어 업데이트 중 두 개가 동시에 유효한 경우를 제외하면 일반적으로 시스템에는 유효한 LPN이 하나 있어 업데이트 오류 발생 시 이전 소프트웨어를 다시 시동할 수 있습니다. 모든 운영 체제의 LocalPolicy가 변경되면 정책 전부가 보안 저장 장치 구성 요소에 있는 새로운 LPN에 해당하는 최신 lpnh 값으로 다시 서명됩니다. 이러한 변화는 사용자가 각각 새로운 LocalPolicy로 보안 설정을 변경하거나 최신 운영 체제를 생성하는 경우 일어납니다.
rpnh(RemotePolicy nonce 해시)
유형: OctetString(48)
변경 가능한 환경: 1TR, 복구용 OS, macOS
설명: 이
rpnh
는lpnh
와 같은 방식으로 동작하지만, 나의 찾기 등록 상태가 변경될 때처럼 RemotePolicy가 업데이트되어야만 업데이트됩니다. 이러한 변화는 사용자가 Mac에서 나의 찾기 상태를 변경하는 경우 일어납니다.
ronh(복구용 OS nonce 해시)
유형: OctetString(48)
변경 가능한 환경: 1TR, 복구용 OS, macOS
설명: 이
ronh
는 lpnh와 같은 방식으로 동작하지만, 시스템 복구용 OS의 LocalPolicy에서만 찾을 수 있습니다. 이 해시는 소프트웨어 업데이트 등 시스템 복구용 OS가 업데이트될 때 업데이트됩니다.lpnh
및rpnh
와는 별도의 nonce가 사용되므로 나의 찾기를 통해 기기가 비활성화 상태가 되면 기존의 운영 체제는 비활성화되지만(보안 저장 장치 구성 요소에서 LPN 및 RPN 제거) 시스템 복구용 OS는 계속 시동 가능한 상태로 남습니다. 이러한 방법으로 소유자가 나의 찾기 계정에 사용되는 iCloud 암호를 넣음으로써 운영 체제 통제권을 증명하면 해당 운영 체제가 재활성화될 수 있습니다. 이러한 변화는 사용자가 시스템 복구용 OS를 업데이트하거나 새로운 운영 체제를 생성하는 경우 일어납니다.
nsih(다음 단계 Image4 매니페스트 해시)
유형: OctetString(48)
변경 가능한 환경: 1TR, 복구용 OS, macOS
설명: nsih 필드는 시동된 macOS를 설명하는 Image4 매니페스트 데이터 구조의 SHA384 해시를 나타냅니다. macOS Image4 매니페스트는 iBoot, 정적 신뢰 캐시, 기기 트리, 시동 커널 모음, SSV(서명된 시스템 볼륨) 루트 해시 등 모든 시동 개체에 대한 측정값을 포함합니다. LLB가 지정된 macOS를 시동하도록 설정되면 iBoot에 연결된 macOS Image4 매니페스트 해시가 LocalPolicy의
nsih
필드에 캡처된 것과 일치됩니다. 이러한 방식으로nsih
는 직접 LocalPolicy를 생성한 운영 체제에 대한 사용자의 의도를 담아냅니다. 사용자는 소프트웨어 업데이트를 수행할 때nsih
값을 절대적으로 변경하게 됩니다.
auxp(AuxKC(보조 커널 모음) 정책 해시)
유형: OctetString(48)
변경 가능한 환경: macOS
설명:
auxp
는 UAKL(사용자 승인 KEXT 목록) 정책의 SHA384 해시입니다. 이는 사용자 인증 KEXT만 AuxKC에 포함되도록 AuxKC 생성 시 사용됩니다. 이 필드를 설정하려면smb2
가 전제되어야 합니다. 사용자가 시스템 환경설정의 보안 및 개인정보 보호 패널에서 KEXT를 승인하여 UAKL을 수정하면auxp
값을 절대적으로 변경할 수 있습니다.
auxi(AuxKC(보조 커널 모음) Image4 매니페스트 해시)
유형: OctetString(48)
변경 가능한 환경: macOS
설명: 시스템에서 UAKL 해시가 LocalPolicy의
auxp
필드에서 찾은 값과 일치함을 확인한 후에 LocalPolicy 서명을 담당하는 Secure Enclave 프로세서 응용 프로그램에서 AuxKC에 서명하도록 요청합니다. 그 다음에는 AuxKC Image4 매니페스트 서명의 SHA384 해시가 LocalPolicy에 배치되어 시동 시 이전에 서명된 AuxKC가 뒤섞이고 이를 운영 체제와 일치시킬 가능성을 피할 수 있습니다. iBoot가 LocalPolicy에서auxi
필드를 발견한 경우 저장 장치에서 AuxKC를 로드하고 서명을 검증하려고 시도합니다. AuxKC에 연결된 Image4 매니페시트의 해시가auxi
필드에서 찾은 값과 일치하는지 확인합니다. 어떤 이유로든 AuxKC가 로드되지 않은 경우 시스템은 해당 시동 개체 없이 계속해서 시동되므로, 타사 KEXT가 로드되지 않습니다.auxp
필드는 LocalPolicy에서 auxi 필드를 설정하는 데 필요한 전제 조건입니다. 사용자가 시스템 환경설정의 보안 및 개인정보 보호 패널에서 KEXT를 승인하여 UAKL을 수정하면auxi
값을 절대적으로 변경할 수 있습니다.
auxr(AuxKC(보조 커널 모음) 영수증 해시)
유형: OctetString(48)
변경 가능한 환경: macOS
설명:
auxr
은 AuxKC에 포함된 정확한 KEXT 집합을 나타내는 AuxKC 영수증의 SHA384 해시입니다. AuxKC 영수증은 UAKL의 하위 집합이 될 수 있는데, KEXT가 사용자 승인을 받았더라도 공격에 사용된 것으로 밝혀지면 AuxKC에서 제외될 수 있기 때문입니다. 더욱이 사용자 커널 경계를 무너뜨리는 데 사용될 수 있는 일부 KEXT는 기능 저하를 초래하여 Apple Pay를 사용하지 못하거나 4K 및 HDR 콘텐츠를 재생할 수 없는 결과를 낳을 수 있습니다. 이러한 기능을 이용하기를 원하는 사용자는 AuxKC를 보다 제한적으로 포함하도록 선택할 수 있습니다.auxp
필드는 LocalPolicy에서auxr
필드를 설정하는 데 필요한 전제 조건입니다. 사용자가 시스템 환경설정의 보안 및 개인정보 보호 패널에서 새로운 AuxKC를 구축하면auxr
값을 절대적으로 변경할 수 있습니다.
CustomOS Image4 Manifest Hash(coih)
유형: OctetString(48)
변경 가능한 환경: 1TR
설명:
coih
는 CustomOS Image4 매니페스트의 SHA384 해시입니다. 해당 매니페스트의 페이로드는 XNU 커널이 아닌 iBoot에서 제어 권한 전송에 사용합니다. 사용자가 1TR에서kmutil configure-boot
명령어 라인 도구를 사용하면coih
값이 절대적으로 변경됩니다.
vuid(APFS 볼륨 그룹 UUID)
유형: OctetString(16)
변경 가능한 환경: 1TR, 복구용 OS, macOS
설명:
vuid
는 커널이 루트로 사용해야 하는 볼륨 그룹을 나타냅니다. 이 필드는 주로 정보를 제공하며 보안 제약에 사용되지 않습니다. 사용자가 새로운 운영 체제 설치를 생성하면vuid
가 절대적으로 설정됩니다.
kuid(KEK(Key encryption key) 그룹 UUID)
유형: OctetString(16)
변경 가능한 환경: 1TR, 복구용 OS, macOS
설명:
kuid
는 시동된 볼륨을 가리킵니다. 키 암호화 키는 일반적으로 데이터 보호에 사용됩니다. 각 LocalPolicy에서는 LocalPolicy 서명 키를 보호하는 데 사용됩니다. 사용자가 새로운 운영 체제 설치를 생성하면kuid
가 절대적으로 설정됩니다.
PROT(페어링된 복구용 OS 신뢰하는 시동 정책 측정)
유형: OctetString(48)
변경 가능한 환경: 1TR, 복구용 OS, macOS
설명: 페어링된 복구용 OS TBPM(신뢰하는 시동 정책 측정)은 LocalPolicy의 Image4 매니페스트에 대한 특수 반복적 SHA384 해시 계산입니다.
lpnh
와 같은 nonce는 자주 업데이트될 것이므로 시간 경과에 따른 일관된 측정을 위해 nonce는 제외됩니다. 각 macOS LocalPolicy에서만 찾을 수 있는prot
필드는 macOS LocalPolicy에 부합하는 복구용 OS LocalPolicy를 나타내는 페어링을 제공합니다.
hrlp(Secure Enclave 서명 복구용 OS LocalPolicy 존재)
유형: 불리언
변경 가능한 환경: 1TR, 복구용 OS, macOS
설명:
hrlp
는 위의prot
값이 Secure Enclave로 서명된 복구용 OS LocalPolicy의 측정값인지를 나타냅니다. 그렇지 않은 경우 복구용 OS LocalPolicy는 macOS Image4 파일과 같은 것에 서명하는 Apple 온라인 서명 서버에 의해 서명됩니다.
LOVE(Local Operating System Version)
유형: 불리언
변경 가능한 환경: 1TR, 복구용 OS, macOS
설명:
love
는 LocalPolicy가 생성된 OS 버전을 나타냅니다. 버전은 LocalPolicy 생성 중 다음 상태 매니페스트에서 가져오고, 복구용 OS 페어링 제한 사항을 시행하는 데 사용됩니다.
smb0(보안 멀티 시동)
유형: 불리언
변경 가능한 환경: 1TR, 복구용 OS
설명:
smb0
이 존재하고 참일 경우 LLB는 다음 단계 Image4 매니페스트가 개인 맞춤화된 서명을 필요로 하지 않고 전역적으로 서명되도록 허용합니다. 사용자는 시동 보안 유틸리티 또는bputil
으로 이 필드를 변경하여 부분 보안으로 다운그레이드할 수 있습니다.
smb1(보안 멀티 시동)
유형: 불리언
변경 가능한 환경: 1TR
설명:
smb1
이 존재하고 참일 경우 iBoot는 사용자 설정 커널 모음과 같은 개체가 LocalPolicy와 동일한 키를 사용하여 Secure Enclave로 서명되도록 허용합니다.smb0
이 있어야smb1
이 존재할 수 있습니다. 사용자는csrutil
또는bputil
과 같은 명령어 라인 도구로 이 필드를 변경하여 최소 보안으로 다운그레이드할 수 있습니다.
smb2(보안 멀티 시동)
유형: 불리언
변경 가능한 환경: 1TR
설명:
smb2
가 존재하고 참일 경우 iBoot는 보조 커널 모음이 LocalPolicy와 동일한 키를 사용하여 Secure Enclave로 서명되도록 허용합니다.smb0
이 있어야smb2
이 존재할 수 있습니다. 사용자는 시동 보안 유틸리티 또는bputil
으로 이 필드를 변경하여 부분 보안으로 다운그레이드하고 타사 KEXT를 활성화할 수 있습니다.
smb3(보안 멀티 시동)
유형: 불리언
변경 가능한 환경: 1TR
설명:
smb3
가 존재하고 참일 경우 기기의 사용자는 시스템에 대한 MDM(Mobile Device Management) 제어를 사용하도록 선택합니다. 이 필드가 있으면 LocalPolicy를 제어하는 Secure Enclave 프로세서 응용 프로그램이 로컬 사용자 인증을 필요로 하는 대신 MDM 인증을 허용합니다. 사용자는 시동 보안 유틸리티 또는bputil
으로 이 필드를 변경하여 타사 KEXT와 소프트웨어 업데이트에 대한 관리되는 제어를 활성화할 수 있습니다. (macOS 11.2 이상 버전의 경우 MDM에서는 현재 보안 모드가 완전 보안일 경우 최신 macOS 버전으로 업데이트하는 작업도 수행할 수 있습니다.)
smb4(보안 멀티 시동)
유형: 불리언
변경 가능한 환경: macOS
설명:
smb4
가 존재하고 참일 경우 기기는 Apple School Manager, Apple Business Manager 또는 Apple Business Essentials를 통해 운영 체제에 대한 MDM 제어를 사용하도록 설정됩니다. 이 필드가 있으면 LocalPolicy를 제어하는 Secure Enclave 응용 프로그램이 로컬 사용자 인증을 필요로 하는 대신 MDM 인증을 허용합니다. 이 필드는 MDM 솔루션에서 기기의 일련 번호가 세 서비스 중 하나에 표시된 것을 감지하면 변경될 수 있습니다.
sip0(시스템 무결성 보호)
유형: 64비트 부호 없는 정수
변경 가능한 환경: 1TR
설명:
sip0
는 이전에 NVRAM에 저장된 기존 SIP(시스템 무결성 보호) 정책 비트를 보유합니다. 새로운 SIP 정책 비트가 LLB가 아닌 macOS에서만 사용되는 경우 아래처럼 LocalPolicy 필드를 사용하는 대신 여기에 추가됩니다. 사용자는 1TR에서csrutil
을 통해 SIP를 비활성화하고 최소 보안으로 다운그레이드하여 이 필드를 변경할 수 있습니다.
sip1(시스템 무결성 보호)
유형: 불리언
변경 가능한 환경: 1TR
설명:
sip1
이 존재하고 참일 경우 iBoot는 SSV 루트 해시를 확인할 수 있도록 실패를 허용합니다. 사용자는 1TR에서csrutil
또는bputil
을 사용하여 이 필드를 변경할 수 있습니다.
sip2(시스템 무결성 보호)
유형: 불리언
변경 가능한 환경: 1TR
설명: sip2가 존재하고 참일 경우 iBoot는 커널 메모리를 쓸 수 없음으로 표시하는 CTRR(구성 가능한 텍스트 읽기 전용 영역) 하드웨어 레지스터를 잠급니다. 사용자는 1TR에서
csrutil
또는bputil
을 사용하여 이 필드를 변경할 수 있습니다.
sip3(시스템 무결성 보호)
유형: 불리언
변경 가능한 환경: 1TR
설명: 이
sip3
가 존재하고 참일 경우 iBoot는 boot-args NVRAM 변수에 대해 내장 허용 목록을 실행하지 않으며, 그렇지 않으면 커널에 전달된 옵션이 필터링됩니다. 사용자는 1TR에서csrutil
또는bputil
을 사용하여 이 필드를 변경할 수 있습니다.
인증서 및 RemotePolicy
LocalPolicy 서명 키 생성 및 관리에서 설명한 대로 LocalPolicy Image4는 OIC(소유자 신원 증명서) 및 임베디드 RemotePolicy도 포함합니다.