아이폰·아이패드·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 스키마 설명 문서
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
'Mobile App 취약점 진단 · 모의해킹 > iOS App 취약점 진단 · 모의해킹' 카테고리의 다른 글
스마트폰 와이어샤크 네트워크 패킷 캡처 방법 정리 (0) | 2023.11.03 |
---|---|
[iOS 취약점 진단] 15강 - 로컬 인증(Touch ID/Face ID) 우회 (0) | 2023.10.30 |
[iOS App 진단] 13강 - 런타임 조작(무차별대입공격)_실습4 (0) | 2023.10.20 |
[iOS App 진단] 13강 - 런타임 조작(로그인/인증 우회)_실습3 (0) | 2023.10.20 |
[iOS App 진단] 13강 - 런타임 조작(로그인/인증 우회)_실습2 (0) | 2023.10.18 |