Forensic 2일차 FAT32(BR, Reserved Area, Directory Entry)

2022. 1. 6. 14:56Forensic

FAT32는 크게 3가지의 구조로 구성되어있다.

1. Reserved Area

2. FAT Area

3. Data Area

그중에서 Reserved Area에는 BR Sector부분이 있고 FAT Area는 주로 쓰는 #1부분과 #1의 백업부분인 #2 마지막으로

데이터를 직접 저장하고 관리하는 Data Area에는 Rood Directory부분이 있다.

점선은 가변적임을 의미한다.

 

이번 시간에 알아 볼 부분은 Reserved Area에서도 제일 중요한 BR부분이다.

 

1.Boot Record(BR)

▶ 볼륨의 첫 번째 섹터(512Byte)

▶ Windows를 부팅시키기 위한 코드와 FAT 설정 값이 있다.

▶Boot Record가 손상되면 Windosws는 해당 볼륨을 인식할 수 없다.

 

1-1. BPB(BIOS Parameter Block), 78Btye

 

내용 의미
Jump Boot Code(3) 부트 코드로 점프하기 위한 명령어
(0xEB58은 어셈으로 JMP 0000005A, 90은 NOP)
OEM ID(8) 운영체제 버전별 ID(Linux는 mkdosfs)
Byte Per Sector(2) 섹터 당 바이트 수
512, 1024, 2048, 4096중 하나이다.
Sector Per Cluster(1) 클러스터 당 섹터 수
0보다 큰 값이 오며, 2의 배수여야 한다.
Reserved Sector Count(2) 예약된 영역 섹터의 수
Num of FAT Tables(1) Volum의 FAT 테이블의 수
Hidden Sector(4) 볼륨 앞에 숨겨진 섹터 수
Total Sector 32(4) 볼륨상의 총 섹터 수
FAT32인 경우 0이 아니여야 한다.
FAT Size 32(4) FAT 영역의 섹터 수 (FAT #1 한 개의 섹터 수)
Root Directory Cluster(4) 루트 디렉토리의 클러스터 값, FAT32는 루트 디렉토리가 데이터 영역에 어디 와도 상관없다.
디렉터리의 시작 위치
File System Information(2) FSInfo 구조체의 위치를 가리킨다.(섹터 단위)
Boot Record Backup Sector(2) Boot Record를 백업했다면 백업 위치가 있는 섹터번호를 적는다.
일반적으로 6이며, 백업이 없다면 0이 저장됨

 

1-2. Boot Code Error Message 419Byte

 

1-3. Signature 2Btye

섹터 마지막 2Btye는 0xAA55이다.

 

 

2. Reserved Area

▶ FAT File System에서 각 Cluster의 상태 값을 갖고 있는 연속된 공간이다.

▶ 각 Entry의 FAT32는 4Byte로 구성되며 각각의 Cluster와 매칭된다.

▶ Entry 0 : Media Type Entry 1 : Partition state Entry 2 ~ :Data Cluster

    -0x0FFFFFFF는 EOC(End Of Cluster)를 의미한다.

 

위 그림을 간단하게 나타내면

Meida Type Partition State Cluster2 Cluster3
Cluster4 Cluster5 Cluster6 Cluster7
Cluster8 Cluster9 Cluster10 Cluster11
Cluster12 Cluster13 …. ….

▶Media Type                          ▶Cluster2

    HDD인 경우 F8 FF FF OF            Root Directory의 Cluster

▶Partition State                       ▶Cluster 3~

    평상시엔 FF FF FF FF                 다른 DATA들의 할당 Cluster

 

FAT Entry Value Description
0x?000 0000 미할당 상태, 새로운 파일 및 디렉터리 저장시 0x00을 찾아, 할당 정책에 따라 할당한다.
0x?000 0001 Reserved(예약된 클라스터)
0x?000 0002 ~ 0x?FFF FFEF 클라스터가 점유하고 있는 파일의 다음 데이터가 있는 클러스터를 가리킴
0x?FFF FFF0 ~ 0x?FFF FFF6 Reserved(예약된 클라스터)
0x?FFF FFF7 배드 섹터가 포함된 클러스터가 발견된 경우, 이후 사용되지 않다
0x?FFF FFF8 ~ 0x?FFF FFFF 파일이 하나의 클러스터만 사용하거나 파일에 할당된 마지막 클러스터. 즉, 파일의 끝(EOC)

 

3. FAT32 Directory Entry

Windows의 FAT파일 시스템에서 파일의 이름, 확장자, 위치, 크기, 시간 정보 등을 표현하기 위한 구조체이다.

하나의 파일 및 디렉터리는 각각의 메타정보를 표현하기 위해 하나의 Directory Entry를 가진다

 


File Name
0x00 ~ 0x07까지 이름 값이 들어간다.
기본적으로 아스키 코드값이 들어 있지만 0x00 offset에 특수한 값이 들어가는경우가 있다.
0x00 : 파일이름이 사용된 적이 없음
0xE5 : 파일이 이미 삭제 되었지만 파일의 이름이 확인가능
0x05 : 파일명의 첫번째 문자가 'σ'인 경우
File Extension 0x08 ~ 0x0A은 파일의 확장자가 들어있는 공간
확장자가 없는 파일이라면 0x202020으로 채워진다

File Attribute
0x0B는 파일의 속성을 의미한다.
0x01 : 읽기 전용
0x02 : 숨긴 파일
0x04 : 운영체제 시스템 파일
0x08 : 속성값 대신 디스크 볼륨 레이블을 포함한 엔트리
0x10 : 서브 디렉터리( = 디렉터리 파일)
0x20 : 일반파일

Time Stamp Data
Create Time : 생성 시간
Create Data : 생성 날짜
Last Accessed Data : 마지막 접근 날짜
Last Written Time : 마지막 수정 시간
Last Writeen Data : 마지막 수정 날짜
Starting Cluster 파일의 내용이 몇번째 Cluster에 있는지 알 수 있다.
File Size 파일 사이즈를 알 수 있는 부분 입니다.

 

 

Name : 0x 48 45 4C 4C 4F 57 7E 31

Extension : 0x 54 58 54

Attr : 0x20

Create Time : 0xC9 72

Created Date : 0x26 54

Last Accessed Date : 0x26 54

Starting Cluster Hi : 0x00 00

Last Written Time : 0xC7 70

Last Written Date : 0x26 54

Starting Cluster Low : 0x06

File Size : 0x0C

 

3.1 LFN(Long File Name)

Sequence Number 0x40과 XOR연산을 하여 표시하기 때문에 몇 개의 LFN이 있는지 확인 할 수 있다.
Attribute 항상 0x0F값을 가지고 있다
Reserved Area(Type) 예약된 영역으로 Tpye을 나타내기도 하지만 매번
0x00으로 채워진다
CheckSum SFN에 존재하는 파일명에 대응하는 값이 CheckSum 값으로 채워지게 된다.

※ Seq Num, File Name, Attribute value, Tpye, CheckSum 중 어떠한 값이라도 잘못 들어가면 인식되지 않는다.

 

0x000D001A0부터 2줄씩 LFN이 생성된걸 알 수 있다.

맨 앞의 Sequence Numberdl 0x04 ~ 0x01까지 있고 마지막에 Directory Entry가 있다.