- 디스크에서 가장 중요한 데이터 구조체
- MBR에는 작은 크기의 부트 코드와 디스크 시그니처, 파티션 테이블이 포함되어 있으며,
- 마지막 2바이트는 MBR의 끝을 나타내는 "55 AA" 시그니처가 존재. 항상 섹터 끝에 존재
MBR의 역할은?
- 부팅 가능한 파티션(활성 파티션)을 탐색
- 부팅 가능한 파티션의 시작 섹터 탐색
- 부팅 가능한 파티션의 부트 섹터를 복사에 메모리에 로드
- 부트 섹터에서 실행코드 실행
** 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 구조
'Kitri_NCS3기 보안과정 > 디지털포렌식' 카테고리의 다른 글
170428 FAT32 (0) | 2017.04.28 |
---|---|
170427 사고대응과 분석 실습 (0) | 2017.04.27 |
170426 NTFS 에서 MBR , VBR 복구해보기 (1) | 2017.04.26 |
170426 NTFS - VBR(Volume Boot Record) (0) | 2017.04.26 |
170424 디지털포렌식 개요 (0) | 2017.04.24 |