본문 바로가기
9. 디지털 포렌식

디지털 포렌식 Sub 9 - NTFS 파일 추적 및 복구

by Robert8478 2023. 12. 14.

목표 - FAT32 파일시스템에서 파일 추적 및 복구

NTFS 파일시스템은 부트 섹터 - 마스터 파일 테이블 - 데이터 영역 으로 구성된다.

[NTFS 부트 섹터]
1.Boot Code - 0~2byte
2.BIOS Parameter Block - 3~83byte
3.Boot Code와 Error Message - 84 ~ 509 byte
4.시그니처 2byte - 510~511 byte

NTFS는 파일에 대한 메타데이터를 파일에 기록하기 때문에 FAT32보다 구조가 간단하다.
Master File Table을 사용하며 MFT Entry 0~15번은 파일 시스템 생성시 자동으로 생성되어 각개 용도로 사용된다.

드래그 한 부분은 MFT 시작 주소이다. A9 AA * SP(08) [맨위 우측에서 세번째] + BRAddress(128)
(43434*08)+128 = 347600 섹터로 가면 MFT 엔트리가 보인다.

실제 데이터가 저장된 루트 클러스터로 가려면 예약된 MFT 엔트리 영역만큼 이동한다.
예약된 영역이 23개이면 한개의 엔트리는 2개의 섹터를 쓰기에 2를 곱해준다.
347600+2*0x23 = 347670 = 실제 저장된 파일 확인

NTFS는 파일 용량이 700바이트 이하이면 하나의 1024바이트 인덱스 엔트리에 메타데이터와 파일의 내용이 저장된다 (Resident 속성)
700바이트가 넘어가면 클러스터 다시 할당받아 다른곳에 연속 저장한다. (Non-Resident 속성)

(레지던트 속성) [메타데이터와 파일의 내용이 한곳에 저장되었다. FTK Imager를 이용해 확인해 보면 한곳에 저장된 것을 알 수 있다.

Non-Resident의 경우 해당 인덱스 엔트리에서 0x80($DATA)의 속성을 찾아서 수동으로 해당 데이터 실제 위치를 알아낸다.

$DATA 영역이며 Attribute Name 영역이다. 클러스터 런이라는 구조체를 따르는 형식으로
새로 연속적인 클러스터를 할당받아 파일의 내용을 저장한다.
처음 1byte는 새로 할당받은 클러스터의 위치 정보를 가지고있으며, 두번째 1byte는 클러스터 크기이다.
ex) 0x4287238E4F113300 이라면 0x8723 크기의 클러스터를 쓰고 0x33114F8E가 파일의 주소가 되는것이다.
이를 계산하면 실제 데이터가 저장된 곳으로 이동할수 있다.

수동 파일 복구를 위해 맨위만큼 파일 사이즈 영역을 지정해서 복사하고 hxd에서 새로 파일을 만들어서 붙여넣어 줄 수 있다.
NTFS는 FAT32와 다르게 시간 정보는 다른 하위 MFT Entry에 저장한다. 두가지가 있는데 하나는 $Standard_Information이고(0x10 00 00 00이 Attribute Type ID로써 이를 찾으면 된다.) 하나는 $File_Name Entry 이다(0x30 00 00 00이 Attribute Type ID로써 이를 찾으면 된다.). 시간은 생성,수정,MFT 수정시간,마지막 접근 시간을 볼 수 있다.