파트 3

소개

이전 글에서는 보호 MBR과 GPT 헤더를 살펴봄으로써 GPT(GUID 파티션 테이블)를 이해하기 위한 토대를 마련했습니다. 이제 3부에서는 GPT 파티션 항목 배열에 초점을 맞추겠습니다. GPT 스키마의 이 중요한 구성 요소는 디스크의 모든 파티션에 대한 자세한 맵을 제공하며, 각 항목은 특정 파티션에 대한 중요한 정보를 담고 있습니다. GPT 파티션 항목 배열의 구조와 기능을 이해하면 GPT가 파티션을 관리하는 방법을 종합적으로 파악하여 보다 효과적인 분석, 문제 해결 및 데이터 복구가 가능해집니다.

GPT(GUID 파티션 테이블) 파티션 항목 배열

GPT(GUID 파티션 테이블) 항목 배열은 하드 디스크의 파티션을 정의하고 관리하는 데 사용되는 GPT 파티셔닝 시스템의 중요한 부분입니다. 각 책의 세부 정보가 나열된 도서관의 카탈로그처럼 디스크에 있는 각 파티션의 세부 사항을 기록하는 세부 목록이라고 생각하면 됩니다.

GPT 항목 배열의 주요 구성 요소:

파티션 GUID: 각 파티션에는 파티션 GUID라고 하는 고유 식별자가 있어 서로 다른 시스템에서도 각 파티션을 고유하게 식별할 수 있습니다.

고유 ID: 이것은 각 파티션에 고유한 또 다른 고유 식별자로, 추가적인 고유 식별 계층을 제공합니다.

파티션의 LBA(논리 블록 주소 지정) 시작하기: 디스크에서 파티션의 시작 지점을 나타냅니다. 파티션이 시작되는 위치를 시스템에 알려줍니다.

파티션의 종료 LBA: 시작 LBA와 마찬가지로 디스크에서 파티션이 끝나는 위치를 나타냅니다.

속성 비트: 파티션이 부팅 가능한지 또는 특수 속성이 있는지 등 파티션에 대한 추가 정보를 제공하는 플래그입니다.

파티션 이름: 각 파티션은 사람이 읽을 수 있는 이름을 가질 수 있으므로 파티션의 목적이나 내용을 쉽게 식별할 수 있습니다. 이 이름은 문자열의 끝을 표시하기 위해 null 문자로 끝납니다.

배열의 각 항목을 완전히 이해할 수 있도록 이 모든 항목을 자세히 분석해 보겠습니다.

디스크가 GPT 디스크로 설정되면 가장 먼저 생성되는 파티션은 EFI 시스템 파티션(ESP)입니다. 이 파티션은 사용자가 쉽게 사용할 수 없는 숨겨진 파티션입니다. 이 파티션은 섹터 2048에서 찾을 수 있으며 모든 시스템(Windows, Linux, MacOS)과의 호환성을 위해 FAT32로 포맷됩니다.

위의 스크린샷은 설치 시 사용자가 지정한 기본 데이터 파티션 1개와 함께 Microsoft 예약 파티션이 생성된 표준 Windows 10 설치 사례를 보여 줍니다.

아래는 GUID 파티션 테이블 위키백과 페이지에 있는 표에서 발췌한 GUID입니다:

출처: https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs

물론 16진수 뷰어 내에서 값을 볼 때 GUID는 GUIID 형식으로 저장되지 않습니다. 

GUID는 이전 블로그 게시물에서와 마찬가지로 변환되지만 HxD로 볼 때에도 쉽게 확인할 수 있습니다:

다음과 같은 명령으로 볼륨 파티션 GUID를 확인할 수 있습니다.

시작 LBA와 종료 LBA를 알면 파티션의 크기를 계산할 수 있습니다. 예를 들어 EFI 파티션이 있습니다:

시작 LBA: 2048

종료 LBA: 534527

총 길이: 532479개 섹터 x 512바이트/섹터 = 272629248 바이트, 260MB입니다.

백업 GPT 파티션 항목 배열

백업 GPT 파티션 항목 배열은 디스크 끝과 GPT 헤더 앞, 즉 디스크 끝의 33개 섹터 앞에 위치합니다(LBA (n - 33), 여기서 n은 디스크의 마지막 섹터입니다). 또한 디스크 끝에서 33섹터 전 또는 백업 GPT 헤더에서 32섹터 전인 이유에 대해 몇 가지 계산을 할 수 있습니다.

각 파티션 항목은 128바이트이며 항목 배열에는 총 128개의 항목이 있습니다. 즉, 배열에는 16,384개의 섹터 또는 32개의 섹터(16384/512)가 있습니다. 

백업 GPT 헤더는 백업 GPT 파티션 항목 배열의 위치를 가리킵니다.

디스크 끝 근처의 백업 GPT 파티션 항목 배열

GPT 파티션 항목 배열 복구하기

GPT 파티션 항목 배열을 복구하는 것은 디스크 끝에서 33개 섹터를 찾은 16,384바이트 백업을 복사하여 LBA 2에서 3에 붙여넣는 것만큼이나 간단합니다. 정확한 복사본이므로 16진수 값을 변경/수정할 필요가 없습니다.

디스크 끝 부분에 위치한 백업 GPT는 기본 GPT와 동일합니다. 실제로 각각의 섹터를 조각내고 해싱하면 정확히 일치한다는 것을 알 수 있습니다. 

결론

이번 세 번째 편에서는 GPT 스키마의 핵심 구성 요소인 GPT 파티션 항목 배열에 대해 자세히 살펴보았습니다. 파티션 항목 내의 각 필드(GUID부터 속성 비트 및 파티션 이름까지)를 세분화하여 GPT가 디스크 데이터를 구성하고 액세스하기 위한 강력한 프레임워크를 제공하는 방법을 살펴봤습니다. 이러한 지식은 포렌식 조사, 데이터 복구 및 시스템 관리에 필수적이며, GPT 파티션 디스크를 효과적으로 탐색하고 조작할 수 있는 기술을 갖추게 해줍니다. 다음 포스팅에서는 이론을 실제에 적용하는 실제 애플리케이션과 사례 연구에 대해 자세히 살펴볼 예정이니 기대해 주세요.

이 포스팅을 끝으로 GPT 파티션 구조에 대한 3부작 시리즈를 마칩니다.
이전 게시물을 놓쳤다면 다음부터 시작하세요. 1부 - 보호 MBR에서 레거시 호환성이 어떻게 유지되는지 살펴보고 2부 - GPT 헤더를 사용하여 디스크 레이아웃을 정의하고 무결성을 보장합니다.

더 자세히 알아보고 싶으신가요? 파티션 복구, 디스크 수준 해싱, 실제 포렌식 시나리오를 기반으로 한 CTF 과제에 대한 향후 콘텐츠를 보려면 뉴스레터를 구독하세요.