$MFT는 예약된 MFT Entry 중 0번 Entry를 말하며, MFT Entry에 대한 전체적인 정보를 담고 있다. 따라서 각 파일을 분석하기 위해서는 $MFT 정보를 획득하는 것이 선행될 필요가 있다. 앞서 말한 것 처럼 $MFT 파일 정보는 MFT Entry 0번이므로 BPB에 의해 바로 접근할 수 있고 모든 MFT Entry와 같이 1,024 bytes의 고정된 크기를 갖는다.
자기 자신의 정보를 자기가 담고 있는 이 구조는 Non-Resident 형식의 속성을 지원하기 때문이다. Non-resident 속성이란, 저장할 속성 내용이 많아져 MFT Entry로는 감당하지 못할 크기가 되었을 경우 별도의 클러스터에 해당 속성을 저장하고 속성 내용에는 저장한 클러스터의 위치 정보만 저장하는 속성이다.
$MFT의 위치는 다음과 같이 찾을 수 있다.
먼저 NTFS의 VBR 또는 MBR의 아래 하이라이트된 영역을 찾는다. 이 부분은 $MFT의 논리적 클러스터 번호를 나타낸다. 정확한 섹터 번호를 알고 싶으면 이 값에 SP(Sector Per Cluster) 값을 곱한 후 BR의 섹터 번호를 더하면 된다.
0x14D00 * 0x8 + 0(BR의 시작 위치) = 681984번 섹터에서 $MFT의 위치를 찾았다. 다시 말해 MFT Entry가 시작되는 곳이다.
▩ $MFT 파일(MFT Entry 0번)의 Header
$MFT 파일의 헤더 구조는 다음과 같다.
-
Signature "FILE" : 0x00 ~ 0x03
-
Offset to Fixup Array : 0x04 ~ 0x05
-
Number of Entries of Fixup Arry : 0x06 ~ 0x07
-
$LogFile's Sequence Num. : 0x08 ~ 0x0F
-
Sequence Num. (수정 시 1씩 증가) : 0x10 ~ 0x11
-
Link Count : 0x12 ~ 0x13
-
First Attribute's offset : 0x14 ~ 0x15 (0x38 = 56이므로 56 bytes 뒤가 첫 속성의 시작 오프셋)
-
Flags : 0x16 ~ 0x17 (0x01은 사용 중을 의미)
-
Used Size of MFT Entry : 0x18 ~ 0x1B ($MFT 파일은 0x1A0 = 416 bytes 사용 중)
-
Allocated Size of MFT Entry : 0x1C ~ 0x1F ($MFT 파일이 사용한 Entry 크기는 0x400 = 1,024 bytes)
-
File Reference to Base Record : 0x20 ~ 0x27 (0x00000000 00000000은 Base Entry를 뜻함)
-
Next Attr. ID : 0x28 ~ 0x29
-
Align to 4B Boundary : 0x2A ~ 0x2B
-
Number of this MFT Entry : 0x2C ~ 0x2F ($MFT는 0번 Entry)
▩ $MFT 파일(MFT Entry 0번)의 Attr.
$MFT는 다음 네 가지의 속성을 가진다.
이제 차근 차근 속성의 위치부터 찾아보자.
▩ 10 속성, $STANDARD_INFORMATION
가장 처음 속성은 $STANDARD_INFORMATION으로, 헤더에서 본 것처럼 $MFT 시작의 56 bytes뒤에 존재할 것이다. 아래가 첫 번째 속성 부분이다. 그 중 몇 개의 오프셋들에 대해 알아보자.
-
속성 타입, 0x10 = 16 = $STANDARD_INFORMATION
-
속성 길이, 0x60 = 96 = 현 속성 시작 위치의 96 bytes 뒤에는 다음 속성이 있다.
-
Resident Attribute / Non-Resident Attribute, 0x00이면 Non-Resident Attribute 형식
-
속성 이름의 시작 위치, 0x18 = 24 bytes
-
속성 내용의 길이, 0x48 = 72 bytes
-
속성 내용의 시작 위치, 0x18 = 24 = 헤더 바로 뒤 24 bytes
-
인덱스 플래그
-
패딩값, 의미x
-
파일의 생성시간
-
파일의 마지막 수정시간
-
MFT의 마지막 수정시간
-
마지막 접근시간
-
Flag값
-
0x01 - Read Only
-
0x02 - Hidden
-
0x04 - System File
-
0x20 - Archive File
-
0x40 - Device File
-
0x00 - Directory File
-
0x06 - Hidden System File
-
▩ 30 속성, $FILE NAME
다음 속성은 $FILE NAME이다. 역시 그 중 몇 개의 오프셋들에 대해서만 알아보자.
-
속성 타입, 0x30 = 48 = $FILE NAME
-
속성 길이, 0x68 = 104 = 다음 속성은 104 bytes 뒤에 존재
-
Resident Attribute / Non-Resident Attribute, 0x00이면 Non-Resident Attribute 형식
-
속성 이름의 시작 위치, 0x18 = 24 bytes
-
속성 내용의 길이, 0x4A = 74 = 헤더 바로 뒤 74 byte
-
속성 내용의 시작 위치, 0x18 = 24 bytes
-
인덱스 플래그, 0x01이므로 인덱싱됨
-
패딩값, 의미x
-
앞 0x00000000 0005: MFT 엔트리 5번을 사용하는 곳, 뒤 0x0005: 수정 5 번
-
파일 생성 시간
-
마지막 수정시간
-
MFT 마지막 수정시간
-
마지막 접근시간
-
0x04, 속성의 고유 이름이 4글자
-
0x03, 속성 이름의 형식
-
0x01: WIN32
-
0x02: DOS
-
0x03: WIN32 & DOS 공통 형식
-
-
속성의 고유 이름은 $MFT
▩ 80 속성, $DATA
다음 속성은 $DATA 속성이다. MFT 자체의 정보를 담고 있다.
-
속성 타입, 0x80 = 128 = $DATA
-
속성 길이, 0x48 = 72 = 다음 속성은 72 bytes 뒤에 존재
-
Resident Attribute / Non-Resident Attribute, 0x00이면 Non-Resident Attribute 형식
-
속성 이름의 시작 위치, 0x40 = 64 bytes
-
시작 클러스터, 0x00 = 0번
-
마지막 클러스터, 0x3F = 63번
-
속성 이름 시작 위치, 0x40 = 64 bytes
-
속성이 할당된 클러스터의 총 사이즈, 0x40000 = 262,144 bytes
-
속성 내용의 실제 크기, 0x40000 = 262,144 bytes
-
속성 내용의 초기화된 사이즈, 일반적으로 실제 크기와 동일한 값, 0x40000 = 262,144 bytes
-
Cluster Runs 구조의 헤더값
-
앞의 3: 오프셋 크기
-
뒤의 1: 길이
-
-
단위 클러스터의 길이 값, offset 위치로부터 0x40 = 64 클러스터만큼의 크기를 가짐
-
단위 클러스터의 offset 값, 0x14D00 = 85,248
▩ B0 속성, $BITMAP
가장 마지막은 $BITMAP 속성이다. MFT Entry의 할당 정보를 관리한다.
-
속성 타입, 0xB0 = 175 = $BITMAP
-
속성 길이, 0x48 = 72 = 다음 속성은 72 bytes 뒤에 존재
-
Resident Attribute / Non-Resident Attribute, 0x00이면 Non-Resident Attribute 형식
-
속성 이름의 시작 위치, 0x40 = 64 bytes
-
시작 클러스터, 0x00 = 0번
-
마지막 클러스터, 0x00 = 0번 => 총 1개의 클러스터 사용 (0번 ~ 0번)
-
Run List의 시작 위치, 0x40 = 64 bytes 뒤에 위치
-
속성이 할당된 클러스터의 총 사이즈, 0x2000 = 8,192 bytes
-
속성 내용의 실제 크기, 0x1008 = 4,104 bytes
-
속성 내용의 초기화된 사이즈, 일반적으로 실제 크기와 동일한 값, 0x1008 = 4,104 bytes
-
Cluster Runs 구조의 헤더값
-
앞의 3: 오프셋 크기
-
뒤의 1: 길이
-
-
단위 클러스터의 길이 값, offset 위치로부터 0x01 = 1 클러스터만큼의 크기를 가짐
-
단위 클러스터의 offset 값, 0x14CFF = 130,303
'Forensics' 카테고리의 다른 글
$MFT로 파일의 절대 경로 찾기 (0) | 2021.03.28 |
---|---|
Fixup Array Structure Analysis (0) | 2021.03.14 |
FAT32 File System Structure (0) | 2021.02.20 |
FAT32 포맷 VOL32 파티션 세팅 (0) | 2021.02.20 |
정보보안 SUA - [디포] "1주차 과제" (0) | 2021.02.06 |