분석, 데이터 복구를 위한 파일 시스템 구조 파악 - 2


1. 파티션과 MBR

시스템은 부팅과정에서 파티션의 크기, 위치, 설치된 운영체제 등을 파악하여 그에 맞게 구동해야 한다.
이러한 정보를 담고 있는 영역이 Boot Record(BR)영역이며 윈도우 운영체제의 경우 파티션의 첫 번째 섹터에 위치한다.

2. Boot Record

시스템은 부팅 과정에서 운영체제의 커널 파일을 불러와 구동시킨다.
이러한 역할은 BR(Boot Record) 영역의 정보를 통해 수행된다. BR은 각 파티션의 첫 섹터에 위치한다.
파티션을 나누지 않는 단일 파티션의 경우 1개의 BR 영역이 첫 번째 섹터에 위치한다. 하지만 분할된 파티션의 경우 각 파티션의 BR 영역을 관리할 필요가 있다.


3. Master Boot Record(MBR)

각 BR 영역을 찾아갈 수 있는 정보를 담고 있다.
MBR 기본적인 구조는 446바이트의 부트 코드(Boot Code)영역, 64바이트의 파티션 테이블(Partition Table)영역, 2바이트 시그니쳐(Signature)로 구성되어 있다.
부트 코드 영역에서는 파티션 테이블에서 부팅 가능한 파티션을 찾아 해당 파티션의 부트 섹터(Boot Sector)를 호출하는 코드가 위치한다. 즉 부팅 중 POST(Power On Self-Test)과정 후에 BIOS에 의해서 해석되어 동작하는 영역이다.



4. 확장 파티션(Extended Partition)

MBR 영역에서 파티션 정보를 표현하는 공간은 64Byte로 총 4개까지만 파티션을 분할 할 수 있다.
이런 한계를 극복하기 위해 나온 개념이 확장 파티션이다. 확장 파티션을 가르키는 파티션 정보는 파티션 유형을 나타내는 1바이트의 값이 0x05나 0x0f으로 설정된다.
4번째 파티션 테이블 정보의 파티션 유형 값이 0x05이나 0x0F이면 확장 파티션을 사용하고 있는 것을 알 수 있으며 해당 정보를 따라가면 또 다른 파티션 테이블 정보를 얻을 수 있는 MBR 영역을 확인 할 수 있다. 


5. FAT(File Allocation Table)

MS-DOS파일 시스템에서 파일의 위치 정보를 기록한 테이블을 지칭한다.
이후 윈도우 시스템으로 운영체제가 바뀌면서 MS-DOS파일 시스템 자체를 가리키는 용어로 확립되었다.
여기에서는 파일 시스템과 테이블을 구분하기 위해 파일 시스템은 "FAT12/16/32" 또는 "FAT 파일 시스템"이라고 표기하고, 테이블은 "FAT 영역"이라고 표기한다. FAT 파일 시스템은 크게 FAT12, FAT 16, FAT32로 나눌 수 있는데 뒤의 숫자는 파일 시스템에서 관리하는 클러스터의 개수를 의미한다.


 파일 시스템

클러스터 최대 개수 

FAT12

4,084 

FAT16 

65,524 

FAT32 

67,092,481 

5-1. FAT 영역

예약 영역은 FAT파일 시스템에서 가장 앞에 위치하는 구조로 여러 개의 섹터를 포함한다. 예약 영역의 크기는 기본적으로 FAT12/16의 경우에 1개의 섹터, FAT32의 경우에 32개의 섹터를 사용한다. FAT영역은 예약 영역 다음에 바로 위치하며, 일반적으로 두 개의 FAT영역(FAT1, FAT2)이 존재한다. FAT2는 FAT1의 복사본으로 만약의 경우를 대비해 백업한다.
FAT영역은 데이터 영역의 클러스터 할당 상태를 표시한다. FAT16은 16비트, FAT32는 32비트를 사용해 데이터 영역의 시작 클러스터부터 마지막 클러스터까지 할당 상태를 표시한다.



< 출처 : http://forensic-proof.com/archives/378 >


5-2. 데이터 영역

FAT파일 시스템 역시 트리 형태로 표현되는데 가장 중요한 요소가 최상위 루트 디렉토리이다.
FAT 12/16은 루트 디렉토리가 FAT 영역 바로 뒤, 데이터 영역의 제일 앞부분에 온다. 따라서 루트 디렉토리의 시작은 FAT Entry 2번에 해당한다. FAT 12/16은 루트 디렉토리를 위해 최대 32개 섹터인 16,384바이트 크기의 영역을 사용 할 수 있다. Directory Entry 크기가 32바이트이기 때문에 FAT12/16에서는 최대 512개의 Entry를 나타낼 수 있다. 따라서 루트 디렉토리 내에 파일 및 디렉토리를 최대 512개까지 생성할 수 있다.
Directory Entry의 구조로 파일의 이름, 확장자, 속성, 시간 정보, 시작 클러스터 위치, 파일크기 등의 정보가 포함된다.


< 출처 : http://forensic-proof.com/archives/378 >


6. NTFS(New Technology File System)

윈도우 NT부터 사용되기 시작한 파일 시스템으로 FAT파일 시스템과는 근본적으로 다른 개념으로 개발되었다.
NTFS는 VBR(Volume Boot Record) 영역, MFT(Master File Table) 영역, Data영역으로 나눌 수 있다.
VBR영역이 가장 앞에 위치하고 이어서 MFT영역과 데이터 영역이 있다.
VBR영역은 부트 섹터와 추가적인 부트코드가 저장되는 부분이다. 

6-1. MFT(Master File Table) Entry
NFTS는 모든 데이터를 파일 형태로 관리한다. 각 파일들의 위치, 시간정보, 크기, 파일 이름 등의 속성 정보는 MFT Entry(File Record)라고 불리는 특별한 형태의 구조를 사용하여 저장한다. MFT는 이러한 MFT Entry의 묶음으로 모든 파일들의 정보를 가지고 있다.
예약된 MFT Entry들은 NTFS의 다양한 특성을 지원하기 위해 사용된다. 이후 사용자에 의해 파일이 생성될 때마다 새로운 MFT Entry가 할당되어 해당 파일의 정보를 유지 관리 하게된다.
MFT Entry 0번을 사용하는 파일은 $MFT 파일이다. 이것은 다른 Entry와는 다르게 전체 파일 이름을 대문자로 표현한다. $MFT는 MFT자체를 가르키는 것으로 NTFS상에 존재하는 모든 MFT Entry정보를 담고 있다. MFT Entry 11번의 $Extend는 $ObjID, $Quota, $Reparse points, $UsnJrnl 등의 추가적인 파일 정보를 기록하기 위해 사용되고 12~15번은 예약 영역이다.
앞서 언급한 바와 같이 MFT는 파일 시스템의 여러 영역에 조각나 존재할 수 있기 때문에 MFT전체 정보를 유지, 관리하기 위한 파일이 필요한데 $MFT가 그 역할을 수행하고 있다. 따라서 각 파일들을 분석하기 위해서는 전체 $MFT정보를 획득하는 것이 선행되어야 한다. 


< 출처 : http://kali-km.tistory.com/entry/NTFS-File-System-4



< $MFT 파일 획득 방법 > 


6-2. MFT Attribute

Fixup 배열에 이어 여러 개의 속성이 뒤 따라 오는 것을 알 수 있다.
파일의 시간 정보, 이름, 데이터 등은 각각 하나의 속성으로 표현되는데 파일의 종류에 따라 하나 이상의 다양한 속성들이 저장된다. 속성의 이름은 미리 예약된 MFT Entry이름과는 다르게 ${uppercase}와 같이 표현된다. [[단, $MFT제외]]
각 속성 앞부분에는 공통적으로 속성 헤더(attribute Header)이 존재한다. 


< 출처 : http://forensic-proof.com/archives/378 >



< 출처 : http://kali-km.tistory.com/entry/NTFS-File-System-5



※ 출처에 있는 사이트를 가면 좀 더 자세하고 친절한 설명이 있다. 더 많은 정보를 원하면 가보도록 해보자.

+ Recent posts