Notice
Recent Posts
관리 메뉴

Hacking Arts

FAT32 Analysis - 1 본문

Forensic/File System Analysis

FAT32 Analysis - 1

Rakehell 2014. 8. 23. 03:08

<FAT32>

FAT32의 큰 틀이다.


-부트 레코드(Boot Record = BR)

1)볼륨의 첫 번째 섹터를 의미(예약된 영역의 첫 번째 섹터 의미)

2)이 영역의 크기는 하나의 섹터를 차지하고 있음

3)windows를 부팅시키기 위한 기계어 코드와 FAT파일시스템의 여러 설정 값


-예약된 영역(Reserved Area)

1)미래를 위해 예약된 영역으로 32섹터가 할당되어 있음


-FAT1 (First File Allocation Table)

1)FAT 영역은 클러스터들을 관리하는 테이블이 모여 있는 공간

※클러스터 :  섹터들의 집합으로 하드디스크에 파일을 저장하는 최소 논리적 단위 ( 클러스터당 섹터 갯수는 따라 틀려서 정확하게 찾아봐야된다.)

2)이 영역의 내용을 통해 어떤 클러스터가 비어 있는지, 어떤 파일에 어떤 클러스터가 연결 되어 있는지 확인 가능

 

-FAT2(Second File Allocation Table)

1)중요한 FAT1에 대한 백업본

 

-DATA Area(데이터 영역)

1)실제 파일과 디렉토리가 저장되는 공간

2)파일 내용이 기록되는 단위는 클러스터

 

-사용하지 않는 영역(Unused Area)

 

 <Boot Record(BR)>

-Jump Boot Code

1)Boot Strap Code 부분으로 점프하기 위한 기계어 코드(기본값 0xEB5890)

2)해당 볼륨을 이용하여 부팅을 할 필요가 없으면 어떠한 값이 와도 무방

※Boot Strap Code - Windows NT 계열인 경우에 루트 디렉토리에서 NTLDR이라는 파일을 찾아서 실행시킴

 

-OEM Name

1)파일 시스템을 생성한 프로그램 기록(단순히 OEM 회사를 나타내는 문자열)

2)FAT32는 MSDOS5.0

 

-Byte Per Sector

1)한 섹터가 몇 바이트를 담고 있는지 기록

2)섹터 크기 : 보통 512Byte (로우 레벨 포맷으로 할 경우 달라짐. 이외에도 다른 값 가능)

 

-Sector Per Cluster

1)클러스터를 구성하는 섹터 수

2)읽고 쓰기 명령의 효율성을 위해서 여러 개의 섹터를 하나의 클러스터로 처리

3)가장 많이 사용하는 클러스터 크기는 4KB(4096 Byte) - (섹터 8개)

 

-Reserved Sector

1)예약된 섹터의 개수를 의미

2)파일 시스템에서 추가로 필요한 정보를 적기 위해서 필요한 공간을 예약해두고 사용

3)파티션의 첫번째 섹터부터 몇개의 섹터를 예약한 것인지를 의미

4)PBR / FSInfo 구조체 / PBR Backup

 

-FAT Count

1)FAT의 개수

2)FAT 손상되면 파일 내용을 읽을 수 없게되므로 FAT를 여러 개 사용 (기본 값 2)

 

-FAT Count

1)FAT 개수

2)FAT 손상되면 파일 내용을 읽을 수 없게 되므로 FAT를 여러 개 사용 ( 기본 값 2)

 

-Root Directory Entry Count

1)FAT32에서는 사용 안함

2)FAT16 경우에 한해 이 항목은 루트 디렉토리에 몇 개의 엔트리( 파일과 디렉토리 모두 동일하게 1개의 엔트리로 봄 )를 수용할 것인지를 나타냄

 

-Total Sector 16

1)FAT32에서는 사용 안함

2)FAT16 경우에 한해 이 항목은 볼륨상에 있는 총 섹터 수를 2Byte를 나타냄 ( 저장장치의 총 섹터 수가 아닌 볼륨의 총 섹터 수)

 

-Media

1)볼륨이 어떤 미디어에 저장되어 있는지를 나타냄

2)보통은 고정식 디스크 값인 '0xF8'이 쓰임 (플로피 디스크 제외)

 

-FAT Size 16

1)FAT32에서는 사용 안함

2)FAT16 경우에 한해이 항목은 FAT 영역의 섹터 수를 저장

3)FAT1 영역과 FAT2 영역을 합친 값이 아닌 1개의 FAT 영역의 섹터 수

 

-Sector Per Track

1)x86 프로세서 계열에서 발생하는 인터럽트(INT) 0x13을 위해 존재하는 항목

2)저장장치의 트랙당 섹터 수를 저장

3)Windows 계열에서는 더 이상 항목을 참조하지 않음

 

-Number Of Heads

1)x86 프로세서 계열에서 발생하는 인터럽트(INT) 0x13을 위해 존재하는 항목

2)저장장치의 헤더 수를 저장

3)Windows 계열에서는 더 이상 항목을 참조하지 않음

 

-Hidden Sector

1)x86 프로세서 계열에서 발생하는 인터럽트(INT) 0x13을 위해 존재하는 항목

2)해당 볼륨 앞에 존재하는 (숨겨진)섹터 수를 저장 (파티션 되지 않은 볼륨에서는 반드시 '0')

3)Windows 계열에서는 더 이상 이 항목을 참조하지 않음

 

-Total Sector 32

1)볼륨 상에 있는 총 섹터 수를 4Byte로 나타냄 (저장장치의 총 섹터 수가 아닌 볼륨의 총 섹터 수)

 

-FAT Size 32

1)FAT 영역의 섹터 수를 저장하는 항목

2)FAT1 영역과 FAT2 영역을 합친 값이 아닌 1개의 FAT 영역의 섹터 수

 

-Ext Flags

1)FAT 테이블을 조작하는 것에 대하여 여러 설정 값을 가짐

 

-File System Version

1)FAT32의 버전 정보를 나타냄

 

-Root Directory Cluster

1)루트 디렉토리의 클러스터 값(루트 디렉토리의 시작 위치)

2)FAT16과는 다르게 FAT32는 루트 디렉토리가 데이터 영역 어디에 와도 상관 없음

3)기본 값 2

 

-File System Information

1)FSInfo 구조체가 어디에 저장되어 있는지를 가리킴

2)보통은 볼륨의 1번 섹터에 저장된다.

 

-Boot Record Backup Sector

1)BR이 백업된 섹터 번호

2)일반적인 값 6번 섹터

 

-Reserved

1)예약된 영역(해당 영역 모두 0값)

 

-Drive Number

1)인터럽트(INT) 0x13을 위해 존재하는 항목

2)Windows 계열에서는 더 이상이 항목을 참조하지 않으므로 어떤 값을 써도 무방

 

-Reserved1

1)Windows NT 계열에서 사용하려고 만든 항목 (항상 0값)

 

-Boot Signature

1)확장 부트 서명

2)값은 항상 '0x29'

 

-Volume ID

1)볼륨 시리얼 번호

2)고유의 임의의 시리얼 번호를 생성해서 기록

 

-Volume Label

1)볼륨 레이블 (없을시 No Name 기록)

2)해당 파티션의 볼륨 레이블을 기록 (적은 글자는 Windows에서 디스크 이름)

3)볼륨 레이블을 적는 부분의 다른 한곳은 루트 디렉토리

4)볼륨 레이블이 변경 될경우 2군데 모두 값을 바꿔야 함

 

-File System Type

1)해당 파일 시스템의 타입 이름을 기록

2)FAT32 값을 가짐

 

-Signature

1)부트 레코드의 마지막을 나타냄

2)부트 레코드가 손상되었는지 아닌지를 알기 위한 용도로 사용

3)기본 값 '0xAA55' (이 이외의 값일 경우 BR이 깨졌다고 판단)

 

-----------------------------------------------------------------------

<예약된 영역 소개>

1)FAT32의 경우 보통 32 섹터

2)주된 사용 목적은 부트 레코드 저장과 주요 항목 백업

3)예약된 영역 2번째 섹터에 FSInfo구조체 저장

4)예약된 영역 6번째 섹터에 부트 레코드 백업 저장

5)FSInfo, 부트 레코드의 위치는 고정은 아님

 

<File System Information (FSInfo) 구조체>

-Lead Signature

1)FSInfo 섹터라는 것을 의미해주는 항목

2)0x41615252 값으로 고정

 

-Reserved1

1)미래를 위해 예약된 영역(0으로 채워져 있음)

2)섹터의 대부분인 479Byte 차지하지만 사용되지 않음

 

-Struct Signature

1)FSInfo 섹터라는 것을 의미해주는 또 하나의 항목

2)0x61417272값으로 고정

 

-Free Cluster Count

1)볼륨 상에 존재하는 빈 클러스터의 수 저장

2)항목의 값이 0xFFFFFFFF 경우 빈 클러스터의 수를 알 수 없는 상태

3)적혀 있는 값이 반드시 정확한 값은 아님

 

-Next Free Cluster

1)볼륨에서 보다 빨리 빈 클러스터가 있는 곳을 알아내기 위한 항목

2)마지막에 할당된 클러스터의 값 저장

 

-Reserved2

1)미래를 위해 예약된 영역(0으로 채워져 있음)

 

-Trail Signature

1)FSInfo 섹터라는 것을 의미해주는 또 하나의 항목

2)0xAA550000 값으로 고정

 

--------------------------------------

<BR 백업>

1)부트 레코드 영역에 대한 백업본 (기존의 BR과 값 동일)

2)FAT32 방식에만 해당

3)BR의 Boot Record Backup Sector 항목에 기록된 섹터에 백업이 존재

4)기본 값은 0x0006이므로 6번 섹터에 BR의 백업본이 존재

 

-------------------------------------

여기서 중요한 부분은 BR을 정확히 봐야한다. BR에서 많은 정보를 알 수있는데 일단 무슨 파일시스템을 사용하는지를 체크하자.

MS.DOS의 경우는 대게 FAT32 이런식이고 EXT의 경우는 EXT라고 자신의 버전을 말해준다. Byte per Sector을 체크하자!

그다음 Sector Per Cluster 을 체크해야된다. 이 두가지를 체크하는 이유는 sector의 갯수를 통해서 FAT의 정보나 DATA영역을 찾아 갈 수 있기 때문이다. 그다음 Reserved Sector의 개수도 알아 두자! 이걸 이용해서 FAT영역을 찾아갈수 있음.

FAT Size와 FAT 영역의 갯수을 이용하여 DATA영역을 찾을 수있다.

'Forensic > File System Analysis' 카테고리의 다른 글

FAT32 Analysis - 2  (0) 2014.08.23
MBR(Master Boot Record) Analysis  (0) 2014.08.23