본문 바로가기

iOS

App Sandbox 그리고 Files

728x90

이 글을 쓰고 있는 지금이 iOS 15 (이고 iOS 15.6.1 설치하라고 알림 옴 ㄷ ㄷ) 인데, iOS 11에 새로 나온 앱 중에 하나가 files이다.

갑자기 왜 files를 언급하냐면 .. 이 앱이 나오게 된 이유가 .. (뭐 여러 이유가 있을 수 있긴한데 .. 나도 애플의 마음을 모르니까 ..) 애플의 보안정책의 연장선에서 나오게 된 것이다 ..

 

제법 흥미진진 .. 하지 않다면 어쩔 수 없지만 .. 애플의 샌드박스 정책은 무엇이고 그래서 이 파일 앱이 무엇을 하는 것인지 알아보자 ~ ..

 

Sandbox

샌드박스란, 미국에서 어린 아이를 보호하기 위해서 모래통을 만들고 그 안에서만 놀도록 하는 것에서 유래된 보안 모델을 의미한다.

iOS는 기본적으로 앱 마다 별도의 파일을 만들고 서로 공유되지 않도록 하여 외부로부터 접근을 제한한다. 이렇게 보호하여 앱이 부정적으로 조작되는 것을 막는 보안 형태를 말한다.

 

Sandbox 유무의 차이

샌드박스가 있으면 얼마나 보안이 되는데? 라고 생각할 수 있다.

샌드박스가 아닌 앱의 경우 해당 앱을 실행하는 사용자는 모든 권한을 갖게 된다. 사용자가 모든 리소스에 접근할 수 있는 것이다.

 

이렇게 모든 앱에 접근할 수 있게 되면 많은 기능들을 할 수 있고 앱에 연결된 모든 프레임워크 등에 보안 허점이 있는 경우 공격자는 그것을 취약점으로 악용할 수 있으며 공격자가 사용자가 수행할 수 있는 모든 작업을 수행할 수 있다.

 

이런 보안 이슈로 인해 iOS는 사용자가 앱의 모든 리소스, 데이터에 접근이 불가하다.

 

iOS App Sandboxes

App Sandbox 전략은 크게 두가지이다.

1. App Sandbox를 사용하면 앱이 시스템과 상호 작용하는 방식을 설명할 수 있다.
시스템에서 작업을 완료 하는데 필요한 접근 권한을 앱에 부여하는 것이다.

2. App Sandbox를 사용하면 열기 및 저장, drag and drop 등의 친숙한 사용자 상호 작용을 통해 앱에 투명하게 추가 접근 권한을 부여할 수 있다.

 

앱 하나마다 Sandbox화가 되어 있다.

iOS는 앱 설치시마다 각 앱을 Sandbox에 저장한다. 이 때 환경 설정 및 데이터도 저장이 된다.

Sandbox는 파일, 환경 설정, 네트워크 리소스, 하드웨어 등에 대한 앱의 접근을 제한하는 세분화 되어 있는 제어 집합이라고 보면 된다. 그래서 데이터를 분리하여 고립시키고 보안 침해의 가능성을 낮출 수 있는 것이다.

 

위 그림은 앱의 샌드박스 디렉토리를 보여주는 그림이다.

 

보안을 위해 iOS 앱과 파일 시스템의 상호 작용은 앱의 sandbox 디렉토리에있는 디렉토리로 제한된다.

 

새 응용 프로그램을 설치하는 동안 설치 프로그램은 sandbox 디렉토리 내에 응용 프로그램용 컨테이너 디렉토리를 생성한다. 이렇게 만들어진 컨테이너 디렉토리에는 특정 역할이 있다.

 

- Bundle 컨테이너 디렉토리는 앱의 Bundle을 보유하고

- Data 컨테이너 디렉토리는 앱과 사용자에 모두에 대한 데이터를 보유한다.

 

Bundle Container

경로

Bundle.main.bundlePath

 

특징

  • Bundle Container는 파일 시스템 내 하나의 디렉토리이다.
  • 실행 가능 파일, Info.plist, Resources (이미지, 사운드, strings 등) 등을 함께 그룹화한다.
  • 읽기 전용이므로 수정이 필요한 경우 데이터 컨테이너로 옮겨서 작업한다.
  • iTunes, iCloud에 백업 되지 않는다.

 

Bundle 디렉토리 내부 파악

  • 패키지 내용 보기를 통해 안의 내부 파일들을 볼 수 있다.
  • Compile Sources 들이 바이너리 형태의 실행 파일로 변하게 된다.
  • 라이브러리는 프레임워크에 해당한다.
  • Storyboard, xib, strings 파일들도 있고, Assets에 들어 있는 Resources 들도 포함되어 있다.

 

Data Container 

경로

NSHomeDirectory()

 

특징

  • 기본 디렉토리 - Document, Library, tmp, SystemData
  • 사용자가 직접 디렉토리나 파일을 추가할 수 없으며, Documents같은 서브디렉토리를 통해 관리.

 


Files 

🟢 위의 샌드박스 정책을 통해서 알 수 있는 것은, 하나의 앱은 그 앱 안의 데이터 이외에는 접근을 하지 못한다는 것이다. 

이 때, 사용자 데이터는 접근할 수 있을까? ❌❌❌

사용자 데이터는 앱의 외부에 있다. 그러므로 Sandbox화가 된 앱은 사용자 데이터에 접근할 수 있다.

 

🤔 엥 근데 나 내 앱에서 사진 갖고 오는데 ??

이건 앞에 말한 것과 같이 사용자가 접근 권한을 명시적으로 허용했을 때만 최소한으로 접근할 수 있다.

여전히 민감한 데이터는 접근 자체가 불가하다.

 

 

이러한 폴더들이 모두 App에 대한 데이터라고 할 수 있다.

 

App은 Sandbox 구조로 되어 있고 사용자가 만든 문서들은 외부에 저장이 되어 있다.

굉장히 불편한 .. 구조라는 것을 알 수 있는데 .. 이걸 조금이라도 편하게 해결한 것이 Files 앱이다.

 

Files 앱이 나오기 전까지는 앱에서 만든 문서에 대해 앱의 파일 공간에만 저장이 되었고, 외부에서 접근을 할 수 없었다.

앱이 외부에 있는 데이터들은 접근 권한을 통해서 제한이 있더라도 접근이 가능했지만,

앱 내부에 있는 데이터들은 외부에서 접근할 수 없었다.

 

그러나 iOS 11부터 파일 앱이 나왔다. (Mac의 Finder와 비슷)

이 파일 앱은 써드파티 앱과 연동해서 사용할 수도 있고 검색, 정렬 등 다양한 기능을 갖고 있다. 그리고 iCloud와 연동되어서 휴대폰으로도 내 Mac에 있는 파일들을 볼 수 있다.

 

 

 

'iOS' 카테고리의 다른 글

Realm에 Repository Pattern을 곁들인  (0) 2022.08.28
Database인데 Realm을 곁들인  (1) 2022.08.27
백업/복구 (+ 백업 리스트 UI 및 Custom Progress View)  (3) 2022.08.26
Access Control - Basic to Advanced  (0) 2022.08.16
YPImagePicker  (0) 2022.08.13