Microsoft PowerPoint - [#4-1] NTFS.pptx

Similar documents
Microsoft PowerPoint - [#4-2] File System Forensic Analysis.pptx

Slide 1

Outline 1. FAT12/16/32 ü Introduction ü Internals ü Directory Structure ü Example

8.파일시스템과 파일 복구

8.파일시스템과 파일 복구

슬라이드 1

제목을 입력하세요

05Àå

Microsoft PowerPoint - [#3-2] FAT File System - exFAT.pptx

슬라이드 1

휠세미나3 ver0.4

Microsoft PowerPoint - 알고리즘_1주차_2차시.pptx

PowerPoint Presentation

PowerPoint Presentation

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3


디지털포렌식학회 논문양식

bn2019_2

SRC PLUS 제어기 MANUAL

Dropbox Forensics

PowerPoint Presentation

디지털포렌식학회 논문양식

chap 5: Trees

Microsoft PowerPoint - o8.pptx

GNU/Linux 1, GNU/Linux MS-DOS LOADLIN DOS-MBR LILO DOS-MBR LILO... 6

슬라이드 1

1 법적 고지 사항 SK hynix Inc.는 사전 통보 없이 제품, 정보 및 사양을 변경할 권리를 보유합니다. 본 문서의 제품 및 사양은 참조용입니다. 본 문서의 모든 정보는 어떠한 형태의 보증 없이 있는 그대로 제공됩니다. 본 문서와 여기 포함된 모든 정보는 SK

다음 사항을 꼭 확인하세요! 도움말 안내 - 본 도움말에는 iodd2511 조작방법 및 활용법이 적혀 있습니다. - 본 제품 사용 전에 안전을 위한 주의사항 을 반드시 숙지하십시오. - 문제가 발생하면 문제해결 을 참조하십시오. 중요한 Data 는 항상 백업 하십시오.

Tablespace On-Offline 테이블스페이스 온라인/오프라인

7장. 교착상태(deadlock)

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

목 차

Microsoft PowerPoint - 02_Linux_Fedora_Core_8_Vmware_Installation [호환 모드]

chap 5: Trees

PowerPoint 프레젠테이션

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

PowerPoint 프레젠테이션

Microsoft Word doc

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

adfasdfasfdasfasfadf

Microsoft PowerPoint - 6.pptx

1217 WebTrafMon II

C# Programming Guide - Types

untitled

목차 1. 제품 소개 특징 개요 Function table 기능 소개 Copy Compare Copy & Compare Erase

3. FAT32 파일시스템의구조 1) 마스터부트레코드 (MBR) 하드디스크의첫번째섹터를 MBR 이라고하며, 512 바이트의크기입니다. MBR 에서는해당디스크의파티션에대한정보를담고있으며, 아래 < 그림1 > 과같은구조를갖습니다. < 그림1. 마스터부트레코드구조 > MBR

알아 둘 사항 아이오드 제조사는 본 기기에 하드디스크를 포함하여 출고하지 않습니다. 따라서 하드디스크에 문제가 발생할 경우, 구매처 또는 해당 하드디스크 서비 스센터에 문의 하시기 바랍니다. 정해진 용도 외의 사용으로 발생한 문제에 대해서, 당사는 어떠한 책임도 지지

PowerPoint Presentation

The Pocket Guide to TCP/IP Sockets: C Version

R50_51_kor_ch1

1. Execution sequence 첫번째로 GameGuard 의실행순서는다음과같습니다 오전 10:10:03 Type : Create 오전 10:10:03 Parent ID : 0xA 오전 10:10:03 Pro

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

untitled

[ 네트워크 1] 3 주차 1 차시. IPv4 주소클래스 3 주차 1 차시 IPv4 주소클래스 학습목표 1. IP 헤더필드의구성을파악하고요약하여설명할수있다. 2. Subnet ID 및 Subnet Mask 를설명할수있고, 각클래스의사용가능한호스트수와사설 IP 주소및네트

Microsoft PowerPoint - ch07.ppt

6. 설치가시작되는동안 USB 드라이버가자동으로로드됩니다. USB 드라이버가성공적으로로드되면 Setup is starting( 설치가시작되는중 )... 화면이표시됩니다. 7. 화면지침에따라 Windows 7 설치를완료합니다. 방법 2: 수정된 Windows 7 ISO

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

-. Data Field 의, 개수, data 등으로구성되며, 각 에따라구성이달라집니다. -. Data 모든 의 data는 2byte로구성됩니다. Data Type는 Integer, Float형에따라다르게처리됩니다. ( 부호가없는 data 0~65535 까지부호가있는

JVM 메모리구조

歯규격(안).PDF

Remote UI Guide

BMP 파일 처리

Microsoft Word - FS_ZigBee_Manual_V1.3.docx


LXR 설치 및 사용법.doc

solution map_....

UML

VTP(VLAN Trunk Protocol) Cisco 전용프로토콜로서트렁크로연결된스위치간에 VLAN 정보를공유하는기능을수행한다. 즉, 하나의스위치에서 VLAN을생성하거나, 삭제또는수정을실시하면, 트렁크로연결된다른스위치에게변경된 VLAN 데이터베이스정보를공유하는기능을담

컴퓨터관리2번째시간

Deok9_Exploit Technique

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

Secure Programming Lecture1 : Introduction

Windows Server 2012

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

Deok9_PE Structure

Windows 8에서 BioStar 1 설치하기

[ 컴퓨터시스템 ] 3 주차 1 차시. 디렉토리사이의이동 3 주차 1 차시디렉토리사이의이동 학습목표 1. pwd 명령을사용하여현재디렉토리를확인할수있다. 2. cd 명령을사용하여다른디렉토리로이동할수있다. 3. ls 명령을사용하여디렉토리내의파일목록을옵션에따라다양하게확인할수

PWR PWR HDD HDD USB USB Quick Network Setup Guide xdsl/cable Modem PC DVR 1~3 1.. DVR DVR IP xdsl Cable xdsl Cable PC PC DDNS (

항목

Orcad Capture 9.x

SMB_ICMP_UDP(huichang).PDF

슬라이드 1

CD-RW_Advanced.PDF

MS-SQL SERVER 대비 기능

제 11 장 다원 탐색 트리

APOGEE Insight_KR_Base_3P11

제20회_해킹방지워크샵_(이재석)

본교재는수업용으로제작된게시물입니다. 영리목적으로사용할경우저작권법제 30 조항에의거법적처벌을받을수있습니다. [ 실습 ] 스위치장비초기화 1. NVRAM 에저장되어있는 'startup-config' 파일이있다면, 삭제를실시한다. SWx>enable SWx#erase sta

슬라이드 1

Microsoft PowerPoint - 04-UDP Programming.ppt

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

DocsPin_Korean.pages

Microsoft Word - HD-35 메뉴얼_0429_.doc

MAX+plus II Getting Started - 무작정따라하기

hlogin2

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100


[Brochure] KOR_TunA

PCServerMgmt7

Transcription:

New Technology File System Twitter : @pr0neer Blog : f Email : proneer@gmail.com Kim Jinkook

Outline 1. NTFS Introduction Internals Features Example

NTFS Introduction Security is a people problem

NTFS Introduction NTFS Version 기존 FAT (File Allocation Table) 파일시스템은개인용운영체제 ( 윈도우 3.1/95/98) 를위해사용 윈도우 NT (New Technology) 의등장으로서버용운영체제에서사용하기위한새로운기능을추가한파일시스템필요 윈도우 NT 이후 ~ 윈도우 7 까지사용 버전 운영체제 1.0 Windows NT 3.1 1.1 Windows NT 3.5 1.2 Windows NT 3.51 3.0 Windows 2000 3.1 5.1 Windows XP 5.2 Windows Server 2003 6.0 Windows Vista, Windows Server 2008, Windows 7

NTFS Introduction NTFS Cluster Size 클러스터크기가 4 KB 가넘을경우파일압축을지원하지못함 볼륨크기 Windows NT 3.51 Windows NT 4.0 Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7 7MB 512 MB 512 bytes 4 KB 4 KB 512 MB 1 GB 1 KB 4 KB 4 KB 1 GB 2 GB 2 KB 4 KB 4 KB 2 GB 2 TB 4 KB 4 KB 4 KB 2 TB 16 TB Not Supported* Not Supported* 4 KB 16 TB 32 TB Not Supported* Not Supported* 8 KB 32 TB 64 TB Not Supported* Not Supported* 16 KB 64 TB 128 TB Not Supported* Not Supported* 32 KB 128 TB 256 TB Not Supported* Not Supported* 64 KB > 256 TB Not Supported Not Supported Not Supported * MBR 의제한으로지원하지못하는것을의미한다. http://support.microsoft.com/kb/140365

NTFS Introduction NTFS Size Limit 제한항목 설명 최대파일크기 구조상최대값 실제구현된최대값 16 exabytes 1KB (2 64 bytes 1KB) 16 terabytes 64 KB (2 44 bytes 64 KB) 최대볼륨크기 구조상최대값 2 64 clusters 1 실제구현된최대값 256 terabytes 64 KB (2 32 clusters 1) 볼륨당파일수 4,294,967,295 (2 32 1) http://technet.microsoft.com/en us/library/cc781134%28ws.10%29.aspx

NTFS Introduction Features 특징 USN 저널 ADS (Alternate Data Stream) 파일의변경내용을기록한후시스템오류발생으로재부팅될경우완료되지않은처리작업을롤백 (Rollback) 다중데이터스트림지원 설명 Sparse 파일 파일데이터가대부분 0 일경우실제데이터기록없이정보만기록 파일압축 LZ77 의변형된알고리즘을사용하여파일데이터압축지원 VSS (Volume Shadow Copy) Service EFS (Encrypting File System) 윈도우 2003 부터지원된기능으로새롭게덮어써진파일및디렉터리의백업본을유지하여복구지원 FEK (File Encryption Key) 를이용한대칭키방식의파일데이터암호화지원 Quotas 사용자별디스크사용량제한 유니코드지원다국어지원 ( 파일, 디렉터리, 볼륨이름모두유니코드사용 ) 동적배드클러스터할당 배드섹터가발생한클러스터를자동으로재할당 대용량지원 2TB 가넘는대용량볼륨지원

Security is a people problem

NTFS Architecture POST Ntldr.dll(XP)/Bootmgr(Vista,7) : CPU 를보호모드로전환, 시작옵션및초기메뉴설정 (C:\/C:\Windows\Boot\) Master Boot Record Boot Sector in VBR NTFS.sys : 시스템파일드라이버 (C:\Windows\System32\drivers\) Ntldr/Bootmgr NTFS.sys Ntoskrnl.exe Ntoskrnl.exe : 시스템장치드라이버로드정보획득 (C:\Windows\System32\) Operating System Kernel Mode Application User Mode

Layout $Boot, $AttrDef, $MFT $MFTMirr, $LogFile, $Root $Bitmap, $Upcase, $Secure ~ NTFS 3.0 $Boot $LogFile, $AttrDef $MFT, $Secure $MFTMirr, $Root $Bitmap, $Secure NTFS 3.1 ~

Structure Volume Boot Record Master File Table Data Area 모든데이터는파일형태로관리 ( 관리데이터, 디렉터리등 ) VBR (Volume Boot Record) 은고정된위치 MFT 는일반적으로 VBR 이후에존재하지만데이터영역어느곳에와도무관

VBR (Volume Boot Record) Volume Boot Record Master File Table Data Area NTFS 로포맷된파티션의가장앞부분에위치하는영역 부트섹터, NTLDR 위치정보, 추가적인부트코드저장 VBR 의크기는클러스터크기와동일 클러스터크기 VBR 크기 ( 섹터 ) 512 bytes 1 1 KB 2 2 KB 4 4 KB 8

VBR (Volume Boot Record) Volume Boot Record Master File Table Data Area Boot Sector NTLDR Information & Boot Strap Cluster Size 0 번섹터 : 부트섹터 나머지섹터 : NTLDR 위치및추가적인부트코드정보

VBR (Volume Boot Record) Volume Boot Record Master File Table Data Area Boot Sector NTLDR Information & Boot Strap Cluster Size MBR + MBR Slack (Reserved Area) VBR 클러스터크기가 4 K 인경우

VBR (Volume Boot Record) Volume Boot Record Master File Table Data Area Jump Instruction OEM ID BPB Boot Sector NTLDR Information & Boot Strap Cluster Size 범위 (10 진수 ) 길이설명 0 2 3 bytes Jump Instruction 3 10 8 bytes OEM ID 11 35 25 bytes BPB 36 83 48 bytes Extended BPB 84 509 426 bytes Bootstrap code 510 511 2 bytes End of sector marker (Signature)

VBR (Volume Boot Record) Jump Instruction OEM ID BIOS Parameter Block Bootstrap code End of sector marker (Signature)

VBR (Volume Boot Record) BIOS Parameter Block 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Jump Boot Code OEM ID Bytes Per Sector Sec Per clus Reserved Sectors 0x10 Unused Media Unused 0x20 Unused Total Sectors 0x30 Start Cluster for $MFT Start Cluster for $MFTMirr 0x40 Clus per Entry Unused Clus Per Index Unused Volume Serial Number 0x50 Unused

VBR (Volume Boot Record) BIOS Parameter Block 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Jump Boot Code OEM ID Bytes Per Sector Sec Per clus Reserved Sectors 0x10 Unused Media Unused 0x20 Unused Total Sectors 0x30 Start Cluster for $MFT Start Cluster for $MFTMirr 0x40 Clus per Entry Unused Clus Per Index Unused Volume Serial Number 0x50 Unused Jump Boot Code : 부트코드로점프하기위한명령어 (0xEB5290) EB58 : jmp 00000054 90 : nop

VBR (Volume Boot Record) BIOS Parameter Block 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Jump Boot Code OEM ID Bytes Per Sector Sec Per clus Reserved Sectors 0x10 Unused Media Unused 0x20 Unused Total Sectors 0x30 Start Cluster for $MFT Start Cluster for $MFTMirr 0x40 Clus per Entry Unused Clus Per Index Unused Volume Serial Number 0x50 Unused OEM ID : 제조사식별값 NTFS : NTFS

VBR (Volume Boot Record) BIOS Parameter Block 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Jump Boot Code OEM ID Bytes Per Sector Sec Per clus Reserved Sectors 0x10 Unused Media Unused 0x20 Unused Total Sectors 0x30 Start Cluster for $MFT Start Cluster for $MFTMirr 0x40 Clus per Entry Unused Clus Per Index Unused Volume Serial Number 0x50 Unused Bytes Per Sector : 섹터당바이트수 Sectors Per Cluster : 클러스터당섹터수 Bytes Per Sector X Sectors Per Cluster = 클러스터크기 Reserved Sectors : NTFS 는항상파티션맨앞에부트섹터가존재하므로 0x00

VBR (Volume Boot Record) BIOS Parameter Block 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Jump Boot Code OEM ID Bytes Per Sector Sec Per clus Reserved Sectors 0x10 Unused Media Unused 0x20 Unused Total Sectors 0x30 Start Cluster for $MFT Start Cluster for $MFTMirr 0x40 Clus per Entry Unused Clus Per Index Unused Volume Serial Number 0x50 Unused Media Descriptor 0xF8 : 고정식디스크 나머지값은플로피디스크구분 ( 현재플로피사용 X)

VBR (Volume Boot Record) BIOS Parameter Block 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Jump Boot Code OEM ID Bytes Per Sector Sec Per clus Reserved Sectors 0x10 Unused Media Unused 0x20 Unused Total Sectors 0x30 Start Cluster for $MFT Start Cluster for $MFTMirr 0x40 Clus per Entry Unused Clus Per Index Unused Volume Serial Number 0x50 Unused Total Sectors : 해당볼륨이가지는총섹터수 Start Cluster for $MFT : $MFT 의 LBA 주소 Start Cluster for $MFTMirr : $MFTMirr 의 LBA 주소

VBR (Volume Boot Record) BIOS Parameter Block 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Jump Boot Code OEM ID Bytes Per Sector Sec Per clus Reserved Sectors 0x10 Unused Media Unused 0x20 Unused Total Sectors 0x30 Start Cluster for $MFT Start Cluster for $MFTMirr 0x40 Clus per Entry Unused Clus Per Index Unused Volume Serial Number 0x50 Unused Clusters Per MFT Entry(Record) : MFT Entry 크기 Clusters Per Index Buffer : 디렉터리공간을할당하기위해사용되는인덱스버퍼의크기 Volume Serial Number : 볼륨시리얼번호

VBR (Volume Boot Record) Volume Boot Record Master File Table Data Area Boot Sector NTLDR Information & Boot Strap Cluster Size NTFS 부트로더의위치정보 윈도우 NT, 2000, XP : NTLDR (NT Loader) C:\ 윈도우 Vista, 7 : BOOTMGR (Boot Manager) C:\Windows\Boot\

MFT (Master File Table) Volume Boot Record Master File Table Data Area Volume Boot Record Master File Table Data Area Master File Table Data Area NTFS 는파일, 디렉터리, 메타정보를모두파일형태로관리 각파일의위치, 속성, 시간정보, 이름, 크기등의메타정보는 MFT Entry 라는특별한구조로저장 MFT(Master File Table) 는 NTFS 상에존재하는모든파일의 MFT Entry 의모음 MFT 영역은파일시스템상의파일수에따라동적으로할당 일반적으로볼륨의 12.5% 정도가 MFT 영역으로할당 MFT Entry 0 ~ 15 번은파일시스템생성시함께생성되는예약된 ( 특별한용도 ) 영역

MFT (Master File Table) VBR Entry 번호 Entry 이름 설명 MFT Entry 0 0 $MFT NTFS 상의모든파일들의 MFT Entry 정보 MFT Entry 1 1 $MFTMirr $MFT 파일의일부백업본 MFT Entry 2 2 $LogFile 메타데이터의트랜잭션저널정보 : 메타데이터파일 3 $Volume 볼륨의레이블, 식별자, 버전등의정보 : 4 $AttrDef 속성의식별자, 이름, 크기등의정보 5. 볼륨의루트디렉터리 MFT Entry 15 6 $Bitmap 볼륨의클러스터할당정보 MFT Entry 16 7 $Boot 볼륨이부팅가능할경우부트섹터정보 : 8 $BadClus 배드섹터를가지는클러스터정보 : 9 $Secure 파일의보안, 접근제어와관련된정보 10 $Upcase 모든유니코드문자의대문자 11 $Extend $ObjID, $Quota, $Reparse points, $UsnJrnl 등의추가적인파일의정보를기록하기위해사용 Dt Data Area 12 15 미래를위해예약 16 포맷후생성되는파일의정보를위해사용 $ObjId 파일고유의 ID 정보 ( Windows 2000 - ) $Quota 사용량정보 ( Windows 2000 - ) $Reparse Reparse Point 에대한정보 ( Windows 2000 - ) $UsnJrnl 파일, 디렉터리의변경정보 ( Windows 2000 - )

MFT (Master File Table) VBR Entry 번호 Entry 이름 설명 MFT Entry 0 0 $MFT MFT에대한 MFT Entry MFT Entry 1 1 $MFTMirr $MFT 파일의일부백업본 MFT Entry 2 2 $LogFile 메타데이터 (MFT) 의트랜잭션저널정보 : 메타데이터파일 3 $Volume 볼륨의레이블, 식별자, 버전등의정보 : 4 $AttrDef 속성의식별자, 이름, 크기등의정보 5. 볼륨의루트디렉터리 MFT Entry 15 6 $Bitmap 볼륨의클러스터할당정보 MFT Entry 16 7 $Boot 볼륨이부팅가능할경우부트섹터정보 : 8 $BadClus 배드섹터를가지는클러스터정보 : 9 $Secure 파일의보안, 접근제어와관련된정보 10 $Upcase 모든유니코드문자의대문자 11 $Extend $ObjID, $Quota, $Reparse points, $UsnJrnl 등의추가적인파일의정보를기록하기위해사용 Dt Data Area 12 15 미래를위해예약 16 포맷후생성되는파일의정보를위해사용 $ObjId 파일고유의 ID 정보 ( Windows 2000 - ) $Quota 사용량정보 ( Windows 2000 - ) $Reparse Reparse Point 에대한정보 ( Windows 2000 - ) $UsnJrnl 파일, 디렉터리의변경정보 ( Windows 2000 - )

MFT (Master File Table) Boot Sector Volume Boot Record $MFT Cluster 25-27, 80-82 Cluster 25 Cluster 26 Cluster 27 Cluster 80 Cluster 81 Cluster 82

MFT Entry MFT Entry Header Fixup Array Attributes End Marker Unused Space MFT Entry

MFT Entry MFT Entry Header MFT Entry Header Fixup Array Attributes End Marker Unused Space MFT Entry MFT Entry 의메타정보를담고있는 48 바이트크기의영역

MFT Entry MFT Entry Header 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Signature Offset to Fixup array Entries in Fixup array $LogFile Sequence Number (LSN) 0x10 Sequence Number Hard Link count Offset to File attribute Flags Real size of MFT Entry Allocated size of MFT Entry 0x20 File Reference to Base Entry Next attribute ID Align to 4B boundary Number of this MFT Entry

MFT Entry MFT Entry Header 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Signature Offset to Fixup array Entries in Fixup array $LogFile Sequence Number (LSN) 0x10 Sequence Number Hard Link count Offset to File attribute Flags Real size of MFT Entry Allocated size of MFT Entry 0x20 File Reference to Base Entry Next attribute ID Align to 4B boundary Number of this MFT Entry Signature :MFT Entry 시그니처 ( FILE ) Offset to Fixup array : Fixup 배열의시작위치 Number of entries in Fixup array : Fixup 배열이포함하는항목수 $LogFile Sequence Number (LSN) : $LogFile 에존재하는해당파일의트랜잭션위치값 MFT Entry 가변경될때마다갱신

MFT Entry MFT Entry Header 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Signature Offset to Fixup array Entries in Fixup array $LogFile Sequence Number (LSN) 0x10 Sequence Number Hard Link count Offset to File attribute Flags Real size of MFT Entry Allocated size of MFT Entry 0x20 File Reference to Base Entry Next attribute ID Align to 4B boundary Number of this MFT Entry Sequence Number : 순서번호로 MFT Entry 생성후할당 / 해제시마다 1 씩증가 Link count : 해당 MFT Entry 에연결된하드링크 Offset to File attribute : 해당 Entry 의첫번째속성의위치값 Flags : MFT Entry 상태정보 Flags 값이 0x00 일경우는? 0x03 일경우는? Flags 값 0x01 0x02 설명 사용중 디렉터리 004 0x04 분석안됨 0x08 분석안됨

MFT Entry MFT Entry Header 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Signature Offset to Fixup array Entries in Fixup array $LogFile Sequence Number (LSN) 0x10 Sequence Number Hard Link count Offset to File attribute Flags Real size of MFT Entry Allocated size of MFT Entry 0x20 File Reference to Base Entry Next attribute ID Align to 4B boundary Number of this MFT Entry Real size of MFT Entry : 실제사용중인크기 Allocated size of MFT Entry : MFT Entry 에할당된크기 (1,024 바이트 ) File Reference to Base Entry : 해당 Entry 의 non-base 일경우자신의 base Entry 의주소값 Next attribute ID : 다음속성 ID (Entry 내에서만유효한값 ) Align to 4B boundary (XP) Number of this MFT Entry (XP)

Base & Non base MFT Entry MFT Entry 32 MFT Entry 35 MFT Entry 36 MFT Entry 37 base MFT Entry 35 non base MFT Entry 32, 36 base MFT Entry 35 base MFT Entry non base MFT Entry 파일속성내용이클경우하나이상의 MFT Entry 사용 Base MFT Entry : 해당파일의첫 MFT Entry Non-base MFT Entry : 해당파일의나머지 MFT Entry

File Reference Address 47 63 0 Sequence Value MFT Entry Address Seq Num 1102(0x044E) 044E) 0x00120012 1103(0x044F) 0x0010 1104(0x0450) 0x0001 1105(0x0451) 0451) 0x0023 1106(0x0452) 0x0044 MFT Entries 0012 0000 0000 044E 0010 0000 0000 044F 0001 0000 0000 0450 0023 0000 0000 0451 0044 0000 0000 0452 File Reference Address MFT Entry 는 48 비트의고유한주소값을가짐 MFT Entry Address (MFT Entry Number) NTFS 는특정 MFT Entry 접근시 48 비트주소를확장한파일참조주소 (File Reference Address) 사용 File Reference Address = Sequence Number + MFT Entry Address 파일참조주소를사용하는이유는?

MFT Entry Fixup Array MFT Entry Header Fixup Array Attributes End Marker Unused Space MFT Entry Fixup : 수리하다, 고치다 MFT Entry 데이터무결성판단 MFT Entry 는 1,024 바이트이므로 2 개의섹터사용 각섹터의마지막 2 바이트를이용해 Fixup Array 구현 MFT Entry 구조외에도다양한구조에서 Fixup Arrary 사용 ( 클러스터크기에따라 2 개이상의섹터사용 ) FILE Records(MFT Entries) in the $MFT INDX Records in directories i and other indexes RCRD Records in the $LogFile RSTR Records in the $LogFile

MFT Entry Fixup Array 위치데이터설명 0x0000 ( 48 Byte ) MFT Entry Header 0x0030 CD AB 00 00 00 00 00 00 FixupArray 0x01F8 11 12 13 14 15 16 17 18 End of Sector 1 0x03F8 21 22 23 24 25 26 27 28 End of Sector 2 원본데이터 위치 데이터 설명 0x0000 ( 82 Byte ) MFT Entry Header 0x0030 CD AB 17 18 27 28 00 00 FixupArray 0x01F8 11 12 13 14 15 16 CD AB End of Sector 1 0x03F8 21 22 23 24 25 26 CD AB End of Sector 2 Fixup이적용된데이터

MFT Entry Fixup Array Signature : 0x00000000 Array : 0x0000, 0x0000 0x8565 0x2D0B Sector 0 Sector 1 Signature : 0xABCD Array : 0x8565, 0x2D0B 0xABCD 0xABCD Sector 0 Sector 1

MFT Entry Attributes MFT Entry Header Fixup Array Attributes End Marker Unused Space MFT Entry

MFT Entry Attributes 속성식별값속성이름설명 16 0x10 $STANDARD_INFORMATION 파일의생성. 접근. 수정시간, 소유자등의일반적인정보 32 0x20 $ATTRIBUTE_LIST 추가적인속성들의리스트 48 0x30 $FILE_NAME 파일이름 ( 유니코드 ), 파일의생성. 접근. 수정시간 64 0x40 $VOLUME_VERSION 볼륨정보 (Windows NT 1.2 버전에만존재 ) 64 0x40 $OBJECT_ID 16 바이트의파일, 디렉터리의고유값, 3.0 이상에서만존재 80 0x50 $SECURITY_DESCRIPTOR 파일의접근제어와보안속성 96 0x60 $VOLUME_NAME 볼륨이름 112 0x70 $VOLUME_INFORMATION 파일시스템의버전과다양한플래그 128 0x80 $DATA 파일내용 144 090 0x90 $INDEX_ROOT 인덱스트리의루트노드 160 0xA0 $INDEX_ALLOCATION 인덱스트리의루트와연결된노드 176 0xB0 $BITMAP $MFT 와인덱스의할당정보관리 192 0C0 0xC0 $SYMBOLIC_LINKLINK 심볼릭링크정보 (Windows 2000+) 192 0xC0 $REPARSE_POINT 심볼릭링크에서사용하는 reparse point 정보 (Windows 2000+) 208 0xD0 $EA_INFORMATION OS/2 응용프로그램과호환성을위해사용 (HPFS) 224 0E0 0xE0 $EA OS/2 응용프로그램과호환성을위해사용 (HPFS) 256 0x100 $LOGGED_UTILITY_STREAM 암호화된속성의정보와키값 (Windows 2000+)

MFT Entry Attributes 속성식별값속성이름설명 16 0x10 $STANDARD_INFORMATION 파일의생성. 접근. 수정시간, 소유자등의일반적인정보 32 0x20 $ATTRIBUTE_LIST 추가적인속성들의리스트 48 0x30 $FILE_NAME 파일이름 ( 유니코드 ), 파일의생성. 접근. 수정시간 64 0x40 $VOLUME_VERSION 볼륨정보 (Windows NT 1.2 버전에만존재 ) 64 0x40 $OBJECT_ID 16 바이트의파일, 디렉터리의고유값, 3.0 이상에서만존재 80 0x50 $SECURITY_DESCRIPTOR 파일의접근제어와보안속성 96 0x60 $VOLUME_NAME 볼륨이름 112 0x70 $VOLUME_INFORMATION 파일시스템의버전과다양한플래그 128 0x80 $DATA 파일내용 144 090 0x90 $INDEX_ROOT 인덱스트리의루트노드 160 0xA0 $INDEX_ALLOCATION 인덱스트리의루트와연결된노드 176 0xB0 $BITMAP $MFT 와인덱스의할당정보관리 192 0C0 0xC0 $SYMBOLIC_LINKLINK 심볼릭링크정보 (Windows 2000+) 192 0xC0 $REPARSE_POINT 심볼릭링크에서사용하는 reparse point 정보 (Windows 2000+) 208 0xD0 $EA_INFORMATION OS/2 응용프로그램과호환성을위해사용 (HPFS) 224 0E0 0xE0 $EA OS/2 응용프로그램과호환성을위해사용 (HPFS) 256 0x100 $LOGGED_UTILITY_STREAM 암호화된속성의정보와키값 (Windows 2000+)

MFT Entry Attributes MFT Entry Fixup Attr Attr Attr Attr Attr Attr End Unused Header Array Header Content Header Content Header Content Marker Space 각파일의메타정보 ( 이름, 시간정보, 속성, 내용등 ) 는속성이라는구조를통해표현 각속성은속성헤더와속성내용을가짐 파일특성에따라다양한속성을가짐 속성은크기에따라 Resident 와 Non-resident 속성으로나뉨

MFT Entry Attributes Resident & Non resident Attribute MFT Entry Fixup Attr Attr Attr Attr Attr Header Array Header Content Header Content Header Cluster 360 End Marker Unused Space Attr Content Cluster 360 Resident 속성 : 속성헤더뒤에바로속성내용이저장 (MFT Entry 내부 ) $STANDARD_INFORMATION, $FILE_NAME Non-resident 속성 : 속성내용이너무많이별도의클러스터에저장 (MFT Entry 외부 ) $ATTRIBUTE_LIST, $DATA $DATA 속성의경우 파일크기 < 700 바이트 : Resident 속성 파일크기 > 700 바이트 : Non-resident 속성

MFT Entry Attribute Header MFT Entry Fixup Attr Attr Attr Attr Attr Attr End Unused Header Array Header Content Header Content Header Content Marker Space 각속성은속성의메타정보표현을위해속성헤더를가짐 속성형식에관계없는공통된 16 바이트헤더 + 속성형식 (Resident/Non-resident) 에따라추가적인헤더

MFT Entry Common Attribute Header 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Attribute type ID Length of attribute Nreg Len Offset to Flag Nam name Flags Attribute ID

MFT Entry Common Attribute Header 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Attribute type ID Length of attribute Nreg Len Offset to Flag Nam name Flags Attribute ID Attribute type identifier : 속성타입식별값 Length of attribute : 속성헤더를포함한속성전체길이 Non-resident flag : Non-resident 속성인지여부 (0x01 값을가진다면 Non-resident 속성 ) Length of name : 자신의속성이름길이 Offset to name : 속성이름이저장된곳의시작위치 Flags : 속성의상태표현 0x0001 : 압축된속성 0x4000 : 암호화된속성 0x8000 : Sparse 속성 Attribute identifier : 속성의고유한식별자로 MFT Entry 에같은속성이여러개일경우구별하기위해사용

MFT Entry Resident Attribute Header 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Common Attribute Header 0x10 Size of content Offset to content Idx Flag Un used Attribute Name (if exist, )

MFT Entry Resident Attribute Header 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Common Attribute Header 0x10 Size of content Offset to content Idx Flag Un used Attribute Name (if exist, ) Size of content : 헤더뒤에오는속성내용의크기 Offset to content : 속성내용이시작하는곳의위치 Indexed flag : 1 값을가진다면인덱스된속성 ($FILE_NAME 속성은 1 로설정 ) Attribute name : 속성이름이있는경우속성이름, 없는경우바로속성내용

MFT Entry Non resident Attribute Header 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Common Attribute Header 0x10 Start Virtual Cluster Number (VCN) of the runlist End VCN of the runlist 0x20 Offset to runlist Comp unit size Unused Allocated size of attribute content 0x30 Real size of attribute content Initialized size of attribute content 0x40 Attribute name (if exist, )

MFT Entry Non resident Attribute Header 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Common Attribute Header 0x10 Start Virtual Cluster Number (VCN) of the runlist End VCN of the runlist 0x20 Offset to runlist Comp unit size Unused Allocated size of attribute content 0x30 Real size of attribute content Initialized size of attribute content 0x40 Attribute name (if exist, ) Start VCN of the runlist : 속성내용이담긴런리스트 (runlist) 의시작 VCN End VCN of the runlist : 속성내용이담긴런리스트 (runlist) 의끝 VCN Offset to runlist : 속성내부의런리스트시작위치 Compression unit size : 압축속성일경우압축단위

MFT Entry Non resident Attribute Header 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Common Attribute Header 0x10 Start Virtual Cluster Number (VCN) of the runlist End VCN of the runlist 0x20 Offset to runlist Comp unit size Unused Allocated size of attribute content 0x30 Real size of attribute content Initialized size of attribute content 0x40 Attribute name (if exist, ) Allocated size of attribute content : 속성내용에할당된클러스터크기 ( 클러스터배수 ) Real size of attribute content : 속성내용의실제크기 Initialized size of attribute content : 속성내용의초기화된크기 Attribute name : 속성이름이있는경우속성이름, 없는경우바로속성내용

MFT Entry Cluster Runs MFT Entry Fixup Attr Attr Attr Attr Attr Header Array Header Content Header Content Header Cluster Runs End Marker Unused Space Start Cluster Length 1 1220 3 2 3072 4 Non-resident 속성의경우할당받는클러스터는파일에따라수천~ 수만 비연속적으로할당된클러스터를효과적으로관리하기위해클러스터런 (Cluster Runs) 사용 클러스터런은런리스트 (Runlist) 형태로관리 0010 0001 Run Length Run Offset Byte 1 Byte 2 Byte 3 Byte 4

MFT Entry Logical Cluster Number (LCN) & Virtual Cluster Number (VCN) MFT Entry Fixup Attr Attr Attr Attr Attr Header Array Header Content Header Content Header Cluster Runs End Marker Unused Space Start Cluster Length 1 1220 3 2 3072 4 Attribute Content Attribute Content LCN 1220 1221 1222 3072 3073 3074 3075 VCN 0 1 2 3 4 5 6 LCN : 볼륨의첫번째클러스터부터순차적인번호 (LBA?) VCN : 파일의첫번째클러스터부터순차적인번호

MFT Entry Attribute Content MFT Entry Fixup Attr Attr Attr Attr Attr Attr End Unused Header Array Header Content Header Content Header Content Marker Space $STANDARD_INFORMATION $FILE_NAME $DATA Type ID : 16 Type ID : 48 Type ID : 128 일반적인파일은 3 가지속성을가짐 $STANDARD_INFORMATION : 파일의생성 접근 수정시간, 소유자등의정보 $FILE_NAME : 파일이름 ( 유니코드 ), 파일의생성 접근 수정시간 $DATA : 파일내용 $ 이후대문자가온다면속성이름 $ 이후첫글자만대문자라면메타데이터파일 ($MFT 제외 )

MFT Entry Attributes $STANDARD_INFORMATION 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x~~ Attribute Header 0x00 Created Time Modified Time 0x10 MFT Modified Time Last Accessed Time 0x20 Flags Maximum number of versions Version number Class ID 0x30 Owner ID Security ID Quota Charged 0x40 Update Sequence Number (UCN) 모든파일에존재하는기본속성으로속성식별값 16 (0x10) 속성중식별값이가장낮기때문에속성구조에서가장처음에위치 윈도우 NT 에서는 48 바이트크기, 2000 이상에서는 72 바이트

MFT Entry Attributes $STANDARD_INFORMATION 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x~~ Attribute Header 0x00 Created Time Modified Time 0x10 MFT Modified Time Last Accessed Time 0x20 Flags Maximum number of versions Version number Class ID 0x30 Owner ID Security ID Quota Charged 0x40 Update Sequence Number (UCN) Windows 64-Bit Timestamp Created Time Modified Time MFT Modified Time Last Accessed Time

MFT Entry Attributes $STANDARD_INFORMATION 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x~~ Attribute Header 0x00 Created Time Modified Time 0x10 MFT Modified Time Last Accessed Time 0x20 Flags Maximum number of versions Version number Class ID 0x30 Owner ID Security ID Quota Charged 0x40 Update Sequence Number (UCN) Flags 값 설명 0x0080 일반 (Normal) Flags 0x0100 임시 (Temporary) Flags 값 설명 0x0200 Sparse 파일 0x0001 읽기전용 (Read Only) 0x0400 Reparse Point 0x0002 숨긴파일 (Hidden) 0x0800 압축 (Compressed) 0x0004 시스템 (System) 0x1000 오프라인 (Offline) 0x0020 아카이브 (Archive) 0x2000 인덱스되지않음 0x0040 장치 (Device) 0x4000 암호화 (Encrypted)

MFT Entry Attributes $STANDARD_INFORMATION 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x~~ Attribute Header 0x00 Created Time Modified Time 0x10 MFT Modified Time Last Accessed Time 0x20 Flags Maximum number of versions Version number Class ID 0x30 Owner ID Security ID Quota Charged 0x40 Update Sequence Number (UCN) Maximum number of version : 파일의최대버전값 Version number : 파일의버전 Class ID : 인덱스된클래스 ID Owner ID : 파일소유자의 ID 값으로 $Quota 파일에서인덱스로사용

MFT Entry Attributes $STANDARD_INFORMATION 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x~~ Attribute Header 0x00 Created Time Modified Time 0x10 MFT Modified Time Last Accessed Time 0x20 Flags Maximum number of versions Version number Class ID 0x30 Owner ID Security ID Quota Charged 0x40 Update Sequence Number (UCN) Security ID : $Secure 파일의인덱스로사용되고 ACL 적용시사용 Quota Charged : 사용자할당량중해당파일이할당된크기 ( 보통파일크기과동일 ) USN : 파일의 USN 값으로 $UsnJrnl 에서인덱스로사용

MFT Entry Attributes $ATTRIBUTE_LIST MFT Entry Header Fixup Array $STANDARD _INFORMATION Attr Header ATTR_LIST ATTR_LIST ATTR_LIST 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x~~ Attribute Header 0x00 Attribute type Length of entry Len Nam Off Nam Start VCN of attribute 0x10 File Reference Address Attribute ID 속성식별값 32 (0x20) 으로필수적인속성은아님 특정파일의속성이 1,024 바이트를초과하는경우속성의단편화 속성의빠른접근을위해사용하는구조 여러개의속성리스트엔트리사용

MFT Entry Attributes $ATTRIBUTE_LIST 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x~~ Attribute Header 0x00 Attribute type Length of entry Len Nam Off Nam Start VCN of attribute 0x10 File Reference Address Attribute ID Attribute name (if exist, ) Attribute type : 속성타입 Length of entry : 엔트리길이 Length of Name : 이름길이 Offset to Name : 이름시작위치 Start VCN of attribute : 속성시작 VCN File Reference Address : 속성위치의파일참조주소 Attribute ID : 속성 ID Attribute name : 속성이름이존재할경우속성이름

MFT Entry Attributes $ATTRIBUTE_LIST (example) $Secure 메타데이터파일의 $ATTRIBUTE_LIST 속성

MFT Entry Attributes $ATTRIBUTE_LIST (example) $Secure 메타데이터파일의 $ATTRIBUTE_LIST 속성 속성타입 엔트리길이 이름길이 이름위치 시작 VCN 속성파일참조주소 속성 ID 속성이름 0x10 ($STD_INFO) 0x0020 0x00 0x1A 0x~00 0x00090000 00000009 0x0000 0x30 ($FILE_NAME) 0x0020 0x00 0x1A 0x~00 0x00090000 00000009 0x0007 0x80 ($DATA) 0x0028 0x04 0x1A 0x~00 0x00820000 00021F61 0x0000 $SDS 0x90 ($INDEX_ROOT) 0x0028 0x04 0x1A 0x~00 0x00090000 00000009 0x0001 $SDH 0x90 ($INDEX_ROOT) 0x0028 0x04 0x1A 0x~00 0x00090000 00000009 0x0011 $SII 0xA0 ($INDEX_ALLOC) 0x0028 0x04 0x1A 0x~00 0x00010000 00000AF4 0x0002 $SDH 0xA0 ($INDEX_ALLOC) 0x0028 0x04 0x1A 0x~00 0x00010000 00000AF4 0x0003 $SII 0xB0 ($BITMAP) 0x0028 0x04 0x1A 0x~00 0x00010000 00000AF4 0x0004 $SDH 0xB0 ($BITMAP) 0x0028 0x04 0x1A 0x~00 0x00010000 00000AF4 0x0005 $SII

MFT Entry Attributes $ATTRIBUTE_LIST (example) MFT Entry MFT $INDEX_ROOT $INDEX_ROOT $STD_INFO $ATTRIBUTE_LIST $FILE_NAME #9 Header ($SDH) ($SII) Unused 속성타입 시작 VCN MFT 엔트리번호 0x10 ($STD_INFO) 0 0x09 (9) 0x30 ($FILE_NAME) 0 0x09 (9) 0x80 ($DATA) 0 0x021F61 (139105) 0x90 ($INDEX_ROOT) 0 0x09 (9) 0x90 ($INDEX_ROOT) 0 0x09 (9) 0xA0 ($INDEX_ALLOC) 0 0x0AF4 (2804) 0xA0 ($INDEX_ALLOC) 0 0x0AF4 (2804) 0xB0 ($BITMAP) 0 0x0AF4 (2804) 0xB0 ($BITMAP) 0 0x0AF4 (2804) MFT Entry #2804 MFT Header $INDEX_ALLOC ($SDH) $INDEX_ALLOC ($SII) $BITMAP ($SDH) $BITMAP ($SII) Unused MFT Entry #139105 MFT Header $DATA Unused

MFT Entry Attributes $FILE_NAME 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x~~ Attribute Header 0x00 File Reference Addr of parent directory Created Time 0x10 Modified Time MFT Modified Time 0x20 Last Accessed Time Allocated size of file 0x30 Real size of file Flags Reparse value Len Nam Nam spac File Name (as length) 속성식별값 48 (0x30) 을가지는속성으로파일의이름표현 유니코드 (UTF-16) 으로인코딩되어저장 $FILE_NAME 속성은 MFT Entry 외에 $I30 인덱스 ( 탐색을위한구조 ) 에도저장 일반적으로파일이름변경을제외하고는 $I30 인덱스의 $FILE_NAME 속성만갱신

MFT Entry Attributes $FILE_NAME 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x~~ Attribute Header 0x00 File Reference Addr of parent directory Created Time 0x10 Modified Time MFT Modified Time 0x20 Last Accessed Time Allocated size of file 0x30 Real size of file Flags Reparse value Len Nam Nam spac File Name (as length) File Reference Address of parent directory : 부모디렉터리의파일참조주소 Windows 64-Bit Timestamp Created Time Modified Time MFT Modified Time Last Accessed Time

MFT Entry Attributes $FILE_NAME 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x~~ Attribute Header 0x00 File Reference Addr of parent directory Created Time 0x10 Modified Time MFT Modified Time 0x20 Last Accessed Time Allocated size of file 0x30 Real size of file Flags Reparse value Len Nam Nam spac File Name (as length) Allocated size of file : 해당파일이할당된크기 ( 클러스터배수 ) Real size of file : 해당파일의실제크기 Flags : $STANDARD_INFORMATION 속성플래그와동일 Reparse value : 해당속성의 Reparse Point ( 해당파일의마운트, 심볼릭링크정보등을저장 ) Length of Name : 이름길이

MFT Entry Attributes $FILE_NAME 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x~~ Attribute Header 0x00 File Reference Addr of parent directory Created Time 0x10 Modified Time MFT Modified Time 0x20 Last Accessed Time Allocated size of file 0x30 Real size of file Flags Reparse value Len Nam Nam spac File Name (as length) Namespace : 이름의표현형식 POSIX, Win32, DOS, Win32&Dos http://msdn.microsoft.com/en-us/library/aa365247%28vs.85%29.aspx File Name : 유니코드 (UTF-16) 으로인코딩된파일이름

MFT Entry Attributes $BITMAP 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x~~ Attribute Header 0x00 Allocation Bitmap 속성식별값 176 (0xB0) 을가지는속성으로할당정보표현 할당정보를관리하는데이터 $MFT, $INDEX_ALLOCATION 05 00 00 00 00 00 00 00 0000 0101 0000 0000 0000 0000 0000 0000 0000 00000 1 번째와 3 번째 MFT Entry 가사용중임을나타냄

MFT Entry Attributes $DATA 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x~~ Attribute Header 0x00 File Data (as size, ) 속성식별값 180 (0x80) 을가지는속성으로파일데이터저장 속성헤더이후에바로속성내용인파일데이터스트림위치 데이터의크기에따라 Resident 혹은 Non-resident 로존재 대체데이터스트림 (Alternate Data Stream) 을통해 2 개이상의데이터스트림표현

MFT Entry Alternate Data Stream (ADS) MFT Entry Header Fixup Array $STANDARD_INFO $FILE_NAME $DATA $DATA End Unused Main Stream Alternate Stream Marker Space $DATA 속성을 2 개이상의속성스트림지원 ( 윈도우 NT 3.1 버전부터지원 ) NT(NTFS) 서버에서 Mac OS(HFS) 클라이언트를지원하기위해추가 추가적인속성스트림 (ADS) 은속성이름을통해접근 결국, ADS 는반드시속성이름을가지고있어야함 기본스트림은없어도무관 ADS 속성은파일크기에포함되지않음 ADS 용도 파일의요약정보저장 영역식별자 (Zone Identifier)

MFT Entry Alternate Data Stream (ADS) ADS 생성 ~\> notepad proneer.txt:ads.txt ~\> echo This is contained ADS > proneer.txt:ads2.txt ~\> type c:\windows\system.ini > proneer.txt:ads3.ini ~\> echo This is attached to directory list > :ads4.txt ADS 확인 별도의도구를이용 ~\> more < proneer.txt:ads3.ini ADS 삭제 ADS 가존재하는파일삭제, 기본스트림복사후삭제 ADS 를지원하지않는파일시스템으로복사 별도의도구를이용하거나무의미한데이터로대체 ~\> echo > proneer.txt:ads3.ini

MFT Entry Indexes Binary Tree ( 이진트리 ) 한노드가최대 2 개의자식노드를갖는트리 노드의왼쪽서브트리의모든노드값은키값보다작음 노드의오른쪽서브트리의모든노드값은키값보다큼 715 57 22 3 11

MFT Entry Indexes B-Tree (B 트리 ) 차수가 m 인 m- 원탐색트리 루트와단말노드를제외한각노드는최소 m/2 의서브트리를가짐 ( 절반이상이채워져야함 ) 루트는최소 2 개의서브트리를가짐 모든단말노드는같은레벨 10 18 30 3 8 9 15 20 21 35 50

MFT Entry Indexes 인덱스구조 : 빠르게검색이필요한데이터는인덱스구조로관리 ( 디렉터리등 ) 인덱스이름인덱싱하는데이터위치 $I30 $FILE_NAME 속성디렉터리의 MFT Entry $SDH SecurityDescriptors $Secure 메타데이터파일 $SII Security ID $Secure 메타데이터파일 $O Object ID $ObjId 메타데이터파일 $O Owner ID $Quota 메타데이터파일 $Q Quota $Quota 메타데이터파일

MFT Entry Indexes B-Tree($I30) : B 트리의노드값은파일이름 ($FILE_NAME 속성 ) A eee.txt lll.txt ttt.txt Root Index Node B aaa.txt bbb.txt D ooo.txt rrr.txt E vvv.txt zzz.txt C fff.txt ggg.txt iii.txt

MFT Entry Indexes B-Tree($I30) : jjj.txt 파일삽입 (1) eee.txt lll.txt ttt.txt Root Index Node aaa.txt bbb.txt ooo.txt rrr.txt vvv.txt zzz.txt fff.txt ggg.txt iii.txt jjj.txt

MFT Entry Indexes B-Tree($I30) : jjj.txt 파일삽입 (2) eee.txt ggg.txt lll.txt ttt.txt Root Index Node aaa.txt bbb.txt ooo.txt rrr.txt vvv.txt zzz.txt fff.txt iii.txt jjj.txt

MFT Entry Indexes B-Tree($I30) : jjj.txt 파일삽입 (3) ggg.txt Root Index Node eee.txt lll.txt ttt.txt aaa.txt bbb.txt fff.txt ooo.txt rrr.txt vvv.txt zzz.txt iii.txt jjj.txt

MFT Entry Indexes B-Tree($I30) : fff.txt 와 zzz.txt 파일삭제 (1) ggg.txt Root Index Node eee.txt lll.txt ttt.txt aaa.txt bbb.txt fff.txt ooo.txt rrr.txt vvv.txt zzz.txt iii.txt jjj.txt

MFT Entry Indexes B-Tree($I30) : fff.txt 와 zzz.txt 파일삭제 (2) ggg.txt Root Index Node bbb.txt lll.txt ttt.txt aaa.txt eee.txt ooo.txt rrr.txt vvv.txt iii.txt jjj.txt

MFT Entry Indexes B-Tree($I30) : 가상의디렉터리 $I30 인덱스 $INDEX_ROOT Header $INDEX_ROOT Attribute Index Record Header [eee.txt] [lll.txt] [ttt.txt] txt] End of MFT 20 MFT 55 MFT 87 Node $INDEX_ALLOCATION Attribute [aaa.txt] MFT 30 [bbb] DIR MFT 40 End of Node [ooo.txt] MFT 120 [rrr] DIR MFT 90 End of Node [vvv] DIR MFT 65 [zzz.txt] MFT 34 End of Node [fff.txt] MFT 72 [ggg.txt] MFT 73 [iii.txt] MFT 22 End of Node Index Node Index Node Header Index Entry 1 Index Entry 2 Index Entry 3 End of Node Unused Space $FILE_NAME Attribute

MFT Entry Indexes $INDEX_ROOT 는항상 Resident 속성 인덱스항목이많아지면 $INDEX_ALLOCATION 속성을이용해 Non-resident 로구성 MFT Entry $STANDARD_I NFORMATION $FILE_NAME $INDEX_ROOT (resident) $INDEX_ALLOCATION (non resident) Index Record 0 1 2 Index Entry

MFT Entry Indexes A ) $INDEX_ROOT 1 2 3 X B ) X $INDEX_ROOT $INDEX_ALLOCATION 1 2 3 4 14 15 X Index Record 1 C ) 14 X $INDEX_ROOT $INDEX_ALLOCATION 1 2 3 4 12 13 X Index Record 1 15 16 17 18 24 25 X Index Record 2

MFT Entry Attributes $INDEX_ROOT Previous Attribute Index Root Index Node Attributes t Header Header Header Index Entry1 Index Entry2 End of Node Unused Space Next Attributes t

MFT Entry Attributes $INDEX_ROOT Previous Attribute Index Root Index Node Attributes t Header Header Header Index Entry1 Index Entry2 End of Node Unused Space Next Attributes t 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Type of attribute in index Collation sorting rule Size of each index record in bytes Size In Clus Unused Type of attribute in index : 인덱스엔트리가담고있는속성식별값 ( 디렉터리의경우 0x30, $FILE_NAME) Collation sorting rule : 인덱스엔트리가담고있는형식 ( 형식에맞게정렬됨 ) Size of each index record in bytes : $INDEX_ALLOCATION O 속성이가지는인덱스레코드의바이트크기 Size of each index record in Clusters : $INDEX_ALLOCATION 속성이가지는인덱스레코드의클러스터크기

MFT Entry Attributes $INDEX_ROOT Previous Attribute Index Root Index Node Attributes t Header Header Header Index Entry1 Index Entry2 End of Node Unused Space Next Attributes t 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Offset to Start of index entry list Offset to End of used portion of index entry list Offset to end of Allocated index entry list buffer Flags Offset to Start of index entry list : 인덱스엔트리목록의시작위치 Offset to End of used portion of index entry list : 인덱스엔트리의실제크기 ( 인덱스노드헤더포함 ) Offset to end of Allocated index entry list buffer : 인덱스엔트리의할당크기 ( 인덱스노드헤더포함 ) Flags 0x00 : 인덱스노드의자식노드가없음 0x01 : 인덱스노드의자식노드가있음

MFT Entry Attributes $INDEX_ROOT Previous Attribute Index Root Index Node Attributes t Header Header Header Index Entry1 Index Entry2 End of Node Unused Space Next Attributes t 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 File Reference Address for filename Length of this entry Length of content Flags $FILE _ NAME Attribute VCN of child node in $INDEX_ALLOCATION File Reference Address for filename : 해당파일및디렉터리의파일참조주소 Length of this entry : 해당인덱스엔트리의총크기 Length of content : 해당인덱스엔트리가담고있는 $FINE_NAME 속성의크기 Flags 0x01 : 자식노드가존재 0x02 : 노드의마지막엔트리

MFT Entry Attributes $INDEX_ROOT Previous Attribute Index Root Index Node Attributes t Header Header Header Index Entry1 Index Entry2 End of Node Unused Space Next Attributes t 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 File Reference Address for filename Length of this entry Length of content Flags $FILE _ NAME Attribute VCN of child node in $INDEX_ALLOCATION VCN of child node in $INDEX_ALLOCATION : 해당인덱스엔트리가자식노드를가지는경우 $INDEX_ALLOCATION 속성에위치한자식인덱스노드의위치

MFT Entry Attributes $INDEX_ALLOCATION Index Record 0 Index Record 0 Index Record Header Index Node Header Index Entry1 Index Entry2 End of Entry Index Record Header Index Node Header Index Entry1 Index Entry2 End of Entry 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 Signature ( INDX ) Offset to Fixup array Num of entries in Fa $LogFile Sequence Number (LSN) 0x10 The VCN of this record in the full index stream Signature : $INDEX_ALLOCATION 의시그니처 ( INDX ) Offset to Fixup array : Fixup array 의위치 Number of entries in Fixup array : Fixup array 에저장된항목의수 $LogFile Sequence Number (LSN) : $LogFile 에존재하는해당파일의트랜잭션위치값 The VCN of this record in the full index stream : $INDEX_ALLOCATION 속성에서해당인덱스레코드가저장된위치

MFT Entry Attributes Index Structure $INDEX_ROOT $INDEX_ALLOCATION $BITMAP MFT Entry CCC.TXT MFT Entry : 57 Child VCN : 0 End of Node Child VCN : 4 Start LCN 1045 Start VCN 0 Len 8 03 00 00 Cluster 1045 VCN : 4 AAA.TXT MFT Entry : 39 Child VCN : X BBB.TXT MFT Entry : 99 Child VCN : X End of Node DDD.TXT MFT Entry : 103 Child VCN : X EEEEEEEEEEEE.TXT MFT Entry : 321 Child VCN : X EEEEEE~1.TXT MFT Entry : 321 Child VCN : X End of Node Index Record Header

NTFS Features Security is a people problem

NTFS Features Sparse File (applied only $DATA, Non resident) cont. MFT Entry Fixup Attr Attr Attr Attr Attr Header Array Header Content Header Content Header Cluster Runs End Marker Unused Space Start LCN Length 1 35 4 2 90 3 3 102 4 LCN 35 36 37 38 90 91 92 102 103 104 105 VCN 0 1 2 3 4 5 6 7 8 9 10 의미있는데이터 0 으로만이루어진데이터

NTFS Features Sparse File (applied only $DATA, Non resident) MFT Entry Fixup Attr Attr Attr Attr Attr Header Array Header Content Header Content Header Cluster Runs End Marker Unused Space Start LCN Length 1 35 4 2 3 3 102 4 X LCN 35 36 37 38 102 103 104 105 VCN 0 1 2 3 7 8 9 10 의미있는데이터 0 으로만이루어진데이터

NTFS Features Compression (applied only $DATA, Non resident) Original Content Compression Units Compression Results Sparse Sparse Ondisk Layout Start LCN Length 1 100 16 2 16 3 150 10 4 6 5 160 16

NTFS Features Decompression (applied only $DATA, Non resident) Start LCN Length 1 100 20 2 150 16 3 200 4 4 10 5 380 6 6 12 Merged Runs Sparse Sparse Compression Units Original Content

NTFS Features DESX Win 2000 Encryption (applied only $DATA) 취약점 : EFS0.TMP Triple DES AES Win XP Win XP SP1, 2003 File Content User1 s Public Key Encrypt User1 s Encrypted FEK $LOGGED_UTILITY_STREAM Attribute Encrypt Random Key (FEK) Encrypt Encrypted File Content User2 s Public Key User2 s Encrypted FEK $DATA Attribute

NTFS Features Decryption (applied only $DATA) $DATA Attribute Encrypted File Content $LOGGED_UTILITY_STREAM Attribute User1 s Encrypted FEK Decrypt Random Key (FEK) Decrypt User1 s Password Decrypt User1 s Private Key File Content Registry Value User1 s Encrypted Private Key

NTFS Features Change Journal ($UsnJrnl) MFT Entry Header Fixup Array $STANDARD_INFO $FILE _ NAME $DATA $DATA End Unused $UsnJrnl $Max $J Marker Space 1 X 4557 2 210 10 Journal Entry Sparse Area File A 11:02 Created File B 11:03 Modified

NTFS Features Logging File System Journaling ($LogFile) MFT Entry 2 $LogFile MFT Entry Non-resident $DATA Attribute Restart Area Logging Area LSN ( Logical Sequence Number ) MFT Entry Header include LSN Field

NTFS Features Logging File System Journaling ($LogFile) MFT Entry 2 Transaction 2 Update Records Transaction 1 Update Records Transaction 1 Commit Record Restart Area Logging Area Checkpoint Record Update Record Commit Record

NTFS Example Security is a people problem

NTFS Example File Allocation (c:\dir1\file1.dat) $LogFile Journal Volume Boot Record MFT Entry $BITMAP Attribute 0 $MFT 1 / Index 2 5 6 $LogFile \ $Bitmap Cluster Bitmap 11 dir 1 200 Quota Index $Quota Change Journal $UsnJrnl dir1 Index 200 dir1 file1.dat 304 file1.dat $DATA attribute 304 file1.dat Cluster Cluster 692 693

NTFS Example File Allocation (c:\dir1\file1.dat) $LogFile Journal Volume Boot Record MFT Entry $BITMAP Attribute 0 $MFT 0 / Index 2 5 6 $LogFile \ $Bitmap Cluster Bitmap 00 dir 1 200 Quota Index $Quota Change Journal 200 $UsnJrnl dir1 dir1 Index file1.dat $DATA attribute 304 file1.dat Cluster Cluster 692 693

NTFS Example File Searching (c:\dir1\file1.dat) / Index 0 $MFT $INDEX_ROOT 2 dir 1 200 $INDEX_ALLOCATION $LogFile 5 6 \ $Bitmap dir1 Index file1.dat $Quota $MFT 200 304 $UsnJrnl dir1 file1.dat file1.dat MFT Entry $ST _ IN $FI _ NA $DATA file1.dat Non resident Cluster 692 Cluster 693

Quiz! Security is a people problem

Quiz! NTFS FAT32 NTFS 로변화하면서추가된기능은? NTFS 의 VBR 에서부트섹터의역할은? NTFS 의 VBR 에서 2 번째섹터의역할은? $MFT 메타데이터파일은무엇인가? MFT Entry 에서 Fixup Array 를사용하는이유는? 파일참조주소 (File Reference Address) 에 MFT Entry 순서번호 (Sequence Number) 가포함되는이유는? 클러스터크기가 4KB 인경우 VBR 의크기는?

Quiz! NTFS MFT Entry 의크기는? 파일및디렉터리의시간정보위치는? $Bitmap 메타데이터파일과 $BITMAP 속성의차이는? $BadClus 메타데이터파일이저장하는내용은? $MFT 크기가가변적인이유는? Resident 속성과 Non-resident 속성의차이는? 기본적인파일이가지는 3 가지속성은?

Quiz! NTFS $STANDARD_INFORMATION, $FILE_NAME 속성의시간정보차이는? 파일을빠르게탐색하기위한구조는? Cluster Runs 은무엇인가? 숨긴파일을찾는방법은? 암호화된파일을찾는방법은? Alternate Data Stream (ADS) 의용도는? ADS 속성을가지는파일확인법은?

Quiz! NTFS NTFS 비할당클러스터판별법은? 삭제된파일판별법은? 덮어써진파일판별법은? NTFS 의낭비되는영역은? 연속적인클러스터에할당된파일이삭제된경우복구방법은? 비연속적인클러스터에할당된파일이삭제된경우복구방법은?

Question & Answer