Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Hello Security World

Digital Forensic [FAT 파일 시스템] 본문

정보보안/Forensic

Digital Forensic [FAT 파일 시스템]

프로앱등이 2020. 5. 3. 18:02

FAT 파일 시스템

FAT12 -1980년대 초

-플로피디스크용으로 처음 개발

FAT16 -1980년대 말

-하드디스크를 지원하기 위해 개발

VFAT -1995년

-FAT의 성능을 향상시키고 긴 파일 이름이 가능해짐

FAT32 -1996년

-VFAT를 확장해서 개발, 고용량 하드디스크를 지원

ExFAT -2006년

-4Gbyte 이상의 파일 지원 (264)

 

 

클러스터 크기에 따른 장단점

- 클러스터 크기가 크거나 작음에 따라서 장단점 존재

작은 경우

- 클러스터의 크기가 작은 경우의 장점은 클러스터 할당 때문에 버려 지는 용량이 적음

- 클러스터의 크기가 작은 경우의 단점은 FAT 영역의 크기 커짐

큰 경우

- 클러스터의 크기가 큰 경우의 장점은 FAT 영역의 크기가 작음

- 클러스터의 크기가 큰 경우의 단점은 크기가 작은 파일이 많은 경우 버려지는 용량이 많아짐

 

 

FAT16 파일시스템의 구조

 

 

FAT32 파일시스템의 구조

 

 

FAT 파일시스템 구조 세부 사항

- Boot Record: 1’st 섹터로서 해당 볼륨의 여러 가지 설정 값,

-부팅 을 위한 실행 코드 포함, 예약된 영역에 포함

예약된 영역:

- FAT16의 경우 1 섹터, FAT32의 경우 32 섹터

- Boot Record와 주요 항복 백업

FAT#1: 클러스터 할당 테이블, FAT#2의 경우 #1의 백업

Root Directory

- Boot Record에 그 위치가 기록되어 있으며 FAT16의 경우 FAT#2 바로 다음에 위치

- 최상위 Directory에 포함된 파일 또는 디렉터리에 대한 Metadata (Directory Entry)들을 저장

Boot Record (공통 사항) Table 4. 위치 크기(Bytes)

 

 

예약된 영역(FAT32)

- 섹터 #0: 부트 레코드

- 섹터 #1: FSInfo (FileSystem Information)

- 섹터 #6: 부트 레코드 백업

- FSInfo와 부트 레코드 백업은 부트 레코드 설정 값(File Sys Info, Backup Boot Sec)에 따라 다를 수 있음

 

 

(Root) Directory와 Directory Entry

- Directory Entry: 파일 또는 디렉터리에 대한 정보를 기록하고 있는 Metadata 또는 Index

- Directory: 해당하는 디렉터리에 포함하고 있는 서브 디렉터리와 파 일에 대한 Directory Entry의 집합

Root Directory: 최상위 디렉터리

 

 

LFN Directory Entry

기존 8.3 형식의 파일명 길이 제한을 극복하기 위해서 고안

- Long File Names(LFN)은 다음과 같은 특징이 있음

- 유니코드(UTF-16)방식으로 다국어 지원

- 최대 255자 저장  확장자가 3자 이상 가능

- 기존의 Short File Name(SFN)과 호환

- 기존의 SFN보다 특수 문자 허용 범위가 넓음

기존 Directory Entry와 동일한 Size(32byte)

LFN Directory Entry는 파일명만 저장하는 기능을 갖음

따라서, Directory 영역에 LFN Directory Entry와 함께 SFN Directory Entry 존재

LFN Directory Entry 구조 (32byte)

 

 

FAT 파일 삭제 과정

FAT Entry에서 File에 할당된 Cluster Entry를 0으로 설정

Directory Entry의 File Name 첫번째 byte를 0xe5로 변경

 

 

FAT 파일 복구 과정

Directory Entry에서 0xe5로 시작되는 파일명 검색

검색된 Directory Entry에서 파일명, 첫번째 Cluster 번호, 크기 정보 획득

첫번째 Cluster 부터 예상되는 위치까지 추출  파일의 Size가 작은 경우 정상 복구 가능  그러나, 파일 Size가 크거나 수정, 추가 등의 작업이 이루어졌던 파일의 경우 단편화 된 경우 발생 -> 기술적인 Data Carving 필요.

Boot 섹터에 Data 은닉 가능성 분석

Boot Code: 시스템을 부팅하기 위한 코드 그러나 Non-bootable인 경우 사용되지 않으므로 이 영역에 Data를 은닉 할 수 있음

 

 

FAT32에서의 예약된 영역에 Data 은닉 가능성 분석

Boot Record Sector, FSINFO Sector, Boot Record Backup Sector를 제외한 나머지 예약된 영역은 사용되지 않아 은닉 가능성 있음

FSINFO 내에 사용되지 않는 Byte들 (Reserved)이 많고 이러한 영역 들은 정상적으로 zero로 setting되는데 그렇지 않은 경우 분석 필요

 

 

Filesystem과 Volume의 Size 차이 분석

Filesystem 내에서의 Volume Size를 조작하여 여분의 Space에 데 이터 은닉 가능성 존재

Boot Record의 Total Sector 수와 MBR의 Partition Table에서 얻 은 Size를 비교하여 판별 가능

 

 

FAT Partition 복구 (Partition Table에 관련 정보 부재시)

Boot Sector Signature Search (0xAA55)

Volume의 시작 Sector에 존재하고 Offset이 510~511에서 검색

일반적으로 Disk에 Data가 존재한다면 False Positive한 결과를 포함하 여 검색됨

첫번째 Boot Sector, 두번째 FSINFO, 6번째 Backup sector에서 동일한 검색 결과가 나타나는 영역 분석 (Boot Record, FSINFO의 다른 항목 값 검사)

 

 

Bad Clusters 분석

FAT 파일시스템에서 특정 Cluster를 Bad로 mark할 수 있음

FAT# Entry에 Bad Cluster를 나타내는 0x?FFFFFF7 값 write

어떤 Application의 경우 Bad로 mark된 Cluster에 데이터를 저장하 기 때문에 ScanDisk와 같은 도구가 실제 Bad인지를 검사하지 않는 다고 함 이러한 특성을 이용하여 Bad Cluster 악용 가능

 

 

FAT 파일시스템 Data 영역의 마지막 Sector 분석

FAT에서의 Data 영역이 Cluster의 배수가 아닐 수 있음

따라서, 일부 여분의 Sector 존재 가능

여분의 Sector에 데이터를 은닉하거나 이전의 파일시스템 데이터가 남아 있을 가능성 존재

 

 

Directory Entry 조작 분석 (1/2)

Volume Label 속성을 갖는 Directory Entry는 기본적으로 Root Directory에 존재하며 Cluster 할당 정보가 0으로 설정됨  Volume Label 속성을 갖는 Directory Entry의 Cluster 할당 정보와 FAT# 조작으로 데이터 은닉 가능

다수의 Volume Label 속성 Directory Entry 추가

 

 

Directory Entry 조작 분석 (2/2)

사용되지 않는 Directory Entry 영역에 소량의 데이터를 저장할 가 능성

어떤 OS의 경우 Directory Entry를 연속적으로 검색하다가 Directory Entry의 첫번째 Byte가 0인 경우 검색을 중지하는 경우가 있음  이를 이용하여 빈 Directory Entry에 Data 은닉 가능

 

 

삭제된 폴더 복구: FAT가 포멧된 후 복구

‘.’ 폴더(현재 폴더)에 대한 Directory Entry 검색

‘.’ 폴더 Name이 Directory Entry에 저장된 값

“2E 20 20 20 20 20 20 20 20 20 20” 검색 (File Name(8)+Ext(3))

일반적으로 ‘.’ Directory Entry 다음에 ‘..’ Directory Entry 존재

Directory Entry 내 다른 값 (예, Attr)들을 검증