본문 바로가기

[+] Forensic

File System - NTFS (18)

이번 글부터는 NTFS의 메타데이터 파일들을 분석 할 것이다.

[$MFT]
해당 메타데이터 파일은 앞 글에서도 여러번 언급하였기 때문에 해당 메타데이터 파일의 일반적인 속성은 분석하지 않고 고유 속성인 $BITMAP 속성만 분석하여 볼 것이다.
$BITMAP 속성은 NTFS의 MFT 엔트리 할당 상태를 관리하는 속성으로 각 비트가 MFT 엔트리와 맵핑되어 MFT 엔트리가 할당되면 해당 MFT 엔트리와 맵핑 관계인 비트가 1로 설정된다.

 [그림 1 - $MFT 파일의 $BITMAP 속성 오프셋]

위 이미지를 보면 F로 설정된 오프셋과 0으로 설정된 오프셋이 있는데 F로 설정된 오프셋이 할당 상태를 뜻하고 0으로 설정된 오프셋이 비 할당 상태를 뜻한다.
MFT 엔트리 맵핑 관계는 각 오프셋을 비트로 변환하면 알 수 있다.현재 위 이미지의 MFT 엔트리 할당 상태는 다음과 같다.

 - 0 오프셋(FF) : FF -> 1111 1111(MFT 엔트리 0~7 할당)
 
- 1 오프셋(FF) : FF -> 1111 1111(MFT 엔트리 8~15 할당)

 - 2 오프셋(00) : 00 -> 0000 0000(MFT 엔트리 16~23 비 할당) 
 - 3 오프셋(FF) : FF -> 1111 1111(MFT 엔트리 24~31 할당)
 - 4 오프셋(7B) : 7B -> 0111 1011(MFT 엔트리 32~33 할당, 34비 할당, 35~38 할당, 39 비 할당)
 - 5 오프셋(00) : 00 -> 0000 0000(MFT 엔트리 40~47 비 할당)
 - 6 오프셋(00) : 00 -> 0000 0000(MFT 엔트리 48~55 비 할당)
 - 7 오프셋(00) : 00 -> 0000 0000(MFT 엔트리 56~63 비 할당) 

 

[$Boot]
해당 메타데이터 파일은 MFT 엔트리 여덟 번째에 위치하며, 부트 섹터와 부트코드를 포함한다. 부트 섹터는 항상 섹터0에서 시작하며, 부트섹터를 제외한 섹터들은 부트코드를 위하여 사용된다. 부트섹터에서 관심있게 봐야 할 부분들은 섹터와 클러스터의 크기를 정의하는 부분이다. 이 부분이 없다면 어떠한 것도 위치를 파악 할 수 없다. 그 다음으로 중요하게 봐야 할 부분은 MFT 엔트리의 크기를 정의하는 부분이다. 보통은 1024byte 이지만 이 값은 언제든지 수정 될 수 있기 때문이다.

 * 참고 : MFT 엔트리와 인덱스 레코드를 의미하는 필드들은 모두 특별한 형식을 가지고 있다. 만약 MFT 엔트리나 인덱스 레코드를 의미하는 필드들의 값이 0보다 크면 각 데이터 구조체에서 사용하는 클러스터 수를 값으로 가지게 된다. 또 0보다 작다면 각 데이터 구조체에 있는 바이트 수 밑이 2인 로그 값을 저장한다. 이러한 현상은 클러스터 크기가 단일 MFT 엔트리나 인덱스 레코드보다 클 경우 일어난다.

아래는 부트 섹터의 오프셋 구조이다.

 [그림 2 - $Boot 파일의 오프셋]

 * 참고 : 반드시 0이라고 표시 해 둔 필드는 반드시 0 값이 아니면 안되는 필드이기 때문이다. XP의 경우 해당 필드들이 0이 아닐 경우 파일시스템이 마운트 되지 않는다.

 위 이미지에서 MFT 엔트리 크기 필드를 보면 "0x02" 값이 저장되어 있다. 이럴 경우 0보다 크므로 클러스터 수를 뜻하게 된다. 클러스터의 크기는 섹터 별 바이트 수(0x0200, 512byte) * 클러스터 별 섹터 수(0x01)을 계산하면 512byte로 계산되어 512byte 인 것을 알 수 있다. 해당 필드는 MFT 엔트리의 크기 값이 클러스터 2개의 값이라는 의미를 뜻하게 되어 결과적으로 크기는 1024byte가 된다.


[$AttrDef]
해당 메타데이터 파일은 MFT 엔트리 다섯 번째에 위치하며, 파일시스템 속성들의 이름과 식별자를 정의한다.
아래는 해당 메타데이터 파일의 오프셋이다.

[그림 3 - $AttrDef 파일의 오프셋]

 - 플래그 : 아래의 값들을 가진다.
    1) 0x02 : 인덱스에서 속성이 사용된다.
    2) 0x40 : 항상 거주 속성이다.
    3) 0x80 : 비거주 속성이다.


[$BITMAP]
해당 메타데이터 파일은 클러스터 할당 상태를 관리하는 파일이다. 해당 비트맵의 내용은 $DATA 속성에 저장된다.
각 비트별로 클러스터와 맵핑되어 있는데 어떠한 클러스터의 할당 상태를 알고자 할 때 해당 메타데이터 파일해당 클러스터의 비트를 찾아야 한다. 하지만 무작정 찾기에는 너무 시간이 오래 걸린다. 이러한 시간 낭비를 줄이기 위해 아래와 같은 공식을 적용한다.

 - $BITMAP 내의 바이트 오프셋 = 클러스터 번호 / 8 
 - $BITMAP 내의 클러스터 비트 오프셋 = 클러스터 번호 - 8 * $BITMAP 내의 바이트 오프셋 


한가지 예를 들어 클러스터 7과 80을 찾는다고 가정한 후 위 공식을 적용하면 아래와 같이 찾을 수 있다.

[그림 4 - $BITMAP 파일 내에서 원하는 클러스터의 비트 찾는 방법]



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

File System - NTFS (20)  (0) 2012.02.19
File System - NTFS (19)  (0) 2012.02.19
File System - NTFS (17)  (0) 2012.02.17
File System - NTFS (16)  (0) 2012.02.16