iOS의 샌드박스
iOS의 샌드박스(Sandbox)는 애플이 iOS에서 구현한 핵심 보안 메커니즘으로, 각 앱을 격리된 환경에서 실행하여 시스템과 다른 앱들을 보호하는 기술입니다.
주요 특징
앱 격리: 각 앱은 자신만의 독립된 디렉토리 공간에서 실행되며, 다른 앱의 데이터나 시스템 파일에 직접 접근할 수 없습니다.
제한된 파일 시스템 접근: 앱은 자신의 샌드박스 디렉토리(Documents, Library, tmp 폴더 등) 내에서만 파일을 읽고 쓸 수 있습니다.
시스템 리소스 제어: 네트워크, 카메라, 마이크, 위치 정보 등 민감한 시스템 리소스에 접근하려면 사용자의 명시적인 권한이 필요합니다.
작동 방식
앱이 설치되면 iOS는 해당 앱을 위한 고유한 샌드박스를 생성합니다. 이 샌드박스는 다음과 같은 구조를 가집니다:
- Bundle Container: 앱 실행 파일과 리소스가 저장된 읽기 전용 영역
- Data Container: 앱이 생성한 데이터를 저장하는 읽기/쓰기 가능 영역
- iCloud Container: iCloud 동기화를 위한 별도 영역
보안상 이점
샌드박스는 악성 앱이 시스템을 손상시키거나 다른 앱의 데이터를 훔치는 것을 방지합니다. 또한 앱이 예상치 못한 동작을 하더라도 피해를 최소화할 수 있어, iOS의 전반적인 안정성과 보안성을 크게 향상시킵니다.
이러한 샌드박스 시스템 덕분에 iOS는 상대적으로 안전한 모바일 운영체제로 평가받고 있습니다.
기술적 구현 방식
Darwin 커널 레벨 구현: iOS 샌드박스는 macOS에서 사용되는 TrustedBSD MAC(Mandatory Access Control) 프레임워크를 기반으로 Darwin 커널 레벨에서 구현됩니다. 이는 사용자 공간이 아닌 커널에서 직접 접근 제어를 수행하므로 우회가 매우 어렵습니다.
샌드박스 프로파일: 각 앱은 .sb 확장자를 가진 샌드박스 프로파일에 의해 제어됩니다. 이 프로파일은 SBPL(Sandbox Profile Language)로 작성되며, 앱이 접근할 수 있는 파일, 네트워크, 시스템 호출 등을 세밀하게 정의합니다.
세부 디렉토리 구조
/var/mobile/Containers/Data/Application/[UUID]/
├── Documents/ # 사용자 문서, iTunes/iCloud 백업 대상
├── Library/
│ ├── Caches/ # 캐시 파일, 백업 제외
│ ├── Preferences/ # 앱 설정
│ └── Application Support/ # 앱 지원 파일
└── tmp/ # 임시 파일, 시스템이 자동 정리
Entitlements와 권한 시스템
코드 서명과 연동: 샌드박스 권한은 앱의 코드 서명에 포함된 Entitlements를 통해 관리됩니다. 이는 런타임에 변경할 수 없으며, 앱 스토어 심사 시 검증됩니다.
세밀한 권한 제어: 단순히 "파일 접근 허용/거부"가 아니라, 특정 디렉토리의 읽기/쓰기, 특정 네트워크 포트 접근, 특정 시스템 서비스 호출 등을 개별적으로 제어할 수 있습니다.
프로세스 간 통신(IPC) 제한
XPC 서비스: 샌드박스 환경에서 앱 간 통신은 주로 Apple이 제공하는 XPC(Cross Process Communication) 메커니즘을 통해 이루어집니다. 이는 엄격하게 제어되며, 사전에 정의된 인터페이스를 통해서만 가능합니다.
URL Schemes와 Universal Links: 앱 간 데이터 전달은 URL 스킴이나 Universal Links를 통해 제한적으로만 가능하며, 민감한 데이터 전달에는 적합하지 않습니다.
App Groups와 Shared Containers
공유 컨테이너: 같은 개발자의 앱들이나 앱과 익스텐션 간에 데이터를 공유해야 할 때 App Groups 기능을 사용합니다. 이는 별도의 공유 컨테이너를 생성하여 여러 앱이 접근할 수 있게 합니다.
제한된 공유: App Groups도 엄격히 제어되며, 같은 Team ID를 가진 앱들 간에만 가능하고, 명시적으로 Entitlements에 선언되어야 합니다.
보안 모델의 예외사항
- 시스템 앱의 특별 권한: Mail, Safari, Settings 등 Apple의 시스템 앱들은 일반 서드파티 앱보다 더 많은 권한을 가지며, 일부 샌드박스 제한에서 예외입니다.
- 특별한 Entitlements: VPN 앱, 키보드 익스텐션, 네트워크 익스텐션 등은 특별한 권한이 필요하며, 이는 Apple의 별도 승인이 필요합니다.
런타임 보안 강화
- ASLR과 DEP: 샌드박스와 함께 Address Space Layout Randomization과 Data Execution Prevention이 적용되어 메모리 공격을 방어합니다.
- 코드 서명 검증: 앱 실행 중에도 지속적으로 코드 무결성을 검증하여 런타임 코드 조작을 방지합니다.
개발자 관점의 제약사항
- 파일 접근 제한: 앱은 사용자가 명시적으로 선택한 파일(Document Picker를 통해)이나 특별한 권한을 받은 디렉토리만 접근 가능합니다.
- 네트워크 제한: 로컬 네트워크 접근, 특정 포트 사용, 서버 소켓 생성 등이 제한되며, ATS(App Transport Security) 정책도 준수해야 합니다.
- 백그라운드 실행 제한: 샌드박스는 앱의 백그라운드 실행도 엄격하게 제어하여, 무단으로 시스템 리소스를 사용하는 것을 방지합니다.
이러한 복합적인 보안 메커니즘으로 인해 iOS는 모바일 플랫폼 중에서도 특히 강력한 보안성을 자랑하고 있습니다.