일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- firebase
- IBOutlet
- AppTransportSecurity
- userdefaults
- IBOutletCollection
- Remot Push
- weak
- 진입점
- tableViewCell
- TableView
- for-in
- 원격 푸시
- CoreLocation
- RunLoop
- viewcontroller
- 후행 클로저
- entrypoint
- ios
- uikit
- UIButton
- WWDC16
- 동시성프로그래밍
- property wrapper
- DispatchQueue
- 연산 프로퍼티
- 트레일링 클로저
- SWiFT
- Choosing Between Structures and Classes
- OperationQueue
- Understanding Swift Performance
- Today
- Total
iOS 공부하는 감자
iOS) Sandbox 본문
Sandbox는 운영체제의 커널 수준에서 시행되는 접근 제어 기술로
외부로부터 들어온 프로그램이 보호된 영역에서 동작하도록 하여 시스템이 부정하게 동작되는 것을 막는 보안 형태이다.
iOS의 각 앱은 설치될 때 앱마다 Sandbox라는 공간을 생성하여 내부에 앱 작동을 위해 필요한 데이터를 저장하고 , 서로 공유되지 않도록 한다.
외부의 공격으로 앱이 손상되어도 앱이 필요한 작업을 수행하는데 필요한 최소한의 권한으로 제한되어 있어 손상 범위를 줄여준다.
커널 : 메모리에 상주하는 운영체제의 한 부분으로 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 핵심 기능을 모아놓은 것을 말한다.
Sandbox 처리되지 않은 앱에서는 ...
1) 해당 앱을 실행하는 사용자에 대한 모든 권한을 가지며, 사용자가 엑세스할 수 있는 모든 리소스에 접근할 수 있다. (카메라, 마이크, 연락처 등등의 모든 데이터)
2) 그리고, 해당 앱 또는 연결된 프레임워크에 보안 허점이 발생하는 경우, 공격자는 잠재적으로 해당 허점을 악용하여 앱을 제어할 수 있으며, 앱에서 접근 가능한 리소스에도 접근하여 모든 작업을 수행할 수 있게 된다.
Sandbox의 전략
1) 앱이 시스템과 상호 작용하는 방식을 설명할 수 있다. 시스템은 앱이 작업을 완료하는데 필요한 접근권한을 앱에 부여한다.
2) 앱 사용자가 열기 및 저장, dialog(alert), 드래그 앤 드롭 및 기타 친숙한 사용자 상호 작용을 통해 앱에 추가 접근권한을 투명하게 부여할 수 있다.
위 그림처럼 Sandbox를 사용하여 앱이 "모든 사용자 데이터", "모든 시스템 리소스"에 접근할 수 없도록 제한을 두고
필요한 데이터와 리소스만 Sandbox라는 영역(?) 안에서 사용할 수 있도록 접근을 제한한 것.!
Sandbox의 원칙
App Sandbox는 앱별로 리소스에 대한 접근권한을 제한함으로써 공격자가 앱을 악의적으로 접근하더라도
사용자 데이터의 도난 및 삭제와 시스템 하드웨어 해킹에 대한 마지막 방어선을 제공한다.
iOS 앱은 다음의 리소스를 사용하기 위한 의도를 명시해야 한다.
- 하드웨어 (카메라, 마이크, USB, 프린터)
- 네트워크 연결
- 앱 데이터 (캘린더, 위치, 연락처)
- 사용자 파일 (다운로드, 음악, 영화 등)
iOS 앱을 사용하다 보면 리소스에 대한 접근권한을 요청하는 Alert를 자주 볼 수 있는데,
만약 접근권한 요청 없이 리소스에 접근하거나, 사용자가 권한을 주지 않은 경우 런타임 시점에서 시스템에 의해 리소스 접근이 제한된다.
Sandbox 구조
Sandbox는 앱에 대한 파일, 네트워크 리소스, 환경설정, 하드웨어 등에 대한 앱의 접근을 제한하는 세분화된 제어 집합이다.
iOS의 각 앱은 Sandbox화 되어있으며, 앱을 사용하는 사용자는 해당 앱의 Sandbox 내부 데이터만 접근할 수 있다.
따라서 개발자는 앱에서 사용되는 데이터를 기기에 저장해야 할 필요가 있다면 Sandbox 내부의 디렉터리에 데이터를 저장해야 한다. (Data Container - Document)
(저장공간을 차지하는 "앱 자체의 크기"와 "문서 및 데이터"는 모두 Sandbox 디렉토리 내부에 저장된 것)
만약 앱이 외부의 데이터에 접근하려 한다면 Sandbox 정책에 따라 접근권한을 부여받아야 가능하며, 반대로 외부에서도 Sandbox의 데이터에 접근할 수 없다.
앱의 Sandbox 디렉터리는 위 사진과 같이 구성되어 있다.
앱이 설치되는 시점에 각각의 Sandbox 디렉터리에 위치시키며, 해당 디렉터리는 각 앱의 홈 디렉터리가 된다.
데이터를 저장할 때, 개발자는 사용자의 디렉터리의 정확한 위치를 알 수 없다. (보안)
디렉터리의 위치는 실행될 때마다 변경되며, 해당 위치로 도달하는 URL을 사용하여 접근할 수 있다.
홈 디렉터리는 다음의 3개 컨테이너 디렉터리를 하위로 가진다.
1. Bundle Container
- 앱의 번들을 보유한다. (실행파일)
- Xcode에서 작업하던 Swift파일, 에셋 파일, info.plist, Resouce 등을 그룹화되어 저장한다.
- 라이브러리는 프레임워크로 그룹화하여 저장한다.
- 스토리보드, Xib, Strings 등이 변환된다.
2. Data Container
- App 및 사용자 데이터를 보유한다.
- 데이터를 정렬하고 그룹화하는 데 사용할 수 있는 여러 하위 디렉터리로 나뉜다.
- Documents : 앱을 통해 생성된 문서나 데이터 등을 저장한다. / 개발자와 사용자가 모두 접근할 수 있는 어느 정도 자율성이 부여된 디렉터리로, 개발자가 원한다면 특정 부분에 대해서만 접근을 제한할 수 있다.
- Library : 유저 데이터 파일 및 임시 파일을 제외한 모든 파일을 관리한다. / 외부로 절대 노출되면 안 되는 파일의 경우 Documents에서 Library로 위치를 이동시키면 보안을 강화할 수 있다. (파일을 볼 수 없음)
- Temp : 앱이 실행되는 동안만 잠시 저장할 필요가 있는 임시 파일 저장 공간
- System Data
Document
- 앱을 통해 생성된 문서나 데이터 등을 저장한다.
- 개발자와 사용자가 모두 접근할 수 있는 어느 정도 자율성이 부여된 디렉터리로, 개발자가 원한다면 특정 부분에 대해서만 접근을 제한할 수 있다.
- Realm Database는 Document 경로를 사용하는데, 만약 외부에 노출되면 안되는 중요한 데이터가 있다면 Library의 Application Support 폴더로 경로를 변경하여 사용하기도 한다.
Library
- 사용자 데이터 파일과 임시 파일을 제외한 모든 파일을 관리한다.
- 사용자 노출을 피하고 앱의 기능이나 관리에 필요한 파일을 저장한다.
- 외부로 노출되면 안 되는 파일의 경우, Document에서 Library로 위치를 이동함으로써 보안을 강화할 수 있다.
- Library 내부의 Caches 폴더에는 앱의 스냅샷 등이 저장된다. (+ 킹피셔를 이미지도 캐싱되어 저장된다.)
- UserDefaults
3. iCloud Container
- 런타임 시점에 접근을 요청할 수 있는 추가 컨테이너 디렉터리이다.
'iOS' 카테고리의 다른 글
iOS) ATS (App Transport Security) (0) | 2022.07.20 |
---|---|
iOS) UserDefaults (0) | 2022.07.16 |
iOS) 라이브러리와 의존성 관리 도구 (0) | 2022.07.14 |
iOS) App · ViewController의 생명주기 (0) | 2022.07.13 |
iOS) IBOutlet연결 Strong VS Weak (0) | 2022.07.07 |