본문 바로가기

Kitri_NCS3기 보안과정/디지털포렌식

170428 FAT32


1. FAT란 ?

USB 메모리 ,SD 카드에 많이 쓰이는 방식으로 파일시스템의 일종이다. 

File Allocation Table로 불리며 운영체제에 따른 영향을 많이 받지 않고 널리쓰이는 호환성 좋은 파일 시스템중 하나이다.


※ 파일을 실행할때 파일은 어떻게 우리에게 나타날까

파일을 실행하면 Directory entry에 있던 파일의 목록에서 위치등을 알아낸 후에 FAT 영역에서 파일의 크기를 알아내고 DATA영역에서 그 크기만큼 할당된 파일을 불러온다고 한다.


[구조] 

Partition장치

- 하드 드라이브같은 파티션장치에서는 파티션을 정의하는 MBR이 첫번째 섹터이다.

 Sector 영역 

Cluster 영역

 Hidden Sector

Reserved Sector 

 FAT

(File Allocation Table) #1 

FAT

(File Allocation Table) #2  

Root Directory

Data 

 Master

Boot Record

 

  Boot Record

FS Information Sector 

(FAT 32 only) 

More Reserved Sector

(optional)


Floppy disk장치 등 (non partition)

- Floppy disk 와같은 파티션되지 않은 장치에서 VBR(Boot sector)은 첫번째 섹터이다. 

  (=물리적 CHS 주소 0/0/1 또는 LBA 주소 0이있는 논리 섹터 0)

 Sector 영역 

Cluster 영역

 Hidden Sector

 FAT

(File Allocation Table) #1 

FAT

(File Allocation Table) #2  

Root Directory

Data 

Boot Record

FS Information Sector 

(FAT 32 only) 

More Reserved Sector

(optional)


Master Boot Record2017/04/24 - [NCS보안/디지털포렌식] - 170424 MBR


Reserved Sector :나중을 위해 비워둔 예약공간


1) Boot Record (1sector) : 부팅을위한 Boot code와 함께 FAT파일 시스템의 값들이 저장되어 있으며 BIOS Parameter Block(BPB) 라고 함.

2) FS Information Sector( BR 바로다음 ) : FAT32에서 도입되어 특정작업의 액세스 시간을 가속화함. (여유공간 확보)


FAT #1 / FAT #2  : HDD 내의 파일들과 연결된 클러스터에 대한 정보들이 있다. 손상되면 해당파일들을 사용할 수 없기때문에 FAT#2 의 백업을 둠 


Root Directory : Data 영역 아무곳에 존재해도됨. (위치는 BR에 기록) 

Data : 파일 또는 디렉토리가 저장되어있는 영역. 클러스터 단위로 읽기와 쓰기 진행

 

Boot Record


00

01

02 

03 

04 

05 

06 

07 

08 

09 

10 

11 

12 

13 

14 

15 

 Jump Boot Code

OEM Name 

Byte Per Sector 

Sector per Cluster 

Reserved

Sector Count 

Num of FAT 

Root Directory

Entry Count 

Total Sector 16 

Media 

FAT Size 16 

Sector Per Track 

Number of Head 

Hidden Sector

 Total Sector 32

FAT Size 32 

Ext Flags 

File System Version 

Root Directory Cluster 

 File System Info

Boot Record Backup Sector 

Reserved 

Drive Number 

Reserved1 

Boot Signature 

Volume ID 

Volume Label 

Volume Label 

File System Type 

 

 

 

 

 

 



- Jump Boot Code : Boot Code 로 점프하기 위한 코드

- OEM Name : OEM 회사를 나타내는 문자열이 들어있음
- Bytes per Sector : 한 개 섹터를 구성하는 바이트 수
- Sector per Cluster : 한 개 클러스터를 구성하는 섹터 수
  => Sector Per Cluster * Bytes Per Sector = Cluster 의 크기
- Reserved Sector Count : [그림 3-1]의 Reserved Area 의 섹터 개수
- Number of FATs : 해당 볼륨에 존재하는 FAT 영역의 개수
- Root Directory Entry Count : Root Directory 내에 몇 개의 파일/디렉토리를 수용할지에 대해 기록하는 항목으로 
  반드시 Bytes Per Sector의 짝배수로 구성이 되어야 한다.
  하지만 FAT 32에서는 반드시 0으로 채워져야한다.
- Total Sector 16 : FAT 16에 해당되는 항목으로 FAT 32에서는 0으로 채워진다.
- Media : 해당 볼륨에 어떤 미디어가 저장되어있는지 기록되며 플로피 디스크를 제외한 모든 장치의 경우 0xF8로 
   기록이 된다.
- FAT Size 16 : FAT 영역의 섹터 수를 저장하는 부분으로 FAT 32에서는 0으로 채워진다.
- Sector Per Track : Track 당 Sector의 개수를 의미하는데 Window 계열에서는 더이상 이 값을 참조하지 않는다.
- Number Of Heads : 해당 저장 장치의 헤더 수를 의미하며 Window 계열에서는 더이상 이 값을 참조하지 않는다.
- Hidden Sector : 해당 볼륨 앞의 숨겨진 섹터 수를 의미하며 Window 계열에서는 더이상 이 값을 참조하지 않는다.
- Total Sector 32 : 해당 볼륨 상의 총 섹터 수를 의미한다.
- FAT Size 32 : FAT 영역의 섹터 수를 의미하는데 이 수는 FAT #1 과 FAT #2의 합산이 아닌 한 개의    
  FAT 영역의 섹터 수를 의미한다.
- Ext Flags : FAT 테이블의 사용 여부 등의 여러가지 설정 값을 기록한다.
- File System Version : FAT32의 버전 정보로 상위 1Byte는 주, 하위 1Byte는 부 버전을 의미한다. 하지만 실제로는 
   특정 값이 적히지 않고 0x00으로 기록된다.
- Root Directory Cluster : FAT32는 이전 버전들과는 달리 Root Directory가 Data Area 내 아무 위치에
  와도 상관 없기 때문에 그 시작 위치를 Root Directory Cluster 에 기록한다.
- File System Information : File System 구조체의 위치가 기록되나.
- Boot Record Backup Sector : Boot Record 를 백업한 위치를 기록하는 것으로 일반적으로는 6번 섹터를 
  이용한다. 만약 이 위치에 0이 기록되어있다면 백업을 하지 않았음을 의미한다.
- Reserved : 예약된 영역으로 항상 0으로 채워진다.
- Dirve Number : Window 계열에서는 더 이상 참조하지 않는다.
- Reserved1 : Windows NT 계열에서 사용하려고 만든 예약된 영역이며 0으로 채워져 있다.
- Boot Signature : 확장 부트 서명으로 0x29 라는 값이 들어간다(이후에 3가지 항목이 더 존재함을 의미).
- Volume ID : 볼륨의 시리얼 번호
- Volume Label : 볼륨 레이블을 적어준다.
- File System Type : 항상 FAT32로 적혀 있다.

출처 : http://hyd3.tistory.com/125 [hYd3's Diary]

 





디스크 관리에서 파티션을 만들어 확인해 보았다.



FS Information Sector


00

01

02 

03 

04 

05 

06 

07 

08 

09 

10 

11 

12 

13 

14 

15 

 Lead Signature

Reserved 1 

Reserved 1 (480 byte)

Reserved 1 

Struct Signature 

Free Cluster Count

Next Free Cluster 

Reserved 2 

Tail Signature


 

Offset

길이(byte) 

설명 

  Lead Signature

0x000

4

FS info 구조체가 기록된 섹터임을 알려준다. (0x41615252 = RRaA) 

 Reserved 1

0x004

480

예약 영역

 Struct Signature

0x1E4

4

FS info  구조체 시작을 알려줌

 Free Cluster Count

0x1E8

4

볼륨상에 존재하는 빈 클러스터의 수 

Next Free Cluster

0x1EC

4

가장 마지막으로 할당된 클러스터의 값이 저장되며 이 바로 뒤에 오는 클러스터는 비어있는 클러스터

 Reserved 2

0x1F0

12

예약 영역 

Trail Signature

0x1FC

4

FS info 구조체 섹터의 끝, 0xAA550000



- Struct Signature : 0x61417272
- Free Cluster Count : 0x000181FC , 98,812개 클러스터가 비어있다.
- Next Free Cluster : 0x00000006, Cluster 6 번이 가장 마지막에 채워진 클러스터이다.
- Trail Signature : 0xAA550000



FAT Area


FAT 영역은 FAT 파일시스템의 주요 정보를 담고있다. 그중에는 파일/디렉토리 의 할당에 대한 정보를 클러스터 단위로 관리한다. 


00 

01 

02 

03 

04 

05 

06 

07 

08 

09 

10 

11 

12

13 

14 

15 

 Media Type

Partition State 

Cluster 2

Cluster 3 

Cluster 4

Cluster 5

Cluster 6

Cluster 7

...

이하 생략


FAT Area는 최소 8Byte 를 제외하고 전부 클러스터 단위로 파일을 관리함.

이때 각 클러스털르 관리하는 4Byte 단위의 항목들을 FAT Entry라고 함.


FAT Area는 단일 링크드 리스트 방식으로 데이터를 저장했다는것이 특징이다.

(이러한 특징으로 여러개의 클러스터를 할당 받으며 EOC가 나올때 까지 클러스터는 다음 클러스터를 가리킨다.)

※ 먼소리야 ?


1. 파일의 크기가 클러스터 하나에 들어가는경우. (파일의 크기 < 1클러스터)


 하나의 클러스터에 마지막을 알리는 ff가 표기된다. 


2. 파일의 크기가 클러스터 하나를 초과하는 경우 (파일의 크기 > 1 클러스터)


 다음 클러스터를 가리킨다 라는말은 그림과 같이 다음 이어지는 파일의 내용이 있는 클러스터의 위치를 가리킨다.

 쭉쭉쭉이어지다 보면 

 마지막에 0x0FFFFF(EOC = End Of Cluster)로 파일의 끝을 알림을 확인 할 수 있다.





DATA Area(Root Directory & file 내용)

실제 데이터들이 저장되는 영역 

파일이라면 클러스터에 파일의 내용이 직접적으로 저장이 되며, 디렉토리라면 Directory Entry 라는 구조체 형식으로 저장이 된다.

00 

01 

02 

03 

04 

05 

06 

07 

08 

09 

10 

11 

12 

13 

14 

15 

 Name 

Extender 

Attribute 

NT

Resource 

CTT 

CreateTime 

 Create Date

Last Access Date 

First Cluster High 

Write Time 

Write date

First Cluster Low 

File Size 



 

Offset

길이(byte) 

설명 

Name 

0x00

 파일/디렉토리 이름 , 8자 , 남는공간 0x20으로 채워짐, 삭제시 0xE5로 앞이 바뀜

 Extender

0x08

 확장자 

Attribute 

0x0B

 Directory entry의 용도 기록

  System File = 0x04/sub directory = 0x10 / file = 0x20 / LFN = 0xF0

NTResource 

0x0C

 Window NT 의 예약된 공간으로 항상 0 이 채워져있다. 

Create Time Tenth 

0x0D

 파일이 생성된 시간을 1/100 초 단위로 기록하는 항목 

Create Date 

0x10

 생성날짜 fffff(5bit)일/ffff(4bit)월/fffffff(7bit)년 으로 계산 

 년도의 경우 1980년 부터 + 해주면 된다. 

 Last Access Date

0x12 

 가장 최근의 읽기 / 쓰기 실행 날자

 First Cluster High

0x14 

 파일의 첫번째 클러스터 번호의 상위 2 Byte

Write Time 

0x16 

 최근 파일 수정 시간 

Write Date 

0x18 

 최근 파일 수정 일자 

First Cluster Low 

0x1A 

 파일의 첫번째 클러스터의 하위 2Byte 

File Size 

0x1C 

 파일의 크기, 디렉토리의 경우 0 으로 채워짐