본문 바로가기

[+] Forensic

File System - NTFS (2)

이번 글에서는 NTFS에 핵심이라고 말할 수 있는 MFT에 대해서 알아 볼 것이다.

상세히 분석하는 정도는 아니고, 일단 간략하게 알아 본 뒤 조금 더 뒤에서 상세히 분석 해 볼 것이다.

일단 MFT를 설명하기 전에 NTFS의 개념을 알아야 한다.

NTFS는 시스템 내에서 중요한 데이터가 파일로 취급된다. 다른 말로 하면 NTFS 시스템 내에서는 관리데이터 들이 파일로 취급받는다.

위와 같은 이유로 관리 데이터들이 일반 파일처럼 파일시스템 어떤 위치에도 위치 할 수 있게 된다.

그래서 NTFS는 다른 파일시스템들과 달리 특정 레이아웃을 가지고 있지 않다.

다만, NTFS 볼륨 첫 섹터에는 부트 섹터가 있고, 부트 섹터에는 부트코드가 포함되어 있을 뿐이다.

개념을 간단히 숙지 했으니 이제 MFT에 대해서 알아보자.

[MFT]

[개념]
MFT(Master File Table)은 파일시스템의 모든 파일들과 디렉토리에 대한 정보를 포함하고 있는 것으로 NTFS의 핵심이라고 말을 할 수 있다. 모든 파일과 디렉토리는 MFT에 꼭 하나의 엔트리를 가지고 있는데, 그 엔트리의 구조는 간단하다. 아래는 MFT 엔트리의 논리적 구조를 나타낸 것이다.

 [그림 1 - MFT 엔트리 구조]

 엔트리의 크기는 1KB이며, 헤더는 미리 정의된 목적을 갖는다. 속성 영역은 특정한 목적을 갖는 작은 데이터 구조체로 이루어져 있다.

 * 참고 : NTFS를 설계한 MS에서는 MFT 엔트리를 파일 레코드(File Record)라고 부른다.

 각 MFT 엔트리는 테이블 내에서의 주소를 갖고, 해당 주소는 0부터 시작한다. 보통 엔트리의 크기는 1KB 이지만, 정확한 크기는 부트 섹터에서 정의한다.

MFT도 시스템 내에서는 하나의 파일로 취급되어 MFT를 설명하는 MFT 엔트리가 MFT안에 포함되어 있다.

MFT를 설명하는 엔트리의 이름은 $MFT이며, 해당 엔트리는 MFT의 디스크 위치를 설명한다.

MFT의 전반적인 레이아웃과 크기를 파악하려면 $MFT 엔트리를 참조해야 한다.

MFT의 시작위치는 부트 섹터에서 정의하며, $MFT 엔트리는 MFT의 첫 번째 엔트리이므로 쉽게 $MFT 엔트리를 찾을 수 있다.

MS는 MFT를 가능한 작게 시작하고, 필요할 때 크기를 확장할 수 있도록 NTFS를 설계하여 운영체제에 의해 파일시스템이 생성 될 때에는 MFT에 고정된 엔트리 수의 엔트리를 생성하지만, 볼륨 스패닝등으로 저장 공간이 늘어날 시 MFT를 동적으로 늘려 파일시스템을 크게 만들 수 있게끔 하였다. 

 * 참고 : MFT 엔트리들은 한번 생성되면 지워지지 않는다. 

 

[내용]
엔트리의 크기는 원래 부트섹터에서 정의하지만, MS의 모든 윈도우 버전들은 보통 1KB의 크기를 갖는다.

MFT 헤더는 42바이트 크기이며, 12개의 필드를 포함하고 있으며, 나머지 982바이트는 비구조적으로 속성 값들을 포함하고 있다.

MFT 엔트리의 첫 번째 필드는 시그니처인데, 보통 시그니처로는 "FILE" 문자열이 사용된다. 하지만, 엔트리의 오류등이 생길 시 시그니처 필드는 "BAAD" 라는 문자열을 갖도록 설정 된다.

또 MFT 엔트리는 엔트리의 할당 상태, 타입 구분 필드 등이 있다. 자세한 건 상세 분석 때 알아볼 것이다.

* 참고 : 파일이 하나의 엔트리만으로 설명 되기 부족하다면 여러 엔트리를 사용 할 수도 있다. 

 

[주소]
MFT 엔트리는 48bit 주소 값을 가지며, 순차적으로 주소가 할당 된다. 주소 시작은 0부터이며, 첫 번째 엔트리가 주소 0을 가진다. MFT의 최대 주소는 MFT 크기가 증가할 때 마다 변경된다.

 * 참고 : MS에서는 MFT 엔트리의 주소를 파일 번호(File Number)라고 부른다.

또 MFT는 주소외에 다른 순서 번호를 갖는다. 해당 순서 번호는 16비트이며, 48bit의 주소와 조합되어 64bit의 파일 참조 번호를 생성하는데 사용된다. 

 

[메타데이터 파일]
NTFS에서 메타데이터 파일이란, 볼륨의 모든 바이트가 파일로 할당되어 이를 관리하는 데이터를 저장할 파일이 필요한데 이러한 다른 데이터의 관리 데이터를 저장한 파일을 메타데이터 파일이라고 부른다. 
메타데이터 파일은 MFT의 첫 16개 엔트리들로 예약이 되어 있다. 사용하지 않는 엔트리들은 비 할당 상태일 것 같지만 할당 상태이며, 오직 기본적이고 일반적인 정보만 포함한다.
메타데이터 파일들은 사용자에게는 보이지 않지만, 루트 디렉토리 존재하고 있다.
각 메타데이터 파일들은 "$" 로 파일명이 시작되고, 첫 번째 문자는 대문자로 시작한다.
아래는 메타데이터 파일을 나열 해 둔 것이다. 

 [그림 2 - MFT 메타데이터 목록]


지금까지 MFT의 기본개념과 MFT 엔트리 헤더, 메타데이터 파일에 대해서 알아 보았다.

다음 글에서는 MFT 엔트리의 속성에 대해서 알아 볼 것이다.

'[+] Forensic' 카테고리의 다른 글

File System - NTFS (4)  (0) 2012.02.08
File System - NTFS (3)  (2) 2012.02.07
File System - NTFS (1)  (0) 2012.02.06
File System - FAT (10)  (0) 2012.02.05