티스토리 뷰
Local Data Storage(내부 데이터 저장소)
- iOS 애플리케이션은 임시 데이터와 영구 데이터를 저장하기 위해 로컬 시스템과 상호작용함
- 애플리케이션이 중요한 정보를 임시/영구 형식으로
안전하지 않은 상태(평문)로 저장하면 위험이 발생 가능성 존재
• XML & Plist
• SQLite files
• Keychain data
• Core data
• NSUserDefaults class
• Temporary File (data cache)
1. Plist
- Info.plist 파일
> 실행 패키지에 관한 필수 설정 정보가 포함된 구조화된 텍스트 파일
(버전 정보, 실행가능한 바이너리 이름, 지원되는 iOS 버전 및 디바이스 모델 등의 정보)
- 일반적으로 유니코드 UTF-8로 인코딩, 내용은 XML 사용
> root XML노드 => Keys and Value로 구성된 딕셔너리 형태
- 시스템은 이 키와 값을 사용하여 앱과 앱의 설정을 가져옴
=> 따라서 플러그인, 프레임워크, 앱에 Info.plist가 있어야함
Plist 항목에 들어간 후 ID / PW 값 저장
저장 장소 확인은 아래와 같음.
1) 번들 컨테이너 확인
Applications(User)
/var/containers/Bundle/Application/$uuid/DIVA-v2.app/Info.plist
여기선 없었음
2) 데이터 컨테이너 확인
/private/var/mobile/Containers/Data/Application/$uuid/Documents/userInfo.plist
중요정보(ID, PW) 평문 저장 확인
2. UserDefaults
- NSUserDefaults 클래스
- 앱의 기본 데이터베이스에 영구적으로 데이터를 저장할 수 있는 인터페이스
- key - value 쌍으로 저장
- Singleton 객체, 앱 전체에서 하나의 인스턴스로 사용
- float, double, NSData, NSString 등의 데이터 타입 저장, 불러오기
- 애플리케이션을 종료하고 재시작해도 정보는 계속 유지
- 로그인 상태 저장에 사용될 때도 있음(계정정보, 접근 토큰 등)
UserDefaults 항목에 들어가 데이터 값 입력함
UserDefaults도 Plist 파일로 저장됨
/private/var/mobile/Containers/Data/Application/$uuid/Library/Preferences/com.highaltitudehacks.DVIAswiftv2.plist
입력한 데이터 값 평문 저장 확인
3. KeyChain
- Objection 사용해 keychain dump 확인
Objection : 런타임을 조작하여 공격자가 원하는 행위를 성공적으로 할 수 있도록 프로세스에 실시간으로 주입해 사용. Frida 기반으로 동작 -> python3에서 frida 환경을 사전에 구축, pip install로 objection 설치
4. Core Data
- 앱의 Permanent Data(영구 데이터) 저장 가능
- Core Data는 앱에서 모델 계층 개체를 관리하는 데 사용하는 프레임워크
=> 즉 DB x
데이터 입력후 저장함
Core Data 경로 접근 후 sqlite 파일 export
/private/var/mobile/Containers/Dara/Application/$uuid/Livrary/Application Support/Model.sqlite
sqlite 브라우저로 확인
코어 데이터는 테이블 이름 앞에 Z가 붙음
데이터 확인시, 입력 데이터 평문 노출됨
5. Webkit Caching
- 웹 페이지를 로드하기 위해 UIWebView를 사용하는 애플리케이션은 응답 시간을 단축하기 위해 Caching을 사용
- UIWebView는 앱에 웹 컨텐츠를 포함하는 뷰
- 경우에 따라, 중요한 정보를 응답하는 Caching 가능
- 요청과 응답이 애플리케이션 샌드박스에 저장되는 위치를 찾아 확인
+App Store는 2020.04부터 VIWebView를 사용하는 새로운 앱을 수락하지 않을 예정이며, 2020.12부터 UIWebView를 사용하는 앱 업데이트를 수락하지 않을 예정임.
확인 경로
/private/var/mobile/Containers/Data/Application/$uuid/Library/Caches/com.highaltitudehacks.DVIAswiftv2
추출 후 확인 가능
6. Realm
- Realm 데이터베이스는 iOS 또는 안드로이드에서 사용되는 작은 데이터베이스
- 오픈소스이고 SQLite와 Core Data에 대한 대안으로 제작됨
- Realm은 애플에서 제공하지 않지만, 주목할 가치가 있는 데이터베이스
- 설정에 암호화가 활성화되어 있지 않으면 암호화되지 않은 상태로 저장함
- /private/var/movile/Containers/Data/Application/$uuid/Documents/default.realm
- 데이터베이스 확인하기 위해 Realm Studio 설치 필요
진단 수행 대상이 realm DB를 사용하는 경우 확인
데이터 입력 및 저장
파일 확인 후 export
/private/var/mobile/Containers/Data/Application/APPUUID/Documents/file.realm
realm studio 설치 후 파일 확인
https://github.com/realm/realm-studio/releases
7. Couchbase Lite
- Couchbase Lite는 경량화, 임베디드, 문서 기반(NoSQL), 동기화 할 수 있는 데이터베이스 엔진
- iOS와 macOS 앱을 위한 데이터베이스 엔진
- /private/var/mobile/Containers/Data/Application/$uuid/Library/Application Support/CouchabseLite/dvcouchbasedb.cblite2/db.sqlite3
파일 경로 확인 후 export
/private/var/mobile/Containers/Data/Application/UUID/Library/Application Support
SQLite 브라우저로 확인
8. YapDatabase
- YapDatabase는 SQLite를 기반으로 구축된 collection/key/value 저장소
- macOS, iOS, watch를 대상으로 Swift & Objective-C 개발자를 위해 SQLite 위에 구축됨
데이터 입력 및 저장함
파일 경로 확인
/private/var/mobile/Containers/Data/Application/$uuid/Library/Application Support/YapDatabase.sqlite
파일 확인
(1) plist (file.plist 파일 확인)
ㄱ. 번들 컨테이너 - Applications(User) : /var/containers/Bundle/Application/진단앱
ㄴ. 데이터 컨테이너 - /private/var/mobile/Containers/Data
(2) UserDefault (info.plist 파일 확인)
/private/var/mobile/Containers/Data/Application/UUID/Library/Preferences/파일.plist
(3) Keychain (objection으로 확인)
/private/var/Keychains/keychain-2.db
keychain_dumper로 확인
(4) CoreData (sqlite브라우저로 확인)
/private/var/mobile/Containers/Data/Application/APPUUID/Library/Application Support
(5) Webkit Caching (2020년 4월 이후로 사라진 취약점) (sqlite 브라우저로 확인)
/private/var/mobile/Containers/Data/Application/AppUUID/Library/Caches
(6) Realm (realm DB 사용하는 곳이라면 realm studio로 확인)
/private/var/mobile/Containers/Data/Application/APPUUID/Documents/file.realm
(7) Couchbase Lite (sqlite브라우저로 확인)
/private/var/mobile/Containers/Data/Application/APPUUID/Library/Application Support
(8) YapDatabase.sqlite (yap DB를 사용하는 곳인지 먼저 확인)
/private/var/mobile/Containers/Data/Application/APPUUID/Library/Application Support
참고 출처
'보안 > App' 카테고리의 다른 글
[DVIA-v2] Bypassing Biometrics (0) | 2023.07.05 |
---|---|
[DVIA-v2] Side Channel Data Leakage (0) | 2023.07.04 |
[DVIA-v2] Runtime Manipulation(Login Method 1) (2) | 2023.07.03 |
[Android] Open redirect vulnerability Using Deeplink (2) | 2023.06.29 |
[DVIA-v2] Jailbreak Test 1,2 (0) | 2023.06.12 |
- Total
- Today
- Yesterday
- SNOMED CT Mapping
- YapDatabase
- Android 7.0
- Keystroke logging
- K-Shield Jr 9기 단기
- Android
- Local Data Storage
- UserDefaults
- Runtime Manipulation
- Data Leakage
- InsecureShop
- SNOMED
- LAContext
- 케쉴주
- Face ID bypass
- SNOMED CT
- 탈옥 우회
- 케이쉴드주니어
- dvia-v2
- iOS 15 jailbreak
- Jailbreak iOS
- IoTGoat
- Objection
- core data
- IoT Analysis
- Couchbase Lite
- deep learuning
- Pasteboard
- Webkit Caching
- Touch bypass
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |