본문 바로가기

[+] Forensic

File System - FAT (3)

이번 글에서는 FAT 파일시스템에서 내용 참조 모델과 비슷한 데이터를 포함하고 있는 데이터 영역에 대해서 알아 볼 것이다.

데이터 영역은 클러스터로 구성되어 있다.

클러스터 란, 연속적인 섹터의 그룹을 말하며, 섹터의 개수는 2의 제곱(1, 2, 4, 8, ...) 이어야만 한다. 

MS 명세서에 따르면 클러스터의 크기는 최대 32KB이어야 한다.

클러스터는 주소가 있는데 주소가 0이나 1이 아닌 2라는 주소부터 시작한다.(= 첫 번째 클러스터는 클러스터 2)

이제부터 클러스터와 분석 방법을 알아보자.

[첫 번째 클러스터 찾기]
FAT 파일시스템은 첫 번째 클러스터인 클러스터 2부터 시작하지 않아 위치를 쉽게 찾지는 못한다.
FAT 파일시스템은 모든 논리적 볼륨 주소가 논리적 파일시스템 주소로 맵핑되지 않기 때문에 FAT 파일시스템의 예약영역과 FAT 영역은 클러스터 주소를 사용하지 않는다.
첫 번째 클러스터를 찾는 방법은 FAT 12/16과 FAT 32가 서로 다르다. 
FAT 12/16 파일시스템의 경우 파일시스템이 생성 될 때 데이터 영역 첫 번째 섹터에 루트 디렉토리가 부트섹터에서 정의된 고정된 크기를 갖고 할당 된다. 그래서 FAT 12/16 파일시스템의 클러스터 2는 루트 디렉토리 다음 섹터를 포함하게 된다.
아래는 FAT 12/16 파일시스템의 클러스터 2 위치를 도식화 한 것이다.

[그림 1 - FAT 12/16]

이와 다르게 FAT 32 파일시스템의 경우 루트 디렉토리의 유동성 때문에 데이터 영역의 첫 번째 섹터를 클러스터 2가 포함한다. 즉, 데이터 영역 첫 번째 섹터가 클러스터 2이다.

 [그림 2 - FAT 32]

 

[클러스터와 섹터 주소 변환]
클러스터와 섹터 주소간에 변환을 위해서는 클러스터 2의 주소를 알아야 한다. 또 클러스터 당 몇 개의 섹터를 포함하고 있는지도 파악하여야 한다. 아래는 클러스터 X(계산하고자 하는 클러스터)의 섹터 주소를 계산하는 기본 공식이다.
 
 - (X - 2) * (클러스터 당 섹터 수) + (클러스터 2의 섹터 수)

역으로 섹터 S(계산하고자 하는 섹터)가 포함되어 있는 클러스터를 계산하는 공식은 아래와 같다.

 - ((S - 클러스터 2의 섹터 수) / (클러스터 당 섹터 수)) + 2


[클러스터 할당 상태]
클러스터의 할당 상태는 FAT 구조체를 통해 알 수 있다. 보통 두 개의 FAT 구조체 복사본이 있는데 하나는 파일시스템 예약 영역 이후에 존재한다. FAT 구조체는 파일시스템 클러스터마다 하나의 테이블 엔트리를 가지고 있다. 테이블 엔트리에는 각 클러스터 번호들이 데이터로 포함되어 있다. 테이블 엔트리 포함되어 있는 번호들의 최대 값은 아래와 같다.

 - FAT 12 : 12bit
 - FAT 16 : 16bit
 - FAT 32 : 32bit(하지만 28bit만 사용한다.)


만약 테이블 엔트리에 포함되어 있는 값이 0이라면 해당 엔트리가 할당 된 클러스터는 파일에 아직 할당되지 않은 것을 의미한다. FAT 종류마다 테이블 엔트리가 가지고 있는 값 중 할당 되지 않은 상태를 표시하는 값들이 있는데 아래와 같다.

 - FAT 12/16 : 0xFF7
 - FAT 32 : 0xFFF FFF7


만약 어떠한 테이블 엔트리가 위의 값을 가지고 있다면 해당 테이블 엔트리의 클러스터는 파일에 할당되지 않음을 의미한다. 


[할당 알고리즘]
운영체제는 할당 가능한 클러스터를 찾기 위해 FAT 구조체의 테이블 엔트리를 참조하여 테이블 엔트리 값이 0인 것을 검색한다. 클러스터를 비 할당 상태로 만드는 방법은 테이블 엔트리의 값을 0으로 바꾸는 방법을 사용하면 된다.
대부분의 운영체제는 위 방법을 사용하여 클러스터를 비 할당 상태로 만드는데 그 클러스터의 내용은 삭제하지 않는다.

 * 참고 : Win 98과 XP의 경우 '다음 적용' 알고리즘을 사용하여 클러스터를 할당 한다. 


[분석]
FAT 파일시스템의 경우 첫 번째 클러스터 주소가 파일시스템 시작 주소와 맞지 않아 다른 파일시스템 보다 데이터 영역을 분석하는 것이 복잡하다. 만약 데이터 영역이 시작하기 전 주소에 특정 데이터를 찾기 원한다면 섹터 주소를 이용해서 찾아야 한다. 데이터 영역에 있는 데이터를 찾으려고 한다면 클러스터 주소나 섹터 주소를 이용하면 된다.
또 비 할당 클러스터에 데이터가 있을 수도 있어 비 할당 클러스터를 분석해 봐야 한다. 비 할당 클러스터는 FAT 구조체의 테이블 엔트리 값이 0인 것을 검색하여 찾으면 된다.
데이터 영역을 분석 할 때에는 클러스터에 할당 되지 않은 섹터를 주의깊게 살펴봐야 한다.
클러스터가 포함하는 섹터의 개수는 짝수로 만약 데이터 영역의 섹터 수가 홀수라면  클러스터에 할당되지 못한 섹터 가 데이터 영역 끝에 남아 있을 수도 있기 때문이다.
아래는 클러스터에 비 할당 된 섹터가 있는지 검증하는 공식이다.

 - (데이터 영역의 전체 섹터 수 - 클러스터 2의 섹터 수) / (클러스터 당 섹터 수) 

또 히든 데이터가 있는지 살펴 봐야 한다. 히든 데이터가 있을 만한 공간은 아래와 같다.

 - FAT 구조체 마지막 엔트리와 백업본 시작 사이 공간
 - 백업 FAT 마지막 엔트리와 데이터 영역 시작 사이 공간 


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

File System - FAT (5)  (0) 2012.02.02
File System - FAT (4)  (0) 2012.02.01
File System - FAT (2)  (0) 2012.01.31
File System - FAT (1)  (0) 2012.01.30