4. MFT


NTFS File System (1) ~ (3)을 통해 MBR(혹은 EBR)을 지나 해당 파티션의 VBR을 찾을 수가 있었다. 이러한 VBR에서 BPB를 참고하여 $MFT의 위치까지 찾아보았다. 이제 이러한 MFT에 대하여 설명을 하고자 한다.

 MFT는 Mater File Table의 약자로 NTFS에선 파일이나 디렉터리, 메타 정보를 모두 파일의 형태로 관리하고 있다. 이러한 각 파일의 위치나 속성, 이름, 크기 등의 메타정보는 MFT Entry라는 특별한 구조로 저장된다. MFT는 NTFS 상에 존재하는 모든 파일의 MFT Entry의 모음으로 아래의 그림과 같이 나타낼 수 있다.


 위의 표와 같이 각 엔트리의 번호와 기능에 대하여 설명할 수가 있다. 이러한 각 각의 엔트리는 MFT Entry Header, Fixup Array, Attributes, End Marker, Unused Space로 구분되는 구조를 갖는다. End Marker 이후의 값은 MFT Entry에서 사용되지 않는다. 이를 그림으로 나타내며 아래와 같다.


MFT Entry Header

이러한 각 항목 중 먼저 MFT Entry Header에 대하여 설명해보자. MFT Entry Header는 모든 MFT Entry의 앞 부분에 위치하는 48Byte의 정보로 그림과 표를 통해 좀 더 자세히 설명하겠다. 아래의 그림과 같이 첫 부분에 MFT 시그니처인 'FILE'로 시작하여 Fixup Array 전 까지의 구조를 갖는다.

이를 토대로 현재 PC의 $MFT의 MFT Entry Header를 확인해보자.

Fixup

 Fixup은 MFT Entry의 데이터 무결성을 판단하기 위해 존재한다. MFT 엔트리는 각 2개의 섹터(1024Byte)를 사용하는데 각 섹터 마지막에 2 Byte를 이용해 Fixup Array로 사용한다. 섹터의 내용이 비정상적으로 변경되었을 때 오류의 체크를 가능하게 한다.

 위의 그림과 같이 Fixup Array의 Offset을 통해 0x30에 가면 해당 Signature가 존재한다. 내 PC에선 시그니처가 0x0266임을 알 수가 있고 이 시그니처는 각 섹터의 마지막 2 Byte에 위치해있는 것을 볼 수가 있다. 시그니처 뒤의 첫 2바이트(파란색)은 첫번째 섹터의 마지막 2 Byte 값이며, 다음 2바이트는 두번째 섹터의 마지막 2 Byte 값이다. 만약 Fixup이 적용되지 않는다면 각 섹터의 마지막 2 바이트는 각 각 0xFFFF과 0x0000으로 채워져 있을 것이다.

* Fixup Array의 수가 3개 인 이유는 MFT Entry가 1 KB이므로 섹터 2개를 사용하며 이에 더해 Signature가 1개 항목을 사용하므로 총 3개인 것


추가 

Sequence Value : MFT Entry를 재할당하면 이 값이 바뀌므로 내용이 바뀌었다는 것을 추측할 수 있다.


출처 및 참고

(FP) NTFS.pdf

http://forensic-proof.com/archives/584


'Forensic > Theory' 카테고리의 다른 글

NTFS File System (6) MFT $SIA & $FN $DATA  (0) 2015.12.31
NTFS File System (5) MFT -Attribute  (0) 2015.12.30
NTFS File System (3) VBR  (0) 2015.12.29
NTFS File System (2) MBR & EBR  (0) 2015.12.29
NTFS File System (1) 개요  (0) 2015.12.28