아이의 보호를 위한 SandBox,
내 app은 누가 보호해 주나...??
안녕하세요. 오딘(Odin)입니다.
여러분 SandBox가 무엇인지 아시나요??
미국에서 어린 아이를 모래통(SandBox)안에서 놀도록하여 외부적인 위험으로부터 보호해 준다고 합니다.
이처럼 우리가 사용하는 app도 다른 app에서 쉽게 접근할 수 없도록 보호해 주어야겠죠?
그래서 iOS는 앱 하나당 전부 SandBox화 되어 있다고 하는데요
그러면 iOS의 SandBox는 어떻게 생겼고 어떤식으로 작동되는지 알아볼까요~??
App SandBox 란?
App SandBox란, 커널 수준에서 시행되는 macOS에서 제공되는 접근 제어 기술입니다.
앱이 손상될 경우 시스템 및 사용자 데이터에 대한 손상을 포함하도록 설계되었습니다.
Mac App Store를 통해 배포되는 앱은 App Sandbox를 채택해야 합니다.
개발자 ID로 Mac App Store 외부에서 서명 및 배포된 앱은 App Sandbox도 사용할 수 있습니다(대부분의 경우 사용해야 함).
iOS에서 SandBox의 형태
App SandBox 장점
application을 사용하다 보면 데이터를 로컬에 저장, 캐시로 이용 등 데이터의 활용이 활발히 일어나는데
이때, 다른 application이 접근하여 해당 application이 사용하는 데이터가 변질될 가능성이 높아질 것이고
또한, application이 악성코드에 노출되어 해당 사용자의 모든 데이터에 접근하여 바이러스를 을 수도 있게 됩니다.
그래서 SandBox라는 다른 어플리케이션이 접근하지 못하도록 자신만의 구역을 생성하여 이러한 불순한 의도를 갖고 접근할 수 없도록
사전에 차단해 주는 역할을 합니다.
앱이 샌드박스화 되어지면, 자신만의 구역이 생기는 것 뿐만 아니라, 사용자의 시스템 데이터에 접근에도 제한이 생기게 됩니다.
( 샌드박스 이외에 구역들, ex 다운로드폴더, 사진폴더, 등등 )
샌드박스 처리되지 않은 앱은 해당 앱을 실행하는 사용자의 모든 권한을 가지며 사용자가 액세스할 수 있는 모든 리소스에 액세스할 수 있습니다. 해당 앱 또는 연결된 프레임워크에 보안 허점이 있는 경우 공격자는 잠재적으로 해당 허점을 악용하여 해당 앱을 제어할 수 있으며 그렇게 함으로써 공격자는 사용자가 할 수 있는 모든 작업을 수행할 수 있는 능력을 얻습니다.
App SandBox 취약점
App SandBox는 완벽한 보호를 해줄 수는 없습니다.
앱은 여전히 손상될 수 있으며 손상된 앱은 여전히 손상을 줄 수 있습니다.
복잡한 시스템에는 항상 취약성이 있으며 소프트웨어 복잡성은 시간이 지남에 따라 증가합니다.
또한, 보안 코딩을 아무리 잘 작성한다 하더라도 버그가 한번만 통과한다면 공격은 성공하게 됩니다.ㅠㅜ
App SandBox 전략
위와 같은 취약점을 완화하도록 설계된 App SandBox 전략은 두 가지입니다.
1. App SandBoxs는 개발자가 App과 시스템이 어떤식으로 상호작용하게 할 것인지 설정 할 수 있습니다. 그러면 시스템은 App이 작업을 완료하는데 필요한 권한만을 부여하고 그이상은 부여하지 않습니다.
2. App SandBox는 사용자가 such as drag and drop, 대화상자 등 안전하다고 간주되는 친숙한 인터렉션을 통해 app에게 추가 접근 권한을 부여할 수 있도록 제공합니다.
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 Container System
iOS는 다음 그림처럼 App 마다 다음과 같이 전부 SandBox화 되어 있고,
내부는 각 App에 대한 파일, 환경설정, 네트워크 리소스, 하드웨어 등에 대한 앱의 접근을 제한하는 세분화된 제어 집합이라 볼 수 있습니다.
이렇게 App마다 구분되어 있기 때문에 이 App을 사용하는 사용자는 이 App의 데이터에만 접근할 수 있습니다.
해당 app을 설치하는 시점에 SandBox생성과 동시에 Data들은 각각의 Directory에 위치됩니다.
그러면 다음 Container들이 무엇인지 알아볼까요?
1. Bundle Container
- App의 Bundle을 보유하여 파일, info.plist, Resource등을 그룹화 합니다.
- Compile Source(.swift)가 바이너리 형태의 실행 파일로 변환됩니다.
- 라이브러리는 프레임 워크로 그룹화됩니다.
- 스토리보드, Xib, strings등이 변환됩니다.
2. Data Container (= AppData 폴터)
- Documents
- 개발자가 Document, Library, tmp, System Data 외의 직접 디렉토리나 파일을 추가할 수 없기에
Document의 Sub Directory를 통해 관리합니다. - 사용자가 앱을 통해 생성한 문서, 파일 음악 등의 컨텐츠 등을 저장합니다. (ex_ .zip File, Image File 등)
- Document 디렉토리 자체는 삭제 불가능 합니다.
- 설정에 따라 사용자가 직접 파일을 추가하거나 삭제가 가능합니다.
-> Documents 내부에는 삭제, 변경 되어도 무방하고 사용자가 다루는 컨텐츠와 관련된 파일들만 저장합니다.- Realm은 기본적으로 Document경로를 사용하는데, 노출이 될 경우 중요한 정보 보관을 위해서는 Library의 Apllication Support 폴더로 경로를 변경해서 사용하기도 합니다. (Realm 알아보기)
- 개발자가 Document, Library, tmp, System Data 외의 직접 디렉토리나 파일을 추가할 수 없기에
- Library
- 사용자 데이터 파일과 임시 파일을 제외한 모든 파일을 관리합니다.
- 사용자 노출을 피하고 앱의 기능이나 관리에 필요한 파일을 저장합니다.
- Library 내 Caches 폴더에는 앱의 스냅샷 등이 저장됩니다.
- ex. 알람 사운드 등
출처
- AboutAppSandbox
'iOS' 카테고리의 다른 글
[iOS] Firebase Auth (파이어베이스 인증) 전화번호 인증 처리 (0) | 2022.12.12 |
---|---|
[dev/iOS] 쿠키(Cookie), 세션(Session), 토큰(Token) 이란?? (0) | 2022.12.12 |
[iOS] Firebase 를 활용한 push 알림 (Remote Notification) (0) | 2022.10.14 |
[iOS] Firebase 를 활용하기 & crashlytics 분석하기 (1) | 2022.10.11 |
[iOS] 미히 - May I help youth? (청년 지원 정책 Service) - 회고(1) (0) | 2022.10.05 |