본문 바로가기

File System

NTFS(New Technology File System) File System Structure Analysis

이번에 분석해볼 파일시스템은 현재 많은 사용자가 사용하고 있는 NTFS File System 입니다.

 

FAT(File Allocation Table) File System은 개인의 운영체제 용도로 사용하기 위해서 만들어진 파일 시스템입니다.

하지만 새로운 운영체제인 Windows NT(New Technology)의 등장으로 서버용 운영체제에서 사용하기위한 다양한 기능이 필요했습니다.

그래서 FAT File System 이후에 등장한 파일 시스템이 오늘 분석해볼 NTFS File System 입니다.

 

- NTFS Version

 

NTFS는 Windows NT 이후에 사용하고 있으며 NTFS의 Version이 운영체제에 따라서 다릅니다.

NTFS Version by OS

- NTFS Cluster Size 

 

이번에는 운영체제 및 볼륨의 크기에 따른 클러스터(Cluster) 크기를 알아 보겠습니다.

Cluster Size by OS & Volume Size

- NTFS File & Volume Maximum Size

 

NTFS 최대 사이즈를 한번 알아 보겠습니다.

File & Volume Maximum Size in NTFS

- NTFS Feature

 

NTFS의 특징은 아래와 같습니다.

 

- USN Journal 사용 : 파일의 변경 내용을 기록한 이후에 시스템 오류 발생으로 재부팅 될 경우 해당 파일에서 롤백을 진행

- ADS(Alternate Data Stream) 사용 : 다중 데이터 스트림을 지원

- Sparse 파일 사용 : 파일 데이터가 대부분은 0일 경우에 실제 데이터 기록 없이 정보만 기록

- 파일 압축 : LZ77의 변형된 알고리즘을 사용하여 파일 데이터 압축 지원

- VSS(Volume Shadow Copy) Service 사용 : Windos 2003 부터 지원된 기능으로 새롭게 덮여씌여진 파일 및 디렉터리의 백업본을 유지해서 복구 지원

- EFS(Encrypting File System) 사용 : FEK(File Encryption Key)를 이용한 대칭키 방식의 파일 데이터 암호화 지원

- Quotas 사용 : 사용자 별 디스크 사용량 제한  

- 유니코드 지원 : 다국어 사용 가능

- 동적 배드 클러스터 할당 : 배드 섹터가 발생 했을 때 자동으로 클러스터를 재할당 

- 대용량 지원 : 2TB가 넘는 대용량 볼륨을 이용 가능

 

- NTFS Architecture 

 

NTFS Architecture 를 한번 알아 보겠습니다.

File & Volume Maximum Size in NTFS

POST(Boot Process) -> MBR(Master Boot Record) 읽어 오기를 진행 합니다.

이제 VBR에 있는 부트 섹터를 읽어옵니다.

그리고 나서 Ntldr.dll 파일(NTFS.sys , Ntoskrnl.exe)을 읽어옵니다.

Ntldr.dll 파일은 CPU를 보호 모드로 전환 하면서 시작 옵션 및 초기 메뉴를 설정 하는 DLL 파일 입니다.

 

NTFS.sys File : 시스템 파일 드라이버로 C:\Windows\System32\drivers 에 존재 합니다.

Ntiskrnl.exe File : 시스템 장지 드라이버 로드 정보 획득 용로도 C:\Windows\System32 에 존재 합니다.

 

그리고 나서 Operation System 인 운영체제를 실행 하는 것 입니다.

여기 까지의 작업이 완료되면 사용자는 OS 위에 있는 응용프로그램을 사용하게 됩니다.

 

- NTFS Structure

 

NTFS 구조는 간략하게 표현하면 VBR + MFT + Data Area 로 구성 되어 있습니다.

NTFS brief Structure

모든 데이터는 파일 형식으로 관리 하며 VBR은 고정 적으로 맨 앞자리에 위치합니다.

MFT File 은 일반적으로 VBR 이후에 존재 하는데 데이터 영역의 어느곳에 와도 무관합니다.

 

1. VBR(Volume Boot Record)

 

VBR(Volume Boot Record)은 NTFS로 포맷된 파티션의 가장 앞부분에 위치하는 영역입니다.

VBR 영역 에는 Boot Sector, NTLDR Location, Boot Code를 담고 있습니다.

 

VBR의 섹터 크기는 Cluster Size에 의해서 정해 지게 됩니다.

NTFS VBR Size by Cluster Size

클러스터의 크기는 VBR에 있는 Bytes Per Sector, Sector Per Cluster 로 알 수 있습니다.

 

기본적으로 1클러스터당 4KB 이기 때문에 8섹터입니다.

NTFS VBR Detail Structure

0번 섹터는 부트 섹터 입니다.

그리고 남은 섹터는 NTLDR 위치 및 추가적인 부트 코드 정보를 담고 있습니다.

 

VBR을 한번 구조적으로 나눠 보면 아래와 같이 나눌 수 있습니다.

NTFS VBR Structure Data

BPB(BIOS Parameter Block)의 Layout을 확인해 보겠습니다.

 

중요한 내용들만 한번 다뤄 보겠습니다.

 

1.1 Jump Command to Boot Code (0x00 ~ 0x02, 3Byte)

Jump Command to Boot Code 라고도 불리지만 CPU Jump Command 라고도 불립니다.

CPU의 명령 실행 분기를 부트 코드로 옮기는 역할을 합니다.

아래는 Jump Command to Boot Code 에 들어가는 값이 파일시스템마다 어떻게 다른지 표현한 표입니다.

NTFS File System Format - Jump Command Value

위의 예제 파일은 FAT32 파일시스템이기 때문에 EB 58 90 을 띄고 있습니다.

NTFS File System Format - Jump Command to Boot Code

1.2 OEM(Original Equipment Manufacturing) ID (0x03 ~ 0x0A, 8Byte)

 

NTFS File System Format - OEM ID

FAT12/16/32와 달리 NTFS는 NTFS와공백을 표시하고 있습니다.

일종의 제조사 ID 같은형식으로 박혀 있는 시그니처 입니다.

 

1.3 BPB(BIOS Parameter Block) (0x0B ~ 0x59, 78Byte)

 

예제 파일에서 BPB 영역을 확인해 보겠습니다.

NTFS File System Format - BPB(BIOS Parameter Block)

BPB 구조를 Layout으로 확인을 해보겠습니다.

NTFS File System Format - VBR BPB Layout

BPB 영역을 확인해 보면 다양한 정보를 가지고 있으며 주로 클러스터 섹터의 크기 또는 이후에 나오는 $MFT 관련 정보가 들어있습니다.

 

BPB 영역에 포함되어있는 정보를 확인해 보도록 하겠습니다.

NTFS File System Format - BIOS Parameter Block Data

2. NTLDR Information & Boot Strap 

 

NTLDR Information & Boot Strap 에서는 NTFS 부트 로더의 위치 정보를 담고 있습니다.

NTFS File System Format - NTLDR Information & Boot Strap

위와 같이 VBR 다음섹터인 1번섹터에 위치해 있다는 것을 알 수 있습니다.

 

윈도우 NT, 2000, XP : NTLDR (NT Loader) 

=> 경로 : "C:\"

 

윈도우 Vista, 7, 8, 10 : BOOTMGR (Boot Manager)

=> 경로 : "C:\Windows\Boot\"

 

3. MFT(Master File Table)

$MFT 파일에 대한 내용은 아래의 글에서 확인해 볼 수 있다.

URL : blog.forensicresearch.kr/32

 

 

4. $UsnJrnl , $LogFile

 

이제 $UsnJrnl 과 $LogFile을 분석해야 하는데 해당 파일들은 NTFS 파일 시스템에 운영체제가 설치 되어 있을때 생성이 됩니다.

그렇기 때문에 예제 파일 에서는 $UsnJrnl 과 $LogFile을 분석할 수 없습니다.

 

해당 파일들은 따로 File Structure 카테고리에서 분석을 진행 하겠습니다.

태그