NTFS 파일 시스템의 MFT 구조 분석|파일 레코드와 메타데이터 식별 원리
NTFS MFT(Master File Table)는 Windows의 NTFS 파일 시스템에서 파일과 디렉터리 정보를 관리하는 핵심 메타데이터 구조다.
Windows에서 파일을 생성하거나 이름을 변경하면 운영체제는 그 정보를 어디에 기록할까?
파일 탐색기에서는 파일 이름, 크기, 생성 날짜, 수정 날짜 등을 확인할 수 있다. 하지만 이러한 정보가 파일 내부에 모두 저장되는 것은 아니다.
Windows의 NTFS 파일 시스템은 MFT(Master File Table)라는 핵심 구조를 이용해 파일과 디렉터리에 관한 정보를 관리한다.
MFT에는 파일을 식별하기 위한 레코드와 여러 속성이 기록되며, 이를 통해 파일 이름, 데이터 위치, 시간 정보 등을 관리할 수 있다.
이번 글에서는 NTFS의 기본 구조, MFT 파일 레코드, 주요 속성, 파일 참조 번호, 타임스탬프의 의미를 살펴보고 Windows 명령어로 NTFS 볼륨 정보를 확인하는 방법까지 설명한다.
1. NTFS 파일 시스템과 MFT의 개념
NTFS란 무엇인가?
NTFS(New Technology File System)는 Windows에서 널리 사용되는 파일 시스템이다.
파일 시스템은 저장장치에 데이터를 기록하고 파일과 폴더를 관리하기 위한 구조와 규칙을 제공한다.
NTFS는 파일 내용뿐 아니라 파일 이름, 접근 권한, 시간 정보, 디렉터리 구조 등 다양한 정보를 관리한다.
이러한 정보는 파일을 저장하거나 검색하고, 접근 권한을 확인하는 데 사용된다.
MFT란 무엇인가?
MFT(Master File Table)는 NTFS 볼륨에 존재하는 핵심 메타데이터 파일이다.
MFT에는 파일과 디렉터리를 설명하는 파일 레코드가 저장된다.
각 레코드에는 파일에 관한 여러 속성이 기록되며, 운영체제는 이를 활용해 파일을 식별하고 데이터에 접근한다.
일반적으로 NTFS 파일에는 기본 파일 레코드가 연결된다. 다만 파일의 속성이 많거나 레코드 공간이 부족한 경우에는 추가 레코드를 사용할 수 있다.
따라서 모든 파일이 반드시 하나의 MFT 레코드만 사용한다고 이해해서는 안 된다.
2. MFT가 파일 정보를 관리하는 방식
NTFS에서는 파일에 관한 정보가 속성(Attribute) 단위로 표현된다.
예를 들어 하나의 파일은 다음과 같은 정보를 가질 수 있다.
- 파일 이름
- 생성 및 수정 시간
- 파일 내용
- 보안 관련 정보
- 데이터 저장 위치에 관한 정보
이러한 정보는 파일 레코드에 포함된 여러 NTFS 속성을 통해 관리된다.
MFT 구조의 기본 흐름
다음은 이해를 돕기 위한 개념적인 흐름이다.
NTFS 볼륨 → MFT → 파일 레코드 → 속성 → 파일 정보 및 데이터
실제 NTFS 내부 구조는 더 복잡하며, 일부 속성이나 파일 데이터는 MFT 레코드 외부의 클러스터에 저장될 수 있다.
MFT와 일반 파일의 차이
MFT 자체도 NTFS가 관리하는 특수한 메타데이터 파일이다.
일반 파일이 문서나 이미지 등의 데이터를 담는다면, MFT는 NTFS 볼륨의 파일과 디렉터리를 관리하기 위한 레코드들을 담는다.
Windows 파일 탐색기에서 MFT를 일반 문서처럼 열어 내용을 확인하는 방식은 적절하지 않다.
MFT의 원시 구조를 분석하려면 파일 시스템 구조를 해석할 수 있는 전문 도구가 필요하다.
3. MFT 파일 레코드의 기본 구조
MFT는 여러 파일 레코드 세그먼트로 구성된다.
각 파일 레코드 세그먼트에는 헤더와 속성 정보가 포함된다.
① 파일 레코드 헤더
파일 레코드 헤더에는 레코드의 구조를 해석하는 데 필요한 정보가 들어간다.
대표적으로 다음과 같은 정보가 사용된다.
| 항목 | 역할 |
|---|---|
| 레코드 시그니처 | 파일 레코드 구조 식별 |
| 업데이트 시퀀스 정보 | 다중 섹터 레코드의 일관성 확인에 사용 |
| 시퀀스 번호 | 파일 참조의 유효성 확인에 사용 |
| 링크 수 | 해당 레코드와 연결된 하드 링크 관련 정보 |
| 플래그 | 레코드 사용 여부 및 디렉터리 여부 등 표시 |
| 속성 시작 위치 | 레코드 내 속성 목록의 시작 위치 식별 |
일반적인 NTFS 파일 레코드에서는 FILE이라는 ASCII 문자열에 해당하는 바이트가 레코드 시작 부분의 시그니처로 사용된다.
16진수로 표현하면 다음과 같다.
46 49 4C 45
하지만 이 바이트만 발견했다고 해서 정상적인 MFT 레코드라고 확정할 수는 없다.
레코드 헤더, 속성 구조, 크기, 업데이트 시퀀스 정보 등을 함께 검증해야 한다.
② 파일 레코드 크기
NTFS 파일 레코드의 크기는 볼륨 설정에 따라 결정된다.
1,024바이트 크기의 파일 레코드가 흔히 사용되지만, 모든 NTFS 볼륨의 레코드 크기가 반드시 동일한 것은 아니다.
정확한 크기는 해당 볼륨의 NTFS 정보를 확인해야 한다.
③ 기본 레코드와 확장 레코드
파일에 필요한 속성이 기본 레코드 공간을 초과하면 추가 레코드가 사용될 수 있다.
이때 $ATTRIBUTE_LIST 속성은 관련 속성이 어느 레코드에 저장되어 있는지 찾는 데 사용된다.
따라서 MFT를 분석할 때는 하나의 레코드만 읽고 해당 파일의 모든 정보가 확인되었다고 단정하지 않아야 한다.
4. NTFS의 주요 파일 속성 분석
NTFS에서 파일 이름이나 파일 내용은 각각 속성으로 표현될 수 있다.
대표적인 속성은 다음과 같다.
| 속성 이름 | 주요 역할 |
|---|---|
$STANDARD_INFORMATION | 기본 파일 시간 및 기타 표준 정보 |
$FILE_NAME | 파일 이름과 상위 디렉터리 관련 정보 |
$DATA | 파일의 데이터 스트림 |
$ATTRIBUTE_LIST | 추가 속성 레코드의 위치 정보 |
$SECURITY_DESCRIPTOR | 보안 설명자 관련 정보 |
$INDEX_ROOT | 디렉터리 등의 인덱스 정보 |
$INDEX_ALLOCATION | 레코드 외부에 저장되는 인덱스 데이터 |
$BITMAP | 관련 항목의 사용 여부를 표시하는 비트맵 |
모든 파일에 위 속성이 동일하게 존재하는 것은 아니다.
파일의 유형, 크기, 디렉터리 여부, 저장 방식 등에 따라 속성 구성이 달라질 수 있다.
① $STANDARD_INFORMATION
$STANDARD_INFORMATION은 파일의 기본적인 메타데이터를 담는 속성이다.
대표적으로 생성 시간, 마지막 데이터 수정 시간, MFT 레코드 변경 시간, 마지막 접근 시간 등의 정보를 포함한다.
이 속성의 시간 정보는 파일 시스템 분석에서 중요한 참고 자료로 사용된다.
② $FILE_NAME
$FILE_NAME 속성은 파일 이름과 상위 디렉터리 참조 정보를 포함한다.
또한 파일 관련 시간 정보 등도 포함할 수 있다.
NTFS에서는 하드 링크나 파일 이름 표현 방식 등에 따라 하나의 파일에 여러 $FILE_NAME 속성이 연결될 수 있다.
따라서 $FILE_NAME 속성이 항상 하나만 존재한다고 가정해서는 안 된다.
③ $DATA
$DATA 속성은 파일의 데이터 스트림을 표현한다.
일반적인 파일 내용은 이름이 없는 기본 데이터 스트림에 저장된다.
NTFS는 이름이 있는 추가 데이터 스트림도 지원한다.
파일 데이터가 작고 조건에 맞는 경우에는 데이터가 MFT 레코드 내부에 저장될 수 있다.
반대로 데이터가 크면 실제 내용은 별도의 디스크 클러스터에 저장되고, 레코드에는 데이터 위치를 찾기 위한 정보가 기록된다.
5. Resident와 Non-resident 속성의 차이
NTFS 속성의 저장 방식은 크게 Resident와 Non-resident로 구분할 수 있다.
Resident 속성
Resident 속성은 속성값이 MFT 파일 레코드 내부에 저장되는 방식이다.
일부 작은 파일의 데이터도 조건에 따라 레코드 내부에 저장될 수 있다.
하지만 작은 파일이라고 해서 반드시 Resident 방식으로 저장되는 것은 아니다.
Non-resident 속성
Non-resident 속성은 속성값이 파일 레코드 외부의 디스크 클러스터에 저장되는 방식이다.
이 경우 MFT 레코드에는 데이터가 저장된 위치를 설명하는 정보가 포함된다.
| 구분 | Resident | Non-resident |
|---|---|---|
| 속성값 저장 위치 | MFT 레코드 내부 | 외부 디스크 클러스터 |
| 대표적인 사례 | 작은 속성값 | 큰 파일 데이터 |
| 데이터 위치 정보 | 레코드 내부에서 확인 | 외부 저장 위치 해석 필요 |
| 분석 시 고려사항 | 레코드 구조와 길이 확인 | 데이터 런 등 추가 해석 필요 |
실제 파일 분석에서는 속성의 Resident 여부를 먼저 확인해야 올바른 방식으로 데이터를 해석할 수 있다.
6. MFT 파일 참조 번호와 시퀀스 번호
NTFS는 파일을 식별하기 위해 파일 참조 정보를 사용한다.
파일 참조에는 MFT 레코드 번호에 해당하는 정보와 시퀀스 번호가 포함된다.
파일 참조 번호의 역할
파일 이름은 변경될 수 있지만, NTFS는 내부적으로 파일을 식별하기 위한 참조 정보를 관리한다.
이 정보는 파일과 디렉터리의 연결 관계를 해석하는 데 사용될 수 있다.
시퀀스 번호가 필요한 이유
MFT 레코드는 파일이 삭제된 뒤 다른 파일에 재사용될 수 있다.
시퀀스 번호는 이러한 재사용 상황에서 이전 참조와 현재 레코드를 구분하는 데 도움을 준다.
따라서 레코드 번호만으로 과거와 현재의 파일이 동일하다고 판단하는 것은 부정확할 수 있다.
파일 이름과 파일 참조의 차이
| 항목 | 파일 이름 | 파일 참조 정보 |
|---|---|---|
| 주요 목적 | 사용자가 파일을 식별 | 파일 시스템 내부에서 파일을 참조 |
| 변경 가능성 | 이름 변경 가능 | 레코드 재사용 등 고려 필요 |
| 저장 위치 | 파일 이름 관련 속성 | MFT 참조 구조 |
| 분석 시 주의점 | 동일 이름의 다른 파일 가능 | 시퀀스 번호와 볼륨 맥락 확인 |
파일 참조 정보는 특정 NTFS 볼륨의 맥락에서 해석해야 한다.
서로 다른 볼륨의 파일 참조 번호가 같다는 이유만으로 같은 파일이라고 판단할 수는 없다.
7. NTFS 타임스탬프의 의미와 해석
파일 메타데이터를 분석할 때 가장 많이 확인하는 정보 중 하나가 시간 정보다.
NTFS에서는 파일 생성, 데이터 수정, 레코드 변경, 마지막 접근 등 여러 시간값을 관리한다.
주요 시간 정보
| 시간 정보 | 일반적인 의미 |
|---|---|
| Creation Time | 파일 생성 시각 |
| Last Write Time | 파일 데이터가 마지막으로 수정된 시각 |
| MFT Change Time | 파일 레코드 또는 메타데이터가 변경된 시각 |
| Last Access Time | 파일에 마지막으로 접근한 시각 |
NTFS 시간값은 일반적으로 1601년 1월 1일 00:00:00 UTC를 기준으로 100나노초 단위를 사용하는 Windows FILETIME 형식으로 표현된다.
다만 저장 정밀도와 실제 갱신 시점은 서로 다른 개념이다.
시간 정보가 항상 정확한 작업 이력을 뜻하지는 않는다
파일 시간은 운영체제 설정, 파일 복사, 프로그램 동작, 시간값 변경 등의 영향을 받을 수 있다.
특히 마지막 접근 시간은 설정과 시스템 동작에 따라 갱신되지 않거나 지연될 수 있다.
따라서 파일의 시간 정보 하나만으로 사용자가 언제 파일을 열었는지 확정해서는 안 된다.
$STANDARD_INFORMATION과 $FILE_NAME 시간 비교
NTFS 분석에서는 $STANDARD_INFORMATION과 $FILE_NAME에 포함된 시간 정보를 비교하기도 한다.
두 속성의 시간값이 다르다면 파일 작업 과정이나 메타데이터 변화가 있었을 가능성을 검토할 수 있다.
그러나 시간값이 다르다는 이유만으로 파일 조작이나 악의적인 변경이 있었다고 단정할 수는 없다.
파일 이동, 이름 변경, 복사 방식, 운영체제 동작 등 여러 요인을 함께 분석해야 한다.
8. Windows에서 NTFS 볼륨 정보 확인하기
Windows에서는 fsutil 명령어를 사용해 파일 시스템 관련 정보를 확인할 수 있다.
이번 실습은 MFT 원시 데이터를 직접 수정하거나 추출하지 않고, 운영체제가 제공하는 정보를 조회하는 방식이다.
주의: fsutil에는 파일 시스템을 변경하는 기능도 포함되어 있으므로, 여기서는 안내한 조회 명령어만 사용한다.
① 파일 시스템 종류 확인
Windows에서 명령 프롬프트를 실행한다.
다음 명령어를 입력한다.
fsutil fsinfo volumeinfo C:
결과에서 다음 항목을 확인한다.
File System Name : NTFS
실제 결과가 NTFS가 아니라면 해당 볼륨은 이 글에서 설명하는 NTFS MFT 분석 대상이 아닐 수 있다.
② NTFS 상세 정보 확인
다음 명령어를 입력한다.
fsutil fsinfo ntfsinfo C:
이 명령어는 NTFS 볼륨의 여러 내부 정보를 조회한다.
환경에 따라 관리자 권한이 필요할 수 있으며, 운영체제 버전에 따라 출력 항목이 다를 수 있다.
대표적으로 다음과 같은 정보를 확인할 수 있다.
- NTFS 볼륨 일련번호
- 섹터 및 클러스터 관련 정보
- MFT 관련 위치 정보
- MFT 레코드 크기 관련 정보
출력된 값의 일부는 16진수로 표시될 수 있다.
③ 조회 결과 해석
| 확인 항목 | 분석 목적 |
|---|---|
| 파일 시스템 이름 | 대상 볼륨이 NTFS인지 확인 |
| 볼륨 일련번호 | 볼륨 식별 참고 |
| 클러스터 크기 | 데이터 할당 단위 이해 |
| MFT 관련 위치 | 파일 시스템 내부 구조 파악 |
| MFT 레코드 크기 | 파일 레코드 구조 해석의 기준 |
이 명령어는 볼륨의 전체적인 NTFS 정보를 조회한다.
개별 파일의 모든 MFT 속성을 자동으로 추출하거나 해석하는 명령어는 아니다.
9. 개별 파일의 기본 메타데이터 확인 실습
PowerShell에서는 파일의 기본적인 속성을 조회할 수 있다.
다음 예시에서는 사용자가 직접 준비한 파일을 사용한다.
예시 경로:
C:\FileTest\sample.txt
실제 파일 경로에 맞게 변경해야 한다.
① 파일 기본 정보 확인
Get-Item -LiteralPath "C:\FileTest\sample.txt" |
Select-Object Name, Length, CreationTime, LastWriteTime, LastAccessTime
명령어가 정상 실행되면 파일 이름, 크기, 생성 시각, 마지막 수정 시각, 마지막 접근 시각 등을 확인할 수 있다.
② UTC 기준 시간 확인
Get-Item -LiteralPath "C:\FileTest\sample.txt" |
Select-Object Name, CreationTimeUtc, LastWriteTimeUtc, LastAccessTimeUtc
이 명령어는 PowerShell이 제공하는 UTC 기준 파일 시간 속성을 표시한다.
Windows에서 보이는 로컬 시간과 UTC 기준 시간은 시간대 설정에 따라 다르게 표시될 수 있다.
③ 이 실습의 한계
PowerShell의 Get-Item은 운영체제가 제공하는 파일 정보를 조회한다.
따라서 이 결과만으로 $STANDARD_INFORMATION과 $FILE_NAME 속성의 모든 원시 시간값을 각각 추출했다고 볼 수는 없다.
MFT의 원시 속성값을 상세하게 분석하려면 NTFS 레코드를 해석하는 별도 도구와 추가적인 검증 절차가 필요하다.
10. MFT 분석에서 주의해야 할 사항
① 삭제된 파일의 정보가 항상 남아 있는 것은 아니다
파일이 삭제된 뒤에도 일부 파일 시스템 정보가 일정 기간 남을 수 있다.
그러나 레코드 재사용, 데이터 덮어쓰기, 저장장치 특성 등에 따라 복구 가능한 정보는 달라진다.
따라서 MFT만으로 삭제된 모든 파일을 복원할 수 있다고 설명하는 것은 부정확하다.
② MFT 레코드만으로 전체 파일 내용을 확인할 수는 없다
파일 데이터가 Non-resident 방식으로 저장된 경우에는 외부 클러스터의 데이터를 추가로 읽어야 한다.
또한 파일의 속성이 여러 레코드에 나뉘어 저장되었을 가능성도 고려해야 한다.
③ 파일 시간만으로 사용자 행동을 확정할 수 없다
파일 생성 시각이나 접근 시각은 프로그램의 동작, 운영체제 설정, 복사 및 이동 방식 등의 영향을 받을 수 있다.
따라서 특정 시각에 사용자가 직접 파일을 열거나 수정했다고 단정하려면 추가 증거가 필요하다.
④ 원본 저장장치의 변경을 피해야 한다
중요한 데이터나 증거 자료를 분석할 때는 원본의 변경 가능성을 최소화해야 한다.
전문적인 디지털 포렌식에서는 적절한 획득 절차, 읽기 전용 접근, 해시값 검증, 작업 기록 등을 고려한다.
이 글에서 소개한 명령어는 기본적인 정보 조회를 위한 것이며, 전문적인 증거 획득 절차를 대체하지 않는다.
11. 파일 시그니처·SHA-256·MFT 분석의 차이
디지털 파일을 검증할 때는 분석 목적에 맞는 기술을 선택해야 한다.
| 분석 기술 | 주요 목적 | 확인 대상 |
|---|---|---|
| 파일 시그니처 분석 | 파일 형식 식별 | 헤더 및 특징적인 바이트 패턴 |
| SHA-256 해시 검증 | 파일 내용 동일성 확인 | 파일 전체 바이트 |
| NTFS MFT 분석 | 파일 시스템 기록 구조 분석 | 파일 레코드 및 속성 정보 |
예를 들어 확장자가 .jpg인 파일이 실제 JPEG 형식인지 확인하려면 파일 시그니처 분석이 도움이 된다.
원본 파일과 복사본의 데이터가 같은지 확인하려면 SHA-256 해시값 비교가 적합하다.
반면 NTFS에서 파일 이름, 레코드, 시간 정보 등이 어떻게 관리되는지 이해하려면 MFT 구조 분석이 필요하다.
세 기술은 검사 대상과 목적이 다르므로 서로 대체할 수 없다.
12. 자주 묻는 질문
Q1. MFT는 모든 Windows 저장장치에 존재하나요?
아니다. MFT는 NTFS 파일 시스템의 구조다. FAT32, exFAT 등 다른 파일 시스템에는 NTFS와 동일한 MFT 구조가 존재하지 않는다.
Q2. MFT 파일을 삭제해도 되나요?
MFT는 NTFS 파일 시스템의 핵심 메타데이터이므로 임의로 삭제하거나 수정해서는 안 된다. 손상될 경우 파일 시스템 접근에 심각한 문제가 발생할 수 있다.
Q3. MFT 레코드 크기는 항상 1,024바이트인가요?
아니다. 1,024바이트가 흔한 크기이지만 볼륨 구성에 따라 달라질 수 있다. 정확한 값은 해당 NTFS 볼륨의 정보를 확인해야 한다.
Q4. 파일 이름을 변경하면 SHA-256 해시값도 바뀌나요?
파일 이름만 변경되고 파일의 실제 바이트가 그대로라면 일반적인 파일 내용 SHA-256 해시값은 변하지 않는다.
다만 파일 시스템의 이름 관련 메타데이터는 변경될 수 있다.
Q5. MFT로 삭제된 파일을 모두 복구할 수 있나요?
아니다. 일부 삭제 파일의 흔적이 남아 있을 수 있지만 레코드 재사용과 데이터 덮어쓰기 등으로 복구가 불가능할 수도 있다.
Q6. PowerShell만으로 MFT 원시 레코드를 분석할 수 있나요?
일반적인 Get-Item 명령어는 파일의 기본 속성을 조회할 뿐 MFT 원시 레코드를 완전히 해석하지 않는다.
원시 MFT 분석에는 파일 시스템 구조에 대한 이해와 적절한 분석 도구가 필요하다.
마무리
NTFS의 MFT는 파일과 디렉터리의 정보를 관리하는 핵심 구조다.
MFT 파일 레코드에는 파일 이름, 시간 정보, 데이터 관련 속성 등 다양한 메타데이터가 기록된다.
특히 $STANDARD_INFORMATION, $FILE_NAME, $DATA 속성의 역할을 구분하면 NTFS가 파일을 관리하는 원리를 이해하는 데 도움이 된다.
다만 MFT의 시간 정보나 레코드만으로 파일의 모든 작업 이력과 사용자 행동을 확정할 수는 없다.
정확한 NTFS 분석을 위해서는 파일 레코드 구조, 속성 저장 방식, 시간 정보의 갱신 특성, 분석 도구의 한계를 함께 고려해야 한다.
핵심 내용 3줄 요약
- MFT는 NTFS 볼륨에서 파일과 디렉터리 정보를 관리하는 핵심 메타데이터 구조다.
- 파일 레코드에는
$STANDARD_INFORMATION,$FILE_NAME,$DATA등 다양한 속성이 저장된다. - MFT 분석 결과는 파일 시스템 구조를 이해하는 데 유용하지만 시간 정보만으로 사용자 행동을 확정해서는 안 된다.
공식 참고자료
- Microsoft Learn — Master File Table
https://learn.microsoft.com/en-us/windows/win32/devnotes/master-file-table - Microsoft Learn — NTFS Attribute Types
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-fscc/a82e9105-2405-4e37-b2c3-28c773902d85 - Microsoft Learn — fsutil fsinfo
https://learn.microsoft.com/ko-kr/windows-server/administration/windows-commands/fsutil-fsinfo - Microsoft Learn — File Times
https://learn.microsoft.com/en-us/windows/win32/sysinfo/file-times
※ 이 글의 명령어는 Windows에서 기본적인 파일 및 NTFS 볼륨 정보를 확인하기 위한 예시다. 실제 출력 내용과 접근 권한은 시스템 환경에 따라 다를 수 있다.
디지털 파일 검증 연구소
댓글 0
첫 댓글을 남겨보세요.