크리에이터 소속사로 알고 오신 분들은 반성하세요.
내 얘기임 ㅋㅋ
오늘 공부할 이 SandBox라는 녀석은 보호된 영역 안에서 프로그램을 작동시키는 보안 모델이다.
네이버 지식백과에 의하면....
샌드박스는 미국의 가정집 뒤뜰에서 어린이가 다치는 것을 방지하기 위해 만든 모래통(SandBox)에서 유래했다.
오.. 신기
iOS의 모든 앱들이 이 SandBox 모델을 따르거든요...
iOS는 기본적으로 앱 마다 별도의 파일을 생성하여 공유되지 않도록 한다. 외부의 공격으로부터 앱이 손상된 경우, 시스템과 사용자 데이터의 피해를 최소화한다.
(외부로부터 들어온 공격을 방지하는 것이 아님!! 피해를 최소화 하는 거임!!)
흔히들 iOS의 보안이 좋다고 얘기하는데, 그 이유가 바로 App SandBox를 적용했기 때문임!!
우왕
커널 = 메모리에 상주하는 운영체제의 부분
소프트웨어가 컴퓨터에서 실행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 한다. 운영체제도 마찬가지이다. 컴퓨터의 전원을 켜는 동시에 운영체제가 실행되는데, 운영체제 역시 메모리에 올라간다.
하지만 운영체제는 규모가 너무 커서 그때그때 필요한 부분을 올리게 되는데... 그 영역을 바로 커널이라고 한다!
만약 SandBox가 아닌 앱이 있다면..?
그 앱은 해당 앱을 실행하는 사용자에 대해 모든 권한을 갖고, 사용자가 엑세스 할 수 있는 모든 리소스에 엑세스 할 수 있다.
이렇게 모든 권한과 리소스에 접근할 수 있다면, 많은 기능을 수행할 수 있고 자유로울 것이다.
하지만, 보안 허점이 생긴다면 파멸이다.
해당 취약점을 악용하여 사용자가 할 수 있는 모든 것들을 수행할 수 있게되기 때문이다.
이러한 일을 사전에 방지하고자, iOS의 정책은 사용자 앱의 모든 리소스나 데이터에 접근이 불가능하도록 한다.
App Sandbox는 각 앱마다 취약한 리소스에 대한 액세스를 제한함으로써 공격자로 인한 사용자 데이터의 도난, 손상 또는 삭제 또는 시스템 하드웨어 해킹에 대한 마지막 방어선을 제공한다.
예를 들어, SandBox 앱은 다음 리소스를 사용하기 위해서는 그 의도를 명시해야 한다.
위의 그림을 보면 각각의 앱이 하나의 SandBox화 되어있다.
즉, SandBox라는 하나의 바구니에 앱이 하나씩 들어있다.
SandBox는 앱에 대한 파일, 네트워크 리소스, 환경설정, 하드웨어 등에 대한 앱의 접근을 제한하는 세분화된 제어 집합이라고 할 수 있다.
각각이 개별적으로 존재하기 때문에 한 앱을 사용하는 사용자는 그 앱의 데이터에만 접근이 가능하다. 외부에 있는, SandBox 밖의 데이터에 접근하기 위해서는 SandBox 정책에 따라 접근 권한을 부여받아야 한다.
이런 메시지들이 다 SandBox에 따라 접근 권한을 부여받기 위함이었음!!
SandBox 내부는 이렇게 생겼음.
앱을 설치하는 시점에 각각의 SandBox 디렉토리에 위치시키며, 이 디렉토리는 각 앱의 홈 디렉토리가 된다.
홈 디렉토리는 각각의 역할을 가진 컨테이너 디렉토리들을 하위 디렉토리로 가진다.
앱의 Bundle을 보유하는 컨테이너이다.
실행 가능 파일, plist, Resources(이미지, 사운드 등)등을 함께 그룹화 한다.
읽기 전용, 수정이 필요한 경우에는 Data Container로 옮겨서 작업한다.
하위 디렉토리로 Documents, Library, Temp, System Data가 있다.
(이때 System Data 디렉토리는 iOS11 부터 생김!)
사용자가 직접 디렉토리나 파일을 추가할 수 없으며, 하위 디렉토리를 통해 관리한다.
런타임에 접근을 요청할 수 있는 추가 컨테이너 디렉토리이다.
이번 기회로 배포한 앱 구조와 접근 요청이 필요한 이유에 대해 잘(?) 알게된 것 같다. 이제 UserDefaults랑 KeyChain 공부할 수 있겠다.
쉽지않구만..