2022. 2. 11. 11:12ㆍForensic
MFT 엔트리 내부에 존재하는 속성들은 기본적으로 17개의 속성을 가지고 있다. 속성은 MFT 엔트리 헤더, Fixup 배열 이후에 End Marker가 올 때까지 연속적으로 나온다.
아래 표는 기본 속성 17가지를 나타낸 표이다.
속성 식별값 | 속성 이름 | 설명 |
16 (0x10) | $STANDARD_INFORMATION | 파일의 최근 생성,접근,수정 시간, 소유자 등의 일반적인 정보 |
32 (0x20) | $ATTRIBUTE_LIST | 속성들에 대한 리스트 |
48 (0x30) | $FILE_NAME | 파일 이름(유니코드), 최근 생성,접근.수정 시간 |
64 (0x40) | $VOLUME_VERSION | 볼륨 정보 (윈도우 NT 1.2 버전에만 존재) |
64 (0x40) | $OBJECT_ID | 파일 및 디렉터리의 16바이트 고유값 (윈도우 2000+) |
80 (0x50) | $SECURITY_DESCRIPTOR | 파일의 접근 제어와 보안 속성 |
96 (0x60) | $VOLUME_NAME | 볼륨 이름 |
112 (0x70) | $VOLUME_INFORMATION | 파일시스템 버전과 플래그 정보 |
128 (0x80) | $DATA | 파일 내용 |
144 (0x90) | $INDEX_ROOT | 인덱스 트리의 루트 노드 정보 |
160 (0xA0) | $INDEX_ALLOCATION | 인덱스 트리의 루트와 연결된 하위 노드 정보 |
176 (0xB0) | $BITMAP | $MFT의 비트맵 정보 |
192 (0xC0) | $SYMBOLIC_LINK | 심볼릭 링크 정보 (윈도우 2000+) |
192 (0xC0) | $REPARSE_POINT | 심볼릭 링크에서 사용하는 Reparse point 정보 (윈도우 2000+) |
208 (0xD0) | $EA_INFORMATION | OS/2 응용프로그램과 호환성을 위해 존재 (HPFS) |
224 (0xE0) | $EA | OS/2 응용프로그램과 호환성을 위해 존재 (HPFS) |
256 (0xF0) | $LOGGED_UTILITY_STREAM | 암호화된 속성의 정보와 키 값 (윈도우 2000+) |
일반적인 파일의 경우 $STANDARD_INFORMATION, $FILE_NAME, $DATA만 가지고 온다. 따라서 3가지 속성만 알고 있었고 대부분의 파일은 분석이 가능하다.
첫번째 0x00000010에 $STANDARD_INFORMATION 속성이 나온다. 중간에 자세히보면 "C1 A2 70 72 63 0D D8 01"값이 반복되는 것을 확인 할 수 있다. 위의 내용이 $STANDARD_INFORMATION 속성의 4가지 시간정보이다.
그 이후 0x00000030의 값을 갖는 $FILE_NAME이 오는것을 확인 할 수 있고, 마찬가지로 "C1 A2 70 72 63 0D D8 01" 의 4개의 시간 정보가 존재하는 것을 확인 할 수 있다.
여기서의 의문점은 왜 8개의 값이 다 똑같은 속성 값을 가지냐다. 4개의 시간 정보는 생성,수정,접근, MFT 수정시간이다. $MFT는 매우 빈번화게 접근하고 수정이 이루어지기 때문에 시잔 정보를 갱신하진 않는다. 위 시간을 Windows 시간으로 바꾸어 보면 $MFT가 만들어진 시간이 나오게 된다. 이는 NTFS로 파일시스템을 포맷한 시간이라는 것을 알 수 있다.
Resident 속성과 Non-Resident 속성
Resident 속성은 속성의 내용이 속성 헤더 바로 뒤에 위치하는 속성이다. Non-Resident 속성은 속성 내용이 너무 커서 MFT 엔트리(1024 바이트)에 담지 못하여 별도의 클러스터를 할당 받아 저장하는 형식이다. 이때 속성 내용 위치에는 할당 받은 클러스터의 위치 정보가 저장되어 있다.
대부분의 속성은 모두 Resident 속성이고, $DATA, $ATTRIBUTE_LIST와 같은 속성은 Non-Resident가 될 수 있다. $DATA는 파일 내용을 표현하는 속성인데, 파일의 내용이 MFT 엔트리 내에 저장되지 못한다면 Non-Resident 속성이 된다. 최근 대부분의 파일 크기가 커졌기 때문에 작은 파일(680 바이트이하)가 아니라면 $DATA속성은 대부분 Non-Resident로 존재하게 된다.
$ATTRIBUTE_LIST 속성은 속성들의 내용이 많아서 하나의 MFT 엔트리에 담지 못하는 경우, 여러 개의 엔트리를 사용하게 되는데 이때 흩어진 각 속성들의 정보를 저장하는 속성이다. 이 속성도 데이터의 내용이 커질 경우 Non-Resident가 될 수 있다.
클러스터 런(Cluster Runs)
속성이 Non-Resident일 경우 별도의 클러스터를 할당 받아 내용을 저장한다. 할당 받는 클러스터가 내용이 크기에 따라 한, 두개에서 수 천개의 영역을 차지 할 수 있다. 이때의 클러스터들은 저장장치에 여유공간이 많으면 연속된 클러스터로 할당되겠지만, 대부분은 비 연속적으로 할당 될 것이다. 즉, 이렇게 비연속적으로 할당된 클러스터들은 효과적으로 관리하기 위한 것이 클라스터 런이다. 밑에 그림은 클라스터 런을 표현하는 런 리스트(Runlist)의 예다.
첫 바이트를 4비트 씩 나누어 각각 런 길이와 런 오프셋 값의 크기를 나타낸다. 다음 그림은 $MFT 파일의 MFT엔트리에서 Non-resident 속성인 $DATA 속성의 런리스트를 보여준다. 런리스트 위쪽으로 $DATA속성 식별자인 "0x00000080"을 확인할 수 있다.
첫번째 클라스터 런 : 21 40 55 21 00 F8 FF
런 길이(3 bytes) : 0x008500
런 오프셋(3 bytes) : 0x0c0000
여기서 첫번째 런 길이는 몇개의 클라스터가 오는지 런 오프셋은 몇번째 오프셋부터 $MFT가 할당이 되어 있는지 알 수 있다. 필자는 34,048개의 클라스터를 사용하고 있고 오프셋 786,432번부터 $MFT가 할당되어 있다.
두번째 클라스터 런 : FF B0 00 00 00 50 00 00
런 길이(3 bytes) : 0x0000B0FF
런 오프셋(4 bytes) : 0x00005000
두번째 클라스터 런은 총 45,311개의 클라스터가 오프셋 20,480부터 $MFT를 위해 할당 되어 있다는 의미다. 첫번째와 두번째를 합쳐서 79,359개의 클라스터를 사용하고 클라스터 1개당 4K이기 때문에 총 309MB정도를 사용하고 있다.
실제 $MFT크기와 비교하면 용량이 똑같은 것을 확인 할 수 있다.
'Forensic' 카테고리의 다른 글
NTFS(New Technology File System) 5일차 $STANDARD_INFORMATION (0) | 2022.04.07 |
---|---|
NTFS(New Technology File System) 4일차 NTFS Attribute Header (0) | 2022.03.06 |
NTFS (New Technology File System) 2일차(MFT) (0) | 2022.02.03 |
NTFS (New Technology File System) 1일차(VBR) (0) | 2022.01.20 |
Forensic 2일차 FAT32(BR, Reserved Area, Directory Entry) (0) | 2022.01.06 |