iOS 진단 시 꼭 확인해 보아야 하는 정보들이 존재한다. plist, xml, SQLite 파일 등이 그러한 파일들인데 이는 내부의 각기 다른 애플리케이션 경로에 존재하거나 ipa 파일 내부에 존재한다.
여기서는 진단 시 중요 정보가 포함되어 있을 만한 파일의 경로와 이번 진단 시 어떠한 정보들이 발견되었는지 분석해보고자 한다.
Plist 파일
먼저 Plist 파일은 애플리케이션 데이터 및 설정 정보를 저장하는 데 사용하는 XML 파일로 해당 정보가 암호화되지 않아 중요 정보가 저장되는 경우가 가끔 존재한다.
기본적으로 버전 정보, 바이너리 정보 등이 저장되어 있다.
대표적으로 검색하는 파일 위치는 아래에서 확인할 수 있다.
* Info.plist 파일 위치 - /var/containers/Bundle/Application/[앱 UUID]/[앱 명]/Info.plist
* 그 외 plist 파일 위치 - /private/var/mobile/Containers/Data/Application/[앱 UUID] (or) ipa 압축 해제 후 내부에 존재하는 plist 파일을 점검
여기서 앱 UUID는 찾기가 어려울 수 있는데 데이터 컨테이너에서 수정된 날짜를 최신순으로 정렬하여 가장 최신으로 수정되거나 접근한 UUID를 확인해 보면 현재 진단중인 파일일 것이다
UserDefaults
UserDefaults는 사용자 기본 설정 및 속성을 저장하는 클래스로 사용자가 입력한 정보가 해당 파일에 남아있는 경우가 존재한다. (이 또한 plist 파일로 저장됨)
* UserDefault 위치 - /private/var/mobile/Containers/Data/Application/[앱 UUID]/Library/Preferences/[앱 명].plist
해당 파일 내에 사용자가 입력한 정보가 평문으로 존재할 수 있다.
KeyChain
securityd 데몬으로 접근 관리되는 키체인은 암호화 데이터베이스라고 볼 수 있는데 키와 세션 토큰 값을 저장한다.
API를 통해 접근할 수 있으며 SQLite 데이터베이스로 구현되어 있는데 macOS에서는 여러 계정별 키체인을 생성할 수 있지만 iOS에서는 모든 앱에서 하나의 keychain만 쓸 수 있다.
kSecAttrAccessGroup 속성의 접근 그룹 기능을 사용하면 동일한 개발자가 서명한 앱 간 항목에 대한접근 공유가 가능
KeyChain의 경우 SQLite DB로 구현되어 있어 sqlite_browser 설치 후 확인할 수 있지만 dumper 도구를 사용하여 복호화할 수 있기 때문에 이 파일에도 중요 정보가 존재할 수 있다.
*SQLite : 경량형 관계형 데이터베이스 엔진으로 모바일과 같은 시스템에 적합
* KeyChain 위치 - /private/var/Keychains/keychain-2.db
* KeyChain_dumper - https://github.com/ptoomey3/Keychain-Dumper/releases
* SQLite Browser - https://sqlitebrowser.org/dl/
Keychain_dumper를 설치하고 압축을 풀면 파일이 존재하는데 이를 keychain이 존재하는 경로에 삽입 후 chmod +x keychain_dumper 명령어로 실행권한을 주고 실행하면 덤프가 수행된다.
진단 시에는 중요 정보를 입력 후 덤프를 실행, 덤프 내용을 확인하면 될 것이다.
** 특정 버전, 최신 iOS 버전 등에서는 ‘you should unlock your device!’가 출력되며 실행이 되지 않을 수 있다.
Core Data
Core Data는 MVC 모델을 관리하는 프레임워크로 SQLite를 DB로 사용한다. 즉, 모델을 만들고, 개체간의 관계를 관리하고, 데이터를 로컬에 저장하는 등의 역할을 수행한다.
SQLite와 다른 점은 테이블명 앞에 Z 문자가 붙는다는 것이며 여기에 저장되는 데이터가 암호화되지 않아 중요 정보가 노출될 수 있음
** 여기서 중요정보 암호화를 위해 암호화 라이브러리를 사용할 수 있다.
* Core Data 위치 - /private/var/mobile/Containers/Data/Application/[앱 UUID]/Library/Application Support/Model.sqlite
추출한 Model.sqlite 파일은 sqlite 브라우저로 내용을 점검할 수 있다.
Webkit Caching
애플리케이션이 웹 페이지 로드 시 UIWebView를 사용할 때 응답 시간 단축을 위해 사용
중요한 정보를 응답하는 캐싱 작업 진행 여부를 파악하기 위해 진단하며 최근에는 잘 도출되지 않는 취약점이기도 하다.
* Webkit Caching 위치 - /private/var/mobile/Containers/Data/Application/[앱 UUID]/Library/Caches/[앱 명]
위 경로 접근 시 Cache.db 파일들이 존재하며 SQLite Browser로 점검하도록 한다.
Realm
Realm DB는 안드로이드나 iOS에서 쓰는 Small DB다. SQLite와 Core Data의 대안으로 개발된 오픈소스 프로젝트로 해당 DB를 사용중인 애플리케이션의 경우 진단이 가능. 암호화 설정이 존재하지만 설정되지 않은 경우 데이터를 평문으로 저장하게 된다.
* Realm DB - https://www.mongodb.com/ko-kr/docs/atlas/device-sdks/sdk/java/install/
* DB 파일 위치 - /private/var/mobile/Containers/Data/Application/[앱 UUID]/Documents/default.realm
realm DB 파일의 내용은 realm studio 프로그램을 통해 내용 확인이 가능하다.
Couchbase Lite
경량화, 임베디드, NoSQL 등을 위해 개발된 DB 엔진으로 iOS와 macOS에 주로 쓰인다.
해당 DB 파일 또한 평문으로 저장된 중요 정보 데이터가 없는 지 점검하도록 한다.
* DB 파일 위치 - /private/var/mobile/Containers/Data/Application/[앱 UUID]/Library/Application Support/CouchbaseLite/dbcouchbasedb.cblite2/db.sqlite3
DB 파일의 내용은 SQLite Browser를 통해 확인이 가능하다.
YapDatabase
SQLite를 기반으로 구축된 collection/key/value 기반 저장소이며 macOS, iOS 등을 대상으로 Swift & Objective-C 개발자를 위해 구축된 DB다.
* DB 파일 위치 - /private/var/mobile/Containers/Data/Application/[앱 UUID]/Library/Application Support/YapDatabase.sqlite
DB 파일의 내용은 SQLite Browser를 통해 확인이 가능하다.
실제 진단 시 발견됐던 파일
위 정보들을 기반으로 진단하던 도중 한 사이트에서 위 파일뿐 아니라 자체적으로 생성된 로그파일을 확인할 수 있었다.
진단을 위해 내부 경로를 탐색하던 중 Documents 경로에 한 log 파일을 확인할 수 있었는데 해당 log 파일 내부에는 UserID 값과 암호화된 Password, 내부 서버 URL 등이 노출된 것을 확인할 수 있었다.
이러한 정보들은 2차적인 공격에 악용될 수 있으며 찾는 방식도 어렵지 않기 때문에 반드시 암호화하여 저장하는 것이 바람직하다고 볼 수 있겠다.
'4. 모바일 앱 취약점 진단 > iOS' 카테고리의 다른 글
앱 소스코드 내 중요 정보가 노출되는 경우 (0) | 2024.07.17 |
---|---|
Zadig 같은 툴을 잘못 사용하여 iOS 아이폰 단말기 USB 인식이 안될때 해결법! (0) | 2024.07.15 |
iOS 15~17 이상 버전 탈옥하기 - Winra1n, Palera1n (3) | 2024.07.09 |
[iOS] 1.3. 디바이스 임의 개조 탐지 취약점 (0) | 2024.06.19 |
[iOS] 1.1. 소스코드 난독화 및 암호화 취약점 (0) | 2024.06.19 |