본문 바로가기

[+] Forensic

File System - FAT (2)

이번 글에서는 FAT 파일시스템에서 파일시스템 참조 모델과 비슷한 영역을 알아 볼 것이다.
(비슷하다고 하는 이유는 FAT 파일시스템은 각 참조 모델들이 딱 정의되는 파일시스템이 아니기 때문이다.)

파일시스템 참조 모델을 다시 한번 간단히 설명하면 "해당 파일시스템을 전체적으로 설명하는 데이터를 포함하고 있는 참조 모델이다" 라고 설명 할 수 있다. 

FAT 파일시스템에서 그나마 파일시스템 참조 모델과 비슷한 영역이 부트 섹터 영역이다.

부트 섹터 영역은 FAT 파일시스템 물리적 레이아웃에서 예약 영역에 위치 하고 있다.

 * 참고 : 부트 섹터는 예약 영역 중에서도 볼륨 첫 번째 섹터에 위치 하고 있다. 

 * 참고 : MS사에서는 예약 영역을 BPB(BIOS Parameter Block) 이라고 부르며, 부트 섹터라는 용어는 사용하지 않는다.


부트 섹터는 파일시스템을 설명하는 데이터를 포함하고 있긴 하지만, FAT의 종류(FAT 12/16/32)를 설명하는 데이터는 포함하고 있지 않다. 부트 섹터는 부트 섹터 데이터를 연산해서 파일시스템 종류를 결정 한다.

FAT32 파일시스템 부트 섹터에는 부트 섹터 백업본의 섹터 주소, 주/부 버전번호와 같은 추가 데이터들이 포함되어 있다.

FAT32 파일시스템은 섹터 0(부트 섹터)에 존재하는 원본이 손상되었을 때 부트 섹터 백업본을 사용 할 수 있다.

MS 문서에서는 원본 부트 섹터가 손상되었는지 자동 검사 하기 위해 "부트 섹터 백업본이 섹터 6(일곱 번째 섹터)에 있어야 한다"고 설명한다.

FAT32 파일시스템은 다음에 할당 가능한 클러스터 위치, 전체 크기에 대한 정보를 포함하는 FSINFO 구조체를 가지고 있다.

FSINFO 구조체에 포함되어 있는 데이터들은 운영체제를 안내하기 위해 존재하며, 안내만 하는 역할을 하므로 데이터의 정확성을 보증하지 않는다.

그럼 이제 부트 섹터와 분석방법에 대해서 알아보자.

[필수 부트 섹터 데이터]
FAT 파일시스템의 물리적 레이아웃 중 데이터 영역이 있는데 이 데이터 영역은 FAT 12/16과 FAT 32가 조금 다르다.
FAT 12/16 파일시스템의 경우 데이터 영역 시작 주소는 루트 디렉토리 주소 다음으로 예약되어 있다. 하지만 FAT32 파일시스템의 경우 루트 디렉토리는 데이터 영역 어디든지 위치 할 수 있다.

 * 참고 : FAT 32 파일시스템의 루트 디렉토리는 위 설명처럼 될 수도 있지만 대부분은 데이터 영역 시작 주소에
위치한다. 


FAT 32 파일시스템은 루트 디렉토리의 위치와 크기를 데이터 영역 시작에 불량 섹터가 있을 경우 루트 디렉토리가 적절하게 대처할 수 있도록 필요한 만큼 조절 할 수 있도록 하였다.
반면 FAT 12/16 파일시스템의 루트 디렉토리는 부트 섹터에 정의된 위치와 크기로 설정 된다.
FAT 32 파일시스템의 루트 디렉토리 시작 주소는 부트 섹터에서 처음만 제공하고, 크기는 FAT 구조체에서 에서 결정 한다. 

 

[부가 부트 섹터 데이터]
부가 부트 섹터 데이터는 필수 부트 섹터가 가지고 있는 데이터 외에 많은 추가 정보들을 포함하고 있다.
해당 데이터들은 파일시스템을 구동하기 위한 데이터들이 아닌 편의를 위한 데이터 이므로 정확성은 보증되지 않는다. 예로 OEM Name이 부가 부트 섹터 데이터에 포함된다. OEM Name은 필수적인 데이터가 아니므로 사용자가 임의로 변경이 가능하다. 


[부트 코드]
부트 코드는 파티션 테이블 처리와 운영체제의 위치를 파악하는 명령어이다. FAT 파일시스템의 부트코드는 부트코드를 완전하게 분리하는 유닉스의 파일시스템과는 다른 형태를 띄고 있다. 부트 섹터의 첫 3byte는 CPU에게 부트 코드의 나머지 설정 데이터로 이동하라는 기계어 코드(점프 명령어)이다.
FAT 종류마다 부트 섹터로 예약 되어 있는 byte offset은 아래와 같다.

 - FAT 12/16 : 62 ~ 509
 - FAT 32 : 90 ~ 509


위 byte offset들은 부트 코드를 포함하고 있는 곳이기 때문에 일반적으로 다른 곳에 사용되지 않으며, 위 byte offset 다음에 오는 섹터들은 추가 부트 코드를 위해 사용 될 수 있다.
또 FAT 파일시스템은 부팅을 하지 않아도 부트 코드를 갖는다. 해당 부트 코드는 해당 시스템을 부팅 하기 위해 다른 디스크가 필요하다는 메시지를 출력하는 역할을 하며, 출력이 된 후 디스크 MBR 부트 코드에서 FAT 부트 코드를 호출한다. 호출 후 부트 코드는 적절한 OS 파일들을 위치시키고 적재하여 실행 시킨다.


[분석]
부트 섹터를 분석하는 이유로는 대상 파일시스템을 좀 더 자세히 분석하기 위하여 파일시스템의 레이아웃과 세부적인 설정들을 파악하기 위함이다. 분석과정에서 디스크의 포맷 OS, 히든 데이터 등을 발견 할 수 있기 때문이다.
FAT 파일시스템 설정을 파악 하기 위해서는 부트 섹터 위치를 파악 한 후 그곳에 포함되어 있는 데이터들을 처리하면 된다. 예를 들어보면, 부트 섹터를 통해 파일시스템의 물리적인 레이아웃 들의 위치를 파악 할 수 있고, FAT 32 파일시스템의 경우 FSINFO 데이터 구조체의 위치를 알아내어 최근 활동 상태에 대한 단서를 찾아 낼 수 있다.

 * 참고 : FSINFO 구조체는 파일시스템의 섹터 1(두 번째 섹터)에 위치한다. 

분석 시 주의해야 할 사항은 히든 데이터의 위치이다. 히든 데이터가 존재 한다고 추측 할 수 있는 곳은 아래와 같다. 

 - 부트 섹터 데이터와 마지막 시그니처 사이의 450byte 크기의 공간
 - 예약 영역(부트 섹터와 FSINFO를 할당하고 남은 공간)
 - 볼륨 슬랙 공간(파일시스템 마지막과 볼륨 마지막 사이 공간)


마지막으로 원본 부트 섹터가 사용자에 의해 변경되었는지 검사 하는 것이 좋다. FAT 32 파일시스템의 경우 섹터 6에 부트 섹터 백업본이 있어 이 방법이 가능하다. 


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

File System - FAT (4)  (0) 2012.02.01
File System - FAT (3)  (0) 2012.01.31
File System - FAT (1)  (0) 2012.01.30
File System (5)  (0) 2012.01.28