Sandbox??? 모래상자?? 가 뭐지??

Sandbox는 미국에서 어린이들이 놀 수 있는 모래가 가득한 간의 놀이터에서 유래된 말이라고 함!!
🎯 App Sandbox란?

앱 샌드박스는 커널 수준에서 강제 적용되는 맥 OS의 접근 제어 기술임.
커널 : 컴퓨터와 전원을 켜면 운영체제는 이와 동시에 수행된다. 한편 소프트웨어가 컴퓨터 시스템에서 수행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 한다. 마찬가지로 운영체제 자체도 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라가야 한다. 하지만, 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심할 것이다. 따라서 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다. 이때 메모리에 상주하는 운영체제의 부분을 커널이라 한다. 또 이것을 좁은 의미의 운영체제라고도 한다. 즉 커널은 메모리에 상주하는 부분으로써 운영체제의 핵심적인 부분을 뜻한다. 이에 반에 넓은 의미의 운영체제는 커널뿐 아니라 각종 시스템을 위한 유틸리티들을 광범위하게 포함하는 개념이다. (보통은 운영체제라고 하면 커널을 말하게 된다.)
앱 샌드박스는 권한을 통해 요청된 리소스에 대한 앱의 액세스를 제한하여 시스템 리소스와 사용자 데이터를 보호한다고 함.
그런데 앱 샌드박스는 앱에 들어오는 공격을 사전에 차단하는 기술이 아니라!! 공격이 성공했을 때 발생하는 피해를 최소화할 수 있도록 도와주는 기술임!!
공식문서에도 앱이 손상된 경우 시스템 및 사용자 데이터의 손상을 억제하기 위해 ~~라는 말이 나옴
App Store에서 유통되는 모든 App들은 모두 App Sandbox를 적용해야 하고~!!
애플 개발자 계정으로 앱 스토어가 아닌 다른 곳에서 유통된 앱 또한 앱 샌드박스를 적용시켜야 함!
🎯 App Sandbox의 전략
앱 샌드박스가 발생하는 피해를 최소화한다는 말이 뭘까? 🤔
앱 샌드박스는 개발자가 앱이 시스템과 어떻게 상호작용할지 정의할 수 있도록 해주고 있음. 그러면 시스템은 App이 하고자 하는 일을 끝내는데 필요한 권한만을 부여하고, 그 이상은 부여하지 않음!!
또한, 앱 샌드박스는 사용자에게 투명하게 추가적인 접근을 허용하고 있음. 여기서 투명하다는 것은 사용자 모르게 권한들이 허용되는 것이 아니라, 사용자 인터렉션을 통해 사용자에게 알리는 것을 의미함!!
인터렉션 - 드래그 앤 드롭, 대화 상자 등

사용자는 앱을 사용하면서 보는 Alert 창을 통해 App에 추가 접근 권한을 부여할 수 있음!!
맨날 보던 접근 권한 허용 Alert창.. 엄청 귀찮았는데 다 ~ 우리를 위한 거였음 ㅠ
앱 샌드박스는 모든 공격을 막을 수 없고, 언제나 손상될 수 있음!!
하지만 앱이 업무를 수행하는데 필요한 최소한의 권한으로 제안할 경우 잠재적 피해의 범위가 줄어들기 때문에 앱 샌드박스가 발생하는 피해를 최소화하는 것임!!!
🎯 App Sandbox의 적용 우뮤

샌드박스가 적용되지 않은 앱을 실행하는 사용자가 앱에 대한 모든 권한을 가지게 됨!!
보안이 한번 뚫리면 그 앱은 공격한 사람이 원하는 데로 할 수 있게 된다는 말임.
샌드박스를 이용하면 공격자에게 앱의 제어가 넘어가도 앱은 앱 샌드박스에 의해 허용된 영역만 접근할 수 있기 때문에 허용되지 않는 영역은 안전하게 보호할 수 있음!!
🎯 App Sandbox의 원칙
각 앱 마다 취약한 리소스에 대한 접근을 제한함으로써, App Sandbox는 공격자가 앱의 보안을 뚫었을 경우 사용자의 데이터의 도난, 손상, 삭제, 시스템 하드웨어의 해킹에 대한 마지막 방어선을 구축함!!
샌드박스를 사용한 앱은 다음 리소스 중 하나를 사용하려면 그 의도를 반드시 명시해야 함!!
- 하드웨어 (카메라, 마이크, USB, 프린터)
- 네트워크 연결 (인바운드 또는 아웃바운드)
- 앱 데이터 (캘린더, 위치, 연락처)
- 사용자 파일 (다운로드, 사진, 음악, 영화, 사용자 선택 파일)
프로젝트 정의에서 명시적으로 요청되지 않은 리소스에 대한 접근은 런타임 시 시스템에 의해 거절됨!!
🎯 App Sandbox의 적용
iOS 각 앱마다 모두 샌드박스 화 되어 있음!!

앱 샌드박스는 각 앱에 대한 파일, 환경설정, 네트워크 등에 대한 앱의 접근을 제한하는 세분화된 제어 집합임.
위와 같이 앱마다 구분되어 있기 때문에 이 앱을 사용하는 사용자는 이 앱의 데이터에만 접근할 수 있음. 외부에 있는 데이터에 접근하려면, 샌드박스 정책에 따라 접근 권한을 부여받아야 함. 반대로 이 앱의 데이터도 다른 곳에서 접근할 수 없음!!!

위 이미지는 앱 샌드박스 리렉토리임
앱의 설치 시점에 각각의 샌드박스 디렉토리에 위치시키며, 이 디렉토리는 각 앱의 홈 디렉토리가 되고 보안을 위해 앱과 시스템의 상호작용은 앱의 샌드박스 디렉토리에 있는 디렉토리를 제한됨.
홈 디렉토리는 각각의 특별한 역할을 가진 컨테이너 디렉토리들을 하위 디렉터리로 가짐.
각 컨테이너에는 또한 역할이 있음.
1. Bundle Container
- App의 Bundle을 보유함.
- 실행 가능 파일, plist, Resources(이미지, 사운드 등)등을 함께 그룹화함.
- 읽기 전용, 수정이 필요한 경우에는 Data Containter로 옮겨서 작업함.
2. Data Container
- App 및 사용자 데이터를 보유, 앱이 데이터를 정렬화 하고 그룹화하는 데 사용할 수 있는 여러 하위 디렉토리로 나뉨.
- 하위 디렉토리로 Documents, Library, Temp, System Data(iOS 11부터 생김)가 있음.
- 사용자가 직접 디렉터리나 파일을 추가할 수 없으며, 하위 디렉토리를 통해 관리함.
- Documents : 앱을 통해 생성한 문서나 데이터 등을 저장
- Library : 유저 데이터 파일 및 임시 파일을 제외한 모든 파일을 관리
- Temp : 현재 앱을 실행하는 동안만 필요하고 다음 앱 실행 시까지 유지할 필요 없는 임시 파일 저장 공간
3. iCloud Container
- 런타임에 접근을 요청할 수 있는 추가 컨테이너 디렉토리.
앱을 실행할 때마다 왜?? 접근 권한을 묻는지 가볍게만 생각하고 넘겼는데 그게 샌드박스 전략이었음!!
접근 요청을 코드로 한번 작성해 봐야겠음 ~!!!
참고 및 인용
https://docfriends.github.io/DevStrory/2022-02-09/sandbox/
'iOS' 카테고리의 다른 글
| [iOS] iOS 앱에서 데이터를 저장하는 방법 (0) | 2024.05.08 |
|---|---|
| [iOS] cocoapods 설치 오류 해결 requires Ruby version >= 2.7.0 (1) | 2024.01.16 |
| [iOS] Remove Reference? Move to Trash? 뭘 선택해야 하지? (3) | 2023.11.20 |