본문 바로가기

[+] Forensic

iOS Forensic - (1)

요즘은 대부분 스마트폰 하나씩은 가지고 있다. 안드로이드폰이 되었던 아이폰이 되었던 대부분은 스마트폰이라는 범주안에 포함되는 휴대용 전화기를 가지고 있으며 더 나아가서는 태블릿 PC라는 것도 가지고 있다. 이처럼 사람과 가장 밀접한 관계를 가진 기기들은 당연히 밀접한 관계인 사람의 정보를 가지고 있기 마련이다. 이러한 점을 해커들도 모르고 있지 않다. 그래서 요즘은 스마트폰에 관한 공격이 끊이지 않고 있고 연구 또한 계속되고 있다. 얼마전까지만 하더라도 연구로 그치던 공격들이 실제 사용되고 피해도 생기고 있으며 현재 스마트폰 악성코드는 기하급수적으로 그 수가 늘어나고 있다. 그래서 침해사고에 관한 포렌식을 수행 할 경우 특정인물과 관련된 정보를 얻고자 할 때 스마트폰을 분석하게 된다. 스마트폰의 포렌식 수행 절차는 사실 표준으로 정해져 있지 않다. 또 스마트폰 분석을 하기 위해서는 스마트폰에서 지원하는 암호화를 해제하거나 우회해서 암호화 되어 있던 데이터를 복호화 해 분석 결과를 도출 해 낼 때 도움이 될만한 정보를 찾아야 한다. 이러한 면에서 보면 지금까지 알고 있던 법적 측면에서 상이한 것이 사실이다. 암호화를 해제하거나 우회하는 과정에서 스마트폰 데이터의 무결성이 보장받지 못할 수 있기 때문이다. 하지만 현재까지는 이러한 측면보다 증거를 얻었다는 측면이 더 강하게 작용한다.

iOS는 Apple 社에서 만든 iPhone, iPod, iPad 장비에 모두 탑재 되는 운영체제이다. 현재 버전은 5.x 버전까지 나왔으며 앞으로 6.x 버전이 출시 예정이다. 그리고 iOS에서는 HFSX 파일시스템을 채택해 사용하고 있다. HFSX는 HFS+의 변형 파일시스템으로 현재 파일시스템 도구로 널리 알려진 소프트웨어로 분석이 가능하다.




[iOS 이미지 덤프]

iOS 이미지를 분석하기 위해서는 덤프하려는 장치(iPhone, iPod, iPad)의 Root 권한을 획득해야만 한다. 원래대로라면 장치의 계정은 Mobile 계정으로 Root 권한이 아니다. 하지만 현재 유명한 Jailbreak라는 Root 권한 획득 프로그램으로 권한 획득이 가능하다. 이 점은 기존 포렌식과 조금 상이한 부분이지만 현재로서는 어쩔 수 없는 부분이므로 대부분 수용되어지는 부분이다. 그렇기에 다음에 소개 할 이미징 방법도 Root 권한 획득 상태라는 가정하에 진행된다.

사실 Root 권한을 획득하지 않고 이미지를 덤프할 수도 있다. 또 분석도 어느정도는 가능하다. 하지만 분석의 한계가 너무 높기 때문에 사실상 얻을 만한 데이터는 거의 없다. iOS의 경우 사용자의 정보들이 들어 있는 파티션인 Data 파티션이 암호화가 되어 있기 때문이다. 당연히 사용자의 정보를 암호화 하는 것은 옳은 일이지만 포렌식 측면에서 볼 때는 달갑지 않은 일이다.

이제부터 이미징 과정을 하나씩 살펴보자. 장치의 Root 권한을 획득했다면 SSH를 설치 할 수 있게 된다. SSH를 설치 하고 Mac OS X에서(가능하다면) 장치로 ssh를 이용 해 접속한다.


 - ssh root@<장치 IP>

 - password : alpine


[그림 1 - ssh 접속]


 * 참고 : 장치의 IP는 장치의 wifi 설정에서 확인 할 수 있으며, 패스워드는 alpine으로 1세대 iOS부터 사용 되어왔던 패스워드이다.


접속 후 덤프해야 할 파티션을 확인해야 한다. 파티션 확인은 Unix 명령어인 df를 이용 해 가능하다. 


[그림 2 - 덤프 대상 파티션 확인]


파티션을 보면 disk0s1s1과 disk0s1s2로 나누어져 있는 것을 볼 수 있는데 이 파티션들은 원래 disk0이라는 물리적 디스크에서 논리적으로 나뉜 슬라이스들이다. 두 파티션을 따로 나누어 덤프를 해도 좋고 disk0을 덤프해도 좋다.

disk0s1s1은 OS 파티션으로 OS에서 사용되는 데이터들이 위치하고 있는 파티션이고 disk0s1s2는 Data 파티션으로 사용자 정보가 위치하고 있는 파티션이다. 일단 필자는 용량이 상대적으로 적은 disk0s1s1을 덤프 할 것이다. ssh 도움말을 보면 접속 했을 때 접속 한 후 바로 명령을 실행 할 수 있게 끔 하는 인자를 지정 할 수 있는 것을 확인 할 수 있다.


[그림 3 - ssh 접속 시 명령 인자]


이 인자를 이용 해 덤프를 시도 할 것이다. 다음과 같이 dd를 이용 해 덤프 할 파티션을 열고 해당 파티션의 내용을 로컬 파일로 저장하게끔 명령을 내리면 된다.


 - ssh root@<장치 IP> dd if=/dev/rdisk0s1s1 bs=1M | dd of=ipad_system.img


[그림 4 - ssh와 dd를 이용한 덤프]


여기서 한가지 알아두어야 할 사실이 있다. 파티션을 확인 했을 땐 /dev/disk0s1s1 이었는데 왜 dd 인자로는 /dev/rdisk0s1s1일까? 그 이유는 블록장치파일과 문자장치파일의 차이 때문이다. 블록장치는 데이터에 접근 할 때 블록단위로 접근하지만 문자장치 파일은 데이터에 접근 할 때 섹터단위로 접근하게 된다. 이러한 이유로 인해 덤프와 같은 세밀한 작업을 수행 할 때에는 섹터 단위로 접근하는 문자장치파일을 사용한다.

덤프가 완료되면 우리가 흔히 볼 수 있는 dd 결과가 출력된다. dd 포맷은 일반 파일시스템 분석 도구로도 충분히 분석 가능한 포맷이다. [그림 5]는 AccessData의 FTK로 불러 왔을 때의 모습이다.


[그림 5 - AccessData FTK 분석 화면]


dd 포맷은 분석은 가능하지만 파티션의 정보를 얻기에는 무리가 있는 포맷이다. 파티션 정보를 얻기 위해서는 Mac OS에서 지원하는 hdiutil 도구를 이용 해 얻는 것이 가장 신뢰성있는 방법인데 해당 도구는 dmg라는 iOS의 고유 포맷만을 지원한다. 그래서 dd 포맷을 dmg 포맷으로 변환해 주어야 한다. Mac OS에서는 이러한 변환을 위해 디스크 유틸리티라는 프로그램을 통해 해당 기능을 지원한다.


[그림 6 - 디스크 유틸리티 변환 기능]


변환기능을 이용하면 dmg 포맷의 이미지가 생성되는데 해당 이미지를 hdiutil을 이용해 분석하면 된다. 파티션의 위치 오프셋과 여러 정보를 얻을 수 있는데 pmap과 imageinfo 라는 옵션이 사용된다.


[그림 7 - hdiutil pmap]


사실 이 명령은 지금은 볼 결과가 별로 없어보이지만 물리적 디스크를 덤프 하였을 때 그 효과를 발휘한다. 물리적 디스크에서 각 슬라이스가 어느 지점에서 시작하고 끝나는지를 알려주기 때문에 아주 유용하게 사용 할 수 있다.


[그림 8 - hdiutil imageinfo]


imageinfo 옵션의 경우 이미지의 전체적인 정보를 출력하여 준다. 해당 옵션도 사실은 disk0을 분석 할 때 그 효과가 나타나지만 지금의 경우도 얻을 수 있는 정보는 많이 있다. 이렇게 파티션의 정보를 조금이라도 안다면 분석하는데 있어 도움이 되는 것은 분명하다. 



[시스템 파티션]

이번에는 시스템 파티션에 대해서 알아보자. 시스템 파티션은 iOS가 필요로 하는 파일과 디렉토리로 구성되어 있다. 각 디렉토리의 역할을 한번 알아보도록 하겠다.


[그림 9 - 시스템 파티션의 디렉토리 목록]


[표 1]는 [그림 9]에서 보여지는 시스템 파티션의 디렉토리 목록을 간략하게 설명 해 놓은 표이다.


[표 1 - 시스템 파티션 디렉토리 설명]


비어있는 디렉토리는 이전 세대에서 사용되었던 디렉토리이거나 앞으로 사용 될 수 있는 디렉토리이다. 어떤 디렉토리나 파일을 포함하고 있는 디렉토리들의 내용들을 보면 직관적으로 이 하위 디렉토리들이 어떤 역할을 하는지 쉽게 알 수 있다. 모든 디렉토리의 하위 디렉토리, 파일들을 설명하다보면 끝이 없으므로 시스템 파티션의 설명은 여기서 끝마치도록 하겠다.


[데이터 파티션]

데이터 파티션은 사용자가 사용하는 어플리케이션과 사용자가 생성한 정보가 위치하는 파티션이다. 해당 파티션은 기본적으로 암호화가 되어 있지만 Root 권한을 획득한 이상 더이상 암호화 되어 있는 파티션이 아니다. 데이터 파티션은 /private/var/ 디렉토리에 마운트 되어 있으며, 대부분의 포렌식 관점의 데이터는 데이터 파티션에서 찾을 수 있다. 


[그림 10 - 데이터 파티션 디렉토리 목록]


[표 2]는 [그림 10]에서 보여지는 데이터 파티션의 디렉토리 목록을 간략하게 설명 해 놓은 표이다.


[표 2 - 데이터 파티션 디렉토리 설명]


데이터 파티션에서 포렌식 관점에서 의미 있는 데이터는 다음과 같다. 


 - Keychains : keychain.db

 - logs : General.log, Lockdownd.log

 - wireless, tmp, run, log, mobile 디렉토리


keychains 디렉토리의 keychain.db는 여러 어플리케이션의 사용자 패스워드가 저장되어 있는 파일이고 logs 디렉토리의 General.log는 OS 버전과 시리얼 번호를 포함하고 있으며, Lockdownd.log는 잠금 데몬의 로그기록을 가지고 있는 로그 파일이다. Wireless 디렉토리는 무선 연결과 관련된 설정을 포함하고 있기 때문에 접속 추적에 관해 용이한 데이터를 제공하며, tmp는 원본이 없더라도 임시 파일이 있을 수 있어 유용하게 사용되는 디렉토리이다. run 디렉토리는 시스템 로그 분석 시 데이터를 제공하는 디렉토리이고, mobile 디렉토리는 사용자의 어플리케이션 데이터 및 사용자 데이터가 위치 하기 때문에 여러모로 중요한 데이터들이 위치하고 있는 디렉토리이다.

'[+] Forensic' 카테고리의 다른 글

iOS Forensic - (3)  (0) 2012.08.15
iOS Forensic - (2)  (0) 2012.08.14
Skype Forensic  (0) 2012.08.07
[Forensic Case] 기업 문서 유출 사건  (0) 2012.08.05