본문으로 바로가기

아이폰·아이패드·iOS 취약점진단/모의해킹 무료 강의

 

가. IPC 취약점 이란?

1. IPC 정의 및 취약점

- IPC(Inter Process Communication)는 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 방법이나 경로를 말한다.

- 앱이 신뢰할 수 없는 출처의 URL 스키마(Schemes)를 제대로 검증하지 않고 실행할 경우 문제가 발생할 수 있다.

- 즉, URL 스키마에 대한 검증 없이 실행하여 문제가 발생하는 것을 IPC 취약점이라고 부른다.

* 스키마(Schemes) : 외부에서 자신의 앱에 접근할 수 있도록 해주는 하나의 통로.

 

2. URL Schemes 정의

- URL 스키마 또는 스킴이라 부르며, URL을 통해 정의한 프로토콜로 다른 앱과 통신할 수 있도록 해주는 통로를 말한다.

- iOS는 샌드박스 정책에 의해 다른 앱들과 정보를 주고받기 힘드므로, URL 스키마를 이용하여 정보를 주고받는다.

- 일반적인 URL 스키마는 다음과 같은 형태를 가지며, 웹 브라우저 앱을 통해 URL 스키마를 실행할 수 있다.

※ 동일한 스키마를 사용하는 앱이 존재한다면 어떤 앱을 실행할 지 묻는다.

scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]

 

3. URL Schemes 종류

3-1. Built-in URL Schemes

- 애플(Apple)에서 기본적으로 제공하는 스키마를 빌트인 URL 스키마라 부르며, 시스템 앱과 통신할 수 있는 기능을 제공한다.

- 빌트인 URL 스키마 종류

No 스키마 종류 내용 사용 예시
1 mailto 메일 앱을 시작하고 이메일 작성 시트를 여는 데 사용 mailto:frank@wwdcdemo.example.com
2 tel 전화 앱을 실행하고 지정된 전화 번호로 전화 걸기를 시작하는데 사용 tel:1-408-555-5555
3 facetime 지정된 사용자에게 FaceTime 통화를 시작하는 데 사용 facetime://user@example.com
4 sms 메시지 앱을 시작하는데 사용 sms:1-408-555-1212
5 map 지리적 위치를 표시하고 두 지점 사이의 운전 방향을 생성하는 데 사용 http://maps.apple.com/?q=Mexican+Restaurant
6 itunes  iTunes Music Store의 콘텐츠에 연결하는 데 사용 http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=156093464&id=156093462&s=143441
7 youtube  YouTube 웹사이트에 연결하여 지정된 동영상을 재생하는데 사용 http://www.youtube.com/watch?v=VIDEO_IDENTIFIER

 

3-2. Custom URL Schemes

- 사용자가 직접 커스텀마이징(customize)하여 사용하는 스키마를 커스텀 URL 스키마라 부른다.

- 사용자 앱에서 URL 스키마를 구현해 처리하며, Info.plist 파일에 CFBundleUrlSchemes 키(key)를 활용하여 구성한다.

 

4. AppDelegate.swift

- AppDelegate.swift 파일에서 수신받은 URL 스키마를 처리한다.

- 개발자/운영자로부터 소스코드를 받은 경우에는 AppDelegate.swift 파일에서 URL 스키마 처리 부분을 확인하면 되며, 소스코드를 받지 못한 경우에는 앱의 바이너리 파일을 기드라(Ghidra)와 같은 엔지니어링 도구를 이용해 분석해야 한다.

※ AppDelegate.swift 파일은 ios13을 기준으로 많은 점이 변경되었다. 아래의 링크들을 클릭하여 꼭 공부하길 바란다.

https://dev200ok.blogspot.com/2020/05/ios-appdelegate.html

 

[IOS] AppDelegate는 뭐하는 녀석이지?

Devlog 와 TIL 입니다. 개발을 하면서 알게된 내용을 다루고 있습니다.

dev200ok.blogspot.com

https://zeddios.tistory.com/218

 

iOS ) AppDelegate.swift의 역할

프로젝트를 만들면..반드시..있는..파일.......바로..AppDelegate.swift....문서를 하나 읽고있는데, 여기서 AppDelegate.swift에 대해서 잘 설명해주었더라구요 ㅎㅎ저도 두리뭉실하게만 알고있었는데..:-)

zeddios.tistory.com

https://jazz-the-it.tistory.com/29

 

[iOS] AppDelegate.Swift는 무슨 역할을 하는 것일까?

AppDelegate Appdelegate.swift에서 발견할 수 있는 AppDelegate 클래스는 아래와 같이 정의되어 있다. @main class AppDelegate: UIResponder, UIApplicationDelegate 설명 Your app delegate object manages your app’s shared behaviors. The a

jazz-the-it.tistory.com

 

나. 대응방법

- Custom URL Schemes를 사용할 때 사용자가 한번 더 확인할 수 있는 로직을 추가한다.

- 중요한 기능/뷰에 대한 접근을 사용한다면 사용자 인증 정보를 확인하는 로직을 추가한다.

 

다. DVIA-v2 앱을 통한 실습

1. 분석 대상 앱 설치

- 실습을 위해 DVIA-v2 앱을 설치한다.

※ DVIA-v2 어플이 설치되어있지 않은 사람은 아래의 글을 참고하여 앱을 설치하길 바란다.

2022.07.01 - [Mobile App 취약점 진단/iOS App 진단] - [iOS App 진단] 04강 - 진단 대상 설치

 

[iOS App 진단] 04강 - 진단 대상 설치

iOS 앱 진단을 위해 설치 파일을 요청하면, 대개 아래 3가지 방법 중에 하나의 방법으로 전달해준다. 1. 앱 스토어를 통해 설치 이미 앱 개발이 완료되어 앱스토어에 등록되어 있을 경우, 앱스토어

hagsig.tistory.com

 

2. 스키마 확인

- 3uTools Files에서 Applications(User) 클릭 또는 탐색창에 /var/Containers/Bundle/Application 입력한다.

- 분석 대상 앱 이름과 동일한 폴더를 더블클릭한다.

 

- Info.plist 파일을 더블클릭하여 내용을 열람한다.

* Info.plist 경로 : /var/containers/Bundle/Application/$uuid/DVIA-v2.app/Info.plist

 

- Info.plist 중간쯤에 'CFBundleURLSchemes' 키(KEY)가 있고 스키마가 지정되어 있는 것을 확인할 수 있음.

* 사용 중인 스키마 : dvia, dviaswift

 

- 위에서 확인한 DVIA-v2 앱의 스키마를 사파리 브라우저에 입력한다.

- 형식이 잘못되었는지 앱은 실행되지만 바로 종료된다.

- 어떤 형식을 입력하여야 제대로 동작하는지 아래의 과정을 통해 알아내보도록 한다.

  

3. 바이너리 파일 추출

- 바이너리 파일을 변조하기 위해서는 앱내부에 존재하는 바이너리 파일을 추출해내야 한다.

- 3uTools Files에서 Applications(User) 클릭 또는 탐색창에 /var/Containers/Bundle/Application 입력한다.

- 분석 대상 앱 이름과 동일한 폴더를 더블클릭한다.

 

- Size 클릭하여 파일을 크기순으로 정렬한다.

- 폴더를 제외하고 크기가 제일 큰 파일이 바이너리 파일이다.

 

-  바이너리 파일을 우클릭한 뒤 Export 버튼을 눌러 PC로 추출한다.

 

4. 바이너리 파일 분석

- 아래의 과정을 따라하여 추출한 바이너리 파일을 기드라(Ghidra)를 통해 분석한다.

※ 기드라가 설치되어 있지 않은 사람은 아래의 글을 참고하여 설치하길 바란다.

2022.06.28 - [Mobile App 취약점 진단/iOS App 진단] - [iOS App 진단] 03강 - 진단 도구 설치

 

[iOS App 진단] 03강 - 진단 도구 설치

1. Cydia(시디아) - 탈옥을 성공하면 자동으로 설치되며, 앱 스토어에서 지원하지 않는 앱을 다운로드할 수 있다. - iOS가 지원하지 못하는 기능을 Cydia를 이용하여 설치할 수 있는데 이를 Tweak(트윅)

hagsig.tistory.com

 

- File 클릭 → New Project 클릭 → Non-Shared Project 선택 → Next 클릭

 

- Project Directory 경로지정 → Project Name 입력 → Finish 클릭 → File 클릭 → Import File 클릭

* Project Directory : 프로젝트 저장 경로.

* Project Name : 프로젝트 이름.

 

- 위에서 추출한 바이너리 파일 선택 → Select File To Import 버튼 클릭

 

- 설정내용을 아무것도 건드리지 않고 OK 버튼 클릭

 

- 추가된 바이너리 파일(DVIA-v2)을 더블클릭 → Yes 버튼 클릭

 

- 설정내용을 아무것도 건드리지 않고 Analyze 버튼 클릭 → 분석이 종료될 때까지 대기(우측 하단에 진행률이 표시됨).

※ 분석이 종료되면 알림창이 발생한다. 분석이 완료되지 않으면 결과가 달라질 수 있으므로 완료될 때까지 기다린다.

 

5. 바이너리 파일 분석

- Symbol Tree 창의 택스트 입력란에 "appdelegate"를 검색한다.

"__T07DVIA_v211AppDelegateC11applicationSbSo13UIApplicationC_10Foundation3URLV4opens10DictionaryVySC0F17OpenURLOptionsKeyVypG7optionstF" 함수(Functions)를 클릭한다.

* 실무에서는 어떤 함수가 URL 스키마를 처리하는지 하나씩 눌러가며 찾아야 한다.

 

- 화면 우측에 위치하고 있는 Decompile 창의 내용을 확인한다.

 

- Decompile 창의 42번 줄을 확인하면 커스텀 URL 스키마를 통해 앱을 호출할 수 있는 문구를 확인할 수 있다.

* 커스텀 URL 스키마 호출 형태 : /phone/call_number/

 

- 위에서 확인한 커스텀 URL 스키마 호출 형식에 맞추어 웹 브라우저 앱의 URL 입력란에 기입한다.

- "Success!, Calling. Ring Ring !!!"이라는 메시지가 출력되며, 커스텀 URL 스키마를 통해 정상적으로 앱 호출 및 처리된 것을 확인할 수 있다.

 

라. 참고 URL

- 애플 공식 URL 스키마 설명 문서

https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007899-CH1-SW1

 

About Apple URL Schemes

About Apple URL Schemes This document describes several URL schemes that are supported by system apps on iOS, macOS, and watchOS 2 and later. Native iOS apps and web apps running in Safari on any platform can use these schemes to integrate with system apps

developer.apple.com