APP 진단/iOS

4. iOS 애플리케이션 구조

takudaddy 2022. 11. 1. 23:28

 

 

 

 

[목차]

 

1. iOS 애플리케이션 구조

      - default 또는 탈옥 앱 디렉터리

      - 앱스토어 앱 디렉터리

      - 데이터 디렉터리(컨테이너)

      - iOS 키체인

 

2. Mach-O 및 Fairplay DRM 소개

      - Mach-O 바이너리 파일

      - Fairplay DRM

              -바이너리 DRM 설정 확인 실습

                   - 캐치딜(App Store)

                   - DVIA-v2(Non App Store)

 

 

* 앱이 디바이스에 설치 되었을 때 구조를 분석해 본다.

 

 

 

 

 

1. iOS 애플리케이션 구조

 

* iOS keychain

: 모든 애플리케이션에 대한 중요한 값(사용자 계정 정보, 네트워크 암호, 인증 토큰 등)을

암호화 하여 DB에 저장 (리버싱 마스터들이 복호화 로직 툴을 만들어 배포해줌)

 

 

 

1) 사전에 설치된 default 앱 및 탈옥 앱 디렉터리

: Applications (Jailbreak) 폴더

 

- 탈옥 전에는 default로 깔린 앱 삭제가 불가능 하지만

탈옥 후에는 가능함(하지만 삭제 후 재설치는 불가!)

 

- 탈옥 전에는 default 앱들에 대한 설정이 불가능 하지만

(예. 무음카메라) 탈옥 후에는 설정 가능함

 

 

- 3utools에서 구조를 살펴보면

 

default로 깔린 앱스토어 및 탈옥을 통해 설치한

Cydia 등이 모두 이곳에 있음

 

 

 

 

 

2) 앱스토어를 통해 설치한 앱 디렉터리

: Applications (User) 폴더

 

설치 폴더가 uuid로 구분되는 경우

진단 해야하는 앱이 어떤 디렉터리에 있는지

식별하기가 어렵기 때문에 정렬 순을

최신 순으로 바꾸는 습관!

 

 

 

 

3) 데이터 디렉터리(컨테이너)

: 내부 중요 데이터가 모두 저장됨!

 

 

 

4) iOS Keychain

: 복호화 실습 별도 진행

 

 

 

 

 

 

 

2. Mach-O 및 Fairplay DRM 소개

 

1) Mach-O 바이너리 파일

: 앱스토어 또는 직접 앱 설치 시

해당 실행 파일, 바이너리 파일은

마크 오브젝트 파일로 구성되어 있다.

 

해당 바이너리 파일은 추후

기드라(Ghidra)라는 디버깅 툴로

분석 실습을 진행해볼텐데

 

마크 오브젝트 바이너리 파일이

어떤 구조로 어떻게 구성되어 있는지

이해하고 있으면 분석하는데 있어

큰 도움이 된다.

 

 

 

: 마크 오브젝트 바이너리 파일은

Header / Load Commands / Data

세 부분으로 이루어져 있는데

 

- Header는 마크 오브젝트라는 파일 형식을 설명하고

파일 해석에 영향을 미치는 플래그 값이 있다.

 

- Load Commands는 데이터 영역에 대한

레이아웃을 지정해 주고 필요한 세부 정보들을

포함하고 있다.

 

- Data 영역은 실행에 필요한 데이터가 들어있다.

 

 

 

 

 

2) Fairplay DRM 소개

 

: 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/

 

uuid 값으로는 식별이 어렵기 때문에

설치 날짜로 구별하던가

 

3utools로 확인

'캐치딜' 폴더 들어간 뒤 uuid 번호 확인

 

다시 putty에서

해당 폴더로 들어간 뒤

(/var/containers/Bundle/Application/2CD957EE-F531-4422-AD2F-113B0E2594DD/catchDeal.app)

바이너리 파일 이름 확인 (catchDeal)

 

 

4) otool 실행

# otool -l catchDeal | grep -A4 LC_ENCRYPTION_INFO

 

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 클릭

 

1-2) DVIA-v2-swift.ipa 파일 선택

 

1-3) 설치완료

 

 

2) DVIA 바이너리 파일 경로 확인 후 접속

2-1) uuid 확인

 

2-2) 디렉터리 접속

 

3) otool 실행

# otool -l DVIA-v2 | grep -A4 cryptid

 

0으로 설정

FailPlay DRM 안 걸려있음

 

 

실습 종료

 

 

 


 

# 내용 및 일부 이미지 출처

: 보안프로젝트 김태영 팀장 iOS 모바일 앱 모의해킹(기초) 강의 PDF

 

728x90