본문 바로가기

[+] Forensic

File System - NTFS (14) 이번 글에서는 표준 속성 중 MFT 엔트리에 가장 기본적으로 할당되는 $STANDARD_INFORMATION 속성과 $FILE_NAME 속성에 대해서 알아 볼 것이다. [$STANDARD_INFORMATION 속성] 해당 속성은 항상 거주 속성으로 타입 식별자는 16이다. 또 모든 파일과 디렉토리에 존재하며, 파일이나 디렉토리를 위한 기본 메타데이터 파일들을 포함하고 있다. 아래는 해당 속성의 오프셋 별로 의미하는 것을 분석하여 두었다. [그림 1 - $STANDARD_INFORMATION 속성 오프셋] - 4개의 시간 값 : 해당 시간값들이 우리가 흔히 속성 창에서 볼 수 있는 시간 값이며, 1601년 1월 1일 UTC부터 100나노초 단위로 계산되어 저장된다. - 플래그 : 해당 파일에 적용 될 수 .. 더보기
File System - NTFS (13) 이번 글부터는 지금까지 알아본 NTFS 시스템의 갖가지 개념들을 기초로 하여 NTFS 내에서 사용되는 데이터 구조체들을 분석하여 볼 것이다. 데이터 구조체를 분석하기에 앞서 한가지 참고적으로 알아둬야 할 개념이 있다. Fixup 이라는 개념인데, 이 개념은 아래와 같다. [Fixup] Fixup이라는 것은 NTFS에서 신뢰성을 향상 시키기 위하여 사용하는 저장 기술로, 데이터가 저장된 섹터의 손상여부를 판단하기 위한 기술이다. 해당 기술의 원리는 일반적인 섹터의 마지막 2바이트를 특정 시그니처로 교체 해 두고, 원래의 2바이트 값은 Fixup 배열에 저장하여 교체 해 둔 시그니처가 다른 값으로 교체되지 않았다면 섹터가 손상되지 않은 것으로 보고 배열에 있는 원래의 값을 다시 섹터 마지막 2바이트에 넣는다.. 더보기
File System - NTFS (12) 지금까지 NTFS에 대한 개념과 파일시스템 참조 모델을 기준으로 여러가지를 알아 보았는데 이 개념들과 정보들을 혼합해서 이해하려고 할때에는 조금 무리가 있다. 그래서 이 글에서는 지금까지 공부한 지식으로 NTFS에서 파일이 어떻게 할당되고 삭제 되는지에 대하여 이야기 해 볼것이다. 일단 파일 생성부터 살펴보자. [할당] 현재 설명할 NTFS의 기본 레이아웃은 파일이 할당 될 dir1 디렉토리가 이미 존재하며, 클러스터가 2048byte 크기이며, 할당할 파일(File.txt)의 크기는 4000byte이다. 1. 먼저 파일시스템이 첫 번째 섹터를 읽고 부트 섹터의 클러스터 크기, MFT 시작 주소, MFT 엔트리들의 크기를 정한다. 그 후 MFT 첫 번째 엔트리($MFT)를 참조하고 $MFT 파일의 $DA.. 더보기
File System - NTFS (11) 이번 글에서는 마지막 참조 모델인 응용 프로그램 참조 모델에 해당하는 NTFS 데이터를 알아 볼 것이다. 다른 파일시스템들과는 다르게 NTFS는 많은 응용프로그램 수준의 기능을 지원한다. 여기서 알아볼 기능들은 디스크 할당, 저널링, 변경 저널링 기능이다. 이러한 기능들은 파일시스템에서 필수적으로 필요한 기능들은 아니지만, 사용자의 편의성등을 위해 제공되는 기능들이다. 지금부터 하나씩 알아보도록 하자. [디스크 할당] 이 기능은 사용자 별로 사용 할 수 있는 공간을 할당 하는 기능으로, 할당 정보의 일부는 파일시스템 메타데이터 파일로 저장되는데, NTFS 3.0 버전을 전후로 3.0 이전 버전에서는 MFT 열 번째 엔트리인 \$Quota에 저장되었고 이후 버전에서는 \$Extend 디렉토리에 존재하였다... 더보기
File System - NTFS (10) 이번 글에서는 NTFS에서 파일이름 참조모델에 해당하는 데이터들을 알아 볼 것이다. 파일이름 참조모델은 파일이름과 파일내용을 연결하여 주는 데이터를 포함하고 있는 모델이다. NTFS에서는 앞에서 언급한 인덱스를 이용하여 디렉토리 내용을 구성한다. 인덱스 엔트리는 노드 값을 포함하며, $INDEX_ROOT, $INDEX_ALLOCATION 속성에 저장된다. $INDEX_ROOT 속성에 저장된 값은 항상 트리구조에서 루트 노드 값에 해당하며, $INDEX_ALLOCATION 속성에 저장 된 인덱스 엔트리들은 트리구조에서 리프노드에 해당한다. 또 $BITMAP 속성은 인덱스 레코드들의 할당 상태를 관리하는데 사용된다. * 참고 : 인덱스 레코드는 $INDEX_ALLOCATION속성에서 인덱스 엔트리를 포함하는.. 더보기