iOS/개념

[iOS] iOS SandBox 란?

누알라리 2020. 10. 25. 22:31

개요

 

회사 팀원분들이 말씀하시는거 듣다가 샌드박스라는 개념이 등장해서 정리해보는 글 입니다.

샌드박스 라고는 마인크래프트류 게임이나 유투버들 회사 밖에 몰랐어서 반성하며 글을 시작해 봅니다.

오늘도 Apple Developer 사이트의 글을 번역하며 공부했습니다.

 

developer.apple.com/library/archive/documentation/Security/Conceptual/AppSandboxDesignGuide/AboutAppSandbox/AboutAppSandbox.html#//apple_ref/doc/uid/TP40011183-CH1-SW1

 

About App Sandbox

About App Sandbox App Sandbox is an access control technology provided in macOS, enforced at the kernel level. It is designed to contain damage to the system and the user’s data if an app becomes compromised. Apps distributed through the Mac App Store mu

developer.apple.com


1. App SandBox 란?

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

App이 손상될 경우, 시스템과 사용자 데이터의 손상을 억제하도록 설계되어있습니다.

App Store에서 유통되는 App들은 모두 App SandBox를 적용시켜야만 합니다.

애플 개발자 계정으로 App Store가 아닌 다른곳에서 유통된 App들 또한 App SandBox를 적용시켜야 합니다.

 

2. App SandBox가 적용되고, 안되고의 차이

 

 

 

복잡한 시스템은 항상 취약점을 갖고, 소프트웨어의 복잡도는 계속 증가합니다.

개발자가 아무리 방어코딩을 하며, 버그를 경계하더라도 해커들은 개발자의 방어를 한 번만 뚫어내면 됩니다.

App SandBox가 App을 공격하는 모든걸 막을 순 없지만, 피해를 최소화 할 수는 있습니다.

 

App SandBox가 적용되지 않은 App은 앱을 실행하는 사용자의 모든 권한을 가지며 사용자가 액세스 할 수 있는 모든 리소스에 접근할 수 있습니다.

만약 그 App이나 그 App과 연결된 어떤 프레임워크에 보안 구멍이 있다면, 해커는 잠재적으로 그 구멍을 이용하여 App을 제어할 수 있습니다. 그리고, 해커는 사용자가 할 수 있는 어떤 것이든 할 수 있게 됩니다.

그렇다는건 App을 통해 접근할 수 있는 사용자의 모든 데이터나 시스템 리소스에 접근해서 무작위로 바이러스 등을 퍼뜨릴 수도 있다는 뜻이 되겠네요.

 

3. App SandBox의 전략

그럼 App SandBox는 어떤식으로 피해를 최소한으로 할 수 있다는 걸까요?

 

1.  App SandBox는 개발자가 App과 시스템이 어떤식으로 상호작용하게 할건지 설정할 수 있게 합니다. 그럼 시스템은 App이 하고자하는 일을 끝내는데 필요한 권한만을 부여하고, 그 이상은 부여하지 않습니다.

 

2. App SandBox는 사용자가 드래그 앤 드롭, 대화 상자 등의 친숙한 인터렉션을 통해 투명하게 앱에게 추가 액세스 권한을 부여할 수 있도록 합니다.

 

사용자는 App을 사용하면서 많이 보는 저 Alert 창을 통해 App에 추가 접근 권한을 부여할 수 있습니다.

 

App SandBox는 무적이 아니며, App은 언제나 손상될 위험에 놓여있습니다.

하지만 App이 업무를 수행하는데 필요한 최소한의 권한으로 권한을 제한할 경우 잠재적 피해의 범위는 급격하게 줄어들 수 있습니다.

 

4. App SandBox의 원칙

 

각 앱에 마다 취약한 리소스에 대한 접근을 제한함으로써, App SandBox는 해커가 앱의 보안 구멍을 뚫었을 경우 사용자 데이터의 도난, 손상, 삭제, 시스템 하드웨어의 해킹에 대한 마지막 방어선을 구축합니다.

예를들어, SandBoxed App은 다음 리소스 중 하나를 사용하려면 그 의도를 명시적으로 명시해야 합니다.

 

  • Hardware (Camera, Microphone, USB, Printer)
  • Network Connections (Inbound or Outbound)
  • App Data (Calendar, Location, Contacts)
  • User Files (Downloads, Pictures, Music, Movies, User Selected Files)

프로젝트 정의에서 명시적으로 요청되지 않은 리소스에 대한 접근은 런타임 시 시스템에 의해 거절됩니다.

만일 Sketch App을 만든다면, 개발자는 자신이 만든 App이 절대 Microphone에 대한 접근을 하지 않을거란걸 알고 있고, 그냥 단순히 접근에 대해 요청하지 않으면 된다. 그리고 시스템 또한 App이 그런 요청을 한다면 거절해야 한다는 것도 알고 있는 것이다.

 

반면에 SandBox App은 사용자가 요청하는 특정 리소스에 접근 할 수 있습니다. 이를 위해서 사용자는 간단한 유저 인터렉션 (끌어다 놓기) 등을 사용해서 SandBox를 확장할 수 있고, 다음과 같은 추가 작업들을 자동으로 수행할 수 있습니다.

  • Invoking Services from the Services menu
  • Reading most world readable system files
  • Opening files chosen by the user

App SandBox의 구성은 다음과 같습니다.

1. 사용 권한(entitlement)

2. 컨테이너 디렉토리

3. 사용자 결정 권한

4. 권한 분리

5. 커널 적용

이를 다 함께 사용하면, App SandBox를 사용해서 App 업무 수행에 필요한 만큼의 권한에만 접근시킬 수 있습니다.

 

5. App SandBox가 적용되는 방식

그래서 어떻게 적용된다는 걸까요?

iOS는 각 App 마다 전부 SandBox화 되어 있습니다.

App SandBox는 각 App에 대한 파일, 환경설정, 네트워크 리소스, 하드웨어 등에 대한 앱의 접근을 제한하는 세분화된 제어 집합이라 볼 수 있습니다.

이렇게 App마다 구분되어 있기 때문에 이 App을 사용하는 사용자는 이 App의 데이터에만 접근할 수 있습니다. 외부에 있는 데이터에 접근하려면, SandBox 정책에 따라 접근 권한을 부여받아야 합니다. 반대로 이 App의 데이터도 다른 곳에서 접근할 수 없습니다.

 

 

App의 SandBox 디렉토리는 이런식으로 되어 있습니다.

앱의 설치 시점에 각각의 SandBox Directory에 위치시키며, 이 Directory는 각 앱의 Home Directory가 됩니다. 

보안을 위해 App과 시스템의 상호 작용은 App의 SandBox Directory에 있는 Directory로 제한됩니다.

 

Home Directory는 각각 특별한 역할을 가진 Container Diretory들을 하위 Directory로 가집니다.

각 Container 에는 역할이 있습니다.

1. Bundle Container

  • App의 Bundle을 보유합니다.

2. Data Container

  • App 및 사용자 데이터를 보유, 앱이 데이터를 정렬화 하고 그룹화 하는데 사용할 수 있는 여러 하위 디렉토리로 나뉩니다.

3. iCloud Container

  • 런타임에 접근을 요청할 수 있는 추가 컨테이너 디렉토리.

 

마무리

iOS SandBox는 시스템 손상이나 데이터 소실을 최소한으로 방지하고자 하는 커널 수준의 맥 OS의 접근 제어 기술이었습니다. 아무 생각 없이 접근 요청만 코딩할 줄 알았지, 접근 제어 기술, SandBox 이라는 명칭으로 쓰이고 있다는 것도 처음 안 사실이네요.

 

다음 포스팅은 App 사이닝, 프로비저닝에 관한 내용으로 정해놨는데, 그 내용을 정리해둔다면 더 잘 이해할 수 있을듯 합니다. 개발자 문서에 내용은 더 많지만 라이트하게 정리하려면 이정도 일 것 같아 이만 마무리 하겠습니다~!