1. MBR (Master Boot Record)?

MBRMaster Boot Record의 약자로 컴퓨터에 전원이 공급되고 부팅이 가능한 운영체제를 찾아 해당 운영체제의 boot code를 실행할 수 있도록 Partition들의 위치 정보를 갖는다.



회색으로 색칠된 부분이 Boot code이고 아래에 여러 색으로 색칠된 부분이 Partition table이다

Boot codePartition Table 중 부팅이 가능한 Partition을 찾아 부팅을 할 수 있게 해주는 코드이며 마지막 2bytes(0xAA55) MBRSignature이다

MBR Partition table 형식이다. Partition Table의 첫 바이트인 Boot Flag는 해당 Partition이 부팅이 가능한지 여부를 나타내는 플래그다

그 다음으로 오는 세 바이트는 CHS(Cylinder-Head-Sector) 방식의 주소를 사용할 경우 해당 Partition 시작 주소를 나타낸다

다음으로 오는 Part Type 필드는 해당 Partition 유형을 나타내며, 값이 가지는 아래 표로 나타낸다.

이후 바이트는 LBA(Logical Block Addressing) 방식의 주소를 사용할 경우의 Partition 시작 주소를 나타낸다

LBA Starting Address 이후에 오는 Number of sectors in partition 필드는 해당 Partition Sector 개수를 나타내며 따라서 LBA 주소 방식을 사용할 경우 전체 파티션 영역은 다음과 같다.

시작 주소 : [Starting LBA address] * [Sector size]

주소  : [Starting LBA address] * [Sector size] * [Num of sectors in Partition]

필드의 의미를 정리하면 다음과 같다.

- Boot flag(1byte)           : 해당 파티션이 부팅이 가능한 파티션인지 여부를 나타냄                          (0x80 : 부팅 가능, 0x00 : 부팅 불가능)

- CHS Start(3bytes)         : 해당 파티션의 시작 주소를 의미함(CHS 방식)

- Part Type(1byte)          : 해당 파티션의 종류를 의미함                                                                 (0x0B : CHS 모드 FAT32, 0x0C : LBA 모드의 FAT32, 0x07 : NTFS 등)

- CHS End(3bytes)          : CHS 방식의 종료 주소

-  LBA Start(4bytes)         : 해당 파티션의 시작 주소(LBA 방식)

-  Size in Sector(4bytes)   : 파티션의 섹터 수

 


Partition Type에 올 수 있는 값들은 위와 같다.

0번지부터 512Bytes까지 MBR이 기록되어 있으며 위 그림과 같이 Partition Table을 확인할 수 있었다.

초록색으로 색칠한 부분이 각 PartitionPartition Type을 나타내며, 네 개의 Partition 모두 해당 값이 0x07이다.

위 그림에서 확인하면 0x07exFAT 또는 NTFS 파일시스템을 나타낸다

4개의 Partition Entry중 색칠한 부분이 각각 [LBA Starting address][Num of sectors in Partition]에 해당한다

따라서 첫 번째 Partition0x3F0x200(512bytes)를 곱한 위치에 존재한다고 볼 수 있다

0x3F0x200을 곱한 값은 0x7E00이므로 해당 위치에 실제 Partition이 저장되어 있는지 확인한다.



앞서 계산한 0x7E00의 위치에 NTFS 파일시스템 형식의 Partition이 있는 것을 확인할 수 있었다

추가적으로 위 그림에서 첫 번째 Partition의 시작 주소인 0x3F와 해당 Partition Sector 수를 나타내는 0x032F8E를 더한 값이 다음 두 번째 Partition의 시작 주소임을 확인할 수 있으며 따라서 첫 번째 Partition이 끝나는 지점의 다음 Sector에 두 번째 Partition이 존재하는 것을 확인할 수 있다

두 번째 Partition의 위치 또한 동일하게 계산해보면 0x032FCD Sector의 크기인 0x200(512bytes)를 곱하면 위치를 구할 수 있다

해당 계산의 결과는 0x65F9A00이며 해당 위치에 실제 Partition이 존재하는지 확인해본다.



위 그림에서 확인할 수 있듯이 0x65F9A00에 해당 Partition이 기록되어 있는 것을 확인할 수 있었다

이후 세 번째 LBA를 계산하면 0x065F9A Sector 크기를 곱한 값은 0x0CBF3400이며 해당 위치에 실제 세 번째 Partition이 존재하는지 확인해본 결과 다음과 같이 실제 Partition이 존재하는 것을 확인할 수 있었다

네 번째 Partition 역시 0x098F67 * 0x2000x131ECE00에 실제 Partition이 위치하는 것을 확인할 수 있었다.

세 번째 파티션


네 번째 파티션


다음으로 CHS(Cylinder-Head-Sector) 방식은 이름 그대로 실제 HDDCylinder, Head, Sector를 이용하여 디스크 영역을 접근하는 방법이다

표현할 수 있는 크기가 크지 않아서 현재는 사용하지 않지만 주소 계산 방법을 살펴보면 다음과 같다.


 색칠된 부분이 CHS Address의 시작 주소를 나타낸다

해당 값을 계산하기 위해선 해당 값으로부터 Cylinder, Head, Sector 부분을 계산해야 하며 계산을 위해선 세 값을 비트로부터 추출해야 한다

Partition Table의 첫 번째 PartitionCHS Address0x000101을 이용하여 세 값을 나타내면 다음과 같다.



해당 값을 리틀엔디안 방식을 고려하지 않고 해석하면 가장 맨 뒤 10비트가 Cylinder를 의미하며 그 앞 6비트는 Sector, 처음 8비트는 Head를 의미한다

따라서 0x000101의 각 세 값은 0, 1, 1이 된다. 해당 값을 이용하여 공식에 따라 LBA 주소로 변환이 가능하며 그 공식은 다음과 같다.



실린더당 헤드의 개수와 트랙당 섹터 개수는 고정적으로 각각 0xFF(255), 0x3F(63)을 사용하며, 해당 값을 대입하여 계산하면 변환된 LBA의 주소는 0x3F(63)이 된다

해당 값은 같은 Partition TableLBA 주소인 0x3F와 일치한다. 두 번째 PartitionCHS 주소인 0x0D0100을 이용하여 LBA 주소 계산을 해보면 마찬가지로 Cylinder의 값은 13, Head의 값은 0, Sector의 값은 1이 되어 LBA 주소 계산 결과 208,845가 도출되며 해당 값을 16진수로 변환하면 0x032FCD가 된다

해당 값은 두 번째 PartitionLBA 값과 일치한다

세 번째 Partition 역시 Cylinder 0x1A(26), Head 0, Sector 1이 되어 계산 결과 417,690이 도출되며 해당 값은 16진수로 0x065F9A로 세 번째 PartitionLBA 주소와 일치한다

네 번째 경우도 0x270100CHS 값은 Cylinder 0x27(39), Sector1, Head0으로 마찬가지로 의 공식에 대입하면 십진수 626,535를 구할 수 있으며 이는 16진수로 0x098F67로 네 번째 PartitionLBA 값과 일치하다.



* 첫 번째 파티션이 63(0x3F)에 있는 이유

과거에 Disk access에 사용된 BIOS APIINT 13hCHS Addressing에 사용되었는데 해당 인테럽트를 사용하여 Disk accessing을 하는 시스템에는 모든 PartitionCylinder Boundary에 위치해야 한다. 따라서 첫 번째 CylinderBoundary에 위치한다. 비록 LBA 주소 계산 방식이 사용되어도 과거 CHS 방식과 호환을 위해 첫 번째 CylinderBoundary에 위치하며 각 Cylinder에는  63개의 섹터가 있어서 0x3F(63) Partition이 위치하게 됐다. 현재는 Logical SectorAdvanced Format으로 인해 한 섹터를 4K로 정렬해야 하며 이러한 시스템에서 0x3F라는 값은 8의 배수가 아니기 때문에 Partition을 위치시키는 과정에서 섹터에 맞지 않는 오배열로 이어질 수 있으며 이는 Performace 문제를 발생시킬 수 있어서 현재 사용되는 OSPartition은 일반적으로 0x800에 위치한다.

 





'Study > Digital Forensic' 카테고리의 다른 글

Memory Forensic  (0) 2019.02.19

+ Recent posts