라떼군 이야기
macOS의 숨겨진 보석: 'sandbox-exec'으로 나만의 보안 감옥 만들기
TL;DR macOS에는 별도 설치 없이 앱을 격리 실행할 수 있는 ‘sandbox-exec’라는 강력한 CLI 도구가 내장되어 있습니다. 사용자는 Scheme 문법으로 작성된 프로필을 통해 특정 앱의 파일 접근이나 네트워크 통신을 정교하게 제어할 수 있습니다. 비록 Apple의 공식 문서화가 부족하지만, 의심스러운 코드를 안전하게 실행하거나 테스트하려는 파워 유저에게는 대체 불가능한 도구입니다.
현대 운영체제 보안의 핵심은 ‘격리(Sandboxing)‘입니다. 하지만 보통 샌드박싱은 개발자가 앱을 배포할 때 미리 적용하는 기술로 여겨지며, 사용자가 실행 시점에 직접 제어하기는 쉽지 않습니다. 이 글에서는 macOS 깊숙한 곳에 숨겨진 sandbox-exec 명령어를 통해, 사용자가 직접 실행 환경을 통제하고 의심스러운 애플리케이션을 안전하게 다루는 방법을 소개합니다.
핵심 내용
sandbox-exec는 사용자가 작성한 프로필 규칙에 따라 애플리케이션의 시스템 리소스 접근을 제한합니다. 프로필은 Scheme(LISP 방언) 문법을 사용하며, 접근 방식은 크게 모든 것을 차단하고 필요한 것만 허용하는 ‘Deny by Default’와, 특정 위험 요소만 막는 ‘Allow by Default’로 나뉩니다. 이를 통해 의심스러운 스크립트의 네트워크 접속을 차단하거나 개인 폴더(문서, 사진 등) 접근을 막을 수 있습니다. 또한 시스템에 내장된 프로필(/System/Library/Sandbox/Profiles)을 참고하거나 Console 앱의 로그를 통해 차단된 작업을 디버깅할 수 있습니다.
기술적 인사이트
이 도구의 기술적 매력은 GUI 보안 도구들이 제공하지 못하는 ‘세밀한 제어권(Granularity)‘에 있습니다. Docker가 OS 가상화에 가깝다면, sandbox-exec는 커널 레벨의 MAC(Mandatory Access Control)을 프로세스 단위로 스크립팅하는 방식입니다. LISP 기반의 설정 파일은 진입 장벽이 높지만, 선언형으로 보안 정책을 코드로 관리(Security as Code)할 수 있다는 점에서 강력합니다. 다만, Apple이 이를 비공식적(undocumented)으로 유지하고 있어 OS 업데이트 시 호환성이 깨질 수 있다는 점은 엔지니어링 관점에서 고려해야 할 트레이드오프입니다.
시사점
보안 연구원이나 개발자는 신뢰할 수 없는 라이브러리나 스크립트를 로컬에서 테스트할 때, 무거운 가상머신(VM)을 띄우는 대신 이 도구로 가볍게 격리 환경을 구축할 수 있습니다. 실무적으로는 특정 CI/CD 파이프라인에서 외부 스크립트를 실행할 때 네트워크 접근을 차단하는 안전장치로 활용하거나, 개인정보 보호가 필요한 작업 시 파일 시스템 접근을 제한하는 래퍼(wrapper) 스크립트를 만들어 활용할 수 있습니다.
편리함과 보안은 항상 트레이드오프 관계에 있지만, sandbox-exec는 그 균형점을 사용자가 직접 정할 수 있게 해줍니다. 비록 Apple의 공식 지원에서 멀어져가는 도구일지라도, 운영체제의 보안 메커니즘을 이해하고 나만의 강력한 안전장치를 구축해보는 것은 매우 흥미로운 시도가 될 것입니다.