본문 바로가기

Kitri_NCS3기 보안과정/디지털포렌식

170424 MBR

  • 디스크에서 가장 중요한 데이터 구조체
  • MBR에는 작은 크기의 부트 코드와 디스크 시그니처, 파티션 테이블이 포함되어 있으며,
  • 마지막 2바이트는 MBR의 끝을 나타내는 "55 AA" 시그니처가 존재. 항상 섹터 끝에 존재

 

MBR의 역할은?

 

  1. 부팅 가능한 파티션(활성 파티션)을 탐색
  2. 부팅 가능한 파티션의 시작 섹터 탐색
  3. 부팅 가능한 파티션의 부트 섹터를 복사에 메모리에 로드
  4.  부트 섹터에서 실행코드 실행

 

** Floppy Disk에는 MBR이 존재하지 않음. 첫번째 섹터에 바로 부트 코드 존재


파티션 테이블(Partition Table)이란?

 

  • 파티션 테이블은 64바이트의 구조체로 하드디스크에서 파티션의 위치, 타입 정보를 담고 있음
  • 파티션 테이블은 총 4개의 파티션 테이블 엔트리 가지고 있으며, 각 16바이트의 크기를 가짐
  • 파티션 테이블 엔트리에는 다음과 같은 정보를 가짐
    • 부팅 가능한 파티션 정보 : 0x80은 부팅 가능 / 0x00 은 부팅 불가
    • 시작 CHS 주소 : 지금은 사용하지 않음
    • 파티션 타입 : 파티션의 파일시스템 종류를 나타냄 /  FAT32 파일시스템인지, NTFS 파일시스템인지
    • 끝 CHS 주소 : 지금은 사용하지 않음
    • 파티션 시작 위치 : 파티션의 시작위치로 해당 파일시스템의 BR(Boot Record) or VBR(Volume Boot Record)의 위치를 나타냄. 해당 파티션이 부팅가능한 파티션이라면 부트코드가 존재
    • 파티션의 총 섹터 : 파티션에서 사용하는 전체 총 섹터를 나타내며, 총 섹터 정보는 BR에도 저장되어 있음

 

파티션 개수는 몇개 까지 가능한가?

 

  • 파티션의 개수는 파티션테이블 엔트리의 개수만큼 가질수 있음
  • 기본적으로 파티션테이블 엔트리는 4개 이므로 파티션의 개수도 4개까지 가능
  • 하지만, 확장파티션을 사용하면 4개 이상의 파티션을 사용가능

 

확장 파티션(논리 드라이브)이란?

 

  • 확장 파티션은 4개 이상의 파티션을 사용하려고 할때 생성되는 파티션
  • 3개의 파티션까지는 주 파티션으로 생성되지만, 4개 이상의 파티션을 생성하려고 하면 확장파티션으로 생성됨

  • 녹색으로 테두리가 되어 있는 부분이 확장파티션 부분
  • MBR 파티션테이블에서는 녹색으로 되어 있는 확장파티션을 하나의 파티션으로 구분
  • 따라서, 위와 같이 5개의 파티션(4개의 파티션도 동일)이 있는 경우
  • 4번째 파티션테이블 엔트리에는 확장파티션의 시작위치와 전체 크기만 존재
  • 4번째 파티션테이블 엔트리의 정보만으로는 확장파티션내에 실제 몇개의 파티션이 있는지는 파악 불가
  • 이를 확인하기 위해서는 확장파티션의 시작위치에 가서 추가적으로 분석이 필요

 

확장 파티션 BR

 

  • 확장 파티션 BR은 주 파티션이 아닌 확장 파티션(논리 드라이브)을 생성하면 추가되는 섹터
  • MBR과 구조는 비슷하나 파티션테이블과  시그니처(55 AA)정보만 자기고 있음. 부트코드는 존재하지 않음
  • 4번째 파티션테이블의 시작위치를 참고해 확장 파티션으로 이동하게 되면,
  • 1~3번째 파티션테이블에서 나오는 시작위치(파티션의 부트코드, BR)와 달리 MBR과 비슷한 구조를 확인 가능
  • MBR파티션 테이블은 총 4개의 엔트리를 가지고 있지만, 확장 파티션 BR에서는 처음 2개의 엔트리만 사용
  • 3,4번째 파티션테이블 엔트리는 사용하지 않음
  • 2개의 엔트리중 첫번째 엔트리는 확장 파티션의 첫번째 파티션 정보를 담고 있으며,
  • 두번째 엔트리는 다음 파티션 정보를 바로 가리키는 것이 아니라, 다음 확장 파티션 BR위치를 알려줌
  • 확장파티션에는 확장 BR을 하나씩 가지고 있는 것

[참고]_기본 파티션 테이블 구조

 


  • 기본적인 디스크의 MBR 구조
  • 아래의 그림은 디스크에 있는 MBR에 있는 파티션 테이블이 어떤 정보를 가리키고 있는 나타내고 있음


 


[참고]_확장 파티션 구조


MBR 구조 1 

  • MBR은 크게 3개 부분으로 나뉘어 짐
  • 부트 코드 부분 : offset 0 - 445
  • 파티션 테이블 부분 : offset 446 - 509
  • 시그니처 부분 : offset 510 - 511



MBR 구조 2 - 디스크 시그니처

  • 부트코드에는 디스크 시그니처값이 포함
  • 디스크 시그니처 : offset 440 - 443


  • 디스크 시그니처는 운영체제가 설치된 디스크를 확인하는 값으로 MBR에 포함되어 있으며,
  • 디스크 시그니처는 레지스트리에도 그 값을 저장하고 있음
  • 레지스트리에서의 위치
    • Windows\System32\config에 "SYSTEM"하이브로 존재하며
    • SYSTEM하이브 내의 HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices 위치에 디스크 시그니처값이 존재


MBR 구조 3 - 파티션 테이블

 

  • 파티션테이블은 64바이트 크기로 총 4개의 파티션 정보를 가지고 있음
  • 파티션테이블은 총 4개의 엔트리로 구성되되며
  • 하나의 엔트리는 16바이트 크기로 하나의 파티션 정보를 가지고 있음



 

MBR 구조 4 - 파티션 테이블 세부

 

  • 파티션테이블을 하나의 엔트리를 살펴보면
  • 부트 플래그, 시작 CHS주소, 파티션 타입, 끝CHS주소, 파티션 시작 LBA주소, 파티션 총 섹터의 정보를 가지고 있음
  • 부트 플래그 : 1바이트
    • 해당 파티션이 부팅 가능한지 아닌지의 여부를 알려줌
    • 0x80이면 부팅가능
    • 0x00이면 부팅 불가능
  • 시작CHS주소 : 3바이트
    • 시작 CHS주소는 해당 파티션의 실린더/헤더/섹터방식의 시작주소를 나타내지만
    • 현재는 디스크 주소체계가 LBA방식을 사용하여 의미없음
    • 과거  CHS방식과의 호환성을 위해 존재
    • 해당 값이 00으로 채워져 있어도 동작에는 관계없음
  • 파티션 타입 : 1바이트
    • 파티션에 설치되어 있는 파일시스템의 종류를 알려줌
    • FAT32, NTFS 등 파일시스템이 어떤것이 사용되었는지 확인 가능
    • FAT32 : 0x0B / NTFS : 0x07로 사용
    • 다양한 파티션 타입 종류에 대한 확인은 https://en.wikipedia.org/wiki/Partition_type  에서 가능
  • 끝 CHS 주소 : 3바이트
    • 시작 CHS주소와 같이 현재는 사용되지 않음
  • 파티션 시작 위치 : 4바이트
    • 해당 파티션이 시작하는 처음 LBA주소를 나타내는 것으로
    • 해당 위치로 이동하면 BR(Boot Record)지점으로 이동 가능
    • 예) 0x 80 00 00 00 이면 리틀엔디언 방식으로  0x80=128로 계산 / 128번째 섹터에 BR 존재 
  • 파티션 총 섹터 : 4바이트
    • 해당 파티션이 가지고 있는 총 섹터 수를 나타냄
    • 파티션의 총 섹터 수를 구하면 파티션에서 사용하고 있는 전체 용량을 계산 가능
    • 예) 0x 00 A0 05 00 이면 리틀엔디언 방식으로  0x5 A0 00=368640이며, 
    • 368,640은 섹터 수 이므로, 섹터당 바이트 수 512를 곱하면 파티션 전체의 용량을 계산 가능
    • 368,640 x 512 = 188,743,680Byte = 184320 KB = 180 MB



 

MBR 영역 샘플

  • HxD로 확인한 MBR
  • 도식화된 MBR 구조