보안이론

[File System] FAT32

은동동동 2025. 9. 4. 01:01

파일시스템 중 하나인 FAT 32에 대해서 알아보겠습니다.

 

<FAT32란?>

FAT는 File Allocation Table을 뜻하는 것으로 이런 FAT를 통해서파일 시스템을 구성한 것이 FAT32 파일 시스템입니다.

FAT32는 File Allocation Table을 사용하는 파일시스템으로, 운영체제에 공통으로 이용할 수 있을 만큼 호환성이 좋다는 장점이 있습니다.

주로 USB에 들어가는 파일시스템으로 이용됩니다. 

 

<FAT32 구조>

출처 : https://blog.forensicresearch.kr/13

FAT32는 크게 Reserved Area, FAT area, Data area 이 세 부분으로 구성되어 있습니다.

Reserved area는 Boot sector, FSINFO 등 또 세부 구조로 나눌 수 있습니다. 

더 자세하게 구조를 알아보겠습니다.

 

<Reserved Area>

VBR이 위치하는 부분입니다. 32개의 섹터로 구성되어 있습니다.

부팅, 그리고 볼륨과 관련된 정보가 담겨 있는 곳이므로 손상에 대비해서 백업 위치가 존재합니다

  • Boot Sector : 원본 0번 섹터, 백업 6번 섹터 위치
  • FSINFO : 원본 1번 섹터, 백업 7번 섹터 위치
  • Boot Strap : 원본 2번 섹터, 백업 8번 섹터
  • Reserved sector : 나머지 영역, 일반적으로 비어있음

Reserved area에서 또 각 섹터에 대해서 자세히 알아보겠습니다

 

<Reserved Area - Boot Sector>

포렌식적으로 중요한 데이터들이 많이 위치한 곳입니다. 볼륨의 전반적인 설정이나 시그니처, FAT area에 관한 정보 등을 찾아볼 수 있습니다

Boot Sector는 크게 4부분을 나뉩니다

Offset 크기 설명
3bytes Jump Coomand 부트 코드로 점프
88bytes BPB (Bios Parameter Block). 볼륨의 전반적인 설정을 포함
419bytes 볼륨 부트 코드(볼륨 부팅시 필요)
2bytes 시그니처. 0x55 0xAA로 고정

 

<Reserved Area - Boot Sector - BPB>

출처 ; https://blog.forensicresearch.kr/13

BPB 구조 중 몇가지 중요한 지점에 대해서 알아보겠습니다

  • OEM ID : FAT 32는 MSDOS5.0으로 고정되어 있습니다
  • Reserved sector count : FAT area 이전에 존재하는 섹터 수. FAT area 전은 reserved area를 이야기 하므로 reserved area 섹터 수를 지시
  • Total sector 32 : FAT 32 체제에서 해당 파티션(볼륨)이 가진 총 섹터 수
  • FAT Size 32 : FAT 32 체제에서 해당 FAT area 한개의 섹터수
  • Volume serial number : 각 볼륨의 고유 넘버
  • File System Type : 파일 시스템 종류

여기서 계산을 통해 중요 정보를 확인할 수 있습니다.

FAT Area 시작 주소= MBR이 알려준 VBR offset + Reserved sector count * 0x200

볼륨의 총 크기 = Total sector 32 * 0x200

FAT Area 하나의 크기 = FAT size 32 * 0x200

  • FAT Area는 두개가 연속된 형태이므로 전체 크기는 2*FAT size 32 * 0x200

<Reseved Area-FSINFO>

남은 공간이나, 다음에 할당할수 있는 클러스터들에 대한 정보를 알려줌으로 써 FAT 액세스 타임을 줄이는 역할을 합니다.

출처 : https://blog.forensicresearch.kr/13

Offset 크기 설명
4bytes  RRaA. FSINFO sector 시그니처
480bytes 예약된 공간
4bytes rraA. 시그니처
4bytes 마지막으로 알려진 볼륨의 free cluster 수
4bytes 마지막으로 알려진 할당된 데이터 cluster수(이 뒤는 비어있다는 것을 의미하므로 중요)
12bytes 예약영역
4bytes 시그니처 0x55, 0xAA

 

<FAT area>

FAT Table 두개가 연속으로 존재하는 형태이며, Boot Sector의 BPB 내용을 해석하면 FAT area의 시작점을 찾을 수 있습다.

  • FAT Area 시작 주소= MBR이 알려준 VBR offset + Reserved sector count * 0x200

FAT Area는 여러개의 엔트리(각 4bytes)로 구성됩니다. 각 엔트리는 실제 데이터가 저장된 Data Area의 클러스터(0x1000크기)와 대응되는 형태를 나타냅니다

보통 0번과 1번은 사용하지 않으며 2번 엔트리부터 시작됩니다

각 엔트리, 즉 4bytes에 어떤 값이 할당되었는지에 따라 클러스터 상태를 확인할 수 있습니다.

설명
0x?0000000 미할당 클러스터를 의미
0x?0000001 internal purpose로 사용하기 위해 예약(임시 사용)
0x?0000002~0x?FFFFFEF 데이터 클러스터 할당. 파일의 다음 클러스터 위치 지시
0x?FFFFFF0~0x?FFFFFF5 예약(특정한 경우 사용)
0x?FFFFFF6 예약(사용X)
0x?FFFFFF7 불량 섹터를 의미
0x?FFFFFF8~0x?FFFFFFF 해당 클러스터가 마지막임을 지시

 

<Data Area>

실제 데이터가 저장되는 곳을 말합니다.

Data area의 시작 주소 찾는 법 → FAT Area 시작 주소에서 Fat Table 2개 크기만큼을 더하면 됩니다

  • MBR이 알려준 VBR offset + Reserved sector count * 0x200 + FAT size 32 * 0x200 * 2

첫 클러스터 (FAT area에서는 2번 엔트리부터 저장 시작)

→ Root Directory를 의미합니다.

Root Directory 내에는 Directory Entry 구조가 반복 저장되면서 파일이 저장되는 형태입니다.

 

<Data Area-Directory Entry>

https://blog.forensicresearch.kr/2

각 디렉토리 (파일) 들의 정보와 속성, 정보들이 저장되어 있습니다.

몇가지 중요 부분을 살펴보면

Name은 이름이 저장되는곳입니다. 짧은 파일명의 경우 8bytes에 저장될 수 있지만 더 긴 이름이 필요한 경우, LFN 구조체를 이용할 수 있습니다.

Creation Time/Date, Last Written Time/Date 같이 타임스탬프를 확인할 수 있는 부분이 존재합니다. 이 경우 Windows Timestamp 디코딩 소프트웨어를 이용하면 쉽게 해독이 가능합니다.

Attribute는 파일의 속성을 이야기하며 값에 따라 어떤 속성을 가졌는지 확인 가능합니다

  • 0x01은 읽기전용, 0x20은 숨김, 0x10은 subdirectory 등

Starting Cluster high와 Starting Cluster Low는 해당 파일의 내용이 어디있는지 지시하는 정보입니다. 만약 둘다 0x05라고 표시가 되어있다면,루트가 일단 2번째 엔트리 이므로 3번 건너 뛴 클러스터에 위치하고 있다는 정보를 알 수 있습니다.

→ 원본데이터 : Root Directory 주소 + 0x1000*3

 

<FAT 32 전체 흐름 정리>

VBR로 부터 Reserved Sector 필드를 읽고 FAT area의 위치와 크기를 찾고, 이후 그 정보로 다시 Data area를 찾을 수 있습니다. 이렇게 찾은 위치정보를 여러 바이트 단위로 분석해가면서 각 엔트리 할당 여부, 타임스탬프, 파일 확장자, 이름, 실제 원본 데이터의 내용까지 확인할 수 있는 체계가 FAT32입니다.