macOS에서 안전하게 커널 확장하기
macOS 11부터, 타사 KEXT(커널 확장 프로그램)를 활성화한 경우 요청 시 KEXT가 커널에 로드되지 않습니다. 대신 KEXT가 시동 프로세스 동안 로드되는 AuxKC(보조 커널 모음)에 병합됩니다. Apple Silicon이 탑재된 Mac에서 AuxKC의 측정값은 LocalPolicy로 서명되며, 이전 하드웨어의 경우 AuxKC가 데이터 볼륨에 남아있게 됩니다. AuxKC를 다시 빌드하려면 변경 사항을 커널에 로드하기 위해 사용자의 승인 및 macOS 재시동이 필요하며 보안 시동을 부분 보안으로 구성해야 합니다.
중요사항: macOS에서 KEXT는 더 이상 권장되지 않습니다. KEXT는 운영 체제의 무결성과 신뢰성을 위협하기 때문에 Apple은 사용자가 커널 확장이 필요 없는 솔루션을 우선적으로 선택하기를 추천합니다.
Apple Silicon이 탑재된 Mac의 커널 확장 프로그램
Apple Silicon이 탑재된 Mac에서 커널 확장 프로그램을 사용하도록 설정하려면 시동 시 전원 버튼을 눌러 1TR(One True Recovery) 모드에 진입한 다음, 부분 보안으로 다운그레이드하고 체크상자를 선택하여 KEXT를 확실하게 활성화해야 합니다. 또한, 이 작업을 수행하려면 관리자 암호를 입력하여 다운그레이드를 승인해야 합니다. 1TR 및 암호 요구 사항이 조합되어 macOS 내에서 출발하는 소프트웨어 전용 공격자가 macOS에 KEXT를 심고 이를 악용하여 커널 권한을 얻기가 어려워집니다.
사용자가 KEXT를 로드하도록 승인한 후에 앞서 언급한 사용자 승인 커널 확장 프로그램 로딩 흐름이 KEXT 설치를 승인하는 데 사용됩니다. 이 흐름에 사용되는 승인은 LocalPolicy에서 UAKL(사용자 승인 KEXT 목록)의 SHA384 해시를 캡처하는 데 활용되기도 합니다. 그러면 kmd
(커널 관리 데몬)가 UAKL에서 찾은 KEXT만 검증하고 AuxKC에 포함시킵니다.
SIP(시스템 무결성 보호)가 활성화된 경우 각 KEXT의 서명이 확인되고 나서 AuxKC에 포함됩니다.
SIP가 비활성화되면 KEXT 서명은 실행되지 않습니다.
이 방식은 Apple Developer Program의 일원이 아닌 개발자 또는 사용자가 서명되지 않은 KEXT를 테스트할 수 있는 최소 보안 흐름을 허용합니다.
AuxKC가 생성되면 AuxKC 측정값이 Secure Enclave로 보내져 서명되어 시동 시 iBoot에서 평가할 수 있는 Image4 데이터 구조에 포함됩니다. AuxKC 구조의 일부로 KEXT 영수증도 함께 생성됩니다. 이 영수증은 AuxKC에 실제로 포함되는 KEXT 목록을 포함하는데, 금지된 KEXT가 발생하면 이 집합이 UAKL의 하위 집합이 될 수 있기 때문입니다. AuxKC Image4 데이터 구조의 SHA384 해시와 KEXT 영수증은 LocalPolicy에 포함됩니다. AuxKC Image4 해시는 시동 시 iBoot가 시행하는 추가적인 확인에 사용되어 최신 LocalPolicy로 이전 Secure Enclave에서 서명한 AuxKC Image4 파일을 시동할 가능성이 없는지 확인합니다. KEXT 영수증은 Apple Pay와 같은 하위 시스템에서 사용되어 현재 로드된 KEXT 중에 macOS의 신뢰성을 훼손하여 KEXT가 있는지 파악합니다. 만약 있다면 Apple Pay 기능이 비활성화됩니다.
시스템 확장 프로그램
macOS 10.15 버전은 개발자가 커널 수준이 아닌 사용자 공간에서 실행되는 시스템 확장 프로그램을 설치하고 관리하여 macOS의 기능을 확장할 수 있도록 합니다. 시스템 확장 프로그램은 사용자 공간에서 실행되어 macOS의 안정성과 보안을 향상합니다. KEXT에는 기본적으로 전체 운영 체제에 대한 전체 접근 권한이 있지만 사용자 공간에서 실행되는 확장 프로그램의 경우 지정된 기능을 수행하는 데 필요한 권한만 부여됩니다.
개발자는 KEXT를 작성할 필요 없이 DriverKit, EndpointSecurity 및 NetworkExtension을 포함한 프레임워크를 사용하여 USB 및 휴먼 인터페이스 드라이버, 엔드포인트 보안 도구(데이터 손실 방지 또는 기타 엔드포인트 에이전트 등), VPN 및 네트워크 도구에 쓰기를 수행할 수 있습니다. 이러한 API 사용에 장점이 있거나, 해당 API로 전환하고 커널 확장 프로그램에서 벗어날 수 있는 강력한 로드맵이 있는 경우에만 타사 보안 에이전트를 사용해야 합니다.
사용자 승인 커널 확장 프로그램 로딩
보안을 향상하기 위해 macOS 10.13 버전이 설치되어 있거나, 설치한 후에 커널 확장 프로그램을 로드할 때 사용자 동의가 필요합니다. 이 프로세스를 사용자 승인 커널 확장 프로그램 로딩(User-Approved Kernel Extension Loading)이라고 합니다. 커널 확장 프로그램을 승인하려면 관리자 권한이 필요합니다. 다음과 같은 경우에는 커널 확장 프로그램 승인이 필요하지 않습니다.
macOS 10.12 또는 이전 버전을 실행하는 Mac에 커널 확장 프로그램이 설치된 경우
이전에 승인된 확장 프로그램을 대치하는 경우
Mac이 복구용 OS에서 시동될 때 사용 가능한
spctl
명령어 라인 도구를 사용하여 사용자 동의 없이 로드를 허용한 경우MDM(모바일 기기 관리) 구성을 사용하여 로드를 허용한 경우
macOS 10.13.2부터, 사용자는 MDM을 사용하여 사용자 동의 없이 로드되는 커널 확장 프로그램 목록을 지정할 수 있습니다. 이 옵션을 사용하려면 Apple School Manager, Apple Business Manager 또는 사용자가 수행한 MDM 등록을 통해 MDM에 등록된 macOS 10.13.2 버전을 실행하는 Mac이 필요합니다.