[목차]
1. iOS 애플리케이션 구조
- default 또는 탈옥 앱 디렉터리
- 앱스토어 앱 디렉터리
- 데이터 디렉터리(컨테이너)
- iOS 키체인
2. Mach-O 및 Fairplay DRM 소개
- Mach-O 바이너리 파일
- Fairplay DRM
-바이너리 DRM 설정 확인 실습
- 캐치딜(App Store)
- DVIA-v2(Non App Store)
* 앱이 디바이스에 설치 되었을 때 구조를 분석해 본다.
1. iOS 애플리케이션 구조
![](https://blog.kakaocdn.net/dn/yHMOK/btrQb27hJFX/iKkkPKyI9CMoPLRtaRjOD0/img.png)
* iOS keychain
: 모든 애플리케이션에 대한 중요한 값(사용자 계정 정보, 네트워크 암호, 인증 토큰 등)을
암호화 하여 DB에 저장 (리버싱 마스터들이 복호화 로직 툴을 만들어 배포해줌)
1) 사전에 설치된 default 앱 및 탈옥 앱 디렉터리
: Applications (Jailbreak) 폴더
![](https://blog.kakaocdn.net/dn/5A3zZ/btrP7NRPcCz/3DWxjSKlKfZPkSQ09bdRIK/img.png)
- 탈옥 전에는 default로 깔린 앱 삭제가 불가능 하지만
탈옥 후에는 가능함(하지만 삭제 후 재설치는 불가!)
- 탈옥 전에는 default 앱들에 대한 설정이 불가능 하지만
(예. 무음카메라) 탈옥 후에는 설정 가능함
- 3utools에서 구조를 살펴보면
![](https://blog.kakaocdn.net/dn/kFgzk/btrQa3ZE2sO/5gIFuBqPJQaUUlMtTLK14k/img.png)
default로 깔린 앱스토어 및 탈옥을 통해 설치한
Cydia 등이 모두 이곳에 있음
2) 앱스토어를 통해 설치한 앱 디렉터리
: Applications (User) 폴더
![](https://blog.kakaocdn.net/dn/KXJ4v/btrP80ptsPt/GX9gwhkdskHlWskXSIWsm1/img.png)
![](https://blog.kakaocdn.net/dn/ymoRb/btrP8Y6hRKP/CuMzh9vKcqRy42k4uH5qk1/img.png)
설치 폴더가 uuid로 구분되는 경우
진단 해야하는 앱이 어떤 디렉터리에 있는지
식별하기가 어렵기 때문에 정렬 순을
최신 순으로 바꾸는 습관!
3) 데이터 디렉터리(컨테이너)
: 내부 중요 데이터가 모두 저장됨!
![](https://blog.kakaocdn.net/dn/WGc8D/btrP9ARqBTG/pukS5vgkt0PubElhhRUhz0/img.png)
![](https://blog.kakaocdn.net/dn/38f74/btrP7TYKkuv/HKBWHvKIgctq89Eyx3mozK/img.png)
4) iOS Keychain
: 복호화 실습 별도 진행
![](https://blog.kakaocdn.net/dn/bST3bf/btrP7Tj3Sit/By50w5ALCB4w0Rrf8DKKF0/img.png)
![](https://blog.kakaocdn.net/dn/cCzoBh/btrQaLx6c3f/VUuMDfEuNKtQVmeyfBovr1/img.png)
2. Mach-O 및 Fairplay DRM 소개
1) Mach-O 바이너리 파일
: 앱스토어 또는 직접 앱 설치 시
해당 실행 파일, 바이너리 파일은
마크 오브젝트 파일로 구성되어 있다.
해당 바이너리 파일은 추후
기드라(Ghidra)라는 디버깅 툴로
분석 실습을 진행해볼텐데
마크 오브젝트 바이너리 파일이
어떤 구조로 어떻게 구성되어 있는지
이해하고 있으면 분석하는데 있어
큰 도움이 된다.
![](https://blog.kakaocdn.net/dn/In2Yt/btrP8O3W3cJ/s0jOPinurKZzUbklhCILgk/img.png)
![](https://blog.kakaocdn.net/dn/bp3MNv/btrP7T5sLUM/Awc61g4QTYCRGoi573AEyK/img.png)
: 마크 오브젝트 바이너리 파일은
Header / Load Commands / Data
세 부분으로 이루어져 있는데
- Header는 마크 오브젝트라는 파일 형식을 설명하고
파일 해석에 영향을 미치는 플래그 값이 있다.
- Load Commands는 데이터 영역에 대한
레이아웃을 지정해 주고 필요한 세부 정보들을
포함하고 있다.
- Data 영역은 실행에 필요한 데이터가 들어있다.
2) Fairplay DRM 소개
![](https://blog.kakaocdn.net/dn/dMkC0e/btrP9z54dLm/sUyf1Z5ldEkGeVA3lxUjwK/img.png)
: DRM 적용이 되어있는지 여부를 확인하는 방법은
Object Tool(Otool)을 통해 바이너리 형식 확인 가능.
cryptid 1 = DRM 적용된 것 (앱스토어 앱)
cryptid 0 = DRM 적용 안된 것
실무에서는 개발자 분들이
IPA 파일을 직접 주시는 경우
보통 Fairplay DRM이 걸려있지 않은
바이너리 파일이지만
개발 앱 제공이 안되고 앱스토어에서
받으라고 하는 경우는 암호화가 걸려있기 때문에
받아서 별도의 복호화(해독)를 진행해야함.
> 이때 사용하는 툴이 바로 frida-ios-dump로
해독을 하면 바이너리 작동 방식 및
내부 클래스 구조 등 파악이 가능해 진다.
# 바이너리 DRM 설정 확인 실습
A. 캐치딜 (App Store)
1) 3utools로 단말기 연결 후 ssh 활성화
2) putty 또는 mobaxterm으로 ssh 접속
3) 바이너리 분석을 하기 위해 우선 번들 컨테이너에 접근해야 함
> /var/containers/Bundle/Application/
![](https://blog.kakaocdn.net/dn/SR0UE/btrP91uwerq/CUF3xPJoFS6fgXVIg3pcQ0/img.png)
uuid 값으로는 식별이 어렵기 때문에
설치 날짜로 구별하던가
3utools로 확인
![](https://blog.kakaocdn.net/dn/bWpDqm/btrP6dJTEqg/XRaov5BKcd9t7uHaljitx0/img.png)
'캐치딜' 폴더 들어간 뒤 uuid 번호 확인
![](https://blog.kakaocdn.net/dn/oxd4u/btrQb3ZqEGd/wR0E4IQejUFpvf5HOMaySK/img.png)
다시 putty에서
해당 폴더로 들어간 뒤
(/var/containers/Bundle/Application/2CD957EE-F531-4422-AD2F-113B0E2594DD/catchDeal.app)
바이너리 파일 이름 확인 (catchDeal)
![](https://blog.kakaocdn.net/dn/vdg4F/btrP8JPaItT/MDC6dntt5Z7fauPVUgnTlk/img.png)
4) otool 실행
# otool -l catchDeal | grep -A4 LC_ENCRYPTION_INFO
![](https://blog.kakaocdn.net/dn/G6Izk/btrP8ZKTTeK/FDFxryoIVT2B7fqLqSzVF0/img.png)
1로 설정
FailPlay DRM 걸려있음
B. DVIA-v2 (Non App Store)
1) DVIA(Damn Vulnerable iOS Application) 다운 후 설치
https://github.com/prateek147/DVIA-v2
1-1) 3utools에서 Import&Insall ipa 클릭
![](https://blog.kakaocdn.net/dn/bpiAc4/btrP9G46a2q/JUOV54Vv9CejC9IrpIOwQ1/img.png)
1-2) DVIA-v2-swift.ipa 파일 선택
![](https://blog.kakaocdn.net/dn/czW9z1/btrP6dQF5kL/8aT1MKPmaN6Kkzx0faJ7X0/img.png)
1-3) 설치완료
![](https://blog.kakaocdn.net/dn/1KViA/btrP8XzA3He/evgKp6LDCGvjnAbQcGUkAk/img.png)
2) DVIA 바이너리 파일 경로 확인 후 접속
2-1) uuid 확인
![](https://blog.kakaocdn.net/dn/9Xs1r/btrQb2TJZlg/mKp07zisAWcTmgxYS5qxR1/img.png)
![](https://blog.kakaocdn.net/dn/LmsEf/btrQb4xgASr/JjLjcAXDlfqL6jZMPxGVO0/img.png)
2-2) 디렉터리 접속
![](https://blog.kakaocdn.net/dn/HVJoU/btrP7NdcJiw/odV5vP7eLOvv4blwQA4Kn0/img.png)
3) otool 실행
# otool -l DVIA-v2 | grep -A4 cryptid
![](https://blog.kakaocdn.net/dn/ZSSeh/btrQaadNopJ/WeXJxjKZ2mKsSbR86kMuB1/img.png)
0으로 설정
FailPlay DRM 안 걸려있음
실습 종료
# 내용 및 일부 이미지 출처
: 보안프로젝트 김태영 팀장 iOS 모바일 앱 모의해킹(기초) 강의 PDF
'APP 진단 > iOS' 카테고리의 다른 글
6. DVIA 앱 진단 (1) - Local Data Storage (0) | 2022.11.06 |
---|---|
5. 취약한 애플리케이션 환경 구성 (DVIA-v2) (0) | 2022.11.05 |
3. iOS 파일 시스템 이해 (0) | 2022.10.23 |
2. 진단 환경 구성 (아이폰 탈옥) (0) | 2022.10.22 |
1. iOS 구조 이해 (0) | 2022.10.22 |