Disk Forensic

PC-based Partitions

liqu3ur 2025. 4. 6. 18:21
반응형

DOS Partitions

가장 일반적으로 접하는 파티션 시스템은 DOS 스타일 파티션이다. DOS 파티션은 Intel IA32 하드웨어(i386 / x86)와 함께 수년 동안 사용되어 왔지만, 공식적인 사양은 존재하지 않는다. 많은 Microsoft 및 non-Microsoft 문서들이 파티션에 대해 다루지만, 표준 reference는 없다. 뿐만 아니라 표준 명칭도 없다. Microsoft는 이런 유형의 파티션 시스템을 사용하는 디스크를 Master Boot Record(MBR) 디스크라고 부른다. 이는 Extensible Firmware Interface(EFI)와 64비트 Intel Itanium 기반 시스템(IA64)에서 사용되는 GUID Partition Table(GPT) 디스크와 비교된다.

Windows 2000부터 Microsoft는 기본 디스크와 동적 디스크를 구분하기 시작했다. 기본 디스크는 MBR 또는 GPT 디스크를 의미하며, 디스크 내의 파티션은 독립적인 상태이다. 동적 디스크는 MBR 또는 GPT 디스크일수도, 파티션을 결합하고 병합하여 하나의 큰 파티션을 만들 수 있다.

 

Basic MBR Concepts

DOS 파티션으로 구성된 디스크는 첫 번째 512 byte 섹터에 MBR이 있다. MBR은 Boot Code, Partition Table, Signature Value을 포함한다. Boot Code는 컴퓨터가 Partition Table을 처리하고, 운영체제를 찾는 방법을 지시하는 명령어를 포함하고 있다. Partition Table은 4개의 항목을 가지며, 각 항목은 DOS 파티션을 설명할 수 있다. 각 항목은 아래와 같은 필드를 가진다.

  • Starting CHS address
  • Ending CHS address
  • Starting LBA address
  • Number of sectors in partition
  • Type of partition
  • Flags

각 테이블 항목은 CHS와 LBA 주소 모두에서 파티션의 레이아웃OS Partitions

가장 일반적으로 접하는 파티션 시스템은 DOS 스타일 파티션이다. DOS 파티션은 Intel IA32 하드웨어(i386 / x86)와 함께 수년 동안 사용되어 왔지만, 공식적인 사양은 존재하지 않는다. 많은 Microsoft 및 non-Microsoft 문서들이 파티션에 대해 다루지만, 표준 reference는 없다. 뿐만 아니라 표준 명칭도 없다. Microsoft는 이런 유형의 파티션 시스템을 사용하는 디스크를 Master Boot Record(MBR) 디스크라고 부른다. 이는 Extensible Firmware Interface(EFI)와 64비트 Intel Itanium 기반 시스템(IA64)에서 사용되는 GUID Partition Table(GPT) 디스크와 비교된다.

 

Windows 2000부터 Microsoft는 기본 디스크와 동적 디스크를 구분하기 시작했다. 기본 디스크는 MBR 또는 GPT 디스크를 의미하며, 디스크 내의 파티션은 독립적인 상태이다. 동적 디스크는 MBR 또는 GPT 디스크일수도, 파티션을 결합하고 병합하여 하나의 큰 파티션을 만들 수 있다.

 

 

 

Basic MBR Concepts

DOS 파티션으로 구성된 디스크는 첫 번째 512 byte 섹터에 MBR이 있다. MBR은 Boot Code, Partition Table, Signature Value을 포함한다. Boot Code는 컴퓨터가 Partition Table을 처리하고, 운영체제를 찾는 방법을 지시하는 명령어를 포함하고 있다. Partition Table은 4개의 항목을 가지며, 각 항목은 DOS 파티션을 설명할 수 있다. 각 항목은 아래와 같은 필드를 가진다.

  • Starting CHS address
  • Ending CHS address
  • Starting LBA address
  • Number of sectors in partition
  • Type of partition
  • Flags

각 테이블 항목은 CHS와 LBA 주소 모두에서 파티션의 레이아웃 설명한다. CHS주소는 8GB 미만의 디스크에서만 작동하며, LBA 주소는 TB 크기의 디스크에서도 사용 가능하다.

파티션 유형 필드는 파티션에 어떤 종류의 데이터가 존재해야 하는지를 삭별한다. FAT, NTFS 등이 해당된다. 파티션 유형은 운영체제에 따라 다르게 사용된다. Linux의 경우는 파티션 유형을 신경쓰지 않는다. FAT 파일 시스템을 NTFS 유형의 파티션에 넣어도 FAT으로 마운트되는 것이다. 반면, Microsoft Windows는 파티션 유형에 의존한다. Windows는 파티션 유형을 지원하지 않으면 해당 파일 시스템을 마운트하지 않는다. 따라서, FAT 파일 시스템이 Linux 파일 시스템 유형의 파티션에 있다면, Windows에서는 이 FAT파일 시스템을 볼 수 없다. 이런 부분은 Windows에서 파티션을 숨기는 데 사용할 수 있다. 일부 도구는 Windows가 부팅될 때 다시 표시되지 않도록 파티션 유형에 비트를 추가할 수 있다. 

 

각 항목은 부팅 가능한 파티션을 식별하는 플래그 필드를 포함하고 있다. 이 플래그는 컴퓨터가 부팅할 때 운영체제가 위치한 곳을 식별하는 데 사용된다. MBR의 네 개 항목을 사용하여 최대 네 개의 파티션이 있는 간단한 디스크 레이아웃을 설명할 수 있다. 아래 이미지와 같이 두 개의 파티션과 첫 번째 섹터에 있는 MBR을 가진 간단한 디스크를 볼 수 있다.

두 개의 파티션과 MBR이 있는 기본 DOS 디스크

 

Extended Partition Concepts

MBR은 최대 4개의 파티션만 표현할 수 있는 단순한 구조이다. 그러나 많은 시스템에서는 이보다 더 많은 파티션이 필요하다. 예를 들어, 12GB 디스크를 2GB씩 6개의 파티션으로 나누고 싶다면, MBR의 4개 파티션 테이블 항목만으로는 이를 해결할 수 없다.

이 문제를 해결하기 위한 방식이 DOS파티션 시스템을 복잡하게 만드는 이유이다. 기본적인 해결 방법은 MBR의 1~3개 항목을 일반 파티션에 사용하고, 나머지 디스크 공간을 채우는 확장 파티션 하나를 생성하는 것이다.

아래 이미지에서는 세 개의 Primary File System Partition과 하나의 Primary Extended Partition을 볼 수있다. 

세 개의 Primary File System Partition과 하나의 Primary Extended Partition

  • Primary File System Partition : MBR에 항목이 있으며, 파일 시스템이나 구조화된 데이터를 포함하는 파티션이다.
  • Primary Extended Partition : MBR에 항목이 있으며, 추가적인 파티션을 포함하는 파티션이다.

 

기본 확장 파티션 내부에서는 MBR의 중앙 파티션 테이블과 다른 방식으로 작동한다. 확장 파티션 내의 각 파티션 앞에는 해당 파티션의 크기와 다음 파티션 위치를 설명하는 데이터가 있다. 이 구조는 Linked List 형태로 이루어진다. 모든 파티션은 기본 확장 파티션 내부에 위치해야 하므로, 확장 파티션은 가능한 최대 크기를 가지는 것이 바람직하다.

Secondary Fime System Partition과 Secondary Extended Partition

 

Secondary File System Partition은 Windows에서 Logical Partition이라고도 불리며, 기본 확장 파티션 내부에 위치하고, 파일 시스템이나 구조화된 데이터를 포함한다. Secondary File System Partition은 MBR에 설명된 기본 파티션과 비슷하지만, 확장 파티션 내에 있다는 점에서 차이가 있다.

 

Secondary Extended Partition은 파티션 테이블과 Secondary File System Partition을 포함하는 파티션이다. Secondary Extended Partition은 Secondary File System Partition을 감싸고, 해당 파티션의 위치와 다음 Secondary Extended Partition의 위치 정보를 설명한다.

※ 위 이미지의 과정은 디스크 공간이 소진될 때까지 계속 반복할 수 있다.

 

이제 두 가지 파티션 방법을 함께 적용해 보도록 하겠다. 만약 1개에서 4개까지의 파티션이 필요하다면 MBR만 사용하여 생성할 수 있으며, 확장 파티션에 대해서는 신경쓰지 않아도 된다. 하지만 4개 이상의 파티션이 필요할 경우, MBR에서 최대 3개의 primary file system partition을 생성한 후 디스크의 나머지 공간을 하나의 primary extended partition으로 할당해야 한다.

primary extended partition 안에서는 앞서 설명한 linked list 방식의 파티션 방법을 사용한다. 그리고 이 linked list 구조를 최적화할 수 있는데, 첫 번째 secondary extended partition을 만들지 않고, primary extended partition의 시작 부분에 바로 파티션 테이블을 두는 방법이다. 이 파티션 테이블은 하나의 secondary file system partition과 하나의 secondary extended partition을 정의할 수 있다.

예로, 12GB 디스크를 2GB씩 6개의 파티션으로 나누고 싶다고 가정해 보겠다.

MBR의 첫 세 개의 항목을 사용해 처음 세 개의 2GB 파티션을 생성하고, 남은 6GB를 primary extended partition으로 할당한다(6GB ~ 12GB).

이제 linked list 방법을 사용해 나머지 세 개의 파티션을 할당해야 한다. primary extended partition의 첫 번째 섹터에 있는 파티션 테이블을 사용해 6GB에서 8GB까지의 첫 번째 secondary file system partition을 생성하고, 8GB에서 10GB까지의 첫 번째 secondary extended partition을 생성한다. 첫 번째 secondary extended partition 내부에 또 하나의 파티션 테이블이 생성되며, 이 테이블에는 8GB에서 10GB까지의 두 번째 secondary file system partition과 10GB에서 12GB까지의 구 번째 secondary extended partition이 정의된다. 마지막으로 두 번째 secondary extended partition 내부의 파티션 테이블에는 10GB에서 12GB까지의 마지막 파일 시스템 파티션이 기록된다. 이 구조는 아래 이미지와 같이 나타낼 수 있다.

6개 파일 시스템 파티션의 구조

 

앞서 설명한 것과 같이 확장 파티션 테이블에는 최대 하나의 secondary file system partition 항목과 하나의 secondary extended partition 항목만 있어야 한다. 하지만 실제로는 대부분의 운영체제가 두 개 이상의 항목이 사용되더라도 오류를 발생시키지 않는다. 이로 인해 일부 포렌식 도구들은 두개 이상의 항목을 제대로 처리하지만, 일부 도구는 두 개 이상의 항목은 무시하거나 잘못 인식하기도 한다.

 

Boot Code

DOS 디스크의 부트 코드는 첫 번째 512 byte 섹터인 MBR의 처음 446 byte에 존재한다. 이 섹터의 끝 부분에는 파티션 테이블이 위치해 있다. 표준 Microsoft 부트 코드는 MBR에 있는 파티션 테이블을 처리하고, 부팅 가능 플래그가 설정된 파티션을 식별한다. 부팅 가능한 파티션을 찾으면, 해당 파티션의 첫 번째 섹터를 확인하고, 그 안에 있는 코드를 실행한다. 이 파티션의 시작 부분에 있는 코드는 운영체제에 따라 달라진다.

Boot sector viruses는 MBR의 처음 446 byte 부분에 자신을 삽입하여, 컴퓨터가 부팅될 때마다 실행되도록 한다. 요즘은 하나의 컴퓨터에 여러 운영체제를 설치하는 경우가 점점 더 많아지고 있고, 이를 처리하는 방법은 아래와 같이 두 가지가 있다.

  • 첫 번째 방법은 Windows가 사용하는 방식으로, 부팅 가능한 파티션 안에 있는 코드가 사용자가 어떤 운영체제를 로드할지 선택할 수 있도록 한다. 즉, 먼저 MBR의 부트 코드가 실행되고, Windows의 부팅 가능한 코드가 로드된다. 이후 Windows 부팅 코드가 사용자에게 다른 파티션에서 부팅할 수 있는 옵션을 제공한다. 
  • 두 번째 방법은 MBR의 코드를 변경하는 방식이다. 새 MBR 코드는 사용자에게 부팅 가능한 파티션의 목록을 보여주고, 사용자가 원하는 파티션을 선택할 수 있게 한다. 이 방법은 일반적으로 더 많은 코드가 필요하며, 첫 번째 파티션이 시작되기 전의 사용되지 않은 섹터를 일부 사용하게 된다. 

 

Data Structure

MBR Data Structure

DOS 파티션 테이블은 MBR과 각 확장 파티션의 첫 번째 섹터에 존재한다. 이들은 모두 동일한 512 byte 구조를 사용한다. 첫 446 byte는 어셈블리 부트 코드를 위해 예약되어 있다. MBR에는 반드시 부트 코드가 있어야 컴퓨터가 시작될 때 사용된다. 반면, 확장 파티션에는 부트 코드가 필요하지 않으며, 이 공간에 숨겨진 데이터를 저장할 수도 있다. MBR의 레이아웃은 아래와 같다.

Byte Range 설명 필수 여부
0 ~ 445 Boot Code No
446 ~ 461 Partition Table Entry #1 Yes
462 ~ 477 Partition Table Entry #2 Yes
478 ~ 493 Partition Table Entry #3 Yes
494 ~ 509 Partition Table Entry #4 Yes
510 ~ 511 Signature Value (0xAA55) No

파티션 테이블은 4개의 16 byte 항목을 가지고 있다. 각 항목의 구조는 아래와 같다. 주의할 점은 CHS(Cylinder-Head-Sector) 주소가 오래된 시스템에서는 필수적이지만, 최신 시스템에서는 필수적이지 않다는 점이다.

Byte Range 설명 필수 여부
0 ~ 0 Bootable Flag No
1 ~ 3 Starting CHS Address Yes
4 ~ 4 Partition Type No
5 ~ 7 Ending CHS Address Yes
8 ~ 11 Starting LBA Address Yes
12 ~ 15 Size in Sectors Yes

부팅 가능한 플래그는 항상 필요한 것이 아니다. 단일 운영체제만 있는 시스템의 표준 부트 코드는 플래그가 0x80으로 설정된 항목을 찾는다. 예로, 시스템에 Microsoft Windows가 설치되어 있고, 디스크가 두 개의 파티션으로 나누어져 있다면, 운영체제가 설치된 파티션에는 부팅 가능한 플래그가 설정되지만, 부트 코드가 사용자가 부팅할 파티션을 선택하도록 하는 경우에는 부팅 가능한 플래그가 필요하지 않다. 그러나 일부 부트 프로그램은 사용자가 부팅할 파티션을 선택하면 부팅 가능한 플래그를 설정하기도 한다.

시작 및 끝 CHS 주소는 8 bit 헤드 값, 6 bit 섹터 값, 10 bit 실린더 값 총합 3 byte을 가진다. 이론적으로 각 파티션에 대해 CHS 주소 또는 LBA 주소 중 하나만 설정되면 되고, 둘 다 설정할 필요는 없다. 어떤 값을 설정할지는 운영체제와 시스템 부팅에 사용되는 코드에 따라 결정된다. 예를 들어, Windows98과 ME는 디스크의 첫 7.8GB 내의 파티션에 대해 CHS 주소를 사용하지만, Windows 2000 이상은 항상 CHS 주소를 무시한다. 일부 파티션 도구는 하위 호환성을 위해 가능한 경우 두 값을 모두 설정한다. 이 필드의 사용은 응용 프로그램에 따라 다르다.

파티션 유형 필드는 파티션에 있어야 할 파일 시스템 유형을 식별한다. 일반적인 파티션 유형 목록은 아래와 같다. 이외 더 자세한 파티션 유형 목록은 추가적으로 찾아보기 바란다.

Type 설명
0x00 Empty
0x01 FAT12, CHS
0x04 FAT16, 16 ~ 32 MB, CHS
0x05 Microsoft Extended, CHS
0x06 FAT16, 32 MB ~ 2GB, CHS
0x07 NTFS
0x0b FAT32, CHS
0x0c FAT32, LBA
0x0e FAT16, 32 MB–2GB, LBA
0x0f Microsoft Extended, LBA
0x11 Hidden FAT12, CHS
0x14 Hidden FAT16, 16 ~ 32 MB, CHS
0x16 Hidden FAT16, 32 MB ~ 2GB, CHS
0x1b Hidden FAT32, CHS
0x1c Hidden FAT32, LBA
0x1e Hidden FAT16, 32 MB ~ 2GB, LBA
0x42 Microsoft MBR. Dynamic Disk
0x82 Solaris x86
0x82 Linux Swap
0x83 Linux
0x84 Hibernation
0x85 Linux Extended
0x86 NTFS Volume Set
0x87 NTFS Volume Set
0xa0 Hibernation
0xa1 Hibernation
0xa5 FreeBSD
0xa6 OpenBSD
0xa8 Mac OSX
0xa9 NetBSD
0xab Mac OSX Boot
0xb7 BSDI
0xb8 BSDI swap
0xee EFI GPT Disk
0xef EFI System Partition
0xfb Vmware File System
0xfc Vmware swap

FAT16 0x04와 0x0e 유형은 본질적으로 동일하지만, 후자의 유형에 대해서는 운영체제가 확장된 루틴을 사용해야 한다. FAT32 0x0b와 0x0c도 마찬가지로 일반 버전과 확장 버전이다. 0x05와 0x0f 유형은 확장 파티션에 대한 일반 및 확장 버전이다. hidden 버전의 경우 상위 nibble이 1로 설정되어 있다.

 

MBR과 파티션 테이블을 설명하기 위해, 실제 시스템에서 섹터를 추출하여 구조를 수작업으로 분석해 보겠다. 이 시스템은 Microsoft Windows와 Linux 듀얼 부트 시스템이며, 8개의 파일 시스템 파티션이 있다. 아래 예시는 디스크의 첫 번째 섹터에서 추출된 것이다. 출력 결과는 Linux에서 xxd 도구를 사용해 얻은 결과이며, 실행 명령어는 아래와 같다.

dd if=disk3.dd bs=512 skip=0 count=1 | xxd

 

[출력 결과]

0000000: eb48 9010 8ed0 bc00 b0b8 0000 8ed8 8ec0  .H.............. 
[REMOVED] 
0000384: 0048 6172 6420 4469 736b 0052 6561 6400  .Hard Disk.Read. 
0000400: 2045 7272 6f72 00bb 0100 b40e cd10 ac3c   Error.........< 
0000416: 0075 f4c3 0000 0000 0000 0000 0000 0000  .u.............. 
0000432: 0000 0000 0000 0000 0000 0000 0000 0001  ................ 
0000448: 0100 07fe 3f7f 3f00 0000 4160 1f00 8000  ....?.?...A`.... 
0000464: 0180 83fe 3f8c 8060 1f00 cd2f 0300 0000  ....?..`.../.... 
0000480: 018d 83fe 3fcc 4d90 2200 40b0 0f00 0000  ....?.M.".@..... 
0000496: 01cd 05fe ffff 8d40 3200 79eb 9604 55aa  .......@2.y...U.

첫 446 byte는 Boot Code이다. 마지막 2 byte에 있는 0xAA55 Signature Value는 섹터의 끝에 나타난다(Little-Endian이므로 반전되어 있다). 파티션 테이블은 447 byte에서 시작되며, 각 라인(테이블 항목)은 16 byte이고, 두 번째 항목은 첫 번째 항목 바로 다음인 0x8000부터 시작된다. 위 구조를 바탕으로 파티션 테이블 항목 네 개는 아래와 같다.

# Bootable Flag Partition Type Starting LBA Address Size
1 0x00 0x07 0x0000003f (63) 0x001f6041 (2,056,257)
2 0x80 0x83 0x001f6080 (2,056,320) 0x00032fcd (208,845)
3 0x00 0x83 0x0022904d (2,265,165) 0x000fb040 (1,028,160)
4 0x00 0x05 0x0032408d (3,293,325) 0x0496eb79 (76,999,545)

 

위와 같이 파티션 유형을 사용하여 각 파티션에 어떤 종류의 데이터가 있을지 추측할 수 있다. 첫 번째 파티션은 NTFS 파일 시스템일 것이며, 두 번째와 세 번째 파티션은 Linux 파일 시스템일 것이다. 네 번째 파티션은 확장 파티션이다. 두 번째 항목은 부팅 가능하도록 설정되어 있다. 확장 파티션은 앞서 말한 것처럼 총 8개의 파티션이 있을 것이라는 예상에 따라 나타나야 했다. 이 파티션 테이블의 디스크 레이아웃은 아래와 같다.

첫 번째 파티션 테이블을 처리한 후 디스크 레이아웃(크기 조정하지 않음)

 

Extended Partition Data Structures

확장 파티션은 첫 번째 섹터에서 MBR과 동일한 구조를 사용하지만, 이를 Linked List를 만들기 위해 사용한다. 하지만 파티션 테이블 항목은 약간 다르다. 시작 섹터 주소가 디스크의 시작점이 아닌 다른 위치를 기준으로 상대적으로 설정되기 때문이다.

특히, secondary file system partition의 시작 섹터는 secondary extended partition의 시작 섹터와 다른 기준을 따른다. secondary file system partition의 시작 주소는 현재 파티션 테이블을 기준으로 한다. 이는 secondary extended partition이 파일 시스템 파티션을 감싸는 역할을 하기 때문이다. 반면 secondary extended partition의 시작 주소는 primary extended partition을 기준으로 한다.

아래 예제로 간단히 설명해 보겠다.

  1. 기본 확장 파티션은 섹터 1,000에서 시작하며, 길이는 11,000 섹터다.
  2. 해당 파티션 테이블에는 두 개의 항목이 있다.
    • 첫 번째 항목: FAT 파일 시스템
      • 시작 섹터: 63
      • 현재 파티션 테이블의 섹터(1,000)에 63을 더하여 실제 주소는 1,063
    • 두 번째 항목: 확장 파티션
      • 시작 섹터: 4,000
      • 기본 확장 파티션의 시작 섹터(1,000)에 4,000을 더하여 실제 주소는 5,000

이제 섹터 5,000에 있는 보조 확장 파티션을 살펴보겠다.

  1. 첫 번째 항목: NTFS 파일 시스템
    • 시작 섹터: 63
    • 현재 파티션 테이블의 섹터(5,000)에 63을 더하여 실제 주소는 5,063
  2. 두 번째 항목: 확장 파티션
    • 시작 섹터: 6,500
    • 기본 확장 파티션의 시작 섹터(1,000)에 6,500을 더하여 실제 주소는 7,500

다음으로 섹터 7,500에 있는 보조 확장 파티션을 확인해 보겠다.

  1. 첫 번째 항목: EXT3FS 파일 시스템
    • 시작 섹터: 63
    • 현재 파티션 테이블의 섹터(7,500)에 63을 더하여 실제 주소는 7,563
  2. 두 번째 항목: 보조 확장 파티션
    • 시작 섹터: 9,000
    • 기본 확장 파티션의 시작 섹터(1,000)에 9,000을 더하여 실제 주소는 10,000

이를 통해 확장 파티션이 연결 리스트 방식으로 구성된다는 것을 알 수 있다.

 

Apple Partitions

Apple Macintosh 운영체제를 실행하는 시스템은 Microsoft Windows를 실행하는 시스템만큼 흔하지 않지만, Unix 기반의 Mac OS X 도입 이후 점점 인기를 얻고 있다. 여기서 설명할 파티션은 OS X이 실행되는 최신 Mac 노트북 및 데스크톱, Macintosh 9을 실행하는 구형 시스템, MP3 재생이 가능한 iPod 기기에서도 찾을 수 있다.

Macintosh 시스템에서는 디스크 이미지 파일을 사용하여 파일을 전송할 수 있으며, 이 파일은 Windows의 ZIP 파일이나 Unix의 TAR 파일과 유사한 개념이다. 디스크 이미지 내의 파일들은 파일 시스템에 저장되며, 이 파일 시스템은 특정 파티션 내에 존재할 수 있다. 

Apple의 파티션 시스템은 DOS 기반 파티션의 복잡성과 BSD 디스크 레이블의 제한된 파티션 수 사이에서 균형을 이루는 설계를 가지고 있다. Apple 파티션은 원하는 만큼의 파티션을 설정할 수 있으며, 데이터 구조는 디스크의 연속된 섹터에 저장된다.

 

General Overview

Apple 파티션은 디스크의 시작 부분에 위치한 Partition Map Structure에 의해 정의된다. DOS 파티션 테이블과 달리, 이 맵에는 Boot Code가 포함되지 않는다. 대신 firmware가 이 구조를 처리하는 코드를 포함하고 있다.

각 파티션 맵 엔트리는 파티션의 시작 섹터, 크기, 유형, 볼륨 이름 등을 설명한다. 또한, 데이터 영역의 위치와 Boot Code의 위치와 같은 파티션 내부 데이터에 대한 정보도 포함될 수 있다.

주요 특징은 아래와 같다.

  • 첫 번째 엔트리는 일반적으로 파티션 맵 자체를 나타내는 항목이며, 이 맵이 차지할 수 있는 최대 크기를 정의한다.
  • Apple 시스템에서는 하드웨어 드라이버를 저장하는 파티션을 생성하는 경우가 많다. 따라서, 파일 시스템 파티션 외에도 드라이버 및 기타 비파일 시스템 데이터를 포함하는 다수의 파티션이 존재한다. 

아래 이미지는 파일 시스템을 포함한 세 개의 파티션과 파티션 맵을 위한 파티션을 가진 Apple 디스크의 예이다.

세 개의 파티션과 파티션 맵을 위한 파티션을 가진 Apple 디스크

 

Data Structure

Apple 파티션의 데이터 구조를 살펴보도록 하겠다.

 

 Partition Map Entry

Apple 파티션 맵에는 여러 개의 512 byte 데이터 구조가 포함되어 있으며 각 파티션은 하나의 데이터 구조를 사용한다. 파티션 맵은 디스크의 두 번째 섹터에서 시작하여 모든 파티션이 설명될 때까지 계속된다. 파티션 데이터 구조는 연속된 섹터로 배치되며, 각 맵 항목에는 총 파티션 수에 대한 값이 있다. 512 byte 데이터 구조는 아래와 같다.

Byte Range 설명 필수 여부
0 ~ 1 Signature Value (0x504D) No
2 ~ 3 Reserved No
4 ~ 7 Total Number of partitions Yes
8 ~ 11 Starting sector of partition Yes
12 ~ 15 Size of partition in sectors Yes
16 ~ 47 Name of partition in ASCII No
48 ~ 79 Type of partition in ASCII No
80 ~ 83 Starting sector of data area in partition No
84 ~ 87 Size of data area in sectors No
88 ~ 91 Status of partition No
92 ~ 95 Starting sector of boot code No
96 ~ 99 Size of boot code in sectors No
100 ~ 103 Address of boot loader code No
104 ~ 107 Reserved No
108 ~ 111 Boot code entry point No
112 ~ 115 Reserved No
116 ~ 119 Boot code checksum No
120 ~ 135 Processor type No
136 ~ 511 Reserved No

 

파티션 유형은 ASCII 형태로 제공되며, 다른 파티션 구성표에서 사용하는 정수가 아니다. 각 파티션의 상태 값은 이전 A/UX 시스템과 최신 Macintosh 시스템 모두 적용된다. A/UX는 Apple의 이전 운영체제이다. 상태값은 아래 값 중 하나를 가질 수 있다. 

Type 설명
0x00000001 Entry is valid (A/UX only)
0x00000002 Entry is allocated (A/UX only)
0x00000004 Entry in use (A/UX only)
0x00000008 Entry contains boot information (A/UX only)
0x00000010 Partition is readable (A/UX only)
0x00000020 Partition is writable (Macintosh & A/UX)
0x00000040 Boot code is position independent (A/UX only)
0x00000100 Partition contains chain-compatible driver (Macintosh only)
0x00000200 Partition contains a real driver (Macintosh only)
0x00000400 Partition contains a chain driver (Macintosh only)
0x40000000 Automatically mount at startup (Macintosh only)
0x80000000 The startup partition (Macintosh only)

 

데이터 영역 필드는 파일 시스템의 데이터 영역이 디스크의 시작 부분에서 시작되지 않는 경우 사용된다. Boot Code 필드는 시스템이 시작될 때 Boot Code를 찾는 데 사용된다.

 

Apple 디스크에서 파티션을 식별하기 위해 도구(또는 사람)는 두 번째 섹터에 있는 데이터 구조를 읽는다. 이 데이터는 총 파티션 수를 파악하는 데 사용되며, 나머지 파티션 정보도 이 구조로부터 수집된다. 첫 번째 항목은 보통 파티션 맵 자체에 대한 항목이다. 그 다음 섹터가 읽히고, 이 과정을 모든 파티션이 읽힐 때까지 반복한다. 다음은 파티션 맵의 첫 번째 항목에 대한 내용이다.

0000000: 504d 0000 0000 000a 0000 0001 0000 003f  PM.............? 
0000016: 4170 706c 6500 0000 0000 0000 0000 0000  Apple........... 
0000032: 0000 0000 0000 0000 0000 0000 0000 0000  ................ 
0000048: 4170 706c 655f 7061 7274 6974 696f 6e5f  Apple_partition_ 
0000064: 6d61 7000 0000 0000 0000 0000 0000 0000  map............. 
0000080: 0000 0000 0000 003f 0000 0000 0000 0000  .......?........ 
0000096: 0000 0000 0000 0000 0000 0000 0000 0000  ................ 
[REMOVED]

Apple 컴퓨터는 Motorola PowerPC 프로세서를 사용하므로, 데이터를 Big-Endian 방식으로 저장한다. 따라서 DOS 파티션에서 했던 것처럼 숫자의 byte 순서를 반대로 바꿀 필요가 없다. byte 0 ~ 1이 Signature 값 0x504d를 확인할 수 있고, byte 4~7은 파티션의 개수가 표시되어 있으며, 이는 10개(0x0000000a)이다. byte 8~11은 디스크의 첫 번째 섹터가 이 파티션의 시작 섹터임을 나타내며, 크기는 63 섹터(0x0000003f)다.

파티션 이름은 Apple이며, 파티션 유형은 Apple_partition_map이다. byte 88~91은 이 파티션에 설정된 플래그가 없음을 보여준다. 파티션 맵 자체가 아닌 다른 항목들은 상태 값이 설정되어 있다. 

 

Image Tool Output

Apple 파티션 맵은 The Sleuth Kit의 mmls 명령어를 사용하여 볼 수 있다. Linux의 fdisk 명령어로는 파티션 맵의 내용을 확인할 수 없다.

음은 20GB 용량의 iBook 노트북에서 mmls 명령어를 실행한 결과다.

# mmls -t mac mac-disk.dd 
MAC Partition Map 
Units are in 512-byte sectors 
    Slot  Start      End        Length     Description 
00: ----- 0000000000 0000000000 0000000001 Unallocated 
01: 00    0000000001 0000000063 0000000063 Apple_partition_map 
02: ----- 0000000001 0000000010 0000000010 Table 
03: ----- 0000000011 0000000063 0000000053 Unallocated 
04: 01    0000000064 0000000117 0000000054 Apple_Driver43 
05: 02    0000000118 0000000191 0000000074 Apple_Driver43 
06: 03    0000000192 0000000245 0000000054 Apple_Driver_ATA 
07: 04    0000000246 0000000319 0000000074 Apple_Driver_ATA 
08: 05    0000000320 0000000519 0000000200 Apple_FWDriver 
09: 06    0000000520 0000001031 0000000512 Apple_Driver_IOKit 
10: 07    0000001032 0000001543 0000000512 Apple_Patches 
11: 08    0000001544 0039070059 0039068516 Apple_HFS 
12: 09    0039070060 0039070079 0000000020 Apple_Free

위 출력 결과에서 각 항목은 시작 섹터 순으로 정렬되어 있으며, 두 번째 열은 해당 파티션이 파티션 맵의 몇 번째 항목에 기술되어 있는지를 보여 준다. 이 경우에는 항목들이 이미 정렬된 상태이다.

12번 항목에서는 Apple이 현재 할당되지 않은 섹터를 표시하고 있음을 볼 수 있다.

0, 2, 3번 항목은 mmls가 추가한 것으로, 파티션 맵이 사용하는 공간과 비어 있는 섹터를 보여주기 위한 것이다. 

위 출력 결과에 나열된 드라이버들은 시스템이 부팅될 때 사용되는 드라이버들이다.

 

raw disk image에서 사용할 수 있는 또 다른 도구는 OS X에서 -dump 옵션과 함께 사용하는 pdisk 도구다.

# pdisk mac-disk.dd -dump 
mac-disk.dd map block size=512 
 
   #:                  type name             length   base ( size ) 
   1: Apple_partition_map Apple                  63 @ 1 
   2:       Apple_Driver43*Macintosh             54 @ 64 
   3:       Apple_Driver43*Macintosh             74 @ 118 
   4:     Apple_Driver_ATA*Macintosh             54 @ 192 
   5:     Apple_Driver_ATA*Macintosh             74 @ 246 
   6:       Apple_FWDriver Macintosh            200 @ 320 
   7:   Apple_Driver_IOKit Macintosh            512 @ 520 
   8:        Apple_Patches Patch Partition      512 @ 1032 
   9:            Apple_HFS untitled        39068516  @ 1544 ( 18.6G) 
  10:          Apple_Free                        0+@  39070060 
 
Device block size=512, Number of Blocks=10053 
DeviceType=0x0, DeviceId=0x0 
Drivers- 
1: @ 64 for 23, type=0x1 
2: @ 118 for 36, type=0xffff 
3: @ 192 for 21, type=0x701 
4: @ 246 for 34, type=0xf8ff

 

Apple의 디스크 이미지 파일(포렌식 디스크 이미지 파일과는 다름)도 파티션 앱을 포함할 수 있다. 디스크 이미지 파일은 여러 개의 개별 파일을 저장할 수 있는 아카이브 파일로, Windows의 zip 파일이나 Unix의 tar 파일과 유사하다.

디스크 이미지 파일은 파일 시스템을 포함한 단일 파티션을 담고 있을 수도 있고, 파티션 없이 파일 시스템만 포함하고 있을 수도 있다. .dmg 확장자를 가진 디스크 이미지 파일의 구조는 다음과 같다.

# mmls -t mac test.dmg 
MAC Partition Map 
Units are in 512-byte sectors 
    Slot  Start      End        Length     Description 
00: ----- 0000000000 0000000000 0000000001 Unallocated 
01: 00    0000000001 0000000063 0000000063 Apple_partition_map 
02: ----- 0000000001 0000000003 0000000003 Table 
03: ----- 0000000004 0000000063 0000000060 Unallocated 
04: 01    0000000064 0000020467 0000020404 Apple_HFS 
05: 02    0000020468 0000020479 0000000012 Apple_Free

 

Analysis Considerations

Apple 파티션의 유일한 특징 중 하나는 데이터 구조 내에 사용되지 않는 필드들이 여러 개 존재한다는 점이다. 이 필드들은 소량의 데이터를 숨기기 위해 악용될 수 있다. 

또한, 마지막 파티션 데이터 구조와 파티션 맵에 할당된 공간의 끝 사이의 섹터들에 데이터를 숨길 수도 있다.

다른 모든 파티션 방식들과 마찬가지로, 공식적인 이름처럼 보이거나 특정 타입으로 표시된 파티션 내부에는 무엇이든 포함될 수 있다.

 

Removable Media

대부분의 이동식 미디어도 파티션을 가지고 있으며, 일반적으로 하드 디스크와 동일한 구조를 사용한다. 

이 규틱의 예외는 Windows나 Unix 시스템에서 FAT12로 포맷된 플로피 디스크다.

플로피 디스크는 파티션 테이블이 없으며, 디스크 전체가 하나의 파티션으로 간주된다. 플로피 디스크를 이미지로 추출하면 해당 이미지를 곧바로 파일 시스템으로 분석할 수 있다.

 

작은 USB 저장 장치(썸 드라이브) 중 일부는 파티션 없이 하나의 파일 시스템만 포함하기도 하지만, 일부는 파티션을 포함하고 있다.

 

zip 디스크 같은 대용량 이동식 미디어는 파티션 테이블을 포함한다. zip 디스크의 파티션 테이블 구조는 디스크가 Mac용으로 포맷되었는지 PC용으로 포맷되었는지에 따라 달라진다.

PC용으로 포맷된 디스크는 DOS 기반 파티션 테이블을 가지며, 기본적으로 네 번째 슬롯에 하나의 파티션만 포함된다.

 

디지털 카메라에 주로 사용되는 플래시 카드 또한 일반적으로 파티션 테이블을 가지고 있다. 많은 플래시 카드는 FAT 파일 시스템을 사용하며, 일반적인 디지털 포렌식 도구로 분석할 수 있다. 다음은 128MB 플래시 카드에서 추출한 DOS 기반 파티션 테이블이다.

# mmls -t dos camera.dd 
DOS Partition Table 
Units are in 512-byte sectors 
    Slot   Start       End         Length      Description 
00: -----  0000000000  0000000000  0000000001  Primary Table (#0) 
01: -----  0000000001  0000000031  0000000031  Unallocated 
02: 00:00  0000000032  0000251647  0000251616  DOS FAT16 (0x06)

츨래시 카드는 USB 또는 FireWire 리더기에 삽입한 후, Linux에서 dd 명령어를 사용하면 손쉽게 이미지로 추출할 수 있다.

하지만 CD-ROM은 훨씬 복잡하다. 여러 가지 형식과 변형이 존재하기 때문이다. 대부분의 CD는 다양한 운영체제에서 읽을 수 있도록 ISO 9660 포맷을 사용한다.

ISO 9660 포맷은 파일명 규칙이 업격하지만, 이를 보완하는 확장 포맷으로는 Joliet(Windows)과 Rock Ridge(Unix) 등이 있으며, 이들은 더 유연한 파일명 및 속성 지원을 제공한다. 

하나의 CD에 기본 ISO 9660 형식 데이터와 Joliet 형식 데이터가 동시에 존재할 수 있기 때문에 설명이 복잡하며, Apple 하이브리드 디스크인 경우, 데이터는 Apple의 HFS+ 포맷으로도 저장될 수 있다. 

실제로 파일의 내용은 한 번만 저장되지만, 여러 위치에서 그 데이터를 참조하도록 되어 있다.

 

기록 가능한 CD(CD-R)에는 Session이라는 개념이 존재한다. CD-R은 여러 번 데이터를 추가로 기록할 수 있고, 데이터를 쓸 때마다 새로운 Session이 생성된다. 

CD가 사용되는 운영체제에 따라, 이 Session들은 각기 다른 방식으로 마운트되기도 한다. 예로 Apple OS X에서 세 개의 Session이 있는 CD를 만들었고, OS X에서는 이 CD를 삽입하면 모든 Session이 각각 파일 시스템으로 마운트되었다.

하지만 Linux에서는 마지막 Session만 기본적으로 마운트되며, 나머지 Session들은 mount 명령어에 옵션을 지정해주면 마운트할 수 있다.

 

CD에 있는 Session의 개수를 확인할 때는 readcd라는 도구를 사용할 수 있다. 이 CD를 Windows XP에서 사용했을 때는 디스크가 유효하지 않다고 표시되었지만, ISO Buster라는 프로그램(https://www.isobuster.com/)에서는 세개의 Session 모두 확인 가능했다.

Windows 환경에서 여러 Session을 가진 CD-R을 만들었을 때는 다른 결과가 나올 수도 있다. 

 

따라서 CD-R의 모든 Session 내용을 정확히 보려면, 분석 플랫폼의 기본 동작에 의존하지 말고, 전문적인 CD 분석 도구를 사용하는 것이 중요하다.

 

일부 CD는 운영체제 고유의 파티션 시스템을 포함하고 있는 경우도 있다. 예로 하이브리드 CD는 ISO 형식과 Apple 형식이 혼합된 CD다. 이러한 Session 내부에는 Apple 파티션 맵과 HFS+ 파일 시스템이 존재하며, 표준적인 Apple 분석 기법을 이 디스크에도 적용할 수 있다. 다음은 하이브리드 디스크에 대해 mmls 명령어를 실행한 결과이다.

# mmls -t mac cd-slice.dd 
MAC Partition Map 
Units are in 512-byte sectors 
    Slot   Start       End         Length      Description 
00: -----  0000000000  0000000000  0000000001  Unallocated 
01: 00     0000000001  0000000002  0000000002  Apple_partition_map 
02: -----  0000000001  0000000002  0000000002  Table 
03: -----  0000000003  0000000103  0000000101  Unallocated 
04: 01     0000000104  0000762559  0000762456  Apple_HFS

많은 부팅 가능한 CD는 고유한 파티션 시스템을 가지고 있다. 예로 Sparc Solaris 부팅 CD에는 ISO 볼륨 안에 Volume Table of Contents(VTOC) 구조가 포함되어 있으며, Intel 기반 부팅 CD는 CD의 시작 부분에 DOS 기반 파티션 테이블이 존재할 수 있다. 이러한 구조들은 운영체제가 CD로부터 부팅된 이후에 사용되며, 시스템을 부팅하기 위한 코드는 ISO 포맷으로 저장되어 있다.

반응형

'Disk Forensic' 카테고리의 다른 글

Volume Analysis  (0) 2025.02.22
Disk Imaging  (0) 2025.02.19
MBR, VBR  (0) 2025.02.19
File system  (0) 2025.02.19
Partition, Volume Practice  (0) 2025.02.18