Window Forensic

[File System] NTFS "MBR/GPT" Analysis

forensic-focus 2025. 3. 30. 22:53

< 이미징 기반으로 MBR/GPT 분석>

MBR/GPT 구조

MBR MBR
Slack
VBR Volume
Data
VBR Volume
Data

 

MBR Slack : MBR VBR 사이에 있는 낭비되는 공간

VBR : 볼륨의 시작에 위치하는 구조. BPB (해당 볼륨의 파일 시스템의 메타 데이터)와 부트 로더 로딩 코드 정보가 있음.

Volume Data : file system에 의해 할당된 볼륨의 데이터가 들어가있는 공간,

 

 

MBR(Master Boot Record) :

- 쉽게 얘기해서 컴퓨터가 부팅이 될 때 가장 먼저 참조하는 영역

- 주로 윈도우 OS 같은 운영체제가 어디에 어떻게 위치해 있는지 식별

- 컴퓨터의 주기억장치에 적재될 수 있도록 하기 위한 정보로 하드디스크 또는 디스켓의 첫 번째 섹터에

  저장되어 있음

- 각 디스크에서 4개 이상의 파티션을 지원하지 않음

- 2TB 이상의 디스크 제한으로 2TB 이상 디스크 전체 용량을 사용할 수 없음

- 주로 하는 역할은 부트파티션을 파티션 테이블에서 찾고, 시작 섹터를 찾거나 부트 섹터 정보를 메모리로 불러온다.

- BIOS 부팅 프로세스 (전통적인 방식), MBR 0번 섹터에 위치

 

Boot Code
(446 byte)
Partition Table
(64 byte = 16 * 4)
Signature
(2byte = 55 AA)

 

 

  NTFS Architecture를 보면, 컴퓨터 부팅 절차 확인 가능

      BIOS -> MBR -> VBR -> 메모리 커널 로딩 -> 운영체제 실행 및 제어권 이동

 

Boot Code (주요 필드만)

0x1B5 ~ 0x1B7 : Error Message Offset

0x1B8 ~ 0x1BB : MBR Device Signature (Device GUID)

1. BIOS에 의해 POST(Power On Self-Test)과정 진행 후 MBR 부트 코드 호출.

2. MBR Partition Table 참조하여 부팅 가능한 파티션의 VBR Boot Code 호출.

3. VBR의 부트 로드가 OS를 로드.

 

Partition Table

 4개의 주 파티션 테이블 엔트리를 가짐.

0x1BE : Boot Flag(0x80 부팅 가능, 0x00 부팅 불가능)

0x1BF ~ 0x1C1 : Starting CHS address (주소 지정 방식이 CHS(Cylinder-Head-Sector)일 경우, 파티션 시작 위치)

0x1CS : Partition Type (파티션 유형, 0x07 NTFS, 0x0C FAT32)

0x1C3 ~ 0x1C5 : ending CHS address

0x1C6 ~ 0x1C9 : Starting LBA address (주소 지정 방식이 LBA(Logical Block Addressing)일 경우, 파티션 시작 위치)

0x1CA ~ 0x1CD : Size in sector (해당 파티션에 할당된 총 섹터 수)

 

Signature

0x55AA

 

 MBR은 기존 저장매체의 용량이 증가하게 되면서 MBR이 다룰 수 있는 용량적인 한계가 있었다.

-> 이를 개선하기 위해 GPT(GUID Partition Table) 가 도입되었다.

 

 

 

MBR/GPT :

- 물리적인 하드 디스크에 대한 파티션 테이블 레이아웃 표준

- 최대 디스크 및 파티션 크기를 8ZB(800TB)까지 허용, 128개의 주 파티션 생성 가능

- 각 디스크에 4개 이상의 파티션 보유 가능

- CRC(Cyclical Redundancy Check)를 이용하여 파티션 테이블 보호 가능

- 볼륨의 끝에 중요 데이터 구조를 복제본으로 저장하여 장애가 발생했을 때 복구 가능

- UEFI 부팅 프로세스

-> 개선된 EFI 펌웨어에서 지원하는 파티션 테이블 형식이 GPT 파티션

Protective
MBR
GPT
Header
Partition
Table
GPT Volume Backup
GPT
Header
Backup
Partition
Table

 

- 기존 MBR 구조와의 차이는 GPT Headder Partition Table 2개씩 있다.

- 앞 섹터가 존재하는 GPT Header Partition Table이 손상되면 백업 용도로 사용하려 놔둔 것

 

 

 

Protective MBR 구조

- Protective MBR 0 Sector에 위치

- Protective MBR EFI 가 아닌 BIOS 서비스를 통한 GPT 기반 부팅을 진행할 때 지원하는

  운영체제에서 첫번째 섹터는 Boot 로더로서 사용하기 때문에 Protective MBR 이라는 이름으로 존재

- GPT에서 MBR을 사용하는 이유 :

   MBR을 사용하는 BIOS에서 오작동을 일으키지 않도록 하기 위해서 사용..

- GPT 사용시 MBR Partition Type 0xEE로 하여 전체 GPT Drive를 표시하여 OS에 해당 Drive GPT를 사용한다고 알림

 

 

GPT Header 구조

- GPT Header 1 Sector 에 위치

- 일반적인 GPT Header 92 Byte로 되어 있다.

- GPT에 대한 대부분의 설정 정보를 담고 있고 있고, 그외의 영역에는 NULL(0x00) Byte를 가지고 있다.

(0x200~0x207, 8 Byte) : Signature "EFI PART" 시그니처를 필수로 가지고 있다.

(0x208~0x20B, 4 Byte): RevisionVersion 1.0을 의미한다.

(0x20C~0x20F, 4 Byte) : Header Size, GPT Header의 크기를 이야기 하는데 대부분 92Byte 이므로 0x5C값을 갖는다.

(0x210~0x213, 4 Byte) : CRC32 of Header, 무결성 체크를 위한 CRC32 

                                       Header의 시작부터 끝나는 위치 까지만 체크하는 값

(0x214~0x217, 4 Byte) : Reserved, 예약된 영역은 사용하지 않습니다.

(0x218~0x21F, 8 Byte) : LBA of GPT Header, 현재 LBA 주소를 나타내기 때문에 무조건 0x01 띈다.

(0x220~0x227, 8 Byte) : LBA of Backup GPT Header,

                                       GPT Header 정보를 Backup Sector의 위치를 기록한 값

(0x228~0x22F, 8 Byte) : Starting LBA for Partitions

                                       - 파티션을 담을 수 있는 LBA 주소를 의미한다.

                                       - Primary Partition Table Last LBA+1 한 값 이다.

(0x231~0x237, 8 Byte) : Ending LBA for Partitions,

                                       - 파티션을 담을 수 있는 LBA의 끝 주소를 의미한다.

                                       - Secondary Partition Table First LBA-1 한값 이다.

(0x238~0x247, 16 Byte) : Disk GUID, Unix UUID(Universally Unique IDentifier)와 동일

(0x248~0x24F, 8 Byte) :  Partition Table Entry Starting LBA, 

              Partition Table Entry의 시작 LBA 주소

(0x250~0x253, 4 Byte) : Number of Partition Entries,

            - 지원하는 Partition Entry의 개수를 담고 있다.

            - 기본적으로 최대 개수는 128개 이므로 0x80을 가진다.

(0x254~0x257, 4 Byte) : Size of Partition Table Entry,

                                       - GPT Partition Entry의 크기를 의미

                                       - 대부분 128byte 사용.

(0x258~0x25B, 4 Byte) : CRC32 of Partition Table, Partition Table CRC32 값을 의미

(0x25C~0x3FF, 420 Byte) : Reserved, 예약된 영역은 사용하지 않음

 

 

 

GPT Partition Entry 구조

- GPT Partition Entry 2 Sector 에 위치

- 일반적인 GPT Partition Entry 128 Byte로 되어 있음

- 각 파티션에 대한 대부분의 정보를 담고 있고 있으며,

   MBR의 파티션 테이블의 LBA 주소는 4Byte로 기록하지만 GPT 8Byte로 기록

- GUID를 이용해서 각 파티션의 정보를 확인할 수 있음.

(0x400~0x40F, 16 Byte) : Partition Type GUID

             - 파티션의 타입을 표현하는 고유 정보를 기록

             - 파티션의 파일 시스템과 사용하는 운영체제 및 서비스 정보를 확인 가능

                                            - 파티션 GUID 값을 아래의 사이트에 있는 표에서 값을 찾아보면

                                              어떤 파티션인지 알 수 있음

(0x410~0x41F, 16 Byte) : Unique Partition GUID, 파티션 마다 할당하는 고유 값을 저장

(0x420~0x427, 8 Byte) : Frist LBA, 파티션의 시작 주소를 리틀 엔디안으로 저장

(0x428~0x42F, 8 Byte): Last LBA, 파티션의 끝 주소를 리틀 엔디안으로 저장

(0x430~0x437, 8 Byte) : Attribute Flags, 파티션 테이블 엔트리의 속성 값이 저장

(0x438~0x47F, 72 Byte) : Partition Name, 지정 되어 있는 파일 시스템 이름, UTF-16(LE) code 사용

                                         = Microsoft reserved partition

'Window Forensic' 카테고리의 다른 글

[File System] NTFS  (0) 2025.03.17
[File System] FAT (6) " Directory Entry"  (0) 2025.03.15
[File System] FAT (4) "Data Area"  (0) 2025.03.15
[File System] FAT (5) "Data Area"  (0) 2025.03.15
[File System] FAT (3) "Reserved Area"  (0) 2025.03.15