App Sandbox
App Sandbox는 커널 수준에서 강제 적용되는 접근 제어 기술
macOS 앱의 시스템 리소스와 유저 데이터에 대한 접근을 제한하여 앱이 손상되었을 피해를 최소화
앱 샌드박스는 권한 부여를 통해 요청된 리소스에 대한 앱의 액세스를 제한하여 시스템 리소스 및 사용자 데이터에 대한 보호를 제공
Mac APP Store로 배포되는 모든 app 들은 App Sandbox를 적용
흔히 iOS는 보안이 좋다라고 나오는 말이 App Sandbox 때문
Without App Sandbox & With App Sandbox
App Sandbox가 적용되지 않는 앱은 모든 유저 데이터와 시스템 리소스에 접근 가능하기 때문에 보안 취약점이 발생한다면 모든 데이터 및 리소스를 해커가 가져갈 수 있게 됨.
그래서 apple은 AppSandbox를 통해 앱이 접근할 수 있는 유저 데이터와 시스템 리소스를 제한하여 보안 취약점이 발생하더라도 App Sandbox를 벗어난 데이터와 리소스에 접근 자체가 불가능하기 때문에 피해를 최소화 할 수 있게되는 것
비유하자면 은행 전체가 털리냐 vs 은행내에 있는 금고 하나만 털리냐의 문제
Sandbox가 없다면 은행 전체를 돌아다닐 수 있어 모든 곳을 털 수 있지만
Sandbox가 있다면 하나의 금고만 돌아다닐 수 있어 해당 금고외에 다른 금고는 못 텀
앱은 손상될 수 있지만 App Sandbox를 통해 그 피해를 최소화 하는 것이지
App Sandbox를 적용한다고 해서 보안 취약점이 없어지는게 아님 !
은행의 보안이 아무리 높더라도 강도나 도둑이 아예 안오는것이 아닌것과 동일
App Sandbox 전략
위와 같은 취약점을 완화하도록 설계된 App Sandbox 전략은 두 가지
- App Sandbox는 개발자가 App과 시스템이 어떤식으로 상호작용하게 할 것인지 설정 그러면 시스템은 App이 작업을 완료하는데 필요한 권한만을 부여하고 그이상은 부여하지 않음
- App Sandbox를 사용하면, 열기 및 저장, 드래그 앤 드롭 및 친숙한 사용자 상호 작용을 통해 앱에 투명하게 추가 접근 권한을 부여할 수 있도록 함
App Sandbox 원칙
App Sandbox는 각 앱 마다 접근을 제한함 특히 아래 4가지 자원 중 하나를 사용하려면 그 의도를 명시적으로 명시하고 사용자에게 해당자원에 대한 접근 허용 요청을 해야함
App Sandbox 구조
사용자의 device엔 다양한 App이 있기 때문에 각 App마다 App Sandbox가 존재
각각 개별적으로 존재하기에 App은 자신의 App Sandbox에 있는 데이터 및 리소스만 접근 가능
App Sandbox의 외부에 있는 데이터 및 리소스에 접근하려면 Sandbox 정책에 따라 접근 권한을 부여받아야 함
App을 사용하다보면 접근 권한을 허용해달라는 Alert이 바로 그것
Sandbox 내부 구조
앱의 설치 시점에 각각의 SandBox Directory에 위치, 이 Directory는 각 앱의 Home Directory가
보안을 위해 App과 시스템의 상호 작용은 App의 SandBox Directory로 제한
Bundle Container
- App의 Bundle을 보유하여 파일, info.plist, Resource등을 그룹화
- 소스파일이 바이너리 형태의 실행 파일로 변환
- 라이브러리는 프레임 워크로 그룹화
- Storyboard, Xib, strings등이 변환
Data Container
- 하위 디렉토리로 Documents, Library, Temp, System Data가 있음
- Documents: 앱을 통해 생성한 문서나 데이터 등을 저장
- Library: 유저 데이터 파일 및 임시 파일을 제외한 모든 파일을 관리
- Temp: 현재 앱을 실행하는 동안만 필요하고 다음 앱 실행시까지 유지할 필요 없는 임시 파일 저장 공간
- 사용자가 직접 디렉토리나 파일을 추가할 수 없으며, 하위 디렉토리를 통해 관리
iCloud Container
- 런타임에 접근을 요청할 수 있는 추가 컨테이너 디렉토리
참고
App Sandbox | Apple Developer Documentation
[iOS] App SandBox란?
[iOS] 앱 샌드박스와 iOS의 파일 시스템
[iOS] SandBox를 알아보자!
[Swift] iOS 파일구조 알아보기 Sandbox, Bundle - 파일시스템(APFS)
https://jinnify.tistory.com/26#hELLO
File System Programming Guide