Local Data Storage

justugi·2024년 7월 7일
0

DVIA

목록 보기
1/11

주의사항 : 이 포스팅은 개인 학습 및 교육적 목적으로 작성되었으며, 제공하는 정보를 악용하여 불법적인 행위를 하는 것은 엄격히 금지되어 있습니다. 타인의 시스템에 대한 접근 권한을 얻기 위해 명시적인 동의를 받아야 하며, 이러한 기술을 사용하여 발생하는 모든 결과에 대한 책임은 사용자에게 있습니다.

Local Data Storage

: iOS 애플리케이션은 임시 데이터와 영구 데이터를 로컬 시스템(iOS 설치기기)에 저장할 수 있다.

  • 데이터를 평문으로 저장하게 될 경우 계정 정보(ID/PW), 고객 정보, 서버 정보 등과 같은 중요 정보가 유출될 수 있다.

1. Data Container

  • /var/mobile/Containers/Data/Application/$uuid 에 위치. 앱의 사용자 데이터와 문서들이 저장된다.

2. Bundle Container

  • /private/var/mobile/Library/Mobile Documents 에 위치. 앱의 실행 파일과 리소스 파일들이 저장된다.

3. iCloud Container

  • /private/var/mobile/Library/Mobile Documents 에 위치. iCloud 와 관련된 데이터가 저장된다.

4. iOS Keychain

  • /var/Keychains/keychain-2.db 에 위치. 사용자 이름, 암호, 네트워크 암호, 인증 토큰과 같은 민감한 정보를 저장한다.
  • Sqlite 데이터베이스로 구성된 파일이며 모든 데이터는 암호화된다.

Plist (Property List)

: 애플리케이션 데이터 및 설정 정보를 내부 저장소에 저장하는 데 사용되는 XML 파일

  • 저장된 정보는 암호화 되지 않는다.
  • ID / Passwd 저장
  • (데이터 컨테이너) /private/var/mobile/Containers/Data/Application/$uuid/Documents/userInfo.plist 에 데이터가 평문으로 저장되어있다.

UserDefault

NSUserDefault 클래스 : 사용자 기본 설정 및 속성을 저장하는 가장 일반적인 방법 중 하나로, 애플리케이션을 종료하고 재시작하여도 저장된 정보는 계속 유지된다.

  • 해당 클래스로 저장한 데이터는 암호화되지 않은 상태로 plist 파일에 저장된다.

  • 데이터 저장

  • (데이터 컨테이너) /private/var/mobile/Containers/Data/Application/$uuid/Library/Preferences 경로의 .plist 파일에 데이터가 평문으로 저장되어있다.

KeyChain

iOS KeyChain : SQLite DB 로 구현된 암호화된 데이터베이스이다.

  • kSecAttrAccessGroup 속성의 접근 그룹 기능을 통해 동일한 개발자가 서명한 앱 간 항목에 대한 접근 공유가 가능하다.
  • 키체인에 대한 접근은 securityd 데몬에 의해 관리된다.

  • 데이터 저장

  • SSH를 통해 keychain_dumper 를 아이폰에 업로드하고 실행하여 keychain-2.db 파일을 컴퓨터로 복사 후 SQLite 로 확인.


Core Data

: 앱의 모델 객체를 관리하기 위한 프레임 워크

  • 모델을 만들고, 서로 다른 유형의 개체 간의 관계를 관리하고, 데이터를 로컬로 저장하고, 쿼리를 원할 때마다 로컬 캐시에서 가져오는 기능을 한다.
  • SQLite 와 다른 점은 데이터베이스 테이블명 앞에 Z 문자가 붙는다.
  • 데이터를 저장할 떄 암호화되지 않는다.

  • 데이터 저장

  • /private/var/mobile/Containers/Data/Application/$uuid/Library/Application Support 경로의 Model.sqlite 파일을 PC로 복사

  • DB Browser for SQLite 로 Model.sqlite 파일 열람. 데이터가 평문으로 저장되어있다.

Webkit Caching

: 웹 페이지를 로드하기 위해 UIWebView 를 사용하는 앱이 응답 시간을 단축하기 위해 사용하는 Caching

  • App Store 에서는 2020년 4월부터 UIWebView 를 사용하는 새로운 앱과 2020년 12월부터 UIWebView 를 사용하는 앱 업데이트를 수락하지 않아 과거의 앱에서만 해당 취약점이 발생한다.

  • /private/var/mobile/Containers/Data/Application/$uuid/Library/Caches/com.highaltitudehacks.DVIAswiftv2 경로의 Cache.db 파일을 PC로 복사

  • DB Browser for SQLite 로 Cache.db 파일 열람. DVIA-v2 앱에서는 UIWebView 가 동작하지 않아 데이터가 저장되지 않는다.


Realm

: 오픈소스 데이터베이스 관리시스템으로 모바일 환경을 주요 타깃으로 한다.

  • 데이터 저장
  • /private/var/mobile/Containers/Data/Application/$uuid/Documents 경로의 default.realm 파일을 PC로 복사

  • Realm Studio 로 default.realm 파일 열람. DVIA-v2 앱에서는 Realm 이 동작하지 않아 데이터가 저장되지 않는다.

Couchbase Lite

: 경량화, 임베디드, 문서 기반(NoSQL), 동기화할 수 있는 iOS 와 macOS 앱을 위한 데이터베이스 엔진이다.

  • 데이터 저장

  • /private/var/mobile/Containers/Data/Application/$uuid/Library/Application Support/CouchbaseLite/dvcouchbasedb.cblite2 경로의 db.sqlite3, db.sqlite3-wal, db.sqlite3-shm 파일을 PC로 복사

  • DB Browser for SQLite 로 db.sqlite3 파일 열람. 데이터가 평문으로 저장되어있다.

YapDatabase

: SQLite를 기반으로 구축된 collection / key / value 저장소이다.

  • 데이터 저장

  • /private/var/mobile/Containers/Data/Application/$uuid/Library/Application Support 경로의 YapDatabase.sqlite, YapDatabase.sqlite-wal, YapDatabase.sqlite-shm 파일을 PC로 복사

  • DB Browser for SQLite 로 YapDatabase.sqlite 파일 열람. DVIA-v2 앱에서는 데이터가 확인되지 않는다.

대응방안

  • 자격증명, 개인정보, 인증정보 등 중요한 정보는 디바이스 내 저장하지 않아야 한다.
  • 디바이스 내 중요정보를 저장해야 할 경우, 안전한 암호화 알고리즘을 통해 데이터를 암호화 해야한다.

출처
https://hagsig.tistory.com/139
https://takudaddy.tistory.com/590

profile
IT 보안, 관심 있는 것을 공부합니다.

0개의 댓글

관련 채용 정보