본 포스팅에서는 Resident, Non-Resident, Cluster Run을 다룰 예정입니다.
- Resident, Non-resident
- Cluster Run
NTFS구조
지난 시간에 이어 NTFS 구조와 MFT 엔트리 구조를 보겠습니다.
이 그림을 보고 간단하게 설명하고 넘어갈 수 있으면 좋겠습니다. 그럼 Resident와 Non-resident를 알아보도록 하겠습니다.
Resident & Non-resident 속성 헤더
Resident 속성은 속성의 내용이 속성 헤더 바로 뒤에 위치 합니다. 하지만 Non-resident는 크기가 커서 MFT 엔트리 1,024바이트 내에 있지 못하고 따로 클러스터를 할당 받아 저장하는 방식입니다. 당연히 속성 내용 위치에는 할당 받은 클러스터의 위치 정보가 저장되어 있습니다. 대부분의 속성은 모두 Resident 속성이고, $DATA, $ATTRIBUTE_LIST와 같은 속성은 Non-resident가 될 수 있습니다. $DATA는 파일의 내용을 표현하는 속성이라고 했습니다. 내용이 MFT 엔트리 내에 저장될 만큼의 용량이 아니라면 Non-resident 속성이 됩니다.
$ATTRIBUTE_LIST속성은 속성 내용이 많아서 하나의 MFT 엔트리에 담지 못하는 경우, 여러 개의 엔트리를 사용하게 되는데, 이때 흩어진 각 속성들의 정보를 저장하는 속성이다. 이 속성 또한 내용이 커지면 Non-resident가 된다.
Cluster Runs(클러스터 런)
속성이 Non-resident일 경우 별도의 클러스터를 할당 받아서 내용을 저장한다고 했다. 비연속적인 공간들을 효과적으로 관리하기 위한 것이 클러스터 런인 것이다. 이러한 클러스터 런들은 런리스트(Runlist) 형태로 관리가 된다. 클러스터 크기는 파일의 크기에 따라 당연히 천지차이일 것이다.
그러면 클러스터 런을 직접 USB가지고 테스트 해봅시다. 파일 명은 cluster2_run.txt 입니다.
초록색은 첫 번째 줄은 $DATA 속성 식별 값을 볼 수 있고, 8바이트 후에 Non-resident flag가 1로 설정되어있으므로 이 파일은 Non-resident 속성임을 알 수 있습니다. 맨 아래로 내려와서 빨간색 네모를 보시면 21이라고 적혀있습니다. 이 21의 의미는 2-byte의 런 오프셋과 1-byte의 런 길이라는 뜻입니다.
첫 번째 클러스터 런 : 21 02 89 11
런 길이(1-byte) : 0x02 ( 2 )
런 오프셋(2-byte) : 0x1189 ( 4489 )
위의 의미를 해석해보자. 0x02( 2 ) 개의 클러스터가 오프셋 0x1189(4489)부터 이 파일을 위해 할당되어 있다는 뜻이다. 그러면 실제로 해당 위치에 데이터가 있는지 확인하여 보자.
클러스터는 총 2개 8KB를 할당 받았다. 오프셋을 보면 4489클러스터 크기를 가진다. 1클러스터는 8섹터 이므로 4489 * 8 = 35912 섹터가 나오고 VBR위치가 2048부터 시작이므로 마지막으로 35912 + 2048 = 37960 섹터가 나온다. 이동해보자.
'DFIR > DFIR' 카테고리의 다른 글
생성시간 및 수정시간 (0) | 2021.11.12 |
---|---|
[파일 시스템]NTFS - 5편(Index) (0) | 2021.11.12 |
[파일 시스템]NTFS - 3편(Attributes, $속성들) (0) | 2021.11.12 |
[파일 시스템]NTFS - 2편(MFT, Fixup array) (0) | 2021.11.12 |
[파일 시스템]NTFS - 1편(VBR) (0) | 2021.11.12 |