파일시스템 중 하나인 FAT 32에 대해서 알아보겠습니다.
<FAT32란?>
FAT는 File Allocation Table을 뜻하는 것으로 이런 FAT를 통해서파일 시스템을 구성한 것이 FAT32 파일 시스템입니다.
FAT32는 File Allocation Table을 사용하는 파일시스템으로, 운영체제에 공통으로 이용할 수 있을 만큼 호환성이 좋다는 장점이 있습니다.
주로 USB에 들어가는 파일시스템으로 이용됩니다.
<FAT32 구조>
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>
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 액세스 타임을 줄이는 역할을 합니다.
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>
각 디렉토리 (파일) 들의 정보와 속성, 정보들이 저장되어 있습니다.
몇가지 중요 부분을 살펴보면
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입니다.
'보안이론' 카테고리의 다른 글
[File System] NTFS (0) | 2025.09.04 |
---|---|
파일 시스템과 MBR, VBR (2) | 2025.09.04 |
[Cryptography] 블럭 암호 운영 모드 ECB, CBC, CFB, OFB, CTR (0) | 2025.02.14 |
[Cryptography] 블럭암호 AES 원리, 안전성 (0) | 2025.02.14 |
[Cryptography] - 블럭암호 DES 원리, 취약점 (0) | 2025.02.13 |