아이폰·아이패드·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
https://zeddios.tistory.com/218
https://jazz-the-it.tistory.com/29
나. 대응방법
- Custom URL Schemes를 사용할 때 사용자가 한번 더 확인할 수 있는 로직을 추가한다.
- 중요한 기능/뷰에 대한 접근을 사용한다면 사용자 인증 정보를 확인하는 로직을 추가한다.
다. DVIA-v2 앱을 통한 실습
1. 분석 대상 앱 설치
- 실습을 위해 DVIA-v2 앱을 설치한다.
※ DVIA-v2 어플이 설치되어있지 않은 사람은 아래의 글을 참고하여 앱을 설치하길 바란다.
2022.07.01 - [Mobile App 취약점 진단/iOS App 진단] - [iOS App 진단] 04강 - 진단 대상 설치
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강 - 진단 도구 설치
- 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 스키마 설명 문서
'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 |