2016년 11월 22일 화요일

스마트폰 포렌식과 SQLite


[Tech Report]스마트폰 포렌식과 SQLite



  • AhnLab


  • 2014-03-28

조금 특별한 데이터베이스, SQLite

 

최근 스마트폰 시장의 성장은 괄목할 만하다. 2008년경 아이폰(iPhone) 3가 출시되면서 규모가 급격하게 성장하기 시작한 스마트폰 및 관련 시장은 이후 다양한 안드로이드 기반의 스마트폰이 잇따라 출시되면서 더욱 활성화 되었다. 이 같은 스마트폰 시장의 성장과 함께 약진하고 있는 데이터베이스가 있다. 바로 SQLite이다. 월간 안을 통해 총 4회에 걸쳐 SQLite 데이터베이스의 특징을 살펴보고 삭제된 SQLite 데이터베이스의 정보를 복원할 수 있는 기법을 소개한다.

 

<연재 목차>

1부_스마트폰 포렌식과 SQLite (이번 호)

2부_SQLite 데이터베이스의 구조적 특징과 데이터 복구

3부_SQLite의 레코드 구조와 삭제된 데이터 복구 방법

4부_스마트폰 인스턴트 메신저 및 문자 메시지 복구하기

 

SQLite는 로컬 전용의 데이터베이스이자 오픈소스 데이터베이스 소프트웨어로, 가볍고 빠른 특성 때문에 간단한 정보를 체계적으로 저장해야 하는 응용프로그램이나 임베디드 장치에 탑재되는 소프트웨어에서 주로 사용되고 있다. 또한 일반 데스크톱이나 노트북과 같은 개인용 컴퓨터에서 구동되는 응용프로그램에서도 많은 양의 데이터를 체계적으로 저장할 필요가 있는 경우에도 SQLite가 많이 사용되고 있다. 특히 iPhone의 성장과 함께 전 세계적으로 보급이 확대되고 있는 Mac OS X에서는 운영체제 단위로도 적극적으로 SQLite를 사용하고 있다.



대부분의 데이터베이스와 달리 SQLite는 주로 로컬 전용 데이터베이스로 사용되며, 데이터베이스 사용에 대한 결과는 모두 하나의 파일에 저장된다. 통상적으로 응용프로그램의 구성품으로 SQLite 제어 엔진과 SQLite 데이터베이스 파일이 포함된다. 응용프로그램은 이 데이터베이스 파일을 직접 읽고 쓰면서 테이블(table), 인덱스(index), 트리거(trigger), 뷰(view)를 갖춘 하나의 파일로 관리한다. 

 




[그림 1] SQLite 소스코드 다운로드 페이지

 

스마트폰 포렌식과 SQLite



이른바 ‘스마트폰의 시대’가 도래하기 이전의 디시털 포렌식은 해킹이나 전자 문서 위조, 탈취와 같은 ‘디지털기기에 의한’ 사건의 조사가 주를 이루었다. 그러나 스마트폰이 대중화되면서 수많은 사이버 사건•사고가 스마트폰에 존재하는 ‘디지털 증거에 의해’ 해결되는 경우가 많아졌다. 따라서 보다 정확한 사건 파악을 위해 수많은 포렌식 전문가들이 스마트폰 포렌식을 연구하고 있으며, 그 중심에는 SQLite가 있다.



SQLite를 사용하는 응용 프로그램은 인증 ID, 패스워드 등과 같이 프로그램 구동 시 사용되는 중요한 정보를 저장하는 경우가 많다. 또한 스마트폰에 탑재되는 응용프로그램은 SQLite에 문자 데이터, 메일, 일정, 주소록 등의 민감한 정보를 저장하는 경우가 대부분이다. 흔히 사이버 범죄 용의자 또는 악의적인 공격자가 시스템에 남아있는 공격의 흔적 등 자신에게 불리하게 작용할 수 있는 정보들을 삭제하는 경우를 볼 수 있다. SQLite 데이터베이스에 저장되어 있는 민감한 데이터도 이러한 삭제 대상에 포함될 가능성이 높다.



따라서 SQLite에서 삭제된 데이터를 복구하는 기술은 수많은 사이버 범죄와 분쟁을 해결할 수 있는 포렌식의 열쇠와 다름없다. 특히 최근 사회적 이슈가 되고 있는 스마트폰에서 사용되는 응용프로그램의 상당수가 SQLite를 사용한다는 점에서 포렌식 관점에서의 SQLite의 의미를 짚어볼 필요가 있다.

 




[그림 2] SQLite 블록 다이어그램

 

SQLite의 대표적인 특징은 데이터베이스이지만 크기가 굉장히 작다는 점이다. SQLite는 모든 기능을 사용 가능하도록 설정할 경우 라이브러리 크기가 250KB 정도가 되며, 필수 기능 요소만 사용 가능하도록 설정할 경우 라이브러리 크기는 180KB 정도의 크기를 갖는다. 또한 데이터베이스 파일 크기뿐만 아니라 컴퓨터 자원 역시 최소로 활용하도록 설계되었다. 즉, SQLite 라이브러리는 응용 프로그램의 스택 크기에 상관없이 원활하게 동작할 수 있도록 설계되었으며 100KB 정도에 불과한 힙 크기를 사용한다. 따라서 휴대전화, PDA, MP3 플레이어 등과 같이 가용 메모리가 적은 환경에 데이터베이스 엔진을 구성할 수 있다. 또한 리눅스, 유닉스, Mac OS X, OS/2, Win32를 지원하고 서로 다른 운영체제나 플랫폼, 아키텍처로의 변환이 용이하다. 이러한 특징으로 인해 SQLite는 스마트폰 개발 시 필수 요소가 되었고, 스마트폰의 성장과 함께 SQLite 또한 크게 성장할 수 있었던 것이다.

 

Mac OS X, iPhone 그리고 SQLite


매킨토시 컴퓨터와 아이폰의 제작사인 애플(Apple)은 꾸준히 SQLite를 사랑해온 대표적인 회사이다. 애플이 제작한 컴퓨터 운영체제인 Mac OS X는 일부 시스템 로그를 제외하면 대부분의 데이터를 SQLite나 PList 파일 포맷에 저장한다. 애플리케이션 제작자들에게도 이들 두 가지 파일 포맷을 이용해 데이터를 저장하도록 권장하고 있다.

 



[그림 3] Mac OS X Lion의 loginwindows.plist

 

PList는 상대적으로 구조가 간단하고 양이 적은 데이터를 저장하는데 용이한 포맷이다. 반면 SQLite는 관계형 데이터베이스의 장점을 갖고 있으며, 다소 복잡하지만 효율적으로 데이터를 저장하고자 하는 애플리케이션에서 주로 이용된다.




또한 애플리케이션의 설정 정보와 같은 기본적인 정보는 PList에 저장되는 경우가 많지만 사용자가 애플리케이션을 사용함으로써 꾸준히 축적되는 데이터는 SQLite를 통해 저장하는 경우가 대부분이다. 디지털 포렌식에는 기계적으로 생성된 설정 정보도 물론 중요하지만 사용자가 직접 생성한 정보들을 통해 사건이 해결되는 경우가 많다. 따라서 Mac OS X에 대한 디지털 포렌식 수행 시 SQLite 파일을 만나면 주의 깊게 살펴볼 필요가 있다.

 

 

 

[그림 4] Mac OS X의 메일 애플리케이션의 SQLite

 

데이터를 SQLite에 저장하는 것을 선호하는 애플의 성향은 아이폰 제작에도 영향을 끼쳤다. 아이폰의 주요 애플리케이션 대부분은 SQLite를 통해 데이터를 저장 및 관리한다. 스마트폰의 특성상 SQLite를 대체할 만큼 성능이 뛰어난 소형 데이터베이스가 존재하지 않는 것도 SQLite를 선택한 하나의 이유로 생각된다. 애플이 Mac OS X와 아이폰에 SQLite를 사용한 이유가 무엇이든 간에 익히 성능이 검증된 바 있는 SQLite는 현재 또 다른 대표적인 스마트폰 운영체제인 안드로이드의 개발에도 집중적으로 사용되고 있다. 이로써 SQLite는 수많은 스마트폰 개발자들이 가장 선호하는 로컬 데이터베이스로도 자리매김하게 되었다.

 

 

 



[그림 5] 안드로이드 기반 스마트폰의 mmssms.db



 



[그림 6] 안드로이드와 SQLite

 

포렌식 관점에서의 SQLite




SQLite의 데이터를 얼마나 잘 가공하고 추출하느냐에 따라 스마트폰 포렌식의 성패가 결정된다고 해도 과언이 아니다. 그러나 앞서 언급한 바와 같이 공격자는 포렌식 조사가 이루어지기 전에 스마트폰의 문자 메시지나 통화내역, 사진 파일들을 미리 삭제할 가능성이 있다. 따라서 삭제된 SQLite의 레코드 데이터를 복구하는 것은 스마트폰 포렌식 과정에서 사건의 실마리를 찾는데 매우 중요한 역할을 한다.




SQLite 데이터베이스에 저장된 데이터를 삭제하는 행위는 크게 ‘데이터베이스 내의 레코드를 삭제하는 경우’와 ‘데이터베이스 파일 자체를 삭제하는 경우’로 나뉜다. 데이터베이스 파일이 삭제되면 파일 시스템의 파일 복원 방법을 이용하여 파일을 복원해야 한다.




데이터베이스 파일에서 파일, 즉 레코드만 삭제된 경우에는 데이터베이스의 스키마 테이블을 이용해 파일 내에 존재하는 비할당 영역에서 삭제된 레코드를 해석하여 추출할 수 있다.



일반적으로 스마트폰에서는 애플리케이션을 삭제하지 않고 데이터베이스 파일만 삭제하는 경우는 드물기 때문에 스마트폰 포렌식에서는 데이터베이스 파일에서 삭제된 레코드만 복구하는 경우가 많다.

 

 

 



[그림 7] SQLite 데이터베이스 파일 기본 구조

 

한편 데이터베이스 파일의 레코드를 찾아가 삭제된 영역을 파악하고 해당 영역에서 스키마 테이블을 이용해 삭제된 레코드만을 정확하게 해석하기 위해서는 SQLite 데이터베이스 파일의 구조를 정확하게 이해해야 한다. 구조를 파악한 후에는 레코드가 삭제된 후의 파일의 변화와 레코드 영역을 찾아가는 방법, 삭제된 영역을 파악하는 방법, 삭제된 레코드를 정확하게 해석하는 방법 등을 이해해야 한다. 이에 월간 안 5월호부터는 디지털 포렌식 전문가들이 사용하는 SQLite 데이터 복구 방법을 살펴보고 실제 스마트폰의 삭제된 문자메시지에 대한 복구 과정을 알아볼 예정이다.@

 

 










  • AhnLab 로고



  • 전상준 연구원




이 정보에 대한 저작권은 AhnLab에 있으며 무단 사용 및 도용을 금합니다.

단, 개인이 비상업적인 목적으로 일부 내용을 사용하는 것은 허용하고 있으나, 이 경우 반드시 출처가 AhnLab임을 밝혀야 합니다.

기업이 이 정보를 사용할 때에는 반드시 AhnLab 의 허가를 받아야 하며, 허가 없이 정보를 이용할 경우 저작권 침해로 간주되어 법적인 제재를 받을 수 있습니다. 자세한 내용은 컨텐츠 이용약관을 참고하시기 바랍니다.

정보 이용 문의 : contents@ahnlab.com


홈페이지 jQuery 라이브러리에서 CVE-2019-11358 취약점 패치 여부 확인 방법

현재 홈페이지에서 사용 중인 jQuery 라이브러리가 CVE-2019-11358 취약점 패치를 적용했는지 확인하는 방법은 다음과 같습니다. 1. jQuery 버전 확인 홈페이지 소스 코드를 확인하여 jQuery 라이브러리 버전을 직접 확인합니다. 웹 ...