본문 바로가기

[+] Forensic

File System - NTFS (3)

이번 글에서는 MFT 엔트리 구조에서 속성부분을 알아 볼 것이다.

속성은 많은 타입들이 있으며, 각각의 속성들은 자신의 내부 구조체를 갖는다.

NTFS는 다른 파일시스템과 다른 특징의 속성 개념을 가지고 있는데, 이는 바로 파일 내용에 대한 속성이 있다는 것이다.

속성은 3개로 나누어져 있는데 한개의 속성마다 헤더가 존재한다.

아래는 MFT 엔트리의 논리적 구조이며, 속성에 조금 더 초점을 맞춰 표현 한 것이다.

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

 속성 헤더는 속성의 타입, 크기, 이름을 구분짓는다. 또 해당 값들이 압축, 암호화되었는지를 식별하는 플래그 값도 포함하고 있다. 

속성 내용은 형식과 크기가 정해져 있지 않다. 이로 인해 속성 내용의 크기가 엔트리 크기보다 커지는 경우가 발생하여 NTFS에서는 두 가지 속성을 통해 속성 내용의 저장 장소를 판단한다.

 - 거주(Resident) 속성 : 속성 내용이 엔트리 크기보다 작은 경우 엔트리 내에 속성 내용을 저장
 - 비거주(Non - Resident) 속성 : 속성 내용이 엔트리 크기보다 클 경우 외부에 별도 클러스터를 할당 받아 해당 클러스터에 속성 내용을 저장

 * 참고 : 대부분의 속성은 거주 속성이지만, $DATA, $ATTRIBUTE_LIST 와 같이 크기가 유동적인 것들은 비거주 속성이 될 수도 있다.


두 속성의 결정은 속성 헤더에서 결정하며, 비거주 속성이 될 경우 MFT 엔트리의 속성 헤더에는 할당 받은 클러스터 주소가 포함되게 된다.

아래는 두 속성을 도식화 한 것이다.

[그림 2 - Resident 속성과 Non-Resident 속성]

만약 속성이 비거주 속성으로 판명되어 클러스터를 할당받아 속성 내용을 저장한다고 하더라도, 할당 받은 클러스터의 크기를 초과해 버리면 또 다른 클러스터를 할당 받아 저장하게 된다.

하지만 새롭게 할당 받은 클러스터는 연속된 클러스터 일 수도 있지만, 대부분 비연속적 클러스터일 가능성이 더 높다.

이럴 때 NTFS에서는 클러스터 런(Cluster Runs)이라는 것을 활용하여 비연속적으로 할당 된 클러스터를 효과적으로 관리한다.

그리고 run이라고 하는 것을 이용하여 각 클러스터를 문서화 한다.

이러한 run을 목록화 해둔것을 runlist 라고 하며, run의 구조는 run의 길이(클러스터 개수)와 클러스터 시작 오프셋(파일시스템 처음 오프셋부터)으로 이루어져 있다.

속성에는 표준적인 유형들이 있는데 속성 타입들은 번호로 정의되어 있으며, MS에서는 해당 번호들은 식별자로 사용한다.

각 속성 타입은 이름을 가지고, 모두 대문자로 구성되어 있다. 그리고 MFT 메타데이터와 동일하게 "$" 로 시작한다.

아래는 몇가지 표준 속성들을 나열 해 둔 것이다.

[그림 3 - 표준 속성 목록]

위 속성들이 모두 파일에 존재하는 것은 아니다.

대부분 기본 파일에 할당 된 MFT 엔트리는 $STANDARD_INFORMAION, $FILE_NAME, $DATA 속성만 갖는다.

$STANDARD_INFORMATION 속성의 경우 보안, 임시정보, 소유권등을 나타내기 때문에 모든 파일과 디렉토리에 있어서 강제적인 속성이다.

$FILE_NAME 속성의 경우 파일 이름, 크기, 임시 정보 등을 나타내기 때문에 이 속성 또한 모든 파일과 디렉토리에 있어서 강제적인 속성이다.


또 위 두가지 속성은 거주 속성이다. 

$DATA 속성은 파일의 내용을 저장하는 속성으로 파일 내용이 엔트리의 크기를 초과한다면 비거주속성으로 판단되어 별도의 클러스터에 파일 내용을 저장하게 된다.

 * 참고 : 기본적인 $DATA 속성은 이름을 갖지 않지만, 비거주 속성으로 인해 추가적인 $DATA 속성이 생긴다면 해당 속성은 이름을 반드시 가져야 한다. 하지만, 해당 이름은 따로 정해진 것이 없다.

모든 디렉토리는 $INDEX_ROOT 속성을 가지며, $INDEX_ROOT 속성은 해당 디렉토리 내에 위치한 파일들과 하위 디렉토리의 정보를 포함한다.

디렉토리가 커지면 $INDEX_ALLOCATION 속성과 $BITMAP 속성을 사용하게 된다.

또 디렉토리에도 $DATA 속성이 있을 수 있다. 디렉토리에 있는 $DATA 속성에는 해당 디렉토리의 하위 디렉토리 목록과 파일 내용 등이 저장된다.

 * 참고 : 디렉토리에 $DATA 속성에는 어떠한 내용도 저장 될 수 있다.

 * 참고 : $INDEX_ROOT, INDEX_ALLOCATION 속성의 이름은 일반적으로 $I30 이다.


아래는 기본적으로 설정되는 MFT 엔트리 속성들을 도식화 한것이다.

[그림 4 - 기본 MFT 엔트리 속성]

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

File System - NTFS (5)  (2) 2012.02.08
File System - NTFS (4)  (0) 2012.02.08
File System - NTFS (3)  (2) 2012.02.07
File System - NTFS (2)  (0) 2012.02.07
File System - NTFS (1)  (0) 2012.02.06