Guid Partition Table : Protective MBR

Mac OS X 포렌식에 관심이 있다면, 바이오스가 아닌 EFI를 활용한다는 것은 알고 있을 것이다. 윈도우 운영체제도 비스타 SP1부터 EFI-GPT 를 지원하면서 최근 출시되는 많은 노트북에서 바이오스가 사라지고 있다. 기존 바이오스와 비교해서 새로운 부트 플랫폼 구조는 다음과 같이 매치 된다.

BIOS(Bootable Input/Output Service) -> EFI(Extensible Firmware Interface)
MBR(Master Boot Record) -> GPT(Guid Partition Table)

이번 포스팅을 시작으로 GPT의 구조에 대해 알아보려고 한다.  우선 GPT의 기본적인 구조는 다음과 같다.

gpt structure.png
<guid partition table - mac os x lion />

보통 GPT를 설명하는 문서에는 LBA라는 표현을 사용한다. LBA는 논리 블록 주소(Logical Block Address)로 특정 바이트 사이즈를 하나의 블록으로 잡아 표현한다. GPT의 경우엔 512바이트를 하나의 블록으로 설정하며, 이에 Protective MBR 영역은 LBA 0 이라고 표현한다. Mac OS X는 이 Protective MBR 영역에 하나의 주 파티션 테이블 정보를 가지고 있다.

mbr.png

MBR의 코드, 디스크 시그너처, 영역이 전부 NULL 상태이며, 0x1BE 부터 시작하는 주 파티션 테이블에만 정보가 존재한다. 주 파티션 테이블엔 보통 4개의 파티션 엔트리가 위치할 수 있는데 본 예제의 경우엔 하나의 파티션 정보를 가지고 있다.

각 요소는 다음과 같이 해석된다.

기존 MBR을 공부한 사람이라면, 다른 부분은 이해할 수 있지만 하이브리드 MBR은 상당히 생소할 것이다. 사실 EFI가 지원되는 맥 시스템(최근 맥 시스템은 모두 지원함)에서 Mac OS X만 구동된다면, MBR 영역은 필요 없다. Mac OS X는 운영체제가 EFI를 지원하기 때문에 처음부터 LBA1인 GPT 헤더에 접근하기 때문이다.

맥은 Mac OS X의 애플리케이션만 사용함으로 인해 생기는 불편함을 해소하기 위해 윈도우 운영체제를 네이티브로 구동할 수 있는 기술을 지원하며, 이를 부트캠프(Boot Camp)라고 부른다. 부트캠프에는 윈도우 운영체제를 설치할 수 있는데, 이 윈도우 운영체제의 경우엔 윈도우 비스타 SP1 이상부터 EFI를 지원하고 있으며, xp를 설치할 경우엔 GPT를 인식 못하는 문제가 발생할 수 있다.

그래서 EFI-GPT 구조에선 이러한 GPT 비지원 운영체제를 위해 LBA 0에 MBR 영역을 보존하고 있으며, 이 영역을 통해 비지원 운영체제의 부팅을 수행한다. 이런 식으로 GPT와 기존 MBR 둘 다 지원할 수 있는 구조를 하이브리드 MBR이라고 부른다. 맥에선 gptsync 프로그램으로 어떤 파티션을 MBR로 동기화할지를 지정할 수 있다.

또한 위 MBR 영역에서는 부트코드 영역이 NULL로 작성되어 있는데, 이 부분은 EFI에서 BIOS 에뮬레이션을 통해 에뮬레이트 된 바이오스가 내장한 부트 코드를 수행하도록 설계되어 있는 것으로 알려져 있다.

위 예제의 경우엔 별도의 부트캠프가 설정되지 않은 시스템으로 GPT 헤더의 위치를 가리키고 있으며, 부트 캠프가 설치된다면, 저 정보는 변경될 것이다.

MBR 영역을 분석하는 도구는 여러가지가 있는데, 최근에 포렌식적으로 유용한 정보를 제공해주는 파이썬 코드가 하나 올라온 것이 있다. 다음 링크의 내용을 참조하기 바란다.

Posting : http://gleeda.blogspot.kr/2012/04/mbr-parser.html
Script Link: https://raw.github.com/gleeda/misc-scripts/master/misc_python/mbr_parser.py

다음 포스팅에선 GPT Header에 대해 알아보겠다. :-)

n0fate's Forensic Space :)