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 Record : 2017/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로 적혀 있다.
|
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 |
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 내용)
실제 데이터들이 저장되는 영역
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 | 파일/디렉토리 이름 , 8자 , 남는공간 0x20으로 채워짐, 삭제시 0xE5로 앞이 바뀜 |
Extender | 0x08 | 3 | 확장자 |
Attribute | 0x0B | 1 | Directory entry의 용도 기록 System File = 0x04/sub directory = 0x10 / file = 0x20 / LFN = 0xF0 |
NTResource | 0x0C | 1 | Window NT 의 예약된 공간으로 항상 0 이 채워져있다. |
Create Time Tenth | 0x0D | 1 | 파일이 생성된 시간을 1/100 초 단위로 기록하는 항목 |
Create Date | 0x10 | 2 | 생성날짜 fffff(5bit)일/ffff(4bit)월/fffffff(7bit)년 으로 계산 년도의 경우 1980년 부터 + 해주면 된다. |
Last Access Date | 0x12 | 2 | 가장 최근의 읽기 / 쓰기 실행 날자 |
First Cluster High | 0x14 | 2 | 파일의 첫번째 클러스터 번호의 상위 2 Byte |
Write Time | 0x16 | 2 | 최근 파일 수정 시간 |
Write Date | 0x18 | 2 | 최근 파일 수정 일자 |
First Cluster Low | 0x1A | 2 | 파일의 첫번째 클러스터의 하위 2Byte |
File Size | 0x1C | 4 | 파일의 크기, 디렉토리의 경우 0 으로 채워짐 |
'Kitri_NCS3기 보안과정 > 디지털포렌식' 카테고리의 다른 글
170511 FAT32 복구 실습 (0) | 2017.05.11 |
---|---|
FAT32(LFN의 개념과 HxD에서 파일생성하기) (0) | 2017.05.10 |
170427 사고대응과 분석 실습 (0) | 2017.04.27 |
170426 NTFS 에서 MBR , VBR 복구해보기 (1) | 2017.04.26 |
170426 NTFS - VBR(Volume Boot Record) (0) | 2017.04.26 |