이번에 분석해볼 파일시스템은 현재 많은 사용자가 사용하고 있는 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 Cluster Size
이번에는 운영체제 및 볼륨의 크기에 따른 클러스터(Cluster) 크기를 알아 보겠습니다.
- NTFS File & Volume Maximum Size
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 를 한번 알아 보겠습니다.
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 로 구성 되어 있습니다.
모든 데이터는 파일 형식으로 관리 하며 VBR은 고정 적으로 맨 앞자리에 위치합니다.
MFT File 은 일반적으로 VBR 이후에 존재 하는데 데이터 영역의 어느곳에 와도 무관합니다.
1. VBR(Volume Boot Record)
VBR(Volume Boot Record)은 NTFS로 포맷된 파티션의 가장 앞부분에 위치하는 영역입니다.
VBR 영역 에는 Boot Sector, NTLDR Location, Boot Code를 담고 있습니다.
VBR의 섹터 크기는 Cluster Size에 의해서 정해 지게 됩니다.
클러스터의 크기는 VBR에 있는 Bytes Per Sector, Sector Per Cluster 로 알 수 있습니다.
기본적으로 1클러스터당 4KB 이기 때문에 8섹터입니다.
0번 섹터는 부트 섹터 입니다.
그리고 남은 섹터는 NTLDR 위치 및 추가적인 부트 코드 정보를 담고 있습니다.
VBR을 한번 구조적으로 나눠 보면 아래와 같이 나눌 수 있습니다.
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 에 들어가는 값이 파일시스템마다 어떻게 다른지 표현한 표입니다.
위의 예제 파일은 FAT32 파일시스템이기 때문에 EB 58 90 을 띄고 있습니다.
1.2 OEM(Original Equipment Manufacturing) ID (0x03 ~ 0x0A, 8Byte)
FAT12/16/32와 달리 NTFS는 NTFS와공백을 표시하고 있습니다.
일종의 제조사 ID 같은형식으로 박혀 있는 시그니처 입니다.
1.3 BPB(BIOS Parameter Block) (0x0B ~ 0x59, 78Byte)
예제 파일에서 BPB 영역을 확인해 보겠습니다.
BPB 구조를 Layout으로 확인을 해보겠습니다.
BPB 영역을 확인해 보면 다양한 정보를 가지고 있으며 주로 클러스터 섹터의 크기 또는 이후에 나오는 $MFT 관련 정보가 들어있습니다.
BPB 영역에 포함되어있는 정보를 확인해 보도록 하겠습니다.
2. NTLDR Information & Boot Strap
NTLDR Information & Boot Strap 에서는 NTFS 부트 로더의 위치 정보를 담고 있습니다.
위와 같이 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 카테고리에서 분석을 진행 하겠습니다.
'File System' 카테고리의 다른 글
FAT32(File Allocation Table) File System Structure Analysis (0) | 2020.03.29 |
---|---|
GPT(GUID Partition Table) Partition Structure Analysis (2) | 2020.03.16 |
MBR(Master Boot Record) Partition Structure Analysis (0) | 2020.03.16 |
exFAT(Extended File Allocation Table) File System Structure Analysis (0) | 2020.03.08 |
디렉터리 엔트리 분석 [Directory Entry Analysis] - SFN, LFN (0) | 2020.02.11 |