본문 바로가기

난 iOS개발자/iOS

[iOS] Sandbox

728x90

App SandBox란

App SandBox란 커널 수준에서 강제 적용되는 맥 OS의 접근 제어 기술입니다.

App이 손상될 경우, 시스템과 사용자 데이터의 손상을 억제하도록 설계되어있습니다.
App Store에서 유통되는 App들은 모두 App SandBox를 적용시켜야만 합니다.

App Sandbox는 각 앱마다 취약한 리소스에 대한 액세스를 제한함으로써 공격자로 인한 사용자 데이터의 도난, 손상 또는 삭제 또는 시스템 하드웨어 해킹에 대한 마지막 방어선을 제공합니다.

파일 시스템 격리: 각 앱은 고유한 디렉토리 내에 파일을 저장하고 액세스할 수 있습니다. 다른 앱의 파일에 직접 액세스할 수 없으며, 사용자의 개인 데이터를 보호합니다.

키 체인: 앱은 감성적이고 중요한 정보를 안전하게 저장해야 합니다. 이러한 정보는 키 체인이라는 안전한 저장소에 저장됩니다. 다른 앱은 이 정보에 액세스할 수 없습니다.

네트워크 격리: 앱은 인터넷을 통해 통신할 수 있지만, 시스템 수준에서 제어되며, 사용자의 사적인 데이터를 무단으로 전송하지 않도록 합니다.

메모리 격리: 각 앱은 고유한 메모리 공간을 할당받으며, 다른 앱의 메모리에 접근할 수 없습니다.

권한 관리: 앱은 사용자의 명시적인 동의 없이 카메라, 위치, 연락처 등에 액세스할 수 없으며, 권한을 관리하기 위한 시스템이 있습니다.

 

SandBox 앱은 다음 리소스를 사용하기 위해서는 그 의도를 명시해야 합니다.

  • 하드웨어 (카메라, 마이크, USB, 프린터)
  • 네트워크 연결 (인바운드 또는 아웃바운드)
  • 앱 데이터 (캘린더, 위치, 연락처)
  • 사용자 파일 (다운로드, 사진, 음악, 영화, 사용자 선택 파일)

구조

 

위의 그림을 보면 각각의 앱이 하나의 SandBox화 되어있다.
하나의 앱을 사용하는 사용자는 그 앱의 데이터에만 접근이 가능하다. 외부에 있는, SandBox 밖의 데이터에 접근하기 위해서는 SandBox 정책에 따라 접근 권한을 부여받아야 한다.

앱을 설치하는 시점에 각각의 SandBox 디렉토리에 위치시키며, 이 디렉토리는 각 앱의 홈 디렉토리가 된다.

홈 디렉토리는 각각의 역할을 가진 컨테이너 디렉토리들을 하위 디렉토리로 가진다.

Bundle Container
앱의 Bundle을 보유하는 컨테이너이다.
실행 가능 파일, plist, Resources(이미지, 사운드 등)등을 함께 그룹화 한다.

읽기 전용, 수정이 필요한 경우에는 Data Container로 옮겨서 작업한다.

Data Container
하위 디렉토리로 Documents, Library, Temp, System Data가 있다.

요약하자면, Sandbox는 iOS 앱이 다른 앱과 시스템 전반에 영향을 미치지 않으면서 안전하게 실행되도록 보장합니다.

728x90