Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Piki's Play

NTFS 분석 - 내용 범주 본문

포렌식/파일시스템 (파일시스템 포렌식분석)

NTFS 분석 - 내용 범주

Pikigod 2020. 3. 5. 16:17

▶ 클러스터

- NTFS 파일은 속성의 집합이다. 속성 중 일부는 거주로 MFT엔트리에 저장하고 일부는 비거주이다. 둘다 클러스터에 내용을 저장한다. 한 클러스터는 연속된 섹터의 그룹이며 클러스터 당 섹터 수는 2의 거듭제곱(1,2,4,8,16...) 이다. 

- 각 클러스터는 0으로 시작하는 한개의 주소를 갖는다. 클러스터 0은 파일시스템의 첫 번째 섹터이고, 이것은 FAT로 계산하는 방법보다 훨씬 덜 복잡하다. NTFS에서 클러스터를 섹터주소로 변환하기 위해서는 한 클러스터에 섹터수로 클러스터 주소를 나눈다.

 

SECTOR = CLUSTER * sector_per_cluster

 

- NTFS에서 클러스터들은 어떠한 파일이나 속성에 할당 될 수 있다. 그러나 $Boot는 항상 첫 클러스터에만 할당이 된다.

마이크로소프트는 일반적인 할당 방법을 갖고 이는 '할당 알고리즘'절에서 설명하겠다.

- 볼륨의 크기가 클러스터의 배수가 아니면 디스크의 마지막 일부 섹터들은 클러스터에 속하지 못하고 이 영역은 한 개의 클러스터보다 작은 상태로 존재한다. 

 

 

▶ $BITMAP 파일 개요

- 클러스터의 할당 상태는 MFT 6번째 엔트리에 있는 $BITMAP 파일시스템 메타데이터 파일을 사용해서 결정한다. 이 파일은 파일시스템 내의 모든 클러스터를 1개의 비트로 할당 시키는 $DATA 속성이다.

예를들어 클러스터 0은 비트0에 해당하고 클러스터 1은 비트 1에 해당한다. 1로 설정되면 할당이 된 것이고 0으로 설정되면 비할상 상태이다. 자세한 레이아웃은 13장 '$BITMAP' 절에서 확인하자

 

※ 예제 이미지의 $BITMAP 파일 세부사항은 다음과 같다.

$BITMAP

-> $BITMAP은 파일에서 표준속성이다. 

 

 

▶ $BadClus 파일개요

- NTFS는 불량 클러스터들을 MFT엔트리 8인 $BadClus에서 $DATA 속성에 할당해서 관리한다. $Bad라고 부르는 $DATA속성은 하나의 Sparse 파일이고, 클러스터가 손상되었다고 보고될 때 속성에 더해진다.

- $Bad 속성의 크기는 파일시스템 전체 크기와 같지만 초기에는 어떠한 클러스터들도 할당이 되어있지 않는다. 윈도우는 불량 클러스터들이 발견되면 $Bad 속성에 클러스터들을 더한다. (사실 파일시스템이 발견하기 전에 하드디스크들이 먼저 찾아낸다.)

 

※ 예제 $BadClus의 세부내용은 다음과 같다.

 

# istat -f ntfs ntfs1.dd 8

[REMOVED]

-> 이 파일에는 두개의 $DATA 속성이 있고, 기본 $DATA는 크기가 0인 거주속성이다. $Bad라고 부르는 $DATA는 비거주 속성이다.(Non-Resident) 이 예에서는 불량 클러스터가 없기 때문에 확인되는 클러스터 주소가 없다. 

 

 

▶ 할당 알고리즘

- 이 절에서는 윈도우 xp 기준으로 클러스터 할당 정책을 정리했다. -> 할당정책은 운영체제에 기반하고, NTFS는 다른 할당정책을 이용할 수 있다. 

- 윈도우는 'best-fit'을 사용해 자동맞춤을 하는데, 여기서 처음이나 바로 다음에 공간이 있어도 가장 효율적인 공간에 데이터를 놓는다. 그래서 적은 양의 데이터는 작은 클러스터 그룹에 들어갈 수 있다.

 

※ 다음 그림을 보자

10개의 클러스터를 찾는 best-fit 방법

-> 한개의 파일에 10개의 클러스터를 할당하는 경우 'best-fit'은 할당가능한 공간 중 가장 작은 공간을 찾는다.

 

 

▶ 파일시스템 레이아웃

- 일단 NTFS는 엄격한 레이아웃은 없다. 윈도우는 나름의 지침을 가지고 파일시스템을 포맷한다. 그 레이아웃은 버전에 따라 다르지만 기본적인 개념은 같다. 

- NTFS 모든 버전의 기본적인 한가지 개념은 MFT 구역이다. 윈도우는 MFT를 최소한으로 생성하고 더 많은 엔트리가 필요하면 확장한다. 그러나 이렇게 하면 MFT가 한 파일에 할당한 이후에 단편화가 쉽게 될 수 있다는 위험이 있다. 이것을 해결하기 위해 MFT를 위한 파일시스템 일부분을 예약한다. 

- MFT구역은 파일이나 디렉토리를 저장하지 않는 연속적인 클러스터들의 집합이다. 기본적으로 윈도우는 파일시스템의 12.5%를 MFT에 할당한다. 만약 나머지 공간들을 모두 사용했다면 파일과 디렉토리 저장을 위해 MFT공간을 사용할 것이다. 

- 윈도우는 $Boot파일을 NTFS 첫 섹터에 할당하고 파일시스템 중간에 메타데이터 파일들을 할당한다. $MFTMirr는 중간에 할당하고 $Bitmap, $Upcase, $Logfile, $Root 같은 메타데이터 파일은 그 다음에 온다.

윈도우 2000에서 $AttrDef 파일은 $MFT 이전에 있다.

그러나 윈도우 xp는 1/3지점에 일부데이터들을 두고, 1/2 지점에 $MFTMirr가 존재한다. 그림으로 보면 이해가 쉽다. 

 

 

▶ 분석기술 

- 내용범주 분석은 특정 클러스터 위치를 찾고, 할당상태를 확인하고, 내용을 처리하는 것을 포함한다. 특정 클러스터 위치를 찾는 것은 첫 클러스터는 파일시스템 시작이고, 그 클러스터 크기는 첫 섹터에서 주어주기 때문에 쉽다. 

- 할당상태는 $Bitmap위치를 찾고 그것의 $DATA 속성을 이용해 판단할 수 있다.

- 삭제된 파일을 찾기위해 $Bitmap상에서 0인 공간들을 추출하면 된다.

 

 

▶ 분석 고려사항

- NTFS는 오직 한가지 주소 지정 체계만 있으면 된다. 파일시스템의 모든 섹터는 클러스터에 할당이된다. 그래서 클러스터들의 할당 여부를 분명하게 할 수 있다. FAT의 경우 FAT영역과, 예약된 영역에 할당 여부 확인이 명확하지 않았다.

- 파일시스템에서 불량으로 처리한 클러스터들도 다시 검사하자.

 

 

▶ 분석 시나리오

- 클러스터 9,900,009 위치를 확인하는 예를 보자. 처음으로 클러스터 크기를 결정해야 한다. 파일시스템의 첫 섹터를 읽어서 섹터의 크기(512바이트), 각 클러스터내의 섹터 수 (8개)를 확인하고 클러스터의 크기를 결정하자.(4096바이트)

- 위 계산을 통해서 클러스터 9,900,009는 79,200,072섹터임을 알 수 있다. 또한 이는 40,550,436,864바이트임을 알 수 있다. 

 


p.s 다음 내용이 많아서 이번에는 짧게 끊었다!