Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Piki's Play

서버 기반 파티션 - GPT 파티션 본문

포렌식/파일시스템 (파일시스템 포렌식분석)

서버 기반 파티션 - GPT 파티션

Pikigod 2020. 2. 6. 23:39

6.3 GPT 파티션 (GUID Partition Table) 

※ 특징

- 주로 고성능 서버에서 사용하는 GPT 파티션은 중요한 데이터 구조체 복사본을 관리한다.

- IA64 시스템들은 IA32가 가지고있는 BIOS가 없는 대신에 EFI(Extensible Firmware Interface)가 존재한다.

여기서 EFI는 비 인텔 플랫폼에서 사용이가능하고, 128개 파티션 그리고 64비트의 LBA를 사용하는 GPT파티션을 사용한다. 

 

 

▶ 전체 개념

5개의 영역을 가지는 GPT 디스크

- GPT 디스크들은 5개의 영역으로 나눌 수 있다.

- 첫 번째 보호용 MBR은 섹터 0에 존재하고 한 개의 엔트리가 있는 도스 파티션을 포함한다. 이는 전체 디스크에 있는 0xEE 타입의 파티션을 위한 것이다. 

- EFI는 실제로 파티션을 사용하지 않는다. 

- 두 번째 GPT 헤더는 섹터 1에 존재하고 GPT디스크가 만들어질때 고정된 파티션 테이블 위치와 크기를 정의한다. 

(윈도우는 엔트리 수를 128개로 제한한다.)

- GPT 헤더는 오류나 수정을 탐지하기 위해 헤더의 체크섬을 포함한다.

- 세 번째 파티션테이블시작과 끝 주소, 유형 값, 이름, 속성 플래그, GUID 값을 포함한다.

=> 이중에 128비트로 이루어진 GUID는 파티션 테이블 생성시 설정되고, 시스템의 고유값이 된다.

- 파티션 공간은 가장 큰 공간으로 이 영역의 시작과 끝은 GPT헤더에 정의되어 있다.

- 마지막 영역에는 GPT헤더와 파티션 테이블 복사본이 존재한다.

 

 

▶ 데이터 구조체

- GPT 디스크의 첫 영역은 '도스파티션 테이블'을 사용한다.

- 두 번째 영역에 존재하는 GPT 헤더는 디스크 레이아웃을 설명하고 다음과 같다.

GPT 헤더의 구조체

-> 이 값들을 이용해서 공간들의 위치를 포함한 레이아웃들을 알 수 있다.

 

ex)

이미지를 dd명령으로 확인해보자

분석)

- 32~39바이트 : 헤더 복사본 위치, 섹터 120,103,199(0x0728a1af)

- 40~47바이트 : 파티션 공간 시작

- 48~55바이트 : 파티션 공간 끝

- 72~79바이트 : 섹터 2에 파티션 테이블이 있음을 알려준다.

- 84~87바이트 : 각 엔트리는 32섹터가 필요한 128(0x80) 바이트임을 보여준다.

 

 

※ 각 테이블 엔트리는 다음 항목을 가진다.

각 GPT 파티션 테이블 엔트리의 데이터 구조체

 

※ GUID 값

- 128비트 타입값(GUID)는 파티션 내용을 구분한다. 시스템정보와 파일 시스템 둘 다 수집하는데 GPT디스크에 파티션들을 이용할 수 있다.

- 타입과 맞는 시스템이 존재해야한다. 하지만 값들에 대한 리스트가 존재하지 않아서 회사마다 정의를 해두었다. 

 

1. 인텔

인텔에서 정의한 GPT 파티션 타입

 

2. 마이크로소프트

마이크로소프트에서 정의한 GPT 파티션 타입

-> 윈도우는 임시파일과 데이터들을 위해 '예약된 파티션'을 사용한다. '주 파티션'은 기본 파티션이며 한개의 파일시스템이 위치한다. 'LDM 메타파티션'과 'LDM 데이터 파티션'은 다음장에서 설명한다.

 

 

※ GPT 파티션 테이블 엔트리의 64비트 '파티션 속성'은 3부분으로 나누어진다.

 

가장 하위비트 : 시스템이 파티션없이 동작가능할 때 1로 쓴다.

(↑ 사용자가 파티션을 지울 수 있는지 없는지 결정하기 위함)

1~47비트 : 정의x

48~63비트 : 원하는 특정 파티션 타입에 어떠한 데이터도 저장가능하다.

 

 

※ 기본적인 파티션 테이블의 내용 (GPT - 리틀엔디안)

파티션 테이블 내용 예

- 첫 줄 바이트 0~15에는 GUID(파티션타입)이 있고 파티션 GUID는 두 번째 줄 바이트 16~31에 있다.

- 파티션 시작 주소는 32~39에서 담고있고, 섹터 32(0x0022)라는 것을 확인할 수 있다.

- 파티션 마지막 주소는 바이트 40~47에서 저장되어 있고, 4,096,000(0x003E8000)이다.

 

 

※ mmls를 실행한 결과는 다음과 같다.

mmls도구를 이용한 이미지 분석

-> 마지막에 파티션 테이블이 먼저오고 GPT 헤더가 다음에 온다. (앞에 그림과는 반대이다.)

 

 

▶ 분석 고려사항들

-> 분석하면서 GPT 디스크들을 접할 일은 거의 없다. (?!?!!) 하지만 리눅스를 GPT 디스크에 파티션을 나누는데 사용할 수 있다.

-> GPT는 복구의 용이를 위해 파티션 테이블 백업본을 갖는다. 섹터0 섹터1과 같은 비사용공간, 비사용 엔트리는 데이터를 숨길 수 있다.


p.s 오늘은 짧았다. (얘도 짧네)