티스토리 뷰

보안/App

[DVIA-v2] Local Data Storage

damti 2023. 6. 26. 10:33

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

 

Releases · realm/realm-studio

Realm Studio. Contribute to realm/realm-studio development by creating an account on GitHub.

github.com

 

 

 

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

 

 

 

참고 출처

https://takudaddy.tistory.com/590