ariedaze
사과농장
ariedaze
전체 방문자
오늘
어제
  • 분류 전체보기 (18)
    • IOS (6)
    • Swift (5)
    • WWDC (2)
    • Combine (4)
    • 치타핏 개발일기 (1)
    • FOREST (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 사과농장에 오신걸 환영합니다🥳

인기 글

태그

  • Apple
  • await
  • swift
  • combine
  • Swfit
  • swft
  • 치타핏
  • cheetahfit
  • iOS앱
  • 앱개발
  • iOS앱개발
  • async
  • 개발
  • 새싹
  • WWDC
  • ios
  • WWDC21

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ariedaze

사과농장

iOS | 샌드박스와 File System
IOS

iOS | 샌드박스와 File System

2021. 11. 4. 17:44

Sandbox

출처: 네이버 지식백과

샌드박스는 어린 아이를 보호하기 위해 샌드박스에서만 놀도록 하는데 유래한 보안 모델입니다.

 

 

iOS에서 앱 샌드박스는 커널 수준에서 앱의 데이터에 대한 접근을 제한하는 기술입니다.

 

앱 샌드박스가 있는 이유는? 앱이 손상되었을 때 사용자의 데이터나 시스템이 위험하지 않지 않도록 하는 역할을 합니다.

 

 

보안을 위해서 앱을 설치할 때 운영 체제는 자동으로 해당 앱에 대한 샌드박스를 만듭니다.

 

 

 

샌드박스가 없을 경우(왼쪽)에는 해당 앱에 보안 허점이 있을 때

공격자는 앱을 제어해서 시스템 리소스나 모든 데이터를 가지고 이것 저것 할 수 있겠죠

 

그래서 오른쪽과 같이 하나의 앱에 하나의 샌드박스를 만들어서

앱이 손상될 경우 시스템 및 사용자 데이터에 대한 손상을 방지하도록 설계되어 있습니다.

 

샌드박스 전략은 시스템이 앱에서 필요한 리소스에 대한 액세스 권한을 앱에 부여하는 것 입니다.

 

앱 샌드박스는 만병통치약이 아닙니다. 왜냐하면 샌드박스는 공격을 차단하는 기술이 아니라 공격을 받았을 때 발생하는 피해를 최소화할 수 있도록 도와주는 기술이기 때문이에요!

앱이 작업을 수행하는 데 필요한 최소한의 권한으로 제한되면 손상될 수 있는 범위가 줄어들게 됩니다.

 

 

App Sandbox는 앱별로 민감한 리소스에 대한 액세스를 제한함으로써

공격자가 앱의 보안 허점을 성공적으로 악용하는 경우 앱 샌드박스에 의해 허용된 영역만 접근할 수 있기 때문에 허용되지 않은 영역은 안전하게 보호할 수 있습니다.

 

 

다음과 같은 리소스를 앱 내에서 사용하려면

샌드박스가 적용된 앱은 자격을 사용하여 다음 리소스를 사용하려는 의도를 명시적으로 명시해야 합니다.

  • Hardware (Camera, Microphone, USB, Printer)
  • Network Connections (Inbound or Outbound)
  • App Data (Calendar, Location, Contacts)
  • User Files (Downloads, Pictures, Music, Movies, User Selected Files)

 

프로젝트에서 명시적으로 권한 요청을 정의하지 않는다면 요청되지 않은 리소스에 대한 액세스는 런타임 시 시스템에서 거부됩니다.

 

 

 

 

 

File System

 

iOS 앱은 위의 그림처럼 앱 하나당 전부 SandBox화 되어있습니다. 앱이 가지는 개인 사물함같은거에요!

그래서 앱은 샌드박스 디렉토리 내부에 있는 파일들과만 상호작용할 수 있도록 제한됩니다.

 

 

새 앱을 설치하게되면 설치 프로그램이 샌드박스 디렉토리 내에 앱에 대한 여러 컨테이너 디렉토리를 만들고, 만들어진 각 컨테이너 디렉토리에는 특정한 역할이 있습니다. 위의 그림이 앱의 컨테이너 디렉터리 구조를 나타내는데요.

 

번들 컨테이너 디렉터리

  • 앱의 번들을 보유하고 앱과 모든 리소스가 포함되어 있습니다.
  • Compile Source(.swift)가 바이너리 형태의 실행 파일로 변환
  • 라이브러리는 프레임워크로 그룹화
  • 스토리보드, Xib, strings 등이 변환
  • 이 디렉토리엔 쓸 수 없음
  • 앱 번들에 저장된 리소스에 대한 읽기 전용 액세스 권한을 얻을 수 있습니다.

데이터 컨테이너 디렉터리

  • 앱과 사용자 모두에 대한 데이터를 보유합니다.
  • 앱이 데이터를 정렬하고 구성하는 데 사용할 수 있는 여러 하위 디렉토리로 더 나뉩니다.
    • Dcouments/
      • 사용자가 생성한 데이터 저장, 사용자에게 노출되는 파일 저장
      • 개발자가 Document, Library, tmp, System Data 외의 직접 디레토리나 파일을 추가할 수 없기에 Document의 서브 디렉토리를 통해 관리
      • 이 디렉토리의 내용은 파일 공유를 통해 사용자가 사용할 수 있습니다. 따라서 이 디렉토리에는 사용자에게 노출하려는 파일만 포함되어야 합니다.
      • 이 디렉토리의 내용은 iTunes 및 iCloud에 의해 백업됩니다.
      • Realm은 기본적으로 Documents의 경로를 사용하는데, 노출이 되면 안되는 중요 정보는 Library의 Application Support 폴더로 경로를 변경
    • Library/
      • 사용자 데이터 파일이 아닌 모든 파일의 최상위 디렉토리입니다. 따라서 앱은 사용자 데이터 파일에 이러한 디렉터리를 사용해서는 안 됩니다.
      • iOS 앱은 일반적으로 Application Support 및 Caches(앱의 스냅샷 등 저장) 하위 디렉토리를 사용합니다.
      • 사용자에게 노출되고 싶지 않은 파일에는 라이브러리 하위 디렉토리를 사용합니다. 
      • 라이브러리 디렉토리의 내용(Caches 하위 디렉토리 제외)은 iTunes 및 iCloud에 의해 백업됩니다. 
    • tmp/
      • 이 디렉토리를 사용하여 앱 실행 간에 지속할 필요가 없는 임시 파일을 작성합니다. 앱은 더 이상 필요하지 않은 파일을 이 디렉터리에서 제거해야 합니다.
      • 시스템은 앱이 실행되고 있지 않을 때 이 디렉토리를 제거할 수 있습니다.
      • 이 디렉토리의 내용은 iTunes 또는 iCloud에 의해 백업되지 않습니다.

iCloud 컨테이너

  • 앱은 런타임 시 iCloud 컨테이너와 같은 추가 컨테이너 디렉토리에 대한 액세스를 요청할 수도 있습니다.

 

Code

 

override func viewDidLoad() {
    super.viewDidLoad()
    print(NSHomeDirectory()) //Prints SandBox data container path
}

시뮬레이터에서 앱의 SandBox 컨테이너 경로를 찾을 수 있습니다. 참고할 점은 실제 장치가 아니라 시뮬레이터에서만 된다는 점입니다!

실제 기기에서는 앱의 샌드박스의 위치가 이리저리 옮겨다닌다고 합니다.

위의 코드를 입력하면 앱의 샌드박스 경로를 출력할 수 있습니다.

위의 경로를 파인더에 복사붙여넣기 해서 이동해보면?!!

이렇게 확인할 수 있습니다.

 

 

 

출처

- Apple - File System Programming Guide

- Apple - App Sandbox Design Guide

반응형
저작자표시 비영리 변경금지 (새창열림)

'IOS' 카테고리의 다른 글

SPM으로 설치한 Crashlytics에서 누락된 dsyms 업로드하기  (2) 2021.12.18
iOS | Authorization & Privacy, CoreLocation, 위치로 주소 변환하기  (0) 2021.11.01
iOS ) Autolayout3 - Adaptive Layout, Size Class  (0) 2021.10.05
iOS ) AutoLayout2 - Content Hugging, Compression Resistance  (0) 2021.10.04
iOS ) AutoLayout1 - Frame-based Layout Autoresizing Mask  (0) 2021.10.02
    'IOS' 카테고리의 다른 글
    • SPM으로 설치한 Crashlytics에서 누락된 dsyms 업로드하기
    • iOS | Authorization & Privacy, CoreLocation, 위치로 주소 변환하기
    • iOS ) Autolayout3 - Adaptive Layout, Size Class
    • iOS ) AutoLayout2 - Content Hugging, Compression Resistance
    ariedaze
    ariedaze

    티스토리툴바