1. iOS 어플리케이션 이해
IOS 어플리케이션의 기본 굴자와 프로세스 로직에 대해 간략하게 알아봐야한다.
1.1. iOS 어플리케이션 구조
- Cocoa Touch
- 모든 어플리케이션에 기본 인프라 제공 (인터페이스, 터치, 알림 등)
- Media Layer
- 그래픽, 오디오 및 비디오를 표시하는 라이브러리가 포함됨
- Core Services
- 시스셈의 다른 서비스를 어플리케이션에 제공 (네트워크, 위치, iCloud 등)
- Core OS
- 나머지 상위 계층에서 작업을 실행하는 데 사용되는 라이브러리
1.2. 보안 부트 체인
각 단계별로 무결성 검사를 통해 위변조 검증을 시행한다.
부트에서 감염되는 많은 루트킷과 멀웨어가 존재하므로 사용한다.
Boot ROM
- 신뢰할 수 있는 초기 단계
- 프로세서에 코드가 포함되어 있어 업데이트 또는 변경 불가
- Apple root certificate(애플 루트 인증서)가 포함되어 있어
다음 단계인 LLB가 올바르게 서명되어 있는지 검증 - LLB가 검증되지 않거나 로드하지 못하면 DFU 모드로 진입
✔ DFD 모드 : Device Firmware Upgrade의 약자
모든 자료를 지우며 공장 초기화할 때 사용한다.
Low Level Bootloader
- Boot ROM 단계에서 LLB 서명이 유효하면 실행되는 단계
- 업데이트할 수 있는 가장 하드웨어와 가까운 코드
- iBoot를 로드하기 전에 펌웨어 서명 검증
- iBoot가 검증되지 않거나 로드하지 못하면 Recovery 모드로 진입
✔ Recovery 모드 : 저장된 파일과 어플리케이션은 유지된다.
iOS 업그레이드 혹은 재설치에 자주 이용한다.
iBoot
- LLB 단계에서 iBoot 서명이 유효하면 실행되는 단계
- iOS Kernel을 시작하기 전에 서명 검증
- iOS Kernel이 검증되지 않거나 로드하지 못하면
Recovery 모드로 진입
1.3. iOS 앱 샌드박스
샌드박스는 iOS 접근 제어 기술로 커널 레벨에서 시행된다.
앱 손상 시 발생할 수 있는 시스템과 사용자 데이터 손상을 방지하는 목적이다.
어플리케이션이 다른 어플리케이션 데이터 또는 파일 접근을 방지한다.
1.4. iOS 앱 코드서명
애플이 서명한 코드만 디바이스에 실행되도록 DRM이 구현되어 있다.
앱스토어에서 서명하지 않은 어플리케이션은 허용되지 않아 설치가 불가하다.
- 앱 설치는 런타임 동안 코드서명 검사를 진행한다.
Xcode를 사용하여 앱 코드서명을 수행한다. (필자는 SideLoadly를 사용할 예정이다.)
2. iOS 파일 시스템
iOS의 기본적인 파일 시스템을 뜯어본다.
암호화하는 APFS에서부터 어플리케이션 내부 파일 구조까지 확인한다.
2.1. APFS
APFS는 Apple File System을 의미한다.
파일 시스템은 컴퓨터에서 파일이나 자료를 발견 및 접근할 수 있도록 보관하는 체제
기존 HFS+를 대체하는 새로운 파일 시스템
2.2. IPA 파일 구조 (압축 해제)
- Payload
- 어플리케이션의 모든 데이터가 포함되어 있다.
- Payload/Application.app
- 컴파일된 어플리케이션, 앱에서 사용하는 리소스,
Info.plist 등이 포함된다.
- Payload/Application.app/AppBinary
- 실행사능한 바이너리 파일
- Payload/Application.app/_CodeSignature
- 애플의 개발자 인증서로 만든 어플리케이션 서명
- iTunesMetadata.plist
- 개발자 이름, 번들 식별자, 저작권 정보 등의
세부 정보가 포함됨
2.3. IPA 파일 구조 (앱 설치)
샌드박스 디렉터리 안에서 파일 시스템과 상호작용하도록 제한
- Bundle Container
- Data Container
- iCloud Container
Bundle Container
- /var/container/Bundle/Application/$uuid
- 앱의 번들을 저장
✔ 번들은 macOS 및 iOS에서 소프트웨어를
제공하는 편리한 방법으로 실행 가능한
코드와 해당 코드에서 사용하는 리소스를
가진 디렉토리
Data Container
- /var/mobile/Containers/Data/Application/
- 앱과 사용자 데이터를 저장
- 서브 디렉터리를 가짐
iCloud Container
- /private/var/mobile/Library/Mobile Documents
- iCloud와 관련된 데이터 저장
- iCloud 지원 iOS 어플리케이션이 사용하는 데이터가 포함됨
현재 필자는 iCloud를 사용하지 않으므로 비어있는 것을 확인할 수 있다.
혹여 사용한다면 iCloud ~ com 형태의 폴더가 다수 생성되어 있는 것을 확인할 수 있다.
2.3.1. Bundle Container - AppName.app
- 앱의 번들로 일반적으로 쓰기가 불가능하고
읽기만 가능 - iTunes나 iCloud에 백업되지 않음
- .app 파일 내부 바이너리 파일을 포함한다.
2.3.2. Data Container - Documents
- 사용자가 생성한 문서/데이터와 외부 앱에서 받은 파일 저장
- iTunes나 iCloud에 백업됨
(사용자에게 노출되는 데이터만 저장해야 한다.)
2.3.3. Data Container - Library
- 유저 데이터 파일 및 임시파일을 제외한
모든 파일 관리 - Application Support, Caches 디렉터리를
주로 사용되고, Cashes 디렉터리를 제외한
디렉터리는 iTunes나 iCloud에 백업된다.
2.3.4. Data Container - Temp
- 임시파일을 위한 저장소로 앱 실행하는데 필요 X
- 백업되지 않고 앱이 실행되지 않으면 디렉터리를 비움
2.3.5. Data Container - 애플 가이드
- Documents
- 사용자 데이터 저장
✔ 사용자에게 노출되고 생성, 삭제 또는 수정할 수 있는 파일 포함
✔ 사용자에게 다운로드한 파일 포함 (비디오 또는 오디오 앱)
- Library/Application support/
- 앱을 실행하는 데 사용되는 폴더로 사용자에게 보이지 않음
- (앱 생성 데이터) 앱이 생성하고 관리하는 데이터, 설정, 탬플릿 등
- Library/Caches/
- 데이터 캐시 파일을 저장하는 곳으로 앱 성능을 위한 목적으로 존재
- 디스크 공간 확보를 위해 삭제할 수 있으므로 쉽게 재생성 가능한 파일
- Tmp/ (Temp)
- 임시파일을 위한 저장소로 앱 실행하는 데 필요 없는 파일
2.4. Mach-O 바이너리 파일
iOS 디바이스에 설치된 앱은 Mach-O 바이너리 파일 형태이다.
Mach-O는 Mach object format이다.
앱 스토어에서 다운로드한 앱은 FairPlay DRM을 이용해 암호화되며 로더에 의해 런타임 중에 해독됨
(해당 내용은 추후 모의해킹을 진행하며 서술하도록 한다.)
'앱 모의해킹 > IOS' 카테고리의 다른 글
DVIA-v2 취약점 분석 (1) | 2025.04.25 |
---|