4-3.6) NTFS 에서 파일의 접근 정리
Last updated
Last updated
아래 실습은 NTFS 가상디스크를 만들어서 분석하였습니다.
실습을 직접 따라 해보고 싶으신 경우 NTFS 분석 처음부터 따라오시는 것을 추천 드립니다. > 4-3) NTFS 기초 분석
NTFS에서 MFT Entry, 속성, 인덱스 등을 살펴봤는데 뭔가 구조가 많고 분석할게 너무 많습니다. 꼭 필요한 부분만 빠르게 정리 해보고 가보도록 합시다.
먼저 파티션에 접근하면 가장 먼저 보이는 것은 NTFS BR(Boot Record)입니다. - Bytes per sector : 00 02 -> 20 00(16진수) => 512 bytes - Cluster per Sector : 08 (8섹터의 1 클러스터 = 8 X 512 = 4,096 bytes) - Reserved Sector : 00 00 (대부분 할당 안함) - Total Sectors : FF 1F 03 00 00 00 00 00 -> 00 00 00 00 00 03 1F FF => 204,799 섹터 - $MFT Cluseter Number : 55 21 00 00 00 00 00 00 -> 00 00 00 00 00 00 21 55 => 8,533 - Volumn Serial : 64 54 77 E8 6D 77 E8 4C - MFT Entry Size : F6 => 1111 0110 -> 0000 1001 (1의 보수) + 1= 0000 1010(2의 보수) => 10 2의 10승 = 1,024 bytes (2섹터) MFT Entry 크기 - Signature : 55 AA
NTFS 의 Boot Record Backup 위치 : 파티션의 마지막 섹터번호 NTFS의 Total Sector 가 파티션의 크기보다 1 작은 이유 > 파티션 전체크기로 할 경우 클러스터가 모두 할당되면, 백업 NTFS BR레코드에 영향을 줄 수 있음
BR분석으로 알 수 있는 주요 추가 내용 - 파일시스템 전체크기 : 전체 섹터 수X 512 = 204,799 X 512 = 104,857,088 bytes = 102,399 Kbytes - 전체 클러스터 수 : Total Sector / 클러스터 당 섹터 수 = 204,799 / 8 = 25,599 - 사용 데이터 크기 : 25,599 X 4,096(클러스터 크기) = 104,853,504 bytes = 102,396 Kbytes
주요 MFT Entry 사실 다 중요하지만 파일 접근에 가장 중요한 2가지만 먼저 살펴보도록 하겠습니다.
0번 MFT 가 왜 중요할까요!!? NTFS의 모든 파일에 대한 정보를 담고 있기 때문에 매우 중요한 파일입니다. NTFS BR에서 확인한 MFT 파일의 위치인 8,533 클러스터로 가서 살펴 봅시다. 128 (파티션 시작 위치) + 8,533(클러스터 번호) X 8 (클러스터당 섹터 수) = 68,392 섹터 기본적인 MFT Entry 구조는 MFT Entry Header와 여러가지 속성으로 되어 있고 마지막 End Marker (FF FF FF FF) 를 가지고 있습니다.
0번 MFT Entry 에는 $MFT 파일의 정보를 가집니다.
MFT Entry 의 주요 속성을 살펴 봅시다.
$STANDARD_INFORMATION : 시간정보 등 정보
$FILE_NAME : 파일 이름, 부모 디렉토리 관련 정보
$DATA : 데이터 또는 데이터가 있는 클러스터 번호(runlist 방식)
5번 MFT Entry 에는 루트 디렉토리의 MFT Entry 가 있습니다. $MFT 파일 내에서 5번 엔트리로 이동 해봅시다. $MFT 시작위치에서 MFT Entry Number X 1,024(MFT Entry 크기) 오프셋 이동 68,392 섹터에서 5 X 1,024 = 5,120 오프셋 이동 먼저 파일명을 살펴보면 루트 디렉토리의 이름은 . 인것을 알 수 있습니다.
$ATTRIBUTE_LIST 에서 $INDEX_ALLOCATION의 속성이 있는 MFT Entry 넘버를 찾아보니 112번 MFT Entry 임을 알려주고 있습니다.
$MFT 파일 위치에서 112 X 1,024 = 114,688 오프셋 이동 해보겠습니다. 36번 클러스터에 Index Node Entries 가 위치하게 될 것입니다.
36번 클러스터로 가보겠습니다. 128(파티션 시작 위치) + 36 X 8(클러스터 당 섹터 수) = 416 섹터 해당 섹터부터 Index node entries가 위치합니다. 파일 내 검색이 쉬운 FTK Imager에서 한번 살펴보겠습니다. 루트디렉토리에 있는 test.txt 파일을 다시 찾아보도록 하겠습니다.
Index Node Entry에 있는 해당 파일의 MFT Entry Number를 찾아보도록 하겠습니다.
- File Reference Address : 27 00 00 00 00 00 / 01 00 => MFT Entry Number : 00 00 00 00 00 27 -> 39 번 / Sequence Number :01 00 > 39번 MFT Entry 가 test.txt 파일의 MFT Entry Number가 됩니다.
$MFT(68,392)에서 39번 MFT Entry 로 가봅시다. 68,392 섹터에서 39 X 1,024 = 39,936 오프셋 이동
속성을 분석하면 아래와 같은 항목을 확인할 수 있습니다. - $STAND_INFORMATION : 파일 속성, 시간 관련 정보 - $FILE_NAME : 파일 이름 - $DATA : 데이터 영역
데이터 영역이 어디 있는지 살펴 봅시다. test.txt의 경우 파일의 크기를 늘렸다가 줄였기 때문에 $DATA 속성이 Non-Resident 속성으로 되어 있기 때문에 runlist 구조로 되어 있습니다.
runlist 구조를 분석하면 1,941 클러스터를 나타내기에 해당 클러스터로 이동해봅시다. 128 + 1,941 X 8 =15,656 섹터 입니다.
파일 접근 과정 정리