Forensic/파일-구조

MBR 확장 파티션(Extended Partition)

Ron Weasley 2022. 2. 1. 00:19

지난 시간에 MBR구조에 대해서 배웠는데, MBR구조는 총 4개의 Partition Table Entry가 존재한다고 했습니다.
모르겠으면 다음 링크를 참고하셔서 MBR에 대해서 배워오셔야 이해가 될겁니다!! https://lemonpoo22.tistory.com/23
이번 글에서는 MBR에서 사용되는 확장 파티션에 대한 설명과 분석 방법을 설명하겠습니다.

MBR영역에서 파티션 테이블은 4개까지 표현이 됩니다. 하지만 4개 이상의 파티션 정보를 표현하기 위해 확장 파티션이라는 개념을 도입을 하였습니다. 기존에 표현이 되는 4개의 파티션 엔트리에 대해서는 "주 파티션" 이라 하고, 이후 4개 이상의 파티션을 정의 하기 위해서는 "확장 파티션" 을 사용합니다. 마지막의 파티션 엔트리가 바로 확장 파티션 엔트리가 되며 추가로 생성되는 파티션 정보를 확인할 수 있는 주소가 기록이 됩니다. 참고로 Windows에서는 주 파티션을 포함해 최대 24개의까지 파티션을 생성할 수 있습니다.

주 파티션 확장 파티션의 구조를 보겠습니다.

Extended Partition Structure

MBR의 주 파티션 테이블은 최대 4개로만 나타냅니다. 하지만 위 그림에서는 #1, #2, #3은 주 파티션이고 마지막에 오는것은 확장 파티션입니다. 하지만 파티션이 4개를 초과 할 경우에는 주 파티션 테이블의 마지막 파티션에는 첫번째 확장 파티션의 위치를 가르키게 됩니다.

확장 파티션을 상세히 보겠습니다.

하나씩 분석을 해보면, MBR의 기존 파티션 엔트리과 같은 구조를 띄고 있습니다.
대신 파티션 타입 값이 특정 파일시스템(FAT, NTFS)를 나타내는 값이 아닌 "0x05", "0x0F'"로 되어 있다면 확장 파티션 구조로 생각을 하고 추가적인 파티션에 대한 분석이 필요합니다. 결국 파티션 타입을 확인 하여 확장 파티션으로 인식이 되었다면, LBA Address부분에는 확장 파티션에 대한 정보가 있는 곳을 저장합니다. 그래서 데이터값을 리틀 엔디안으로 위치를 찾아가보면 확장 파티션에 대한 파티션 엔트리를 볼 수 있습니다. 쉽게 말해서, 확장 파티션인지 아닌지를 구분하기 위해서는 파티션 타입을 보면 되고, 파티션 타입을 통해서 확장 파티션인것을 인지한다면 LBA Address를 보고 찾아가면 됩니다.

그래서 크게 주 파티션에서 확장 파티션의 정보를 가지고 따라 갈 경우 쉽게 개념을 잡기 위해 다음과 같이 그림으로 표현하겠습니다.


이제는 8기가 짜리의 가상 디스크를 MBR로 포맷하고, 파티션을 여러개 생성하겠습니다. 그리고 확장 파티션이 나타내는 파티션 테이블 구조를 따라가보면서 수동으로 분석하는 방법을 알아 보겠습니다.

다음과 같이 파티션을 나눴습니다. 디스크 관리자에서는 F, G, H, 이렇게 나오지는 않지만 위 드라이브를 보면 F~L까지 파티션을 나눴습니다.
1, 4, 6파티션은 NTFS, 2, 5, 7은 FAT32, 3은 FAT로 포맷했습니다.

이제 hex에디터 프로그램을 사용하여 분석을 진행 하도록 하겠습니다.
먼저 7개로 파티션을 나뉘었기 때문에 MBR이 사용하는 4개 이상의 파티션을 생성했다 할 수 있습니다. 그래서 첫번째 섹터에서 주 파티션 테이블에서 각각 파티션 타입을 보겠습니다.

Primary Partition Type

1번 파티션 07 : NTFS
2번 파티션 0C : FAT32, CHS
3번 파티션 0E : FAT 16, 32MB ~ 2GB, LBA
4번 파티션 0F : Extended Partition with LBA

4번째 파티션에서 파티션 타입이 LBA를 사용하는 확장 파티션입니다.
그래서 LBA주소를 리틀 엔디안으로 계산하여 0x00A4B800 (10,795.008 Sector)로 가보겠습니다.

1. First Extended Partition Table

First Extended Partition Table

10,795,008 섹터(10.795.008 * 512 = 14,9700,000 오프셋)로 가면 첫번째 확장 파티션으로 가게됩니다. 이때 볼 수 있는 특징은 부트 코드 영역은 모두 널 바이트로 채워져 있으며, 파티션 테이블만 활성화 되어 있는 것을 볼 수 있습니다.

0섹터에서 LBA주소를 가지고 첫번째 확장 파티션에 왔습니다. 이 부분은 MBR의 주 파티션 테이블의 총 갯수인 4개를 초과하면서 생기는 부분입니다. 하지만 확장 파티션의 BR(Boot road) 또한 MBR과 유사하지만 그림과 같이 1,2번째 파티션 테이블 엔트리만 존재하고 3,4번째 파티션 테이블 엔트리는 존재하지 않습니다.

이유는 아까 위에서 봤던 그림과 같이 첫번째 확장 파티션으로 오면 Secondary Partition Entry #1, Secondary Extended Partition Entry #1만 존재했기 때문입니다. 그래서 2번째 파티션 테이블 엔트리의 파티션 타입이 05이므로 Extended Partition CHS를 사용하는 확장 파티션을 의미합니다.

이제 확장 파티션의 파티션 테이블에서 확장 파티션을 제외한 일반 파티션의 시작 LBA주소는 각 확장 파티션의 시작 주소를 시작 오프셋으로 합니다. 즉, 4번째 파티션의 시작 섹터 주소는 첫번째 확장 파티션의 시작 섹터인 0xA4B800(10,795,008)에서 0x800(2,048)을 더한 10,797,056섹터가 됩니다. 섹터 10,797,056으로 가면 NTFS의 VBR을 볼 수 있습니다.

■ 4번 파티션의 시작 섹터 = 첫번째 확장 파티션의 시작 섹터(10,795,008) + 4번 파티션의 시작 LBA(2,048섹터)

First Extended Partition VBR

2. Second Extended Partition Table

2번째 확장 파티션의 위치를 구하는 방법은 첫번째 확장 파티션의 시작 섹터 + 두번째 확장 파티션의 시작 LBA입니다.
2번째 확장 파티션의 시작 LBA는 0x00219800으로 2,201,600섹터입니다.
(10,795,008 + 2,201,600) = 12,996,608 섹터
2번째 확장 파티션의 위치는 섹터 12,996,608(0xC65000)입니다. 오프셋은 0x18CA00000입니다.

Second Extended Partition Table

5번째 파티션의 위치를 나타내는 시작 LBA는 2,048입니다.
두번째 확장 파티션 섹터 12,996,608 + 5번 파티션의 위치를 나타내는 시작 LBA 2,048은 12,998,656에 가면 5번째 파티션인 FAT32의 VBR을 볼 수 있습니다.

■ 5번 파티션의 시작 섹터 = 두번째 확장 파티션의 시작 섹터(12,996,608) + 5번 파티션의 시작 LBA(2,048섹터)

Second Extended Partition Table VBR

3. Third Extended Partition Table

3번째 확장 파티션의 위치를 구하는 방법은 첫번째 확장 파티션의 시작 섹터 + 세번째 확장 파티션의 시작 LBA입니다.
3번째 확장 파티션의 LBA주소는 0x00366800으로 3,565,568 섹터입니다.
(10,795,008 + 3,565,568) = 14,360,576 섹터
3번째 확장 파티션의 위치는 섹터 14,360,576(0xDB2000)입니다. 오프셋은 0x1B6400000입니다.

Third Extended Partition Table

6번째 파티션의 위치를 나타내는 시작 LBA는 2,048입니다.
세번째 확장 파티션 섹터14,360,576 + 6번 파티션의 위치를 나타내는 시작 LBA 2,048은 14,362,624에 가면 6번째 파티션인 NTFS의 VBR을 볼 수 있습니다.

■ 6번 파티션의 시작 섹터 = 세번째 확장 파티션의 시작 섹터(14,360,576) + 6번 파티션의 시작 LBA(2,048섹터)

Third Extended Partition Table VBR

4. Fourth Extended Partition Table

4번째 확장 파티션의 위치를 구하는 방법은 첫번째 확장 파티션의 시작 섹터 + 네번째 확장 파티션의 시작 LBA입니다.
4번째 확장 파티션의 시작 LBA는 0x00444800이므로 4,474,880 섹터입니다.
(10,795,008 + 4,474,880) = 15,269,888 섹터
4번째 확장 파티션의 위치는 섹터 15,269,888(0xE90000)입니다. 오프셋은 0x1D2000000입니다.

Fourth Extended Partition Table

7번째 파티션의 위치를 나타내는 시작 LBA는 2,048입니다.
네번째 확장 파티션 섹터15,269,888 + 7번 파티션의 위치를 나타내는 시작 LBA 2,048은 15,271,936에 가면 6번째 파티션인 FAT32의 VBR을 볼 수 있습니다.

Fourth Extended Partition Table VBR


끝으로 정리를 하고 마치도록 하겠습니다.

1. 첫번째 확장 파티션의 정보는 주 파티션 테이블에 존재합니다. 두번째 확장 파티션의 정보는 첫번째 확장 파티션에 들어 있으며, N번째 확장 파티션의 정보는 N-1번째 파티션 테이블에 존재합니다.

2. 주 파티션 테이블에 정의된 첫번째 확장 테이블은 주 파티션 테이블에 정의된 일반 파티션 3개의 공간을 제외한 나머지 공간을 자신의 크기로 가집니다.
3. 파티션 개수가 4개를 초과하여 확장 파티션을 사용하는 경우 N번째 파티션의 정보는 N-3번째 파티션 테이블에 존재합니다. 쉽게 말해서, 4번 파티션은 첫번째 확장 파티션 테이블에 존재하였고, 5번 파티션은 두번째 확장 파티션 테이블에 존재 했습니다. 이로써 N은 3보다 크다는것을 알 수 있습니다.

4. 확장 파티션을 이용하는 경우 4번 파티션부터는 자신의 파티션 정보를 기록한 확장 파티션의 시작 섹터를 기준으로 해당 파티션의 시작 섹터를 계산해야 합니다. 6번 파티션은 세번째 확장 파티션의 시작 위치에서 시작 LBA를 더해야 합니다.

5. 마지막으로 확장 파티션 테이블이 위치한 섹터는 첫번째 확장 파티션 테이블이 위치한 섹터를 기준으로 계산됩니다.

파티션 테이블의 위치
주 파티션 테이블에서 확장 파티션을 나타내는 LBA = First Extended Partition Table
First Extended Partition Table = 10,795,008섹터 (첫번째 확장 파티션의 위치)
First Extended Partition Table VBR = 10,795,008섹터 + 4번째 파티션 LBA주소값 (0x800) = 10,797,056

첫번째 확장 파티션의 시작 섹터 + 두번째 확장 파티션의 시작 LBA = Second Extended Partition Table
Second Extended Partition Table = 12,996,608섹터 (두번째 확장 파티션의 위치)
Second Extended Partition Table VBR = 12,996,608섹터 + 5번째 파티션 LBA주소값 (0x800) = 12,998,656

두번째 확장 파티션의 시작 섹터 + 세번째 확장 파티션의 시작 LBA = Third Extended Partition Table
Third Extended Partition Table = 14,360,576섹터 (세번째 확장 파티션의 위치)
Third Extended Partition Table VBR = 14,360,576섹터 + 6번째 파티션 LBA주소값 (0x800) = 14,362,624

세번째 확장 파티션의 시작 섹터 + 네번째 확장 파티션의 시작 LBA = Fourth Extended Partition Table
Fourth Extended Partition Table = 15,269,888섹터 (세번째 확장 파티션의 위치)
Fourth Extended Partition Table VBR = 15,269,888섹터 + 7번째 파티션 LBA주소값 (0x800) = 15,271,936



-reperence-
https://geun-yeong.tistory.com/68