본문 바로가기

[+] Forensic

File System - NTFS (6)

이번 글에서는 NTFS 인덱스의 속성에 대해서 알아 볼 것이다.

NTFS에서 b-tree를 사용한다고 앞 글에서 언급 했었는데 해당 트리에서는 노드에서 값을 저장하기 위해서 "인덱스 엔트리(Index Entry)" 라는 데이터 구조체를 사용한다.

인덱스 엔트리는 많은 타입들을 가질 수 있고, 모두 표준 헤더 필드를 사용한다.

인덱스 엔트리는 노드의 구성원이며, 비어 있는 인덱스 엔트리는 노드의 마지막을 뜻한다.

인덱스 엔트리의 구조는 단순하다. 헤더와 속성으로 이루어져 있는데 정확한 것은 아래 이미지에서 확인 할 수 있다.

 [그림 1 - 인덱스 엔트리 구조]

인덱스 엔트리를 구성원으로 가지고 있는 노드들은 MFT 엔트리 속성 두 개에 따라 저장방식이 달라진다.

만약 속성이 $INDEX_ROOT 속성이라면 항상 거주 속성을 가져 노드는 한개만 MFT 엔트리에 저장된다.

만약 노드가 여러개라면 $INDEX_ALLOCATION 속성이 할당 되는데 이 속성은 비거주 속성이다.


이 속성의 내용은 하나 또는 그 이상의 인덱스 레코드를 포함하는 버퍼(클러스터)인데, 인덱스 레코드 인덱스 엔트리의 집합이다.

 * 참고 : 트리의 노드와 인덱스 레코드가 비슷한 개념이라고 생각하면 된다.

인덱스 레코드의 크기는 4096byte 이며, 고정된 크기이다. 또 인덱스 레코드는 인덱스 엔트리들의 목록을 포함하고 있다.

인덱스 레코드의 주소는 0으로 시작한다. 아래는 두 속성에 대한 정보를 도식화 한 것이다.

 [그림 2 - 속성 별 저장 방식]

위 이미지에서 보면 인덱스 레코드에 할당되지 않은 영역들이 있는데 이 영역들은 할당이 가능한 상태이다.

인덱스의 레코드 할당 상태는 $BITMAP 속성에서 관리하는데, 새로운 노드를 트리에 할당하려고 할 때 $BITMAP 속성은 사용 가능한 인덱스 레코드를 찾게 된다.

인덱스 엔트리에는 자식 노드가 있는지를 판별하게 도와주는 플래그 값이 포함되어 있다.

자식 노드가 있다면 자식 노드의 인덱스 레코드 주소가 부모 인덱스 엔트리에 포함된다. 

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

File System - NTFS (8)  (0) 2012.02.09
File System - NTFS (7)  (0) 2012.02.09
File System - NTFS (6)  (0) 2012.02.09
File System - NTFS (5)  (2) 2012.02.08
File System - NTFS (4)  (0) 2012.02.08