IT 그리고 정보보안/Knowledge base

MBR(Master Boot Record) 디스크

plummmm 2021. 4. 10. 05:57
반응형

MBR(Master Boot Record) 디스크에 대해 한번 알아보자. 볼륨, 파티션 포스트에서 언급했듯이 파티션 나누는 형태가 여러가지 있다고 했다. MBR 디스크는 그 중 가장 기본이 되는 형식이다.
MBR 이란 영역을 필두로 파티션이 구성되기 때문에 MBR 디스크라는 이름이 붙여졌다.
인텔 IA32(x86)에서 오랜기간 사용해온 디스크 형식. x64, EFI 기반에서 사용되는 GPT 디스크는 다음 기회에 알아본다.

MBR 디스크라는 명칭은 정식 명칭이 아니다. 파티션을 나누는 방법 중 하나이며, 도스파티션 등으로 불리기도함

즉, 저장매체에 MBR이란 영역이 포함되어 파티션이 나누어진 디스크를 MBR 디스크라고 부르는 것이다.
엄연히 MBR이란 영역은 독립적으로 존재하는 것임. 혼동하지 말자.

최초, 컴퓨터 전원이 켜지면, POST(Power On Self-Test) 라는 자가진단 루틴을 거친다. 해당 작업이 끝나면 MBR영역을 찾게된다.
왜 찾느냐.. MBR 영역에 부팅을 수행하는 부트코드가 들어있기 때문이다. 부트코드를 거친 후 부팅 가능한 파티션이 존재하는지 찾고 있으면 해당 영역을 호출한다. MBR 디스크의 부팅과정은 대략적으로 이러하다. 이 흐름을 기억하고 MBR에 대해 더 상세히 알아보자.

1. MBR 디스크의 구조
MBR 디스크는 크게 부팅코드가 포함된 MBR(Master Boot Record) 영역이 존재하고, 해당 영역은 부트코드, 파티션 테이블 엔트리, 서명 등으로 구분된다.
MBR 영역은 OS가 설치되어 있는 보조저장매체 즉, 하드디스크의 첫번째 섹터에 위치한다.

MBR 영역의 구조 (512 byte)

 

# Master boot code (부트 코드)
이름 그대로 부팅에 필요한 코드를 담고 있는 영역이다. 446byte의 크기를 가진다.
엄밀히 말하면, 부팅과정에 관여하는 모든 코드들을 부트코드라8고 칭해도 할 말은 없지만.. 일단 그 코드들 중 가장 먼저 나오는 놈이다.
보통 MBR 루트킷(Root-kit)들이 이 부트코드 영역에 인젝션되는 것이다.
부트코드 영역은 하드디스크의 첫 시작부터 0x00000000000001BD 까지이다.
이 안에 무슨 내용이 들어있는지에 큰 관심을 둘 필요는 없다.
다만, 하드디스크 덤프파일 분석할 때 각 영역별 주소를 알고있어야 구조가 보이므로 "아 여기가 부트코드구나!" 라고 알면 될 듯 함

Master boot code

 


# Partition Table Entry 1~4
부트코드 다음에 나오는 영역은 파티션 테이블 (총 4개)이다.
바로 위 부트코드 영역이 0x00000000000001BD 에서 끝이 났으니, 0x00000000000001BE 부터 시작하겠죠.
각 파티션 테이블은 16byte의 크기를 가진댜. 먼저 첫번째 파티션 테이블부터 보자.

Partition Table Entry #1

 

위 캡쳐화면에서 음영표시 된 부분이 첫번째 파티션 테이블이다. 해당 영역의 각 바이트들이 의미하는 내용은 아래와 같다.
2, 3, 4번째 파티션 테이블 또한 동일한 구조를 가지고 있다. (아래 표에 있는 주소는 첫번째 기준이다.)

Address Descriptions
0x0000001BE 부팅 지시자, 해당 파티션의 부팅 가능 여부를 나타냄
0x00 : 부팅 안됨 / 0x80 : 부팅 가능
0x0000001BF ~ 0x0000001C1 CHS 시작 주소
(e.g. Cylinder : 0x20 / Head : 0x21 / Sector : 0x00)
0x0000001C2 파일시스템 타입, 해당 파티션의 파일시스템 종류를 나타냄
0x07 : NTFS / 0x0B : FAT32 등 
0x0000001C3 ~ 0x0000001C5 CHS 마지막 주소
0x0000001C6 ~ 0x0000001C9 LBA 시작 주소
(e.g. 0x00000800)
0x0000001CA ~ 0x0000001CD 파티션의 총 섹터 개수
(e.g. 0x00032000 = 204800 => 204800*512(byte) = 약 100MB)

이런 MBR의 정보들을 토대로 부팅 가능한 파티션의 정보를 확인하고 해당 볼륨의 섹터로 넘어간다.
참고로, CHS주소는 현재 사용되지 않으므로, 해당 바이트들은 유효하지 않은 값들이라고 볼 수 있음 (=보지마)
우리가 확인할 것은 "부팅이 가능한가?", "어떤 타입의 파일시스템을 사용하는가?" 정도가 되겠다.

참고로 1번째 파티션은 "시스템 예약" 파티션으로.. 크기는 100MB 이다. 근데 시스템 예약에 부팅지시자가 0x80?
윈도우7 이상 환경에서는 BitLocker 사용을 위해 부팅 파티션(운영체제 설치된)과 시스템 파티션(부트매니저 설치된)을 분리해서 구성하는데,
"시스템 예약" 파티션의 부트매니저가 윈도우 운영체제를 로딩하여 부팅이 이루어지기 때문에 부팅지시자가 0x80 인 것임
(BitLocker를 사용하면 드라이브를 암호화하기 때문에 부트매니저가 동작할 수 없다. 그래서 별도로 시스템 예약 파티션을 별도로 두는 것)

아래 2, 3, 4번째 파티션 테이블 내용도 봅시다.

Partition Table Entry #2

 

Partition Table Entry #3
Partition Table Entry #4

여기서 의문점.. MBR디스크는 총 4개의 파티션 테이블을 가질 수 있으니까, 최대 4개의 파티션을 가지는가?
반은 맞고 반은 틀리다. 기본 구조 상으론 4개가 최대이지만, 4번째 파티션 테이블을 "확장 파티션" 으로 사용하여 확장이 가능하다.
해당 내용은 다음 기회에 설명하도록 함


# Signature
MBR 영역 가장 마지막에 있는 2byte는 시그니쳐 즉, 서명이다. 보통은 0x55 0xAA 가 적혀있다. 
MBR영역이 끝났다고 알려주는 것이다. 생각보다 컴퓨터를 구성하는 놈들이 멍청해서 이렇게 하나하나 다 지정해줘야 한다.
시그니쳐 자리에 이상한 값이 있으면, 하드디스크 구동에 문제가 생기겠죠

Signature 0x55 0xAA

 

참고 도서
<파일시스템 포렌식 분석> - 저자 브라이언 캐리어
<START UP - 디스크 포렌식> - 저자 이별

참고 URL
http://shinb.tistory.com/315
http://forensic-proof.com/archives/435

반응형