본문 바로가기

하계&동계 멘토링 (23.12 ~ )/semi - Forensic

MBR(Master Boot Record)와 GPT(GUID Paritition Table)

📎요약 : MBR은 이전부터 사용되어 온 구조로, 특정 한계가 있지만 일부 구형 시스템에서 사용된다. 반면, GPT는 UEFI 기반 시스템에서 사용되는 최신 파티션 테이블 구조로, 대형 디스크와 다수의 파티션을 지원하며 데이터 무결성을 보장하는 등과 같은 여러 장점을 가지고 있다. 

 

 

일단 본 컴퓨터의 속성은 다음과 같다. 

 

파일시스템이 NTFS인걸 확인할 수 있다.

 

 

다음은 Diskpart를 사용하여 디스크 파티션 유형을 확인하였다. 위치가 살짝 안맞지만 GPT에 * 표시가 있는걸 볼 수 있다. 

 

 

좀 더 확실한 확인을 하기 위해 디스크 관리에서 확인해보았다. GPT를 사용하는 것을 알 수 있다.

💡MBR(Master Boot Record)

MBR은 디스크의 첫 번째 섹터(0번째 섹터)에 위치한 데이터 구조로, BIOS 기반 시스템에서 사용다. MBR은 디스크의 파티션 정보를 관리하고 부팅 프로세스를 제어하는 데 중요한 역할을 다. MBR의 구성 요소는 다음과 같다.

https://medium.com/funny-forensic/mbr이-뭐지-14df8a2a31f5

  • Boot Code (446 바이트): 이 영역에는 부트로더의 첫 번째 단계가 포함되어 있으며, 이 코드는 부팅 가능한 파티션을 찾아 운영 체제를 로드한다.
  • Partition Table (64 바이트): 최대 4개의 기본 파티션(primary partition)에 대한 정보를 저장한다. 각 파티션 엔트리는 16바이트로 구성되며, 파티션의 시작 위치, 크기, 유형 등을 포함한다.
  • Signature (2 바이트): 0x55AA로 설정된 이 서명은 이 섹터가 MBR임을 나타낸다.

 

본 글쓴이는 GPT를 사용하므로 이를 기준으로 조사해보았다.

💡GPT(GUID Paritition Table)

GPT(GUID Partition Table) 디스크를 분석하는 방법은 MBR(Master Boot Record) 디스크 분석과 다르다. GPT는 UEFI 기반 시스템에서 사용되는 최신 파티션 테이블 형식으로, MBR에 비해 더 많은 파티션을 지원하고, 더 큰 디스크 용량을 처리할 수 있다. GPT 디스크 분석에서는 GPT 헤더, 파티션 엔트리 배열 등을 확인해야 하나보다....

https://en.wikipedia.org/wiki/GUID_Partition_Table

 

GPT는 각 부분을 sector(512바이트) 단위로 할당하여 사용한다. GPT의 본격적인 구조는 Primary GPT Header부터이며, 그전에 위치한 protective MBR은 GPT를 지원하지 않는 장치에서 파티션을 접근할 수 있도록 하기 위해 사용된다. 이 protective MBR의 경우 항상 LBA0의 위치에 존재한다. 하단의 Ssecondary GPT는 Primary GPT에 문제가 생기는 등의 이슈로 Primary GPT를 사용할 수 없을 때 backup 용으로 사용하기 위한 부분이다.

💡GPT 디스크 구조 이해

섹터 0: MBR 디스크와 마찬가지로, 첫 번째 섹터에는 Protective MBR이 위치하여, 이를 통해 디스크가 GPT로 포맷된 것을 확인할 수 있다.

 

  • Protective MBR (1 섹터): 디스크의 첫 번째 섹터로, GPT를 인식하지 못하는 도구로부터 디스크를 보호
  • Primary GPT Header (1 섹터): 디스크의 두 번째 섹터에 위치하며, GPT의 메타데이터와 파티션 엔트리 배열 위치를 지정
  • Primary partition Entry Array: Primary GPT 헤더가 참조하는 섹터들에 위치하며, 디스크의 파티션 정보가 저장
  • Backup partition Entry Array : 디스크의 끝에서 두 번째 섹터에 위치하며, Primary 파티션 엔트리 배열을 백업
  • Backup GPT Header (마지막 섹터): Primary GPT 헤더의 백업본

 

* Partition Table array

 

Primary GPT Header의 offset 0x48에 위치한 주소를 참조하면 Partition Table array의 시작 위치를 찾을 수 있다. 각 entry별로 일정한 크기를 가지고 있어 순차적으로 각 파티션의 정보를 조회할 수 있다. 

Partition Table array의 각 entry의 세부 구조

 

  • Partition Type GUID (16 바이트): 파티션의 유형을 나타내는 GUID
  • Unique Partition GUID (16 바이트): 각 파티션의 고유 식별자
  • First LBA (8 바이트): 파티션이 시작되는 LBA
  • Last LBA (8 바이트): 파티션이 끝나는 LBA
  • Attributes (8 바이트): 파티션의 속성을 나타냄
  • Partition Name (72 바이트): 파티션의 이름

 

 

* Partition GPT Header의 세부 구조 

 

  • Signature (8 바이트): "EFI PART"로 설정되어 있어야 한다.
  • Revision (4 바이트): GPT 버전을 나타낸다. 일반적으로 1.0이다.
  • Header Size (4 바이트): GPT 헤더의 크기
  • CRC32 Checksum (4 바이트): 헤더의 무결성을 확인하기 위한 체크섬
  • Current LBA (8 바이트): GPT 헤더의 위치를 나타냄
  • Backup LBA (8 바이트): Backup GPT 헤더의 위치를 나타냄
  • First Usable LBA (8 바이트): 파티션으로 사용할 수 있는 첫 번째 LBA이다.
  • Last Usable LBA (8 바이트): 파티션으로 사용할 수 있는 마지막 LBA이다.
  • Disk GUID (16 바이트): 디스크의 고유 식별자
  • Partition Entry LBA (8 바이트): 파티션 엔트리 배열이 시작되는 LBA이다.
  • Number of Partition Entries (4 바이트): 파티션 엔트리의 수
  • Size of Partition Entry (4 바이트): 각 파티션 엔트리의 크기
  • Partition Entry Array CRC32 (4 바이트): 파티션 엔트리 배열의 무결성을 확인하는 체크섬

 

** 추가 조사 필