- Apple Silicon 기반 macOS는 Virtualization.framework로 실행 가능한 macOS VM을 최대 2개로 제한하며, 이는 macOS 사용권 계약 조항에 근거함
- 분석 결과 이 제한은 XNU 커널 내부의 비공개 변수
hv_apple_isa_vm_quota로 관리되며, 부트 인자를 통해 재정의 가능함이 확인됨 -
System Integrity Protection의
AppleInternal체크를 우회하기 위해 개발용 커널(Development Kernel) 을 빌드·부팅하는 절차가 사용됨 - 설정 후 UTM, Viable, Parallels 등에서 최대 9개의 macOS VM을 동시에 실행하는 데 성공함
- Apple이 커널 내부에 VM 제한 재정의 기능을 남겨둔 점이 주목되며, 향후 자동화 도구나 커널 확장을 통한 개선 가능성이 제시됨
Apple Silicon의 macOS 가상머신 2개 제한 해제 과정
- Apple Silicon 기반 Mac에서 Virtualization.framework를 이용해 macOS 가상머신을 실행할 때 최대 2개까지만 구동 가능한 제한이 존재함
- 이 제한은 macOS 소프트웨어 사용권 계약(SLA) 2.B.iii 조항에 따라 설정되어 있음
- 해당 조항은 개발, 테스트, macOS Server 사용, 비상업적 개인 용도에 한해 최대 2개의 macOS 인스턴스 실행을 허용함
- 분석 결과, 이 제한은 사용자 공간이 아닌 커널(XNU)의 비공개 영역에 구현되어 있음
- Intel 커널에는 동일한 코드가 없으며, Apple Silicon 커널의
hv_vm_*함수군이 가상화 스택을 담당함 -
hv_init()초기화 코드 내의hv_apple_isa_vm_quota변수가 VM 수를 관리하며, VM 생성·삭제 시 증감 처리됨 - 커널에는
hypervisor=및hv_apple_isa_vm_quota=부트 인자가 존재하며, 후자는 VM 제한을 재정의할 수 있음
- Intel 커널에는 동일한 코드가 없으며, Apple Silicon 커널의
- 릴리스 커널에서는
hypervisor인자 대신 System Integrity Protection(SIP) 의AppleInternal체크로 제한되어 있음-
CSR_ALLOW_APPLE_INTERNAL플래그가 활성화된 경우에만hv_apple_isa_vm_quota인자가 적용됨 - 이를 우회하기 위해 Apple의 개발용 커널(Development Kernel) 을 부팅하는 방법이 사용됨
-
개발용 커널 컬렉션 빌드
- Apple Developer 사이트에서 Kernel Debug Kit(KDK) 를 다운로드해 설치해야 함
- KDK는 호스트 macOS 빌드와 정확히 일치해야 하며, 불일치 시 커널·kext 링크 및 부팅 오류 발생 가능
-
uname명령으로 커널 아키텍처를 확인한 뒤,kmutil create명령을 이용해 개발용 커널 컬렉션(VirtualMachine.kc) 을 생성함- 예시에서는 macOS 14.0 (빌드 23A5301h) 및 T6020 커널을 사용
-
--variant-suffix development옵션으로 개발용 커널을 지정하고, 여러 시스템 확장 저장소를 포함시킴
개발용 커널 부팅 설정
- Mac을 종료 후 복구 모드(recoveryOS) 로 부팅하여 터미널에서 다음 설정을 수행함
-
System Integrity Protection 비활성화 (
csrutil disable) -
부트 인자 제한 해제 (
bputil --disable-boot-args-restriction) -
커스텀 커널 컬렉션 지정 (
kmutil configure-boot) -
부트 인자 설정 (
nvram명령으로 전달)-
kcsuffix=development: 개발용 커널 부팅 -
hypervisor=0x1: 가상화 스택의 특수 기능 활성화 -
hv_apple_isa_vm_quota=0xFF: VM 최대 개수를 255로 설정
-
-
System Integrity Protection 비활성화 (
- 재부팅 후
sysctl kern.osbuildconfig및nvram boot-args로 적용 여부를 확인 가능
다중 VM 실행 결과
- 설정 완료 후 UTM, Viable, Parallels 등 Virtualization.framework 기반 솔루션으로 테스트 수행
- M2 Pro MacBook Pro에서 동시에 9개의 macOS VM을 실행하는 데 성공
- 시스템은 여전히 테스트 가능한 수준으로 동작함
기능 추가 시점 및 내부 구조
-
macOS 12 Monterey부터
hv_apple_isa_vm_quota부트 인자가 Virtualization 스택과 함께 추가됨- 이후 버전(macOS Sonoma 포함)에서도
AppleInternal체크는 여전히 존재 - Apple이 XNU 내부에 여러 비공개 기능을 유지하고 있음이 확인됨
- 이후 버전(macOS Sonoma 포함)에서도
OS 업데이트 시 주의사항
- 커스텀 커널 컬렉션 사용 시 자동 OS 업데이트 기능이 비활성화됨
- 업데이트 후 오류가 발생하므로, 기본 커널 컬렉션으로 복원해야 함
- 복구 모드에서
bputil로 새 부트 정책을 생성하면 기본 커널로 복귀 가능 - 예:
bputil --full-security또는--disable-boot-args-restriction옵션 사용
마무리 및 향후 개선 아이디어
- Apple의 VM 제한 구현 방식을 확인하고, 비공식적이지만 제한 해제 방법을 실험적으로 검증함
- Virtualization 팀이 공식 문서화하지 않았음에도 VM 제한 재정의 기능을 커널에 남겨둔 점이 주목됨
- 향후 개선 구상
-
KC 빌드 및 부팅 자동화 도구 개발
- 호스트별 개발용 커널 컬렉션 자동 생성 및 복구 모드 설정 지원
-
커널 확장(kext) 을 통한
hv_apple_isa_vm_quota변수 재정의 기능 구현- 개발용 커널 부팅 없이 제한 해제 가능성 탐색
-
KC 빌드 및 부팅 자동화 도구 개발
- 다음 연구 주제로 Apple Silicon VM의 DEP 등록 및 시리얼 번호 오버라이드 가능성을 탐색 예정임