Apple Silicon에서 가상머신 2개 제한을 우회하는 방법 (2023)
(khronokernel.com)- 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 등록 및 시리얼 번호 오버라이드 가능성을 탐색 예정임
Hacker News 의견들
-
모든 Mac에 동일하게 적용되는 이런 제한은 너무 비합리적임
더 강력한 Mac을 샀다면 더 많은 macOS 인스턴스를 가상화할 수 있어야 함
예를 들어 M5는 2개, M5 Pro는 4개, M5 Max는 8개 정도로 제한을 두는 식이 합리적일 것 같음- 왜 아예 제한을 두는지 모르겠음
하드웨어 성능이 자연스러운 한계이니, 사용자가 알아서 멈출 것임 - 이건 자원 문제라기보다는 비즈니스 결정 같음
저가형 Mac VPS 서비스를 막기 위한 조치일 가능성이 높음 - 이건 하드웨어 한계가 아니라 Tim Cook의 판매량 우려와 싸우는 것임
- Windows 11 Pro 라이선스를 100달러에 사면 VM 제한이 1024개임
Hyper‑V는 하드웨어가 감당할 수 있다면 최대 1024개의 VM을 동시에 실행할 수 있음
내 작은 Windows ARM 노트북에서도 4개는 무리 없이 돌릴 수 있음 - 정말 어이없음
openclaw를 테스트하려고 VM을 돌렸는데, iCloud와 App Store 접근이 제한되어 있어서 당황했음
- 왜 아예 제한을 두는지 모르겠음
-
Mykola Grymalyuk이 이 블로그 글을 쓴 지 2년 후 Apple에 입사했다는 게 흥미로움
“영웅으로 죽거나…”라는 밈이 떠오름 -
M3 이상부터는 Hypervisor.framework / Virtualization.framework를 이용해 nested VM을 돌릴 수 있음
이게 제한을 우회할 수 있다면 꽤 재미있을 것 같음- 기억하기로는 Linux 게스트만 중첩이 가능함
macOS는 한 단계까지만 가능해서, macOS 게스트 안에서 또 다른 macOS 게스트를 띄우는 건 불가능함 - 만약 각 VM이 2개의 VM을 돌릴 수 있다면, 무한 VM 체인을 만들 수도 있겠음
게으르지만 누가 실험해줬으면 함
- 기억하기로는 Linux 게스트만 중첩이 가능함
-
왜 Apple이 이런 제한을 걸었는지 정말 궁금함
- Apple의 비즈니스 모델은 하드웨어와 소프트웨어를 묶어서 파는 것임
하드웨어 판매가 소프트웨어 개발을 지원하므로, 하드웨어를 사지 않은 사람이 macOS를 쓰는 걸 원치 않음 - macOS에는 이런 사용자 제약이 많음
사용자의 자유보다 Apple이 통제권을 유지하는 게 우선임 - 아마도 한 대의 Mac으로 온라인 계정 농장(identity farm) 을 돌리는 걸 막기 위한 조치일 수도 있음
- Apple의 비즈니스 모델은 하드웨어와 소프트웨어를 묶어서 파는 것임
-
커스텀 커널을 컴파일해서 부팅하고 GUI까지 띄울 수 있다는 게 놀라움
-
글 자체는 정말 흥미롭지만, 이런 임의적 제한이 있는 플랫폼을 개발용으로 쓰는 건 이상함
- 지난 20년간 Apple이 진지한 개발 플랫폼이었는지 의문임
많은 개발자가 고급 하드웨어 때문에 쓰지만, macOS는 늘 “거의 Linux지만 iTunes 중심의 회사가 통제하는 OS”였음
- 지난 20년간 Apple이 진지한 개발 플랫폼이었는지 의문임
-
Apple Silicon에서 커스텀 커널 컬렉션을 쓰면 자동 OS 업데이트가 불가능해진다고 함
하지만 이게 오히려 숨은 축복일 수도 있음 -
lume에서도 이게 작동할 수 있는지 궁금함
현재 비슷한 제한이 있음- 가능할 것 같음
lume은 Apple의 Virtualization.framework를 감싼 얇은 래퍼로 알고 있음
- 가능할 것 같음
-
SIP를 끄고 부트 인자를 설정하면 커스텀 커널 없이도 가능하다고 들었음
- 사실이라면 이건 저평가된 팁임
-
Apple이 VM을 2개로 제한했다고?
- 맞음, macOS VM은 라이선스상 2개까지만 가능함
다른 OS 게스트는 제한 없이 실행할 수 있음
- 맞음, macOS VM은 라이선스상 2개까지만 가능함