웹페이지를 로드하기 위해 UIWebView를 사용하는 앱은 그 속도를 빠르게 하기 위해 캐싱한다.
그 중 중요정보를 캐싱하는 경우가 있기에, 요청 및 응답 정보가 앱 샌드박스 내 어디에 저장되어 있는지 확인해야 한다.
데이터가 데이터베이스 테이블명이 cf_url로 시작하는 곳에 저장되어 있다는 힌트가 있다.
Data Container 내 Library/Cache 디렉토리에 Cache.db 파일을 찾을 수 있다.
해당 파일을 db 브라우저로 확인해보면 cf_url로 시작하는 테이블을 확인할 수가 있다.
현재는 UIWebView를 사용하는 앱 업데이트를 수락하지 않는다는 애플의 공지가 있어, 2020년 4월 이후로 사라진 취약점이다.
iOS 앱에서 Realm은 장치에 로컬로 데이터를 저장하고 관리하는 데 사용하는 작은 데이터베이스를 말한다.
입력값이 Realm에 저장되며, 이 역시 앱 샌드박스 내 어디에 존재하는지 찾아야 한다.
Data Container 내 Documents 디렉토리에 .realm 파일들이 생성되어 있었다.
.realm 파일은 Realm Studio를 통해 확인할 수 있다.
Realm Studio 설치 후 파일을 열어보면 입력한 값이 저장되어 있다.
Couchbase Lite는 모바일 장치용 임베디드 NoSQL 데이터베이스 엔진이다.
입력값이 Couchbase Lite 데이터베이스에 저장된다.
이 값이 앱 샌드박스 내 어디에 위치하는지 찾아야 한다.
Data Container 내에서 최근 수정일을 기준으로 찾아보면 Library/Application Support/CouchbaseLite/dvcouchbasedb.cblite2/ 디렉토리에서 db.sqlite3 파일을 찾을 수 있다.
해당 디렉토리 내 파일들을 모두 추출하여 DB Browser로 확인하면, revs 테이블 내에 입력한 값들이 평문으로 저장되어 있다.
Yap Database는 SQLite를 기반으로 구축된 collection/key/value 저장소이다.
입력값이 Yap Database에 저장되고, 앱 샌드박스 내 저장된 위치를 찾아야 한다.
Data Container내 Library/Application Support 디렉토리 내 YapDatabase.sqlite 파일이 존재한다.
해당 파일을 추출하여 DB Browser로 확인하면 data 필드값이 BLOB으로 표시되는데 이를 클릭하면 바이너리 데이터에 입력한 값이 저장되어 있음을 알 수 있다.
앱이 Yap Database를 사용한다면 위 디렉토리에서 확인하여 중요 정보가 평문으로 저장되는지 확인해야 한다.
지금까지 Local Data Storage 파트를 살펴보았는데, 앱에서 기기 내 중요정보를 저장하지 않아야 하고, 저장해야 한다면 반드시 암호화를 해야 한다는 것을 알 수 있다.