Forensics/Disk Forensics

파티션과 MBR

한희수 2025. 2. 3. 16:52

디스크(Disk)

시스템에 부착된 물리적인 저장장치를 말하며 일반적으로 하드디스크(HDD)를 의미했지만 근래에는 플래시 메모리, SSD 등도 디스크로 불린다.

 

파티션(Partition)

물리적인 저장장치인 디스크를 복수 개의 독립적이고 논리적인 별도의 저장장치처럼 분할하는 역할을 한다. 즉 물리적인 디스크 저장장치를 여러 독립적인 공간으로 구분한 영역을 파티션이라 하며 데이터 저장 및 관리 등의 편의를 위하여 사용자에 의해 생성된다. 하나의 디스크에 여러 개의 OS를 설치하거나 OS와 Data 영역을 별도로 나누어 관리하고자 할 때 유용하다.

 

볼륨(Volume)

볼륨은 단일 파일시스템을 사용하여 접근할 수 있는 저장공간을 의미한다. 일반적으로 디스크를 파티션으로 구분하고, 각 파티션을 파일시스템으로 포맷하여 볼륨을 만들어 사용한다. 여러 개의 하드디스크를 하나의 볼륨으로 인식하게 할 수도 있다. 파티션을 볼륨으로 간주할 수도 있지만 파티션은 볼륨과 달리 물리적으로 연속되어 있는 섹터들의 집합이란 차이가 있다.

MBR(Master Boot Record)

ROM BIOS에 의한 부팅 시 POST 과정 끝에서 BIOS는 시스템의 첫 번째 플로피 또는 하드디스크의 첫 번째 섹터를 읽고 실행한다. 저장장치 첫 번째 섹터인 0번 섹터의 512byte에 MBR이 있으며 부트코드, 파티션 테이블, 시그니처 세 부분으로 구성되어 있다.

 

MBR 부트코드는 파티션 테이블에서 부팅 가능한 파티션을 검색하고 부팅 가능한 파티션이 존재하는 경우 그 파티션의 VBR로 이동한다. 만약 부팅 가능한 파티션이 없으면 오류 메시지를 출력하게 한다.

 

최근에는 MBR의 단점을 보완한 GPT(GUID Partition Table)가 사용된다.

 

운영체제는 생성한 파티션의 크기, 위치 정보 등을 MBR의 파티션 테이블에 저장한다. 파티션 테이블은 16바이트씩 총 4개의 파티션 정보를 저장할 수 있다. 각 파티션은 어떤 종류의 파일시스템으로 포맷했는지에 따라 각 파티션의 시작 위치에 VBR(Volume Boot Record)이 생성되기도 하고 Super Block이 생성되기도 한다. Windows 운영체제의 FAT 파일시스템과 NTFS 파일시스템은 파티션의 처음 부분에 VBR이 존재하며 EXT 파일시스템은 파티션의 처음 부분에 Super Block이 존재한다.

 

MBR의 구조 및 하는 일

 

주소 내용 하는 일
10진수 16진수
0 ~ 445 0x0000 - 0x01BD Boot code - 부팅 가능 파티션 검색
- 에러 로딩 기능
- 에러 메시지
446 ~ 461 0x01BE - 0x01CD 파티션 테이블 1 - 파티션 부팅 가능 여부
- 파티션의 시작 주소
- 파티션 타입
- 파티션 총 섹터 수
462 ~ 477 0x01CE - 0x01DD 파티션 테이블 2
478 - 493 0x01DE - 0x01ED 파티션 테이블 3
494 - 509 0x01EE - 0x01FD 파티션 테이블 4
510 - 511 0x01FE - 0x01FF Signature (0x55AA) - MBR 시그니처

 

위의 그림에서 보듯이 446번지부터 509번지까지 파티션 테이블은 16바이트씩 총 4개의 파티션 정보를 가지고 있으며

 

16byte의 영역을 오프셋별로 나타내면 다음과 같다.

  • 0: 파티션의 부트 플래그
  • 1~3: CHS 시작 주소(현재 사용되지 않음)
  • 4: 파티션 파일시스템 종류
  • 5~7: CHS 끝나는 주소(현재 사용되지 않음)
  • 8~11: LBA 시작 주소(파티션의 시작 주소) - 섹터 위치를 나타냄
  • 12~15: 파티션의 총 섹터 수

표에서 알 수 있듯이 0번의 부트 플래그로서 파티션의 부팅 가능 여부를 알려준다.

부트 플래그 내용
0x80 부팅 가능
0x00 부팅 불가능

 

4번째는 파티션의 종류를 아래 표와 같이 알려주며 중요한 부분은 0x07의 NTFS, 0x0C의 FAT32, 0x0F 확장 파티션 등을 들 수 있다. CHS 관련 정보는 사용되지 않으므로 중요하지 않다.

파티션 플래그 파티션 이름 파티션 플래그 파티션 이름
0x00 Empty 0x82 Solaris x86
0x01 FAT12, CHS 0x82 Linux Swap
0x04 FAT16, CHS 0x83 Linux
0x05 MS Extended partition, CHS 0x85 Linux Extended
0x07 NTFS 0xA5 FreeBSD
0x0B FAT32, CHS 0xA6 OpenBSD
0x0C FAT32, LBA 0xA8 MAC OS X
0x0F Extended partition, LBA 0xAB MAC OS X Boot
0x86 NTFS Volume Set    
0x87 NTFS Volume Set    

 

8~11은 파티션의 시작 주소를 가리키므로 VBR 부분을 알 수 있고, 12~15는 파티션의 총 섹터 수를 알 수 있으므로 파티션의 끝 부분을 알 수 있다.

 

실제 하나의 파티션 테이블을 계산해 보면

파티션 #1

  • Booting Flag: 0, 부팅 불가능
  • Partition Type: 0x07, NTFS
  • Starting LBA  Addr: 00 08 00 00, Sector. 2,048
  • Size in Sector: 00 78 E0 E8, 3,907,024,896

가 되어있다. 여기서 IBM CPU 특성상 리틀 엔디안 방식으로 저장되어 있으므로 아래와 같이 숫자를 변환하여 계산해야 한다.

  • 00 08 00 00 -> 00 00 08 00 -> 2,048

 

확장 파티션

MBR에 파티션 테이블은 총 4개가 있으므로 4개 이상으로 나눌 수 없는 것이 아니고 4개의 파티션 이후 마지막 파티션 테이블에 확장 파티션으로 더 분리 가능하다.

 

확장 파티션을 이용하면 논리 드라이브를 무한정 만들 수 있다.

 

4개 이상의 파티션을 만들면 자동적으로 확장 파티션으로 구성된다. MBR을 살펴보면 3개의 파티션은 그대로이나 4번째 파티션 정보가 0x0F로 확장 파티션임을 알 수 있다.

표시된 VBR 시작 주소를 아래와 같이 계산하여 위치로 가면

확장 파티션의 BR값
(첫 번째 EPP 값)
16진수: 0x00C00800
10진수: 12584960

 

EBR(Extended Boot Record)이 보인다. EBR은 MBR과 동일한 구조로 이루어져 있다. EBR에 필요 없는 부트코드 영역인 446byte까지 0x00으로 채워지며 첫 번째 파티션 엔트리는 해당 파티션의 VBR을 가리키고 두 번째 파티션 엔트리는 다시 추가 확장 파티션 EBR의 위치를 기록한다. 3, 4번째 파티션 정보는 0x00으로 채워진다. 마지막에는 시그니처(0x55AA)가 존재한다.