Disk Forensic

[디지털 포렌식] MBR(Master Boot Record) 생성 및 분석

Forliq 2025. 5. 2. 17:47

MBR(Master Boot Record)

MBR은 하드 디스크나 다른 저장 장치의 첫 섹터(일반적으로 0번 섹터)에 저장되는 데이터다.

 

하드 디스크나 다른 저장 장치는 아래와 같은 구조를 가지고 있다. 가장 앞인 0번 섹터에 MBR이 오고, 그 뒤로 MBR Slack, 볼륨의 개수만 VBR과 Volume Data 영역이 반복된다.

 

MBR Slack은 MBR 이후, VBR 전까지의 빈 공간을 의미한다.

 

MBR(Master Boot Record) 분석

1. 가상 하드 디스크 생성

Windows + X → "디스크 관리" → "동작" → "VHD 만들기" 실행

 

"가상 하드 디스크 만들기 및 연결"

 

2. 가상 하드 디스크 초기화

생성한 가상 하드 디스크 우클릭 → "디스크 초기화" 실행

 

"디스크 초기화" → MBR(마스터 부트 레코드) 선택

 

3. 초기화 완료

 

 

4. 가상 하드 디스크 열기

관리자 권한으로 HxD 실행 → "도구" → "디스크 열기" 실행

 

"디스크 열기" → "읽기전용으로 읽기" 해제

 

"경고" → "수락"

※ 실제로 사용하고 있는 가상 하드 디스크를 열지 않도록 주의한다.

 

MBR(Master Boot Record) 구조

MBR은 Boot Code 446 bytes(Disk Signature 4 bytes), Partition Table Entry 64 bytes, Boot Signature 2 bytes로 이루어져 있다. 총 512 bytes (= 1 섹터)이다.

 

1. Boot Code (446 bytes)

디스크 첫 번째 섹터(0번 섹터)에 위치하며, 컴퓨터가 부팅될 때 실행되어 운영체제 로드 전 파티션 테이블을 읽어 올바른 파티션에서 운영체제를 찾는다.

Boot Code에 포함된 Disk Signature는 4 bytes로 구성되어 있고, 디스크 고유 식별자다.

 

2. Partition Table Entry (64 bytes)

파티션 정보를 저장하는 최대 4개의 파티션 테이블이 있다. 1개 파티션 테이블은 16 bytes로, 총 64 bytes다. 5개 이상의 파티션 테이블을 저장하기 위해서는 확장 파티션 테이블을 사용한다.

 

MBR Partition Table Entry

Size (bytes) Information
1 bytes Bootable Flag
(00: 부팅 불가능)
(80: 부팅 가능)
3 bytes Starting CHS Address
(첫 바이트: Cylinder)
(중간 바이트: Head)
(끝 바이트: Sector)
ex) 01 02 03 = Cylinder 1, Head 2, Sector 3인 위치에서 파티션 시작 (16진수에서 10진수로 변환)
1 bytes Partition Type
(0x00: Empty)
(0x01: FAT12, CHS)
(0x4: FAT16, 16~32 MB, CHS)
(0x05: 확장 파티션, CHS)
(0x06: FAT16, 32 MB~2GB, CHS)
(0x07: NTFS)
(0x0b: FAT32, CHS)
(0x0c: FAT32, LBA)
(0x0e: FAT16, 32 MB~2GB, LBA)
(0x0f: 확장 파티션, LBA)
(0x82: Solaris x86, Linux Swap)
(0x83: Linux)
(0xa5: FreeBSD)
(0xa6: OpenBSD)
(0xa8: Mac OSX)
(0xa9: NetBSD)
(0xee: EFI GPT Disk)
(0xfb: Vmware File System)
3 bytes Ending CHS Address
(첫 바이트: Cylinder)
(중간 바이트: Head)
(끝 바이트: Sector)
ex) 10 07 03 = Cylinder 16, Head 27, Sector 3인 위치에서 파티션 끝 (16진수에서 10진수로 변환)
4 bytes Starting LBA Address
파티션 시작 섹터 번호
(MBR은 리틀엔디안 변환)
4 bytes Size in Sector
전체 섹터 수 (파티션 크기)
(MBR은 리틀엔디안 변환)

 

3. Signature (2 bytes)

MBR 마지막 2 bytes는 시그니처가 저장된다. 일반적으로 55 AA가 MBR의 시그니처 값으로 고유하고, 올바르게 형성되었음을 의미한다. 이 시그니처가 없다면 MBR은 손상된 것으로 간주한다.

 

Partition Table Entry 생성

가상 하드 디스크(VHD) "할당되지 않음" 우클릭 → "새 단순 볼륨" 실행

 

"단순 볼륨 만들기 마법사" → "다음"

 

"단순 볼륨 크기 설정" → "다음"

 

"드라이브 문자 또는 드라이브 경로를 할당하지 않음" 선택 → "다음"

 

"이 볼륨을 포맷하지 않음" 선택 → "다음"

 

마침

 

정상적으로 파티션을 생성하면 아래 이미지와 같이 표시가 된다.

 

이제 관리자 권한으로 HxD를 열고 "도구" → "디스크 열기" → "디스크 선택" →"읽기전용으로 열기" 해제 → 수락해 파티션을 생성한 디스크를 연다.

위 이미지에서와 같이 Partition Table Entry #1 영역에 데이터가 추가된 것을 확인할 수 있다. 이 데이터를 분석하면 아래와 같다.

Information Hex Value Analysis
Bootable Flag 00 부팅 불가능
Starting CHS Address 02 03 00 Cylinder=2, Head=3, Sector=0인 위치에서 파티션 시작
Partition Type 06 FAT16, 32 MB~2GB, CHS
Ending CHS Address 48 07 01 Cylinder=72, Head=7, Sector=1인 위치에서 파티션 끝
(16진수에서 10진수로 변환)
Starting LBA Address 80 00 00 00 리틀 엔디안 변환: 00 00 00 80 = 128 섹터(파티션 시작 섹터 번호)
Size in Sector 00 50 00 00 리틀 엔디안 변환: 00 00 50 00 = 20,480(파티션 크기)

 

Partition Table Entry 수동 생성

Partiton Table Entry #2에 직접 값을 입력해 수동으로 생성할 수 있다. 앞서 Partition Table Enrty #1은 128번 섹터에서 시작해서 20,480 섹터까지 사용함을 확인할 수 있다. Partition Table Entry #2는 128(시작 섹터) + 20480(전체 섹터 수) = 20,608번 섹터부터 원하는 크기(100 MB=204, 800 섹터 내)만큼 파티션을 생성할 수 있다. 

Starting LBA Address + Size in Sector -1 = Ending LBA Address이다. (시작 섹터도 전체 섹터 수에 포함하기 때문에 -1 적용)

 

220MB 크기로 Partition Table Entry #2를 만든다면, 20 * 1024 * 1024 = 20971520 = 20 MB이며, 필요한 섹터 수는 20,971,520(20 MB) / 512(한 섹터) = 40,960 섹터다.

 

20,610 섹터부터 Partition Table Entry #2를 생성하기 위해 사용할 정보는 아래와 같다.

Starting LBA Address: 20,610번 섹터

Size in Sector: 40,960 섹터

 

Starting LBA AddressSize in Sector를 16진수로 변환 후 리틀엔디안 변환 후 HxD로 Partition Table Entry #2에 데이터를 저장한다.

Starting LBA Address: 20,610 → 00 00 50 82 → 리틀엔디안 변환 → 82 50 00 00

Size in Sector: 40,960 → 00 00 A0 00 → 리틀엔디안 변환 → 00 A0 00 00

Partition Type: 원하는 파티션 유형

 

저장 후 디스크 관리에서 F5(새로고침)을 하면 아래 이미지와 같이 2개의 파티션을 볼 수 있다.

 

확장 파티션 테이블 생성

4개보다 많은 파티션을 만들기 위해서 확장 파티션을 사용한다.

"디스크 관리" → 가상 하드 디스크(VHD) "할당되지 않음" 우클릭 → "새 단순 볼륨" → "드라이브 문자 또는 드라이브 경로를 할당하지 않음" 선택 → "이 볼륨을 포맷하지 않음" (총 파티션을 5개 만들 때까지 반복)

 

관리자 권한으로 HxD 실행 → "도구" "디스크 열기" "읽기전용으로 읽기" 해제 "경고" "수락" 실행

Partition Table Entry #4를 분석하면 다음과 같은 정보를 확인할 수 있다.

  • Partition Type: 0x05(확장 파티션, CHS) 
  • Starting LBA Address: 00 41 01 00 → 리틀엔디안 변환 → 00 01 41 00 → 82,176번 섹터
  • Size in Sector: 00 D0 01 00 → 리틀엔디안 변환 → 00 01 D0 00 → 118,784 섹터

 

Partition Table Entry #4(확장 파티션 테이블)의 Starting LBA Address(82,176)로 이동하면 MBR 구조(Signature=55 AA)를 다시 볼 수 있다.

확장 파티션 테이블의 Partition Table Entry #1(=Partition Table Entry #4)를 분석하면 다음과 같은 정보를 확인할 수 있다.

  • Partition Type: 0x06(FAT16, 32 MB~2GB, CHS)
  • Starting LBA Address: 80 00 00 00 → 리틀엔디안 변환 → 00 00 00 80 → 128번 섹터 (확장 파티션 기준)
  • Size in Sector: 00 50 00 00 → 리틀엔디안 변환 → 00 00 50 00 → 20,480 섹터

확장 파티션 테이블의 Partition Table Entry #1(=Partition Table Entry #4) 시작 섹터82,176(확장 파티션 섹터) + 128(시작 섹터) = 82,304번 섹터다. 마지막 섹터82,304(시작 섹터) + 20,480(전체 섹터 수) - 1 = 102,783번 섹터다. 

즉, 82,304~102,783 섹터가 Partition #4 영역인 것이다.

 

확장 파티션 테이블의 Partition Table Entry #2를 분석하면 다음과 같은 정보를 확인할 수 있다.

  • Partition Type: 0x05(확장 파티션, CHS)
  • Starting LBA Address: 80 50 00 00 → 리틀엔디안 변환 → 00 00 50 80 → 20,608번 섹터 (확장 파티션 기준)
  • Size in Sector: 80 50 00 00 → 리틀엔디안 변환 → 80 00 50 00 → 20,608 섹터

확장 파티션 테이블의 Partition Table Entry #2 시작 섹터 82,176(확장 파티션 섹터) + 20,608(시작 섹터) = 102,784번 섹터다. 마지막 섹터 102,784(시작 섹터) + 20,608(전체 섹터 수) - 1 = 123,391번 섹터다. 

즉, 102,784~123,391 섹터가 다시 확장 파티션 영역인 것이다.

 

Partition Table Entry #2(확장 파티션 테이블)의 Starting LBA Address(102,784)로 이동하면 MBR 구조(Signature=55 AA)를 다시 볼 수 있다.

확장 파티션 테이블의 Partition Table Entry #1(=Partition Table Entry #4의 Partition Table Entry #2)를 분석하면 다음과 같은 정보를 확인할 수 있다.

  • Partition Type: 0x06(FAT16, 32 MB~2GB, CHS)
  • Starting LBA Address: 80 00 00 00 → 리틀엔디안 변환 → 00 00 00 80 → 128번 섹터 (확장 파티션 기준)
  • Size in Sector: 00 50 00 00 → 리틀엔디안 변환 → 00 00 50 00 → 20,480 섹터

확장 파티션 테이블의 Partition Table Entry #1(=Partition Table Entry #4의 Partition Table Entry #2 ) 시작 섹터 102,784 (확장 파티션 섹터) + 128(시작 섹터) = 102,912번 섹터다. 마지막 섹터 102,912(시작 섹터) + 20,480(전체 섹터 수) - 1 = 123,391번 섹터다. 

즉, 102,912~123,391 섹터가 Partition #5 영역인 것이다.

 

이를 구조화하면 아래 이미지와 같이 정리할 수 있다.

 

위 분석 결과를 FTK Imager로 확인할 수 있다.

"파일" → "Add Evidence Item" → "Physical Drive" 선택 → 생성한 가상 하드 드라이브(VHD) 선택 → "View" → "Properties" → Partition 선택

  • Partiton Information
    • Starting Sector: Starting LBA Address
    • Sector Count: Size in Sector
  • 파티션 내 마지막 섹터 클릭
    • phy sec: Ending LBA Address (Physical Address)
    • log sec: 해당 파티션 기준 섹터 번호 (Logical Address) (Sector Count - 1)