이번 글에서는 마지막으로 남은 메타데이터 파일들을 알아보도록 하겠다.

[$LogFile]
해당 메타데이터는 MFT 엔트리 세 번째에 위치하며, NTFS 저널링에 사용된다. 속성은 표준 속성을 가지고 있고 로그 데이터를 내용으로 가지고 있는데 이 내용은 $DATA 속성에 포함되어 있다. 하지만 오프셋 구조는 아직 정확히 알려진 바가 없어 애매한 내용을 언급하면 혼란만 초래하므로 해당 메타데이터 파일 분석은 조금 더 정확한 분석이 되면 그때 언급 하도록 하겠다.


[$UsrJrnl]
해당 메타데이터 파일은 변경 저널링에 사용되며 파일에 변경이 발생하면 해당 메타데이터 파일에 관련 정보가 기록된다.
해당 파일도 $ObjId, $Quota 등의 파일과 마찬가지로 MFT 예약 엔트리에 있지 않고 $Extend 메타데이터 파일에 포함되어 있다. 해당 메타데이터 파일에는 두가지 $DATA 속성이 존재한다.

 - $J : $J라는 이름을 가지고 있는 $DATA 속성으로 이 속성은 sparse 속성이며, 다른 크기로 된 데이터 구조체 목록을 포함하고 있다. 
 - $Max : $Max라는 이름을 가지고 있는 $DATA 속성으로 이 속성은 사용자 저널링 최대 설정의 대한 정보가 포함하고 있다.

 * 참고 : $J는 변경 저널 엔트리라고 부른다.


해당 파일은 응용 프로그램 참조 모델에 속하는 파일이다 보니 해당 파일들의 데이터는 비 필수 데이터들이다.

 * 참고 : 본래 저널링 기술은 기본 설정이 비 활성화인데 필자가 가지고 있는 NTFS image 모두 저널링 기술이 활성화 되어 있지 않아 해당 메타데이터 파일이 없다. 이러한 이유로 오프셋 구조는 표로 대체한다.
 

[그림 1 - $J 속성의 오프셋]


 - 변경 유형 플래그 : 해당 오프셋의 값은 변경 저널 엔트리 생성 이유를 의미하기도 한다. 아래 목록의 플래그 값들이 하나 이상 설정 될 수 있다.
 

[그림 2 - 변경 유형 플래그 목록]


아래는 $Max 속성의 오프셋 구조이다.

[그림 3 - $Max 속성의 오프셋]


오프셋 구조를 보면 포렌식적 의미를 가진 정보는 없는 것을 볼 수 있다.


위 설명을 끝으로 NTFS의 분석이 끝이 났다. NTFS는 여러가지 기능과 복합적인 구조로 인해 분석이 어려운편에 속하는 파일시스템이다. 또 아직까지 알려지지 않은 데이터 구조체 필드로 인해 또 어떠한 포렌식적 의미의 정보가 있는지 알 수 없다.



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

File System - Ext (2)  (0) 2012.02.20
File System - Ext (1)  (0) 2012.02.20
File System - NTFS (20)  (0) 2012.02.19
File System - NTFS (19)  (0) 2012.02.19
File System - NTFS (18)  (0) 2012.02.18
이번 글에서는 NTFS의 메타데이터 파일 중 $Volume, $ObjId, $Quota 파일에 대해서 알아 볼 것이다.

[$Volume]
해당 메타데이터 파일은 두 개의 속성으로 이루어져 있으며 이 속성을 중점적으로 해당 메타데이터 파일을 분석 할 것이다.
해당 메타데이터 파일은 MFT 엔트리 네 번째에 위치하고 있다. 가지고 있는 속성으로는 $VOLUME_NAME과 $VOLUME_INFORMATION이 있다.

[$VOLUME_NAME]
해당 속성은 $VOLUME 파일이 할당 되었을 경우만 사용되는 속성이며, 타입 식별자는 96이고 파일 내용으로는 파일시스템의 볼륨 이름을 저장하고 있다.

[그림 1 - $VOLUME_NAME 속성의 내용]

 

[$VOLUME_INFORMATION]
해당 속성은 $VOLUME 파일의 두 번째 속성이며 내용으로는 파일시스템 버전을 포함한다. 타입 식별자는 112이다.
오프셋 구조는 아주 간단하고 그 구조는 아래와 같다.

[그림 2 - $VOLUME_INFORMATION 속성의 오프셋]

 - 플래그 : 해당 오프셋에 저장 될 수 있는 값의 목록은 다음과 같다.

[그림 3 - 플래그 값 목록]

 

 

[$ObjId]
NTFS에서는 다른 파일시스템과 달리 파일이름 말고도 오브젝트 ID를 사용하여 파일을 구별 할 수 있다고 앞 글에서 언급한 적이 있었다. 어떠한 파일을 포함하는 인덱스는 $INDEX_ROOT 속성과 $INDEX_ALLOCATION 속성을 일반적으로 가지며, 파일을 직접적으로 포함하고 있는 인덱스 엔트리는 특정 데이터 구조체를 가지고 있다. 그 구조는 아래와 같다.

 * 참고 : $ObjId 메타데이터 파일은 MFT 엔트리에서 특정 위치에 존재하지 않고 $Extend 메타데이터 파일안에 포함되어 있다.

[그림 4 - $ObjId 파일의 오프셋]

 - 플래그 : 여기에 들어갈 플래그 목록은 아래와 같다.
                1) 0x01 : 자식 노드가 존재한다.
                2) 0x02 : 목록에서 마지막 엔트리이다. 


[$Quota]
해당 메타데이터 파일은 $INDEX_ROOT와 $INDEX_ALLOCATION 속성을 일반적으로 사용하며, 두 개의 인덱스를 가지고 있다.

 - $O 인덱스 : 하나의 SID와 소유자 ID를 연결시키는 역할을 한다.
 - $Q 인덱스 : 할당 정보에 자신의 ID를 연결시키는 역할을 한다.


 * 참고 : $Quota 파일 또한 MFT 엔트리 내의 존재하는게 아닌 $Extend 파일안에 포함되어 있다.

아래는 $O 인덱스의 오프셋 구조이다.
 

[그림 5 - $O 인덱스의 오프셋]

 - 소유자 ID 오프셋 : 해당 오프셋의 값은 $O 인덱스 시작으로부터 상대적이다.

 - 플래그 : 여기에 들어갈 플래그 목록은 아래와 같다.
                1) 0x01 : 자식 노드가 존재한다.

                2) 0x02 : 목록에서 마지막 엔트리이다. 

 - SID : 해당 오프셋의 범위는 16 바이트 오프셋부터 16 + SID 크기 오프셋 - 1 만큼이다.

 - 소유자 ID : 해당 오프셋은 소유자 ID 오프셋을 참조하고 해당 바이트 오프셋부터 소유자 ID 길이 만큼까지가 범위이다.


아래는 $Q 인덱스의 오프셋 구조이다.

[그림 6 - $Q 인덱스의 오프셋]

 - 소유자 ID 크기 : 해당 오프셋의 값은 언제나 "0x0004" 이다.

 - 플래그 : 
여기에 들어갈 플래그 목록은 아래와 같다.
                1) 0x01 : 자식 노드가 존재한다.

                2) 0x02 : 목록에서 마지막 엔트리이다. 


 - 할당 플래그 : 플래그 목록은 아래와 같다.


[그림 7 - 플래그 목록]


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

File System - Ext (1)  (0) 2012.02.20
File System - NTFS (20)  (0) 2012.02.19
File System - NTFS (19)  (0) 2012.02.19
File System - NTFS (18)  (0) 2012.02.18
File System - NTFS (17)  (0) 2012.02.17
이전글에서는 모든 파일에 할당 되는 속성을 알아봤다면 이번 글부터는 인덱스 속성의 데이터 구조체를 알아 볼 것이다.

[$INDEX_ROOT]
해당 속성은 타입 식별자 144를 가지며, 항상 거주 속성이다. 해당 속성은 항상 인덱스 트리의 루트이며, 오직 인덱스 엔트리들의 작은 목록만 포함한다. 해당 속성의 레이아웃은 아래와 같다.

 [그림 1 - $INDEX_ROOT 속성의 레이아웃]

$INDEX_ROOT 속성 헤더는 16바이트의 크기를 가지며, 노드헤더 또한 16바이트의 크기를 가진다. 

 * 참고 : 노드헤더는 $INDEX_ROOT와 $INDEX_ALLOCATION에 모두 동일하게 적용되므로 두 속성을 분석한 후 따로 분석 할 것이다.

아래는 $INDEX_ROOT 속성 헤더 오프셋이다.

 [그림 2 - $INDEX_ROOT 속성 헤더 오프셋]

 - 인덱스 내의 속성 타입 : 인덱스에 포함되어 있는 엔트리의 속성 타입을 포함하는 오프셋인데, 엔트리가 속성을 사용하지 않는 경우 0으로 설정된다.

 - 수집 정렬 규칙 : $INDEX_ALLOCATION 속성에서 정렬되는 규칙이다.

 - 인덱스 레코드 크기(byte) : 인덱스 레코드의 바이트 크기를 포함하는 오프셋이다.

 - 인덱스 레코드 크기(클러스터) : 인덱스 레코드 크기만큼 필요한 클러스터 수

 * 참고 : $INDEX_ROOT 속성 헤더 바로 다음 바이트부터 노드헤더가 시작된다. 

 

[$INDEX_ALLOCATION]
큰 디렉토리일 경우 인덱스 엔트리가 $INDEX_ROOT 속성에 적합하지 않는다. 이러한 경우 비 거주 속성인 해당 속성이 사용된다. 해당 속성의 내용은 인덱스 레코드로 이루어져 있는데, 인덱스 레코드의 크기는 고정이며, 정렬된 트리의 노드 하나를 포함하고 있다. 인덱스 레코드의 크기는 $INDEX_ROOT 속성 헤더에 정의되어 있으며, 보통 4096byte 이다.
해당 속성의 타입 식별자는 160이며 해당 속성의 내용인 인덱스 레코드는 특별한 헤더 데이터 구조체로 시작한다. 헤더 다음으로 노드 헤더와 인덱스 엔트리의 목록이 온다.
아래는 해당 속성의 레이아웃이다.

 [그림 3 - $INDEX_ALLOCATION 속성의 레이아웃]

 아래는 인덱스 레코드 헤더의 오프셋이다.

 [그림 4 - 인덱스 레코드 헤더의 오프셋]

 - 시그니처 : 인덱스 레코드에는 시그니처가 존재하며 시그니처는 "INDX" 이다.

 - Fixup 배열 오프셋 : 해당 오프셋의 값은 Fixup 배열의 오프셋 주소로 인덱스 레코드 헤더 시작부분에서 상대적이다. 


 * 참고 : 인덱스 레코드 헤더 바로 다음 바이트부터 노드헤더가 시작된다. 


[$BITMAP]
해당 속성은 인덱스 레코드의 할당 상태를 관리하는 속성이다. 모든 인덱스 레코드가 할당 되는 것은 아니며 운영체제 판단에 의해 필요시 할당 된다.

 * 참고 : $BITMAP 속성은 MFT 엔트리 할당 추적을 위해 $MFT에 의해서 사용 된다.

해당 속성은 타입 식별자 176을 가지며 각 바이트를 비트로 변환하여 인덱스 레코드와 맵핑한다.

[그림 5 - $BITMAP 속성의 오프셋]

위 이미지를 분석하여 보면 첫 바이트가 0x01인데 비트로 변환 시 0000 0001 이다. 이건 인덱스 레코드 0이 할당되었다는 것을 의미한다.
만약 0x02 바이트이어서 0000 0010 이라면 인덱스 레코드 1에 할당 되었다는 것을 의미한다. 


[인덱스 노드 헤더 데이터 구조체]
앞서 말한 노드헤더를 여기서 분석하여 볼 것이다. 노드 헤더는 각 속성의 헤더가 끝나고 바로 다음 바이트부터 시작이 되는데 그 크기는 16byte 이다.

 [그림 6 - 노드헤더 오프셋]

 - 인덱스 엔트리 목록의 시작 오프셋 : 해당 값은 노드 헤더 시작에서 상대적이다.

 - 인덱스 엔트리 목록의 마지막 오프셋 : 해당 값은 노드 헤더 시작에서 상대적이다.

 - 플래그 : 플래그는 설정되지 않거나 0x01로 설정되는 경우 밖에 없으며, 0x01로 설정되는 경우 인덱스 엔트리 목록에 있는 엔트리에 의해 지정된 자식 노드가 있다는 것을 의미한다. 



 

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

File System - NTFS (18)  (0) 2012.02.18
File System - NTFS (17)  (0) 2012.02.17
File System - NTFS (16)  (0) 2012.02.16
File System - NTFS (15)  (0) 2012.02.16
File System - NTFS (14)  (0) 2012.02.15
계속해서 표준 속성의 데이터 구조체에 대해서 알아보자.

 * 참고 : 이번 글에서 다루는 속성들은 필자가 가지고 있는 이미지에 존재하지 않아 분석을 표로 대체한다.

[$DATA]
해당 속성은 고유한 구조체를 가지고 있지 않다. 헤더 이후로는 파일 내용 데이터만 존재한다. 타입 식별자는 128이며 크기는 정해져 있지 않다. 하지만 내용이 700byte 이상이라면 비거주 속성이 되어 클러스터가 할당 될 것이다. 

 

[$ATTRIBUTE_LIST]
해당 속성은 MFT 엔트리에 존재하는데 $STANDARD_INFORMATION 속성과 $FILE_NAME 속성 사이에 위치한다.
타입 식별자는 32이며, MFT 엔트리에 여러 속성들이 할당되어 엔트리 크기인 1024byte를 초과 할 때 사용된다.
해당 속성 내용으로는 기준 MFT 엔트리에 포함되려 했던 속성들의 엔트리 리스트가 목록화 되어 있다.
아래는 해당 속성의 내용인 속성 엔트리들의 오프셋 구조이다.

[그림 1 - $ATTRIBUTE_LIST 오프셋]

* 참고 : 속성 시작 VCN은 여러 MFT 엔트리들이 단일 속성을 설명해야 할 때 필요하다. 


[$OBJECT_ID]
해당 속성은 64 타입 식별자를 갖고, 이름 대신 파일을 지칭하는 128bit의 오브젝트 식별자를 포함하고 있다.
해당 속성은 간단한 구조로 되어 있다. 보통 아래와 같이 4개의 필드로 구성되어 있으나 보통 첫 번째 필드만 설정되어 있다.
 

[그림 2 - $OBJECT_ID 오프셋]

 * 참고 : \$Extend\ObjId 인덱스들은 파일의 오브젝트 ID로 정렬 된다.


[$REPARSE_POINT]
해당 속성은 식별자 192를 가지며, 재파싱 지점의 파일들에 사용된다. 재파싱 지점들로는 심볼릭 링크, Junction, 마운트가 있다. 아래는 해당 속성의 오프셋이다.

 [그림 3 - $REPARSE_POINT 속성 오프셋]



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

File System - NTFS (17)  (0) 2012.02.17
File System - NTFS (16)  (0) 2012.02.16
File System - NTFS (15)  (0) 2012.02.16
File System - NTFS (14)  (0) 2012.02.15
File System - NTFS (13)  (0) 2012.02.15
이번 글에서는 표준 속성 중 MFT 엔트리에 가장 기본적으로 할당되는 $STANDARD_INFORMATION 속성과 $FILE_NAME 속성에 대해서 알아 볼 것이다.

[$STANDARD_INFORMATION 속성]
해당 속성은 항상 거주 속성으로 타입 식별자는 16이다. 또 모든 파일과 디렉토리에 존재하며, 파일이나 디렉토리를 위한 기본 메타데이터 파일들을 포함하고 있다. 아래는 해당 속성의 오프셋 별로 의미하는 것을 분석하여 두었다.

[그림 1 - $STANDARD_INFORMATION 속성 오프셋]

 - 4개의 시간 값 : 해당 시간값들이 우리가 흔히 속성 창에서 볼 수 있는 시간 값이며, 1601년 1월 1일 UTC부터 100나노초 단위로 계산되어 저장된다.

 - 플래그 : 해당 파일에 적용 될 수 있는 속성들 중 어떠한 속성을 나타내는 값이 저장되는 오프셋이다. 플래그 리스트는 아래와 같다.


[그림 2 - 플래그 리스트]

 - 보안 ID : 이 값은 $Sparse 파일의 인덱스 값으로 보안 ID 값이 아니다.

 * 참고 : 소유자 ID, 보안 ID, 할당량, 업데이트 순서번호는 버전 3.0 이상부터 존재한다. 


[$FILE_NAME 속성]
해당 속성 타입 식별자는 48이며, 파일이름과 부모 디렉토리 정보를 저장하기 위해 MFT 엔트리에 위치하고 있고 디렉토리 인덱스에서 사용된다. MFT 엔트리에서 사용 될 때에는 포함되어 있는 정보가 필수적이지 않지만, 디렉토리 인덱스에서 사용 될 때에는 그렇지 않다. 해당 속성은 위에서 설명한 $STANDARD_INFORMATION 속성과 함께 필수적인 속성으로 항상 거주 속성이다.

 * 참고 : 만약 하나의 파일에 여러 MFT 엔트리가 할당 될 경우 다른 비기준 엔트리의 속성을 포함하는 $ATTRIBUTE_LIST 속성이 $STANDARD_INFORMATION 속성과 $FILE_NAME 속성 사이에 위치한다.


아래는 해당 속성의 오프셋이다.

[그림 3 - $FILE_NAME 속성 오프셋]

 - 부모 디렉토리 파일 참조 : 이 값의 상위 2바이트는 부모 디렉토리의 순서번호이며, 하위 6바이트는 부모 디렉토리의 MFT 엔트리 번호이다.

 - 플래그 : 해당 오프셋의 값은 $STANDARD_INFORMATION의 플래그 리스트 값과 동일하다(그림 2 참조)

 - 네임 스페이스 : 이름 필드의 값이 어떤 형식인지 나타내는 값이 해당 오프셋에 들어 갈 수 있는 값이 몇가지 있는데 그 값은 아래와 같다.


 [그림 4 - 네임 스페이스 리스트]

 - 이름 : 이름 오프셋의 길이는 파일명에 따라 달라진다. 정확한 길이를 알고자 하면 이름 길이 오프셋을 참고하면 된다. 


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

File System - NTFS (16)  (0) 2012.02.16
File System - NTFS (15)  (0) 2012.02.16
File System - NTFS (14)  (0) 2012.02.15
File System - NTFS (13)  (0) 2012.02.15
File System - NTFS (12)  (0) 2012.02.14

+ Recent posts