이번 글에서는 파일 복구와 FAT 파일시스템의 종류를 결정하는 방법, 일관성 검사에 대해서 알아보도록 하겠다.

[파일 복구]
파일 삭제 과정을 보면 FAT 엔트리가 0이 되고 디렉토리 엔트리가 비 할당 상태로 바뀌면서 디렉토리 엔트리의 첫 바이트가 "0xE5" 로 설정된다. 파일을 복구하기 위해서는 파일의 시작 위치(시작 클러스터)와 크기를 알아야 한다.
하지만 시작 클러스터만 알 수 있을 뿐 나머지 연계되는 클러스터는 정확하게 알지 못한다.
파일시스템의 파일의 클러스터들 배치는 아래와 같은 경우들이 있다.

 - 연속적인 클러스터 할당의 경우

 [그림 1 - 연속 할당 클러스터]

위 경우 파일 복구는 정말 쉽다. 시작 클러스터인 45를 시작으로 파일의 크기만큼인 48까지만 복구해주면 된다.

 - 할당 클러스터 사이의 다른 클러스터

 [그림 2 - 클러스터 단편화]

위 경우 파일 내용 클러스터 사이에 전혀 다른 파일의 할당 클러스터가 위치 하고 있어 시작 클러스터인 45부터 파일의 크기만큼 복구를 시도하면 47이라는 전혀 다른 파일 할당 클러스터가 섞여 완전한 복구가 되지 않는다.

 - 할당 클러스터 사이의 비 할당 클러스터

 [그림 3 - 클러스터 단편화 2]

위 경우도 두 번째 경우와 마찬가지로 복구 시도 시 비 할당 클러스터 때문에 완전한 복구가 되지 않는다.

이런 문제점을 해결 하기 위해서는 파일을 지우기 전 디스크의 파일 조각 모음을 통해 클러스터를 한곳으로 모아야 한다.

파일 조각 모음을 할 경우 클러스터가 좀 더 연속적으로 배치되기 때문이다.  


지워진 후 파일 조각 모음은 의미가 없으며 해당 클러스터들은 다시 할당 되었을수도 있기 때문에 불필요 하다. 

 

[종류 결정]
FAT 파일시스템은 여러 종류가 있는데 정작 파일시스템은 그 종류를 결정하는 기능이 없다.
FAT 파일시스템은 데이터 영역의 클러스터 개수에 따라 종류를 결정 할 수 있다. 클러스터의 개수를 알기 위해서는 데이터 영역의 섹터 개수를 알아야 한다.
FAT 12/16 파일시스템의 경우 루트 디렉토리는 FAT 영역 다음인 데이터 영역 첫 번째 섹터에 위치하고, 이 영역 다음에 클러스터 2가 시작 된다.  FAT 32 파일시스템의 경우 루트 디렉토리가 유동적이어서 클러스터 2가 데이터 영역 첫 번째에 위치하게 된다. 이러한 루트 디렉토리의 엔트리 개수는 부트 섹터에서 알 수 있으며 FAT 32의 경우 0이다. 
아래는 루트 디렉토리의 섹터 개수(루트 디렉토리 크기)를 계산하는 공식이다.

 - ((루트 디렉토리 엔트리 개수 * 32) + (섹터 당 바이트 - 1)) / (섹터 당 바이트)

클러스터에 할당 된 섹터 수(데이터 영역)는 파일시스템 전체 섹터에서 예약 영역 크기, FAT 영역 크기, 루트 디렉토리 크기를 빼면 된다.

 - 파일시스템 전체 섹터 수 - 예약 영역 크기 - FAT 구조체 개수 * FAT 구조체 크기 - 루트 디렉토리 크기

위 공식의 계산으로 인해 데이터 영역의 크기가 나오고 이 값을 클러스터 당 섹터 수로 나누면 클러스터 개수가 나온다.

 - 데이터 영역 크기 / 클러스터 당 섹터 수

각 FAT 종류는 데이터 영역의 클러스터 개수가 아래처럼 다르다.

 - FAT 12 : 4,085보다 작을 때
 - FAT 16 : 4,085보다 크거나 같을 때
 - FAT 32 : 62,525와 크거나 같을 때 


[일관성 검사]
일관성 검사는 FAT 파일시스템을 분석하기 전에 하는 것이 좋다. 목적은 숨겨진 데이터가 있는지 점검 하는 것에 있다.
FAT 32 파일시스템에서 백업 부트 섹터가 있다면 이를 이용 해 원본과 백업본을 비교하는 일관성 검사를 수행 해야 한다.
마지막 클러스터의 FAT 엔트리와 FAT에 할당 된 섹터 끝 사이에 공간은 파일시스템에서 사용되지 않아 데이터가 숨겨질 수 있는 공간이기 때문에 조사를 수행 해 봐야 한다. 마지막 클러스터와 파일시스템 마지막 사이에도 할당 되지 않은 섹터가 있을 수 있으니 조사를 수행해야 한다. 루트 디렉토리와 하위 디렉토리 조사를 반드시 수행해야 하며, FAT 각 클러스터 연결은 할당 된 디렉토리 엔트리가 그 시작을 가리키는지도 점검해야 한다.
볼륨 레이블로 표시된 디렉토리 엔트리는 시작 클러스터를 갖지 않아야 하고, 파일시스템에서는 유일해야 한다.
할당 된 LFN 디렉토리 엔트리들의 체크섬을 조사해보고, 할당 된 SFN 엔트리와 비교해야 한다.
만약 관련된 SFN 엔트리를 찾을 수 없다면 그 LFN 엔트리들을 조사해야 한다. 이는 긴 파일명을 지원하지 않는 OS를 사용해서 파일시스템과 충돌이 나거나, 숨겨진 데이터가 있다는 것을 의미한다.
또 값이 0이거나 난수인 디렉토리 엔트리들은 영구 삭제 도구가 접근 했던 엔트리 이거나, 예전에 할당 되었던 엔트리 일 가능성이 있다.
마지막으로 NULL 엔트리 이후에 디렉토리 엔트리가 있는지 검사해야 한다. 대부분의 운영체제는 NULL 엔트리 이후의 엔트리는 보여주지 않는다. 

'[+] Forensic' 카테고리의 다른 글

File System - FAT (9)  (0) 2012.02.04
File System - FAT (8)  (0) 2012.02.03
File System - FAT (7)  (0) 2012.02.02
File System - FAT (6)  (0) 2012.02.02
File System - FAT (5)  (0) 2012.02.02

+ Recent posts