관리 메뉴

IT창고

FAT32 파일시스템 본문

보안/Digital forensic

FAT32 파일시스템

방구석여포 2018. 7. 6. 14:37

FAT32 파일시스템에 대해 알아보겠습니다.

FAT(File Allocation Table)는 MS-DOS시절부터 사용되었으며 간단한 구조로 메모리카드, 디지털카메라, 플래시 메모리 등에 많이 사용합니다.


FAT12 ,16, 32에서 뒤에 붙는 숫자는 표현 가능한 최대 클러스터의 수를 의미합니다.

즉 FAT32는 2^28 - 12 만큼 표현이 가능한 클러스터를 가질수있습니다.


FAT32의 구조를 보면 위와 같습니다. 

FAT형식에 따라 예약된 영역의 크기(섹터)가 다른데 12,16은 1이며 32는 32의 예약된 영역 크기를 가집니다.

0, 6번 섹터는 볼륨부트섹터입니다(원본과 VBR백업본 위치) 1,7번 섹터는 FSINFO(Fike System Information) 구조체이며 2,8번 섹터는 부트스트랩(BootStrap) 코드입니다.


FAT의 VBR구조입니다.


실제 FAT32 구조를 보면서 VBR분석에 꼭 필요한 정보만 확인해보겠습니다.


 내용

의미 

 Jump Boot Code(3)

 부트 코드로 점프하기 위한 명령어 (0xEB58은 어셈으로 jmp 0000005A, 90은NOP)

 OEM ID(8)

운영체제 버전별 ID (Linux는 mkdosfs)

 Byte per Sector(2)

섹터 당 바이트 수 (00 02 = 512Byte) 

 Sector Per Cluster(1)

클러스터 당 섹터 수(08 = 4096Byte = 4KB = 512*8) 

Reserved Sec Count(2) 

예약된 영역 섹터의 수 (1A 10 = 4122섹터) 

Num of FAT Tables(1) 

FAT 테이블의 수 (0x02) 

 Media Type(1)

0xF8은 fixed disk  

Total Sector32(4) 

4Byte크기의 파티션 총 섹터 수 

 FAT 32 Size(4)

FAT 하나의 영역이 가지는 4Byte크기의 섹터수  

 File System Version(2)

파일시스템의 주버전(major)과 하위버전(minor) 

 Root Directory Cluster (4)

root디렉토리가 위치한 클러스터 값(FAT32경우 정해져있지않지만 보통 클러스터2번 사용) 

 File System Information(2)

FSINFO구조체가 저장된 섹터 번호 (보통은 0x01) 

 Backup Boot Recprd(2)

백업된 부트 섹터의 위치(보통은 0x06) 

File System Type(8) 

해당 파일시스템의 타입을 나타냅니다.



FSINFO에 대해 알아보겠습니다.

FSINFO는 운영체제에게 첫 비할당 클러스터의 위치와 전체 비할당 클러스터의 수를 알려줍니다.

0~3까지는 시그니처이고 F9 F8 03 00 Free Cluster 09 00 00 00 Next Cluster를 나타내며 즉 9번 클러스터 부터 사용이 가능하다는걸 알수있습니다.


FAT Area로 가보겠습니다.

현재 있는 BR원본 섹터가 128로 예약된 영역 섹터의 수인 4122를 + 하면 4250번 섹터인데 여기로 이동해보겠습니다.


앞에 0번클러스터는 4Byte는 Media Type이며 F8 FF FF 0F는 하드디스크를 나타냅니다. 

1번클러스터는 FF FF FF FF로 파티션의 상태를 나타내는데 보통의 경우로 FF FF FF FF입니다. 

FAT의 Entry크기는 FAT12,16은 2Byte(256개), FAT32는 4Byte(128개) 입니다.

root디렉토리로 가는 방법은 FAT 32 Size인 0x07F3-> 2035에 *2를하여 FAT주소를 + 하면 됩니다. 즉 4250 + 4070 = 8320번 섹터 입니다. 만약 백업본의 위치로 간다면 4250 + 2035 = 6285번 섹터로 가면 됩니다.


Data Area에 대해 알아보겠습니다.


ftk imager에 보이는 곳이 Data Area의 시작점입니다. 섹터를 확인하면 8320번 섹터에 위치합니다. 위에서 확인해보면 8320번 섹터는 root디렉토리였음을 알수있으며 ftk로 확인해보면 사실인것을 알수있습니다.


FAT파일시스템의 데이터영역 구조입니다.


 내용

의미 

 Name

8바이트의 파일이름 (영문은ASCII, 공백은 0x20로 표현합니다.) 

 Extension

3바이트의 파일확장자 (exe, txt 와 같이 확장자는 3글자입니다.) 

 File Attributes

해당 파일의형식(0x01읽기전용, 0x02숨김파일, 0x10디렉토리, 0x20일반파일 등) 

 Starting Cluster Hi

파일이 위치한 시작 클러스터의 상위 2바이트 

 Starting Cluster Low

파일이 위치한 시작 클러스터의 하위 2바이트 

 File Size

바이트 단위의 파일크기 (ex)2^32 = 4,294,967,296 = 4GB) 


Created Time, Date는 파일의 생성 시간과 날짜이며 Last Accessed Date는 마지막 접근날짜 Last Written Time, Date는 마지막 수정 시간, 날짜 입니다.

추가로 Name 부분에 00부분에는 Status Byte가 있습니다. 상태 바이트의 종류로 0xE5는 삭제된 파일을 의미하며 0x00은 비어있는 파일입니다. 특별한 경우로 0xE5는 일본어 파일로 중복된 코드를 가지는데 0xE5대신에 0x05로 표기합니다.


위의 ftk 사진에 보면 80~90오프셋에 내용을 보면 PNG파일인걸 알수있습니다.

이 파일을 분석하면 아래와 같습니다.

1. 파일의 상태   -> 삭제된 파일

2. 이름, 확장자 -> 41 4D 31 20 20 20 20  / 50 4E 47   png

3. 생성 날짜, 시간 -> 2016년 4월 2일 18시 29분 12초

4. Cluster HI, LOW -> 00 00 / 05 00   -> 5번 클러스터

5. 파일 크기 -> E2 26 00 00  -> 9954byte


루트디렉토리가 있는 8320번은 2번 클러스터로 1 클러스터당 8섹터입니다. 해당 파일은 5번클러스터에 있으므로 2번 클러스터는 8320번 섹터이며 3 클러스터 24섹터를 + 하면 2344번 섹터에 해당 파일의 정보가 존재하게 됩니다.


8344번 섹터에 실제로 PNG파일의 정보가 존재하며 이 정보를 바탕으로 파일 카빙을 시도할수있습니다.

아까 확인해본 정보를 보면 파일의 크기는 9954Byte로 9954길이만큼 복사해서 HxD에디터의 새롭게 저장해서 .png파일을 만들어봅니다.



찾아낸 파일의 정보로 카빙에 성공했습니다. 하지만 ftk imager에는 자체적인 카빙기능이 있기 때문에 쉽게 카빙할수있습니다.


마지막으로 Long File Name의 구조에 대해 알아보겠습니다.

 내용

의미 

 Seq Num

255이하의 파일이름 표현을 위하여 하나이상의 LFN엔트리를 사용 1부터 시작해서 차례로 증가하며 마지막 값은 증가값0x40으로 순서번호를 생성 

 Attr

LFN엔트리이기 때문에 항상 0x0F값을 가집니다. 

 Name1,2,3

하나의 LFN엔트리는 총 유티코드 13문자로 표현가능하며 최대 255문자 할당 시 14개의 LFN엔트리가 필요합니다. 


Long File Name은 만약 이름이 8Byte가 넘어버릴 경우 이 파일의 이름정보를 어디에 보관해야 하는 문제점을 해결하기 위하여 존재합니다. 앞에 00은 Status Byte이며 01~10와 10오프셋으로 바꿔서 00~09, 12~15까지 이름을 저장할 공간이 있으며 단 유니코드로 이름을 저장합니다.

'보안 > Digital forensic' 카테고리의 다른 글

Extend 파티션 구조  (0) 2018.07.08
NTFS 파티션 복구  (0) 2018.07.08
FAT32 파티션 복구  (0) 2018.07.06
디스크 주소 표현 방식, MBR  (0) 2018.07.05
리눅스 디스크포렌식  (0) 2018.07.04
Comments