Always-Try(정보보안 및 일상)

포렌식 기초 - FAT32 and NTFS - 이론편 본문

Forensic

포렌식 기초 - FAT32 and NTFS - 이론편

Always-Try 2021. 2. 27. 16:12
본 게시글은 인프런 '맥으로 배우는 윈도우즈 포렌식'를 참고하여 작성했습니다. (www.inflearn.com/course/forensic-2/dashboard)
 

맥으로 배우는 윈도우즈 포렌식 - 인프런

유료 도구가 아닌 무료 포렌식 도구를 통해 더욱 깊이 있는 포렌식 분석 방법을 배웁니다. 초급 보안 Forensic Microsoft Windows 정보보안 온라인 강의 forensic

www.inflearn.com

 

#1. FAT32

1-1. FAT란?  

  • File Allocation Table의 약자로 파일 시스템의 한 종류이다.

  • 논리 파티션은 이론상 8TB 가 한계이지만, 대부분 2TB 가 한계이다. 윈도우에서는 32GB까지만 지원되며, 구조가 간단하여 용량이 작은 이동식 저장장치 등에 사용된다.

  • 한 경로(폴더)에 파일 개수가 16384개(2^14개) 초과 불가하다.

 

1-2. FAT32 구조

그림1. FAT32 구조

1) Reserved 영역:

그림2. Reserved 영역

총 크기는 32 sectors 이며, Boot Record를 포함한다. Reserved 공간이 끝나는 지점의 offset이 4000h 인 것은 32 sectors * 512 bytes(섹터의 크기) = 16,384(4000h) 이기 때문이다.

그 중, BR(Boot Record) 시스템에 대한 다양한 정보를 담고 있다. hex editor에서 BR 영역을 분석해보자. 

그림3. BR 영역의 Hex 값

'그림3'의 11h에서 2h 만큼의 데이터는 Sector의 크기를 나타내는데, 00 02h 라고 되어 있다. 리틀엔디안 방식을 사용하므로 실제 데이터는 02 00h 라고 볼 수 있고, 이를 10진수로 변환하면 512가 된다. 즉, Sector의 크기가 512 Bytes 인 것이다.

 

Sector 크기 바로 뒷 부분(13h)은 Sector per Cluster를 나타낸다. 이 것은 클러스터가 몇 개의 섹터로 이루어져 있는지를 나타내며 위 사진에서는 01이라고 되어있다. 이는 클러스터가 1개의 Sector로 이루어져 있다는 것을 의미한다. 다시말해 여기서 클러스터 1개의 크기 = Sector의 크기 = 512 Bytes 인 것이다.

 

다음으로 0020h의 4~7h에는 FAT Size(크기)가 나와있다. 단위는 Sector이고 0B 02 00 00 라고 나와 있으므로 리틀엔디안으로 방식으로 읽으면 00 00 02 0B 즉, 10진수로 523이다. 즉, FAT는 523개의 Sector로 이루어져있고, Sector의 크기는 512 이므로 523 * 512 = 267776 이고 16진수로 바꾸면 41600h 만큼이 FAT Size이다. '그림 1'에서도 FAT의 크기가 41600h 인 것을 확인할 수 있다.

 

 

2) FAT1 영역:

그림4. FAT1 영역(화살표)

FAT1 영역은 BR의 끝지점(4000h)에서 시작한다. 그 시작에는 항상 'F8 FF FF 0F (거꾸로 읽어야 됨)' 가 있고, 마지막엔 'FF FF FF 0F(거꾸로)'가 있다. 그리고 FAT1 영역에서는 실제 어떤 클러스터가 사용중인지 사용중이지 않은지에 대한 내용을 확인할 수 있다.

위에서 FAT의 크기는 523개의 섹터로 이루어져 있다고 했다. (여기서 1섹터 = 1클러스터) hex 값을 통해 523개의 클러스터 중 실제로 쓰이고 있는 클러스터를 확인해보자.

그림5. FAT1 hex 값

FAT1에서는 하나의 클러스터를 4 Bytes로 표현하고 있다. 그리고 클러스터2는 항상 루트 디렉토리가 존재함을 의미한다. 

 

그리고 실제 사용중인 클러스터를 확인하려면 루트 디렉토리를 의미하는 클러스터2의 뒤인 클러스터3 부터 'FF FF FF 0F'(파일의 끝)' 까지 몇 개의 클러스터가 있는지를 확인하면 된다. 아래의 노란색 부분이라고 할 수 있으며 여기서는 총 34개의 클러스터가 사용되고 있다.

그림6. 사용중인 클러스터의 수

 

 

3) Directory Entry 구조:

그림7. Directory Entry 구조(화살표)

Data 영역의 시작은 Directory Entry로 이루어져 있다. 이 곳에서 파일들에 대한 메타데이터를 볼 수 있다. 일반적으로 86C00h부터 86C30h 까지의 40h 정도가 파일의 Directory Entry이다. 이 곳에서 데이터의 위치 및 크기에 대한 정보를 확인할 수 있다.

그림8. Directory Entry hex 값

데이터의 위치는 First Cluster High bytes와 First Cluster low bytes를 더하면 알 수 있다. 이때 산수의 더하기가 아니고 문자열을 그대로 더해야 된다. str 값끼리 더한다고 생각하면 된다. '그림8'과 같이 86C30h의 4~5h와 86C30h의 A~B가 각각 First Cluster High bytes와 First Cluster low bytes를 나타낸다. 0000 0003 이므로 클러스터 3부터 데이터가 시작된다는 것을 알 수 있다. (※ 클러스터 3의 위치는 어디일까? 클러스터 2의 위치가 86C00h 이고, 클러스터 1개의 크기가 512 bytes(=200h) 이므로 86E00h가 클러스터 3의 위치이다.)

 

데이터의 크기는 First Cluster low bytes 바로 뒤인 86C30h의 C~F에서 확인 할 수 있다. 여기서는 00 00 43 28 즉, 17192 Bytes가 데이터의 크기이다. 참고로 17192를 섹터의 크기는 512로 나누면 33.57이다. 즉 34개의 클러스터를 사용하고 있다는 것을 다시 한번 확인할 수 있다.

 

4) Data Extract 

3번에서 데이터의 시작(86E00h)과 크기(34개의 클러스터)를 확인했다. 이만큼을 추출하면 데이터를 확인할 수 있다.

실제 추출은 다음 포스팅에서 확인해보자.

 

 

#2. NTFS

2-1. NTFS란?  

  • New Technology File System의 약자로 파일 시스템의 한 종류이다.

  • 물리적 한계는 2^64 이지만, 현재 2^32인 256TB 까지 저장 가능하다

  • 논리 파티션 하나마다 16TB가 한계이다.

 

 

 

 

2-2. NTFS 구조

그림9. NTFS 구조

1) VBR(Volume Boot Record) 영역:

VBR은 부팅을 위한 영역으로 Boot Sector와 NTLDR로 이루어져 있다. 그리고 FAT32의 BR(Sector의 크기, Sector per Cluster , Master File Table(MFT)의  위치 등등)과 같이 시스템에 대한 다양한 정보들을 가지고 있다. 아래 그림10 에서 VBR 영역을 확인해보자.

그림10. VBR hex 값

0000h의 B~C 부분에서 Sector의 크기를 알 수 있다. 00 02 -> 02 00 즉, 512 bytes가 Sector의 크기이다. 

 

Sector 크기 바로 뒷 부분 (Dh)은 Sector per Cluster를 나타낸다. 이 것은 클러스터가 몇 개의 섹터로 이루어져 있는지를 나타내며 위 사진에서는 08이라고 되어있다. 이는 1개의 클러스터가 8개의 Sector로 이루어져 있다는 것을 의미한다. 다시말해 여기서 클러스터 1개 = Sector 8개 = 512 Bytes * 8 = 4096 Bytes 인 것이다.

 

그리고 그림10의 2번째 네모를 보면 MFT의 위치를 알 수 있다. LogicalClusterMFT는 MFT의 Offset 이다. 4로 나와있는데 이는 4개의 클러스터 뒤에 MFT가 있다는 것이며, 4 * 4096 = 16384 = 4000h 이므로 4000h부터 MFT 인 것을 알 수 있다.

 

LogicalClusterMFTMirror는 FAT32의 FAT2 처럼 백업 영역이다.

 

 

2) MFT Record 영역:

파일들에 대한 다양한 정보들이 포함되어 있으며, 1024 bytes 크기(400h)의 MFT Entry로 이루어져 있다. 

그림11. MFT Record 1

 

3) File RECORD 영역(Data 영역):

그림 12의 첫번째 네모 박스인 46 49 4C 45는 파일 레코드의 시작을 의미하며, 그림 12의 아래에서 데이터의 시작 위치에 대한 정보(노란색)와 데이터의 크기(초록색)를 알 수 있다. (1000h를 곱하는 것은 클러스터의 크기만큼 곱해주는 것이다.)

그림 12. MTF Record 2

 

 

3) Data Extract 

2번에서 데이터의 시작(750000h)과 크기(30000h)를 확인했다. 이만큼을 추출하면 데이터를 확인할 수 있다.

실제 추출은 다음 포스팅에서 확인해보자.

 

 

 

 

 

 

끝.

Comments