박종혁교수 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr
학습목표 디지털포렌식에서기본단위는파일의추출과분석을통해이루어지므로, 파일의저장및관리를책임지는파일시스템의이해는필수적이다. 먼저파일시스템의이해와구조를파악하고, 윈도우시스템에서가장널리쓰이는 FAT, NTFS 파일시스템에대해학습한다. 학습내용 파일시스템의이해 파일시스템분석 FAT 파일시스템 NTFS 파일시스템
1. 파일시스템의이해 1. 파일시스템의종류 2. 파일시스템의구조 3. 주소지정방식 4. 클러스터 5. 슬랙공간 2. 파티션과 MBR 1. 파티션 2. MBR 3. 확장파티션 3. FAT 파일시스템 1. FAT 파일시스템소개 2. 예약영역 3. FAT 영역 4. 데이터영역 5. 파일의할당, 삭제로인한변화요소 6. The function of FAT 4. NTFS 1. NTFS 소개 2. NTFS 구조 3. VBR(Volume Boot Record) 4. MFT(Master File Table) 5. 데이터영역 6. 파일의할당, 삭제로인한변화요소 5. 디지털포렌식관점에서의파일시스템분석 6. 파일복구 1. 파일시스템상의파일복구 2. 파일카빙
파일시스템이란? 디지털데이터를효과적으로관리하기위해파일을체계적으로기록하는방식 사용자에게파일과디렉터리를계층구조로데이터를저장하도록하는메커니즘 파일이어디에저장되어있는지조직화하고, 사용자의데이터를구조적으로정의 파일시스템이필요한이유? 저장매체의용량이증가함에따라저장되는파일의수도급격히증가 원하는파일을읽고쓰는기본적인기능부터데이터를검색, 저장, 관리하기위한규약이필요
저장매체운영체제파일시스템 Windows FAT(FAT12,FAT16,FAT32,exFAT), NTFS Linux Ext2, Ext3, Ext4 Unix-like UFS 디스크장치 OS2 HPFS Mac OS HFS, HFS+ Solaris ZFS HP-UX ODS-5, VxFS 광학장치 ISO 9660, UDF
파일시스템의구조 파일시스템의기본적인동작은운영체제가각파일을사용하기위해저장되어있는위치로접근하여해당데이터를읽도록함 또한데이터의위치를파악하기위하여사용자가저장된파일의목록을확인할수있도록지원함 파일시스템의추상화구조 사용자가생성한파일의내용은데이터영역에기록 메타영역에는파일관리를위한파일의이름, 위치, 크기, 시간정보등이기록 파일시스템은이러한메타정보를유지관리함으로써파일을효과적으로관리
Hard disk 가장널리사용되는비 - 휘발성저장장치 Header Interface or Controller IDE (Integrated Drive Electronics) Controller SCSI (Small Computer System Interface) SATA (Serial Advanced Technology Attachment) Controller RAID (Redundant Array of Inexpensive Disks)
Hard disk 의구성 Addressing
Hard disk Sector 데이터기록의가장기본단위 총 571 bytes 에서섹터의위치를구분하기위한고유번호저장 (59 bytes) 실제데이터저장으로사용되는영역은 512 bytes (Sector size)
Addressing ( 주소지정방식 ) CHS (Cylinder, Head, Sector) 방식 디스크의물리적인구조에기반한방식 초기 ATA 표준과 BIOS의지원비트의차이로인해최대 504MB까지만지정가능 이후 BIOS 비트확장으로 8.1GB 까지지원이가능하게되었지만대용량디스크는지원하지못함 ATA-6 부터표준에서제외, LBA 방식이새롭게대두
Addressing ( 주소지정방식 ) LBA (Logical Block Addressing) 방식 디스크의 0 번실린더, 0 번헤드, 1 번섹터를첫번째 (0 번 ) 블록으로지정 디스크의마지막섹터까지순차적으로주소를지정 물리적인구조에대한정보불필요 ( 섹터의번호만으로접근가능 ) 선형적인섹터번호가실제디스크의물리적구조로변환되어야하지만 ROM BIOS 에의해자동적으로수행됨 초기에는 28bit 로처리하여약 127GB 가최대용량이었음 현재는 48bit 어드레스방식을사용하고있음
Cluster ( 클러스터 ) 클러스터 = 여러개의섹터 ( 하드디스크의물리적최소단위 ) 를묶은단위 섹터단위로입출력처리하면시간이오래걸리므로여러개의섹터를묶어한번에처리 클러스터크기를 4,096바이트 (4KB) 로지정했을때, 100바이트의데이터를저장하는경우로클러스터의크기만큼할당됨 3996바이트가낭비되지만그럼에도불구하고디스크입출력횟수를줄이기위해클러스터단위를사용 4MB(4,096KB) 파일저장할때 4KB크기의클러스터사용 = 1,024번입출력수행 4MB(4,096KB = 4,194,304B) 파일저장할때 512B크기의클러스터사용 = 8,192번입출력수행
Cluster ( 클러스터 ) 윈도우시스템에서디스크포맷할때클러스터크기지정 FAT32 에서의클러스터크기 NTFS 에서의클러스터크기 볼륨크기 클러스터크기 볼륨크기 클러스터크기 32MB - 8GB 4KB 512MB 이하 512Byte 8GB - 16GB 8KB 513MB - 1GB 1KB 16GB - 32GB 16KB 1GB - 2GB 2KB 32GB 32KB 2GB 이상 4KB
Slack Space 물리적인구조와논리적인구조의차이로발생하는낭비공간 물리적으로파일에할당된공간이지만논리적으로사용할수없는낭비공간 디지털포렌식관점에서 - 정보은닉가능성, 파일복구와삭제된파일의파편조사 RAM Slack (Sector Slack) File Slack (Drive Slack) 이전에사용한데이터가존재, 흔적조사에활용 File System Slack Volume Slack
Slack Space (RAM Slack & File Slack) RAM Slack (Sector Slack) 램에저장되어있는데이터가디스크에저장될때 512 바이트씩기록되는특성때문에발생하는공간으로섹터슬랙 (Sector Slack) 이라고도함 지정되는파일크기가 512 바이트의배수가아닐경우발생 여분바이트 0x00 값으로기록 램슬랙을이용하면파일의끝을알수있기때문에삭제된파일복구시유용하게사용
Slack Space (RAM Slack & File Slack) File Slack (Drive Slack) 클러스터의사용으로인해낭비되는공간중램슬랙을제외한부분으로드라이브슬랙 (Drive Slack) 이라고도함 파일슬랙을이용하면특정파일이해당저장매체에존재하였는지규명가능 존재여부를알아야할파일을클러스터단위로나눈후, 각클러스터의마지막부분과파일슬랙중일치하는부분이있는지확인 최하단의디스크입출력은섹터단위로진행되므로 0x00으로기록되는램슬랙과다르게이전의데이터가그대로남아있음 (I/O는섹터단위로진행 )
Sector 1(512 byte) Sector 2(512 byte) RAM slack File slack Sector 8(512 byte)
Slack Space (File System Slack & Volume Slack) File System Slack 파일시스템할당크기와볼륨크기간의차이로인해발생되는공간 1,026KB 볼륨에 4KB 클러스터사용하는파일시스템구성하면마지막 2KB이파일시스템슬랙이됨 cluster cluster cluster cluster cluster cluster cluster File System Slack Volume Slack 전체볼륨크기와할당된파티션크기의차이로인해발생되는공간 Partition 1 Partition 2 Partition 3 Volume Slack
파티션 (Partition) 저장매체의저장공간을논리적으로분할한것 시스템은부팅과정에서파티션의크기, 위치, 설치된운영체제등을파악하여그에맞게구동해야함 그러한정보담고있는부분이 Boot Record(BR) 영역, windows는파티션의첫번째섹터에위치 C:\ [Windows XP] 단일파티션 C:\ [Windows XP] 다중파티션 D:\ [Windows7]
MBR (Master Boot Record) 분할된파티션에서각파티션의 BR 영역을관리하는영역 MBR 은저장매체의첫번째섹터 (LBA 0) 에위치하는 512 바이트크기의영역 446 바이트의부트코드 (Boot Code) 영역, 64 바이트의파티션테이블 (Partition Table) 영역, 2 바이트의시그니처 (Signature) 영역 BR C:\ [Windows XP] 단일파티션에서의 Boot Record MBR BR C:\ [Windows XP] BR D:\ [Windows7] 단 wnd 파티션에서의 Boot Record
부트코드영역 컴퓨터가부팅될때수행되는코드로, 파티션테이블에서부팅가능한파티션을찾아해당파티션의부트섹터 (Boot Sector) 를호출하는역할을수행 MBR 데이터구조 범위 (Byte Range) 10진수 16진수 설명 0-445 0x0000-0x01BD Boot code 446-461 0x01BE - 0x01CD Partition table entry #1 462-477 0x01CE - 0x01DD Partition table entry #2 478-493 0x01DE - 0x01ED Partition table entry #3 494-509 0x01EE - 0x01FD Partition table entry #4 510-511 0x01FE - 0x01FF Signature (0x55AA)
파티션테이블영역 16 바이트씩총 4개의파티션정보가저장 첫번째값인부트플래그 (Bootable Flag) 는해당파티션이부팅가능한파티션인지를나타내며, 부팅가능한파티션일경우해당부트플래그의값이 0x80 MBR의부트코드는파티션테이블을검색하여부트플래그값이 0x80 값을갖는파티션의부트섹터위치로점프하는역할을수행 포렌식조사시, 보이는파티션영역및디스크전영역을조사, 필요에따라 MBR영역직접해석 MBR영역과실제파일시스템이시작하는영역사이에악의적코드삽입하여운영체제시작전에동작하도 록구성된악성코드존재 파티션테이블데이터구조 범위 (Byte Range) 설명 10진수 16진수 0-0 0x0000-0x0000 Bootable flag 1-3 0x0001-0x0003 CHS 주소방식의시작위치 4-4 0x0004-0x0004 Partition 유형 5-7 0x0005-0x0007 CHS 주소방식의끝위치 8-11 0x0008-0x000B LBA 주소방식의시작위치 12-15 0x000C - 0x000F 총섹터개수
확장파티션 (Extended Partition) MBR영역에서파티션정보를표현하는공간은 64바이트로총 4개까지만파티션을분할할수밖에없는한계를극복하기위해나온개념 마지막 4번째파티션테이블이가리키는위치가또다른 MBR 영역을가리켜추가로 4개의파티션을담을수있도록하는구조
FAT (File Allocation Table) History MS-DOS 파일시스템에서파일의 위치정보를기록한테이블을지칭 FAT12 1980 년대초 (QDOS) 플로피디스크용으로처음개발 FAT 뒤의숫자는파일시스템에서관리하는클러스터의개수를의미 FAT 형식 FAT12 4,084 FAT16 65,524 FAT32 67,092,481 최대표현가능한클러스터 FAT12 의경우 12 비트를사용하여클러스터 위치를표현 : 2 12 = 4,096 개의클러스터를표현, 하지만미 리예약된 12 개의클러스터가존재하기때 문에최대 4,084 개의클러스터를표현 FAT16 VFAT FAT32 1980 년대말하드디스크를지원하기위해개발 1995 년 FAT 의성능향상, 긴파일이름이가능해짐 1996 년 VFAT 을확장, 고용량하드디스크지원
FAT12 5.25 인치플로피디스크에파일을저장하기위해개발 1983 년 MS-DOS 2.0 이출시될때 FAT12 에계층형디렉터리가지원됨 FAT16 HDD 기술의발달로개인용컴퓨터에서사용할파일시스템의필요성증가 1988 년 MS-DOS 4.0 에서 FAT16 발표
VFAT or Fast FAT 1995년 MS는 Windows 95에서 FAT 파일시스템의성능과기능을향상시킴 32 bits 보호모드 (Protected Mode) 성능향상독점모드 (Exclusive Mode) 동시에하나의파일에접근할경우처리 LFNs (Long File Names) 지원 이전의 FAT 파일시스템은 8.3 File naming, 대문자만가능 최대 255 문자까지파일명으로적용가능 이전버전의 DOS 와호환성유지 볼륨의최대용량은 2GB 로파일시스템의용량표현문제가여전히존재함
FAT32 1996 년 MS 는 Windows 95 OSR2 에서 FAT32 사용 클러스터표현비트수 28 bits (4 bits 예약영역 ) 볼륨의최대용량은 32GB 로제한 FAT 파일시스템의비교 구분 FAT12 FAT16 FAT32 사용용도 FDD Small HDD Large HDD 클러스터표현비트수 12 bits 16 bits 32 bits (28 bits만사용 ) 최대클러스터개수 4,084 개 65,524 개 67,092,281 개 최대볼륨크기 16 MB 2 GB 2 TB (32GB로제한됨 ) 파일의최대크기 볼륨크기만큼 볼륨크기만큼 4 GB 디렉토리당최대파일개수 X 65,535 개 65,535 개 루트디렉토리의파일개수제한 있음 있음 없음
FAT 파일시스템의호환성 1996 년 MS 는 Windows 95 OSR2 에서 FAT32 사용 클러스터표현비트수 28 bits (4 bits 예약영역 ) 볼륨의최대용량은 32GB 로제한 Operating System FAT12 FAT16 FAT32 NTFS MS-DOS Windows 95 Windows 95 OSR2 Windows 98 Windows ME Windows NT 4.0 Windows 2000 Windows XP
FAT 파일시스템의구조 예약영역 / FAT 영역 / 데이터영역
FAT (File Allocation Table) Layout Boot Code Partition Table 2 3 4 BIOS 1 M B R B R C:[NTFS] 500MB B R D:[FAT32] 500MB Reserved Area FAT Area #1 FAT #2 FAT Data Area
Structure Reserved Area Reserved Area FAT Area #1 FAT #2 FAT Data Area 38 sectors FAT 파일시스템에서가장앞에위치하는구조로여러개의섹터를포함 FAT12/16 : 1 Sector(default) 사용 FAT32 : 32 Sectors(default) 사용
Structure Reserved Area Reserved Area FAT Area #1 FAT #2 FAT Data Area 0 1 2 3 4 5 6 7 8 9 10 11 12 31 FAT32 예약영역중 6개의섹터만사용, 나머지는만약을대비해예약해둔것예약영역의크기는가변적이지만 0, 1, 2, 6, 7, 8번섹터는미리정해져있음 0, 6 : Volume Boot Sector (0번은부트섹터로사용, 만약을대비해 6번에백업 ) 1, 7 : File System Information(FSINFO) Structure (7번에백업, FSINFO구조체는운영체제에게비할당클러스터의첫위치와전체비할당클러스터의수를알려줌으로써저장할데이터를빠르게할당할수있도록도와줌 ) 2, 8 : Additional bootstrap code ( 부트섹터의부트코드영역이부족할경우추가적으로사용할수있는영역, 일반적으로비어있음 )
Structure First Sector(Volume Boot Sector) of Reserved Area Reserved Area FAT Area #1 FAT #2 FAT Data Area FAT 12/16 Boot Code (3 bytes) BIOS parameter block ( 3 ~ 61 bytes) Boot code and error messages (62 ~ 509 bytes) Signature (510 ~ 511 bytes) 첫번째섹터는부트코드를포함하고있는부트섹터로사용, FAT12/14 은예약영역 = 부트섹터 FAT 32 Boot Code (3 bytes) BIOS parameter block ( 3 ~ 89 bytes) Boot code and error messages (89 ~ 509 bytes) Signature (510 ~ 511 bytes)
첫번째섹터는부트코드를포함하고있는부트섹터 (Boot Sector) 로사용 FAT12/16 은예약영역이곧부트섹터 부트섹터에는제일먼저 BPB(BIOS Parameter Block) 을지나부트코드로점프하기위한 명령어가위치 부트코드는파일시스템의여러설정정보를나타내는 BPB 를참조하여시스템부팅 부팅과정이실패하면미리설정된오류메시지를출력 FAT 파일시스템부트섹터구조 FAT 형식 십진수 범위 (Byte Range) 십육진수 설명 FAT12/16 FAT32 0-2 0x0000-0x0002 Jump command to boot code FAT12/16 3-61 0x0003-0x003D FAT32 3-89 0x0003-0x0059 FAT12/16 62-509 0x003E - 0x01FD FAT32 90-509 0x005A - 0x01FD BIOS parameter block(bpb) Boot code and error message FAT12/16 FAT32 510-511 0x01FE - 0x01FF Signature (0x55AA)
Structure FAT 12/16/32 부트섹터의공통된데이터구조 범위 10 진수 16 진수 설명 0 ~ 2 0x00 ~ 0x02 Assembly jump instruction to bootstrap code (0xEB3C90) 3 ~ 10 0x03 ~ 0x0A 11 ~ 12 0x0B ~ 0x0C Bytes per Sector 13 0x0D Sectors per Cluster OEM ID (Win95 = MSWIN4.0, Win98 = MSWIN4.1 Win2K/XP/VISTA = MSDOS5.0, Linux = mkdosfs) 14 ~ 15 0x0E ~ 0x0F Reserved Sector count (FAT 12/16 = 1) 16 0x10 Number of FAT tables 17 ~ 18 0x11 ~ 0x12 Root director entry count (FAT12/16 = 512, FAT32 = 0) 19 ~ 20 0x13 ~ 0x14 Total Sector - 16 bits (FAT12/16 = variable, FAT32 = 0) 21 0x15 Media Type 22 ~ 23 0x16 ~ 0x17 FAT size - 16 bits (FAT12/16 = variable, FAT32 = 0) 24 ~ 25 0x18 ~ 0x19 Sector per Track (typically 32 for hard disk) 26 ~ 27 0x1A ~ 0x1B Number of Heads (typically 255 for hard disk) 28 ~ 31 0x1C ~ 0x1D Hidden Sectors 32 ~ 35 0x20 ~ 0x23 Total Sector - 32 bits
Structure FAT 12/16 부트섹터의추가적인데이터구조 범위 10 진수 16 진수 설명 36 0x24 INT 0x13 drive number (Floppy = 0x00, Hard disk = 0x80) 37 0x25 Not used 38 0x26 Boot signature 39 ~ 42 0x27 ~ 0x2A Volume serial number 43 ~ 53 0x2B ~ 0x35 Volume label (ASCII) 54 ~ 61 0x36 ~ 0x3D File system type 62 ~ 509 0x3E ~ 0x01FD Boot code and error message 510 ~ 511 0x01FE ~ 0x01FF Signature (0x55AA)
Structure FAT 32 부트섹터의추가적인데이터구조 범위 10 진수 16 진수 설명 36 ~ 39 0x24 ~ 0x27 FAT size 32 40 ~ 41 0x28 ~ 29 Ext flags 42 ~ 43 0x2A ~ 2B FAT32 volume version 44 ~ 47 0x2C ~ 0x2F Root directory cluster offset 48 ~ 49 0x30 ~ 0x31 FSINFO (File System Information) offset 50 ~ 51 0x32 ~ 0x33 Backup boot sector offset 52 ~ 63 0x34 ~ 0x3F Reserved 64 0x40 INT 0x13 drive number (Floppy = 0x00, Hard Disk = 0x80) 66 0x41 Not used (typically 0) 66 0x42 Boot signature 67 ~ 70 0x43 ~ 0x46 Volume serial number 71 ~ 81 0x47 ~ 0x51 Volume label (ASCII) 82 ~ 89 0x52 ~ 0x59 File system type 90 ~ 509 0x60 ~ 0x01FD Boot code and error message 510 ~ 511 0x01FE ~ 0x01FF Signature (0x55AA)
Jump command BIOS Parameter Block Volume Boot Sector FAT Format FAT12/16 FAT32 Byte Range 0 2 Description Jump command to boot code FAT12/16 3 61 BIOS Parameter FAT32 3 89 Block(BPB) FAT12/16 62 509 FAT32 90 509 Boot code Error message FAT12/16 FAT32 510-511 Signature (0x55AA) FAT 파일시스템부트섹터구조 FAT32 의부트섹터덤프
File System Information (FAT32) Byte Range 0 3 Description Signature (0x41615252) 4 483 Not Used 484-487 488-491 Signature (0x61417272) Number of free cluster 492-495 Next free cluster 496-507 Not used 508-511 Signature (0xAA550000) FAT32 의 FSINFO 구조체영역데이터구조 FAT32 의 FSINFO 구조체섹터덤프
Structure FAT Area Reserved Area FAT Area #1 FAT #2 FAT Data Area 저장된파일의클러스터할당관계를표현 - FAT 12/16, FAT 32 FAT (File Allocation Table) Area - #1 FAT, #2 FAT(Backup) FAT16 은 16 비트, FAT32 는 32 비트를사용해데이터영역의시작클러스터부터마지막 클러스터까지할당상태를표시
Structure FAT Area Reserved Area FAT Area #1 FAT #2 FAT Data Area
Structure FAT Area Cluster 2 Reserved Area FAT Area #1 FAT #2 FAT Data Area FAT32 의 FAT 영역의첫번째섹터내용 각 4바이트는 FAT Entry 라고불림 FAT Entry 0,1번은저장매체종류와파티션상태를표현하기위해예약됨 FAT Entry 2번부터데이터영역의클러 스터와대응 0x0000 데이터영역의시작클러스터번호는 2 번 0x0010 이므로해당클러스터의상태가 4 바이트 로표현 0x0020 0x0030 0x0040 0x0050 FAT #1 FAT #2 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 Media Type Partition Status Cluster 2 Cluster 3 Cluster 4 Cluster 5 Cluster 6 Cluster 7 Cluster 8 Cluster 9 Cluster 10 Cluster 11 Cluster 12 Cluster 13 Cluster 14 Cluster 15 Cluster 16 Cluster 17 Cluster 18 Cluster 19 Cluster 20 Cluster 21 Cluster 22 Cluster 23 FAT32 에서 FAT 영역의구조
Structure FAT Area (Entry Type) Cluster 2 Reserved Area FAT Area #1 FAT #2 FAT Data Area FAT 12 FAT 16 FAT 32 설명 0x000 0x0000 0x?0000000 Unallocated ( Free ) cluster 0x001 0x0001 0x?0000001 Reserved cluster 0x002 0xFF0 ~ 0xFF6 0x0002 ~ 0xEFFF 0xFFF0 ~ 0xFFF6 0x?0000002 ~ 0x?FFFFFEF 0x?FFFFFF0 ~ 0x?FFFFFF6 Allocated cluster Reserved cluster 0xFF7 0xFFF7 0x?FFFFFF7 Bad cluster 0xFF8 0xFFF8 ~ 0xFFFF 0x?FFFFFF8 ~ 0x?FFFFFFF End-of-file marker Byte 3 Byte 2 Byte 1 Byte 0 Reserved Cluster Status 4 bits 28 bits
Structure FAT Area (Entry Type) 비할당상태일경우, 0x00의값을가진다. 따라서운영체제는새로운파일및디렉터리를저장하고자할경우 FAT 영역에서 FAT Entry 값이 0x00인클러스터를찾아할당한다. 할당상태일경우, FAT Entry의값은그클러스터를점유하고있는파일의다음데이터가있는클러스터를가리킨다. 파일의마지막데이터가있는클러스터이면마지막을나타내는특정값을사용한다. FAT12는 0xFF8보다큰값을사용하고 FAT16은 0xFFF8보다큰값을사용한다. 그리고 FAT32는 0x0FFF FFF8보다큰값을사용한다. 만약파일이하나의클러스터만사용한다면이값을사용하게된다. 만약배드섹터가포함된클러스터가발견될경우 FAT12 에서는 0xFF7, FAT16 은 0xFFF7, FAT32 는 0x0FFF FFF7 값을사용해표시하게된다. 표시된클러스터는 이후에사용되지않는다.
Structure FAT Area (Entry 0 and 1) FAT Entry 0 Media Type Byte 3 Byte 2 Byte 1 Byte 0 0xFF 0xFF 0xFF Media Type FAT 16 FAT 32 설명 0xFF?? 0x?FFFFF?? FAT Entry 0 (Media Type) FAT Entry 1 Volume Status FAT 16 FAT 32 설명 0x8000 0x80000000 Clean Shutdown Bit Mask ( 상위 1 번째비트 ) 0x4000 0x40000001 Hard Error Bit Mask ( 상위 2 번째비트 )
FAT Dump FAT32 인경우 4 바이트를 FAT Entry 로사용하기때문에한섹터당 128 개의 FAT Entry 를표현할수있다. FAT Entry 0, 1 번은앞서살펴본바와같이특별한의미로사용된다. 실제데이터영역의시작은 FAT Entry 2 번부터시작한다. FAT Entry 2 번의값이 0x0FFF FFFF 값을가지므로해당클러스터를사용하는파일은하나의클러스터만사용하는것을알수있다. FAT Entry 4 번부터할당된파일은모두 5 개의클러스터를사용하는파일임을알수있다. 이처럼 FAT 영역의정보로특정파일이점유하고잇는클러스터의위치를알수있다. 하지만해당파일의이름, 확장자, 시간정보, 정확한크기등을알수가없다. 이러한정보는다음에서살펴볼데이터영역의디렉터리엔트리를통해확인할수있다. FAT 영역의첫번째섹터덤프결과
Structure FAT Data Area Cluster 2 Reserved Area FAT Area #1 FAT #2 FAT Data Area Root Directory Sub Directory 최상위루트디렉터리가가장중요 - FAT12/16 : FAT Entry 2 번, FAT32 : 어느곳에나 ( 기본적으로는 FAT Entry 2 번 ) 데이터 = 디렉터리 + 파일 모든파일과디렉터리는하위디렉터리및파일의이름, 확장자, 시간정보, 크기등을표현하기위해 Directory Entry 로표현됨
Structure FAT Data Area Reserved Area FAT Area #1 FAT #2 FAT Data Area Root Directory Sub Directory 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 0x10 Created Date Last Accessed Date Name Extension Attr Reserved Starting Cluster Hi Last Written Time Last Written Date Directory Entry 구조 Starting Cluster Low File Size Create Time
Structure FAT Data Area (Directory Entry Name) 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 0x10 Created Date Last Accessed Date Name Extension Attr Reserved Starting Cluster Hi Last Written Time Last Written Date Starting Cluster Low File Size Create Time 첫번째바이트가 0xE5 값을가진다면해당엔트리는삭제되었음을의미 첫번째바이트값만변경되고나머지값은초기화하지않기때문에파일의정보및내용을복구할수있음첫번째바이트가 0x00의값을가진다면해당엔트리는사용되지않는엔트리 이후에엔트리가존재하지않는다는것을의미하므로더이상검색할필요가없음 파일이름또는디렉토리이름의문자제한 영어대문자 : A ~ Z ( 소문자는대문자로변환 ) 숫자 : 0 ~ 9 특수문자 : $ % ` - _ @ ~! ( ) { } ^ # &
Structure FAT Data Area (Directory Entry Name) 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 0x10 Created Date Last Accessed Date Name Extension Attr Reserved Starting Cluster Hi Last Written Time Last Written Date Starting Cluster Low File Size Create Time File Name Name + Extender (11 bytes) FOO.BAR F O O B A R FILEDATA.DOC F I L E D A T A D O C foo F O O foo.bar F O O B A R Pickle.A P I C K L E A.BIG HELLO!.JPG 잘못된표현. Name[0] 에 0x20 이올수없음 잘못된표현. 특수 (! ) 문자허용안됨
Structure FAT Data Area (Directory Entry Attribute) 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 0x10 Created Date Last Accessed Date Name Extension Attr Reserved Starting Cluster Hi Last Written Time Last Written Date Starting Cluster Low File Size Create Time Attribute 설명 0000 0001 Read only 0000 0010 Hidden file 0000 0100 System file 0000 1000 Volume label 0000 1111 Long file name (LFN) 0001 0000 Directory 0010 0000 Archive Directory Entry 의속성
LFN Long File Name 8 바이트보다긴파일이름표현위해사용 ( 유니코드로표현 ) 여러개의 LFN Entry 사용할경우순서번호는이러한여러개의 LFN Entry 의관계를나타냄 만약마지막 LFN 이면 LAST_LONG_ENTRY (0x40) N 의값을저장 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 0x10 Seq Num Name 1 (Unicode) Attr Rev Che Sum Name 2 (Unicode) Reserved Name 3 (Unicode) LFN 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0x00 0x10 Seq Num Name 1 (Unicode) Attr Rev Che Sum Name 2 (Unicode) Reserved Name 3 (Unicode) LFN 0x10 0x00 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 Created Date Last Accessed Date Name Extension Attr Reserved Create Time Starting Cluster Hi Last Written Time Last Written Date Starting Cluster Low File Size Directory Entry
LFN Entry 데이터구조 십진수 범위 (Byte Range) 십육진수 설명 0-0 0x0000-0x0000 Sequence number or status byte 1-10 0x0001-0x000A LFN character 1-5 (Unicode) 11-11 0x000B - 0x000B Attributes 12-12 0x000C - 0x000C Reserved 13-13 0x000D - 0x000D Checksum 14-25 0x000E - 0x0019 LFN character 6-11 (Unicode) 26-27 0x001A - 0x001B Reserved 28-31 0x001C - 0x001F LFN character 12-13 (Unicode)
Understanding File System.HWP 이름의길이가 8 바이트를초과하기때문에추가적으로 2개의 LFN 엔트리를사용해표현 utf8.c 이름의길이가 8 바이트를초과하지않아하나의디렉터리엔트리로표현 volume_slack.png 2개의 LFN 엔트리를사용해표현되었다. 하지만디렉터리엔트리의첫바이트가 0xE5 값을가지는것으로 Directory Entry 덤프 보아현재삭제되었음
Root Directory
1. 예약된영역의부트섹터에있는 BPB 에서데이터영역, 루트디렉터리, FAT 영역의위치를얻어온다. 2. \dir1 디렉터리의정보를얻기위해루트디렉터리에서 \dir1 에해당하는디렉터리엔트리를검색한다. 그결과 \dir1 디렉터리정보를가지는시작클러스터가 90 번임을확인했다. 3. 클러스터 90 번에서 file1.dat 파일의메타정보를저장할디렉터리엔트리를찾는다. 첫번째바이트가 0xE5 값을갖는삭제된디렉터리엔트리가없다면마지막의 0x00 값을갖는새로운디렉터리엔트리를할당한다. 4. fil1.dat 파일의내용을저장할클러스터를찾기위해 FAT 영역을검색하여 0x00 값을갖는 FAT Entry 를찾은결과클러스터 200 번에해당하는 FAT Entry 200 번이선택되었다. 5. FAT Entry 200 번에 0x0FFF FFFF 값을기록하고, 디렉터리엔트리의시작클러스터번호를 200 번으로기록한다. 6. file1.dat 파일의처음 4,096 바이트의내용을클러스터 200 번에기록한다. 그결과 1,904 바이트의내용이남았다. 7. 남은 1,904 바이트의내용을다시기록하기위해 FAT 영역에서또다른빈 FAT Entry 를찾는다. 그결과 FAT Entry 201 번이선택되었다. 8. FAT Entry 200 번의값을 FAT Entry 201 을가리키도록 201 로수정한후 FAT Entry 201 번의값은클러스터체인의마지막을나타내는 0x0FFF FFFF" 값으로기록한다. 9. 남은 1,904 바이트의내용을클러스터 201 번에기록한다. 기록결과 144 바이트의램슬랙과 2,048 바이트의파일슬랙이생성되었다. \dir1\file1.dat 파일할당시 FAT 파일시스템변화
1. 예약된영역의부트섹터에있는 BPB 에서데이터영역, 루트디렉터리, FAT 영역의위치를얻어온다. 2. \dir1 디렉터리의정보를얻기위해루트디렉터리에서 \dir1 에해당하는디렉터리엔트리를검색한다. 그결과 \dir1 디렉터리정보를가지는시작클러스터가 90 번임을확인했다. 3. 클러스터 90 번에서디렉터리엔트리들을검색하여 file1.dat 파일이름을가지는디렉터리엔트리를찾는다. 그결과해당파일의시작클러스터가 200 번임이확인되었다. 4. FAT Entry 의클러스터체인을확인결과해당파일이클러스터 200, 201 번을사용한다는것이확인되었다. 5. FAT Entry 200, 201 번의값을 0x00 으로초기화한다. 6. file1.dat 파일의디렉터리엔트리의오프셋 0x00 위치의값을 0xE5 로변경한다. \dir1\file1.dat 파일삭제시 FAT 파일시스템변화
How a File is stored (1/4)
How a File is stored (2/4)
How a File is stored (3/4)
How a File is stored (4/4)
The Effects of Deleting and Undeleting Files C:\1ST\file1234.txt (58,242 bytes) 파일의 FAT Entry 구성 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ~FF Root Directory Name Staring Cluster 1ST 3 Cluster 3 File1234.txt 8
The Effects of Deleting and Undeleting Files C:\1ST\file1234.txt (58,242 bytes) 파일의위치찾기
The Effects of Deleting and Undeleting Files C:\1ST\file1234.txt (58,242 bytes) 파일의위치찾기
The Effects of Deleting and Undeleting Files C:\1ST\file1234.txt (58,242 bytes) 파일의위치찾기
The Effects of Deleting and Undeleting Files C:\1ST\file1234.txt (58,242 bytes) 파일의위치찾기
The Effects of Deleting and Undeleting Files C:\1ST\file1234.txt (58,242 bytes) 파일의위치찾기
The Effects of Deleting and Undeleting Files C:\1ST\file1234.txt (58,242 bytes) 파일의삭제 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Root Directory Name Staring Cluster 1ST 3 Cluster 3 0xE5ile1234.txt 8
Introduction New Technology File System FAT 의한계점을개선한파일시스템 Windows NT 이후부터사용 버전 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 2003 6.0 Windows Vista, 2008, 7 운영체제
Features 특징 USN 저널 (Update Sequence Number Journal) ADS (Alternate Data Stream) Sparse 파일 설명 파일의모든변경내용을기록하는로그시스템오류발생으로재부팅될경우잘못된처리작업을롤백 (Rollback) 파일당하나이상의데이터스트림을저장할수있도록지원파일이름, 소유자, 시간정보등을스트림통해표현, 데이터도하나의데이터스트림으로표현추가된 ADS 는정보은닉용도로사용될수있음 파일데이터가대부분 0 일경우실제데이터는기록하지않고정보만기록 파일압축 EFS (Encrypting File System) VSS (Volume Shadow Copy Service) Quotas LZ77 의변형된알고리즘을사용하여파일데이터압축 파일을암호화하는기능으로빠른암, 복호화를위해 FEK(File Encryption Key) 를통한대칭키방식의암호화수행 윈도우 2003 부터지원, 새롭게덮여쓰인파일, 디렉터리에대해백업본을유지하여 USN 저널과함께좀더안전한복구를도움 사용자별디스크사용량제한 유니코드지원다국어지원 ( 파일, 디렉터리, 볼륨이름모두유니코드로저장 ) 대용량지원이론상 Exa Byte(2 64 ), 실제로는약 16 TB (2 44 ) 동적배드클러스터재할당 배드섹터발생클러스터의데이터를자동으로새로운클러스터로복사, 배드섹터발생클러스터는플래그통해더이상사용되지않도록함
NTFS 구조 Volume Boot Record Master File Table Data Area NTFS 는파일, 디렉터리및메타정보까지파일형태로관리 VBR 영역 : 부트섹터, 추가적인부트코드가저장되는부분 MFT 영역 : 파일과디렉토리를관리하기위한 MFT Entry 의집합체 각파일은위치, 시간정보, 크기, 파일이름등을 MFT Entry라는특별한구조로저장 크기가가변적, 해당 MFT가모두사용되면동적으롤클러스터를추가로할당해 MFT영역의크기를증가시키므로파일시스템의여러부분에조각나분포될수있음 MFT(Master File Table) 은 NTFS 상의모든 MFT Entry들의배열 MFT Entry 0 ~ 15번은파일시스템생성시함께생성되어특별한용도로사용 DATA 영역 : 파일의실제내용이저장되는공간, 내용만저장됨
VBR (Volume Boot Record) NTFS 로포멧된드라이브의가장앞부분에위치, 부트섹터와추가적인부트코드저장 클러스터크기에따른 VBR 크기 클러스터크기 (Byte) VBR 크기 (Sector) 512 1 1K 2 2K 4 4K 8 VBR 의첫섹터에는부트코드를포함한부트섹터가위치 부트섹터는 FAT 의부트섹터와유사한구조로 BPB 를포함 NTFS 부트섹터구조 십진수 범위 (Byte Range) 십육진수 설명 0-2 0x0000-0x0002 Jump command to boot code 3-10 0x0003-0x000A OEM ID 11-83 0x000B - 0x0053 BIOS Parameter Block 84-509 0x0054-0x01FD Boot code and error message 510-511 0x01FE - 0x01FF Signature
VBR NTFS 의부트섹터가 FAT 부트섹터와크게다른점은 BPB 영역 NTFS 부트섹터데이터구조 NTFS 부트섹터덤프 십진수 범위 (Byte Range) 십육진수 설명 0-2 0x0000-0x0002 Jump command to boot code (usually 0xEB5290) 3-10 0x0003-0x000A OEM ID (typically "NTFS ") 11-12 0x000B - 0x000C Bytes per sector 13-13 0x000D - 0x000D Sectors per cluster 14-15 0x000E - 0x000F Reserved sectors 16-18 0x0010-0x0012 Always 0 19-20 0x0013-0x0014 Unused 21-21 0x0015-0x0015 Media descriptor 22-23 0x0016-0x0017 Always 0 24-25 0x0018-0x0019 Sectors per track 26-27 0x001A - 0x001B Number of heads 28-31 0x001C - 0x001F Hidden sectors 32-35 0x0020-0x0023 Unused 36-39 0x0024-0x0027 Unused 40-47 0x0028-0x002F Total sectors 48-55 0x0030-0x0037 Logical cluster Number for the file $MFT 56-63 0x0038-0x003F Logical cluster Number for the file $MFTMirr 64-67 0x0040-0x0043 Clusters per file record segment 68-71 0x0044-0x0047 Clusters per index block 72-79 0x0048-0x004F Volume serial number 80-83 0x0050-0x0053 Checksum 84 509 0x0054-0x01FD Boot code and error message 510 511 0x01FE - 0x01FF Signature ("0x55AA")
MFT Entry NTFS 구조 Volume Boot Record Master File Table Data Area MFT Entry MFT Entry Header Fixup Array MFT Entry 구조 Attributes End Marker Unused Space MFT Entry : 파일의메타정보 ( 위치, 시간정보, 크기, 파일이름등 ) 들을저장 (NTFS 는모두파일 형태로관리 ) Attributes : 각메타정보표현 ( 시간, 이름, 내용등 ) 메타정보의크기에따라각파일은하나이상의 MFT Entry를가짐 0 ~ 15번은파일시스템을생성할때함께생성되어 NTFS의다양한특성을지원사용자에의해파일이생성될때마다새로운 MFT Entry가할당되어해당파일의정보를유지및관리
Master File Table VBR MFT Entry 0 MFT Entry 1 MFT Entry 2 Meta Data File : : MFT Entry 15 MFT Entry 16 : : Data Area MFT는파일시스템의여러영역에조각나서존재가능하므로, $MFT파일이 MFT 전체정보를유지관리하는역할수행각파일들분석위해전체 MFT 정보를획득이선행되어야함 Entry 번호 Entry 이름설명 0 $MFT NTFS 상의모든파일들의 MFT Entry 정보가짐 1 $MFTMirr $MFT 파일의일부백업본 2 $LogFile 메타데이터의트랜잭션저널정보 3 $Volume 볼륨의레이블, 식별자, 버전등의정보 4 $AttrDef 속성의식별자, 이름, 크기등의정보 5. 볼륨의루트디렉터리 6 $Bitmap 볼륨의클러스터할당정보 7 $Boot 볼륨이부팅가능할경우부트섹터정보 8 $BadClus 배드섹터를가지는클러스터정보 9 $Secure 파일의보안, 접근제어와관련된정보 10 $Upcase 모든유니코드문자의대문자 11 $Extend 12 15 예약영역 예약된 MFT Entry $ObjID, $Quota, $Reparse points, $UsnJrnl 등의추가적인파일의정보를기록하기위해사용 16 - 포맷후생성되는파일의정보를위해사용 - $ObjId 파일고유의 ID 정보 ( Windows 2000 - ) - $Quota 사용량정보 ( Windows 2000 - ) - $Reparse Reparse Point 에대한정보 ( Windows 2000 - ) - $UsnJrnl 파일, 디렉터리의변경정보 ( Windows 2000 - )
Master File Table Layout - $MFT 파일획득방법 Boot Sector Start Cluster of MFT : 31 Clus 31 MFT Entry 0 $MFT Cluster : 31 33, 77 79 Clus 32 Clus 33 : : : : : 부트섹터 BPB 항목을읽은후 MFT 시작위치파악 $MFT 파일을읽어전체적인 MFT 의레이아웃을판단 Clus 77 Clus 78 : : : : $MFT 파일의 $DATA 속성정보를확인하여조각나있는 MFT Entry 의정보확인 Clus 79 : :
MFT Entry MFT Entry Header Fixup Array Attributes MFT Entry 구조 End Marker Unused Space MFT Entry 는 1,024 바이트의고정된크기 42 Bytes 의고정된헤더, Fixup 배열, 속성이위치 속성들의정보가많아져하나이상의 MFT Entry 를사용할경우마지막 MFT Entry 의끝에 End Marker 가표시 (0xFFFFFFFF) Fixup 배열은저장하고자하는데이터가하나이상의섹터를사용할경우각섹터 의마지막 2바이트를따로저장하여두는것 MFT Entries INDEX Records RCRD Records RSTR Records
MFT Entry 데이터구조 십진수 범위 (Byte Range) 십육진수 설명 0-3 0x0000-0x0003 Signature("FILE") 4-5 0x0004-0x0005 Offset to fixup array 6-7 0x0006-0x0007 Number of entries in fixup array 8-15 0x0008-0x000F $LogFile Sequence Number (LSN) 16-17 0x0010-0x0011 Sequence value 18-19 0x0012-0x0013 Link count MFT Entry Header 20-21 0x0014-0x0015 Offset to first attribute 22-23 0x0016-0x0017 Flags (in-use and directory) 24-27 0x0018-0x001B Used size of MFT Entry 28-31 0x001C - 0x001F Allocated size of MFT Entry 32-39 0x0020-0x0027 File reference to base record 40-41 0x0028-0x0029 Next attribute ID 42-1023 0x002A - 0x03FF Attributes and fixup values Fixup Array & Attributes
Fixup 3개의섹터를사용하는데이터므로각섹터의마지막 2바이트를별도로저장해 Fixup 배열을만든후마지막 2 바이트공간에별도의시그니처를저장 해당데이터가저장되는섹터의이상유무점검위해 Fixup 적용되기이전상태 Fixup 적용된후의상태
MFT Attributes MFT Entry MFT Entry Header Fixup Array Attr Header Attr Content Attr Header Attr Content Attr Header Attr Content End Marker Unused Space 각파일의메타정보 ( 시간정보, 이름, 내용등 ) 는속성이라는구조를통해관리 각속성은속성헤더와속성내용을가짐 파일의특성에따라다양한속성을가짐
MFT 속성리스트 Attr Type Num Attr Name Description 16 $STANDARD_INFORMATION 파일의생성. 접근. 수정시간, 소유자등의일반적인정보 32 $ATTRIBUTE_LIST 추가적인속성들의리스트 48 $FILE_NAME 파일이름 ( 유니코드 ), 파일의생성. 접근. 수정시간 64 $VOLUME_VERSION 볼륨정보 (Windows NT 1.2 버전에만존재 ) 64 $OBJECT_ID 16바이트로이루어진파일, 디렉터리의고유값, 3.0 이상에서만존재 80 $SECURITY_DESCRIPTOR 파일의접근제어와보안속성 96 $VOLUME_NAME 볼륨이름 112 $VOLUME_INFORMATION 파일시스템의버전과다양한플래그 128 $DATA 파일내용 144 $INDEX_ROOT 인덱스트리의루트노드 160 $INDEX_ALLOCATION 인덱스트리의루트와연결된노드 176 $BITMAP $MFT와인덱스의할당정보관리 192 $SYMBOLIC_LINK 심볼릭링크정보 (Windows 2000+) 192 $REPARSE_POINT 심볼릭링크에서사용하는 reparse point 정보 (Windows 2000+) 208 $EA_INFORMATION OS/2 응용프로그램과호환성을위해사용 (HPFS) 224 $EA OS/2 응용프로그램과호환성을위해사용 (HPFS) 256 $LOGGED_UTILITY_STREAM 암호화된속성의정보와키값 (Windows 2000+)
MFT Attributes MFT Entry MFT Entry Header Fixup Array Attr Header Attr Content Attr Header Attr Content Attr Header Attr Content End Marker Unused Space $STANDARD_INFOGMATION Type ID : 16 $FILE_NAME Type ID : 48 $DATA Type ID : 128 기본적인파일은위와같이 3 개의속성을가짐 $STANDARD_INFORMATION : 파일의생성. 접근. 수정시간, 소유자등의정보 $FILE_NAME : 파일이름 ( 유니코드 ), 파일의생성. 접근. 수정시간 $DATA : 파일내용 해당속성이 Resident, Non-resident 이냐에따라속성헤더항목의데이터구조다름
$STANDARD_ONFORMATION 데이터구조 $FILE_NAME 데이터구조 십진수 범위 (Byte Range) 십육진수 설명 십진수 범위 (Byte Range) 십육진수 설명 ~ ~ Attribute Header 0-7 0x0000-0x0007 Creation time 8-15 0x0008-0x000F File altered time 16-23 0x0010-0x0017 MFT altered time 24-31 0x0018-0x001F File accessed time 32-35 0x0020-0x0023 Flags 36-39 0x0024-0x0027 Maximum number of versions 40-43 0x0028-0x002B Version number 44-47 0x002C - 0x002F Class ID 48-51 0x0030-0x0033 Owner ID (version 3.0+) 52-55 0x0034-0x0037 Security ID (version 3.0+) 56-63 0x0038-0x003F Quota Charged (version 3.0+) 64-71 0x0040-0x0047 Update Sequence Number(USN) (version 3.0+) ~ ~ Attribute Header 0-7 0x0000-0x0007 File reference of parent directory 8-15 0x0008-0x000F File creation time 16-23 0x0010-0x0017 File modification time 24-31 0x0018-0x001F MFT modification time 32-39 0x0020-0x0027 File access time 40-47 0x0028-0x002F Allocated size of file 48-55 0x0030-0x0037 Real size of file 56-59 0x0038-0x003B Flags 60-63 0x003C - 0x003F Reparse value 64-64 0x0040-0x0040 Length of name 65-65 0x0041-0x0041 Namespace 66-0x0042 - Name
추가적인 Resident 속성헤더의데이터구조 십진수 범위 (Byte Range) 십육진수 설명 일반적인속성헤더의데이터구조 범위 (Byte Range) 설명 십진수 십육진수 0-3 0x0000-0x0003 Attribute type identifier 4-7 0x0004-0x0007 Length of attribute 8-8 0x0008-0x0008 Non-resident flag 9-9 0x0009-0x0009 Length of name 10-11 0x000A - 0x000B Offset to name 12-13 0x000C - 0x000D Flags 14-15 0x000E - 0x000F Attribute identifier 0-15 0x0000-0x000F General header 16-19 0x0010-0x0013 Size of content 20-21 0x0014-0x0015 Offset to content 추가적인 Non-Resident 속성헤더의데이터구조 범위 (Byte Range) 설명 십진수 십육진수 0-15 0x0000-0x000F General header 16-23 0x0010-0x0017 Starting Virtual Cluster Number(VCN) o f the runlist 24-31 0x0018-0x001F Ending VCN of the runlist 32-33 0x0020-0x0021 Offset to the runlist 34-35 0x0022-0x0023 Compression unit size 36-39 0x0024-0x0027 Unused 40-47 0x0028-0x002F Allocated size of attribute content 48-55 0x0030-0x0037 Actual size of attribute content 56-63 0x0038-0x003F Initialized size of attribute content
Resident 속성과 Non-resident 속성 Resident 속성 MFT Entry 내에속성헤더와속성내용이모두저장되는경우 속성내용이많아지면여러개의 MFT Entry를사용 MFT Entry로감당하지못할경우별도의클러스터에해당속성을저장, 속성내용에는저장한클러스터의위치정보만저장 Non-resident 속성 형태는속성내용이증가할수있는 $ATTRIBUTE_LIST나 $DATA 속성 $DATA 속성내용이 700 바이트이하일경우 Resident 속성으로저장, 넘을경우 Non-resident 속성으로저장 파일이크기가 700 바이트보다작으면별도의클러스터할당없이해당 MFT Entry에함께저장 Non-resident 속성
Cluster Run MFT Entry MFT Entry Header Fixup Array Attr Header Attr Content Attr Header Attr Content Attr Header Attr Content Cluster Run End Marker Unused Space Start Cluster Length 1 1220 3 2 3072 4 Attribute Content Attribute Content 1220 1221 1222 3072 3073 3074 3075 Non-resident 로저장된속성의크기가매우클경우저장하기위한많은클러스터가할당 Cluster Run 을사용하여클러스터의시작위치와수를표현 ($DATA) Cluster Run 형태로해당 $DATA 속성내용을관리
Data Area DATA 영역은파일의실제내용이저장되는공간 모든관련정보는 MFT Entry 의속성을통해관리되므로특별한구조없이내용만저장
\dir1 디렉터리는이미생성되어있고클러스터크기는 2,048 바이트, 파일크기는 4,000 바이트이라하자. 1. VBR 의 BPB 정보에 MFT 시작위치정보를얻어 MFT 시작위치로이동한다. 2. $MFT(MFT Entry 0) 파일을읽어전체 MFT 구조를파악한다. 3. $MFT 파일의 $BITMAP 속성에서현재사용되지않는 MFT Entry 를검색 한다. MFT Entry 304 번이미사용중이므로 Entry 를할당한후 $BITMAP 속성에서해당 Entry 위치의비트를 1 로세트한다. 4. MFT Entry 304 번을초기화한후 $STANDARD_INFORMATION, $FILE_NAME 속성을기록하고 MFT Entry 의 in-use 플래그를세트한다. 5. file1.dat 는 2 개의클러스터가필요하므로 $Bitmap(MFT Entry 6) 파일의 클러스터할당정보에서사용할클러스터를검색한다. 할당알고리즘에 의해연속된 2 개의클러스터 692, 693 번이선택된다. 그리고해당클러스 터에해당하는비트를 1 로세트한다. 6. 루트디렉터리 (MFT Entry 5) 파일에서 \dir1 의위치를검색한다. 7. \dir1 의위치인 MFT Entry 200 번에서새로운파일에대한인덱스엔트리 를생성하면인덱스가재배열된다. 이경우디렉터리의 last written, modified, accessed time 이변경된다. 8. 마지막으로각작업에대해 $LogFile 과 \$Extend\$UsnJrnl 파일에로그 정보가기록되고 Quotas 기능을사용중일경우해당사용자의할당량을 \dir1\file1.dat 파일할당시 NTFS 파일시스템변화관리하는 \$Extend\$Quota 정보가수정된다.
\dir1 디렉터리는이미생성되어있고클러스터크기는 2,048 바이트, 파일크기는 4,000 바이트이라하자. 1. VBR의 BPB 정보에 MFT 시작위치정보를얻어 MFT 시작위치로이동한다. 2. $MFT(MFT Entry 0) 파일을읽어전체 MFT 구조를파악한다. 3. 루트디렉터리 (MFT Entry 5) 파일의 $INDEX_ROOT와 $INDEX_ALLOCATION 속성에서 \dir1 Entry 위치를탐색한다. 4. 루트디렉터리 (MFT Entry 5) 파일의 $INDEX_ROOT와 $INDEX_ALLOCATION 속성에서 \dir1 Entry 위치를탐색한다. 5. MFT Entry 200번에서 file1.dat와관련된인덱스엔트리를삭제한다. 이경우디렉터리의 last written, modified, accessed time이변경된다. 6. $MFT 파일의 $BITMAP 속성에서삭제된 MFT Entry에해당하는비트를 0 으로세트한다. 7. $Bitmap 파일에서삭제파일의 $DATA 속성내용으로할당되었던클러스터에관련비트를 0으로세트한다. 8. 마지막으로각작업에대해 $LogFile과 \$Extend\$UsnJrnl 파일에로그정보가기록되고 Quotas 기능을사용중일경우해당사용자의할당량을관리하는 \$Extend\$Quota 정보가수정된다. \dir1\file1.dat 파일삭제시 NTFS 파일시스템변화
파일시스템상의삭제파일복구 (Deleted Files Analysis) 삭제한파일은다른파일보다우선분석 Directory Entry 나 MFT Entry 가덮여쓰이지않았다면복구가능 삭제된파일판별 FAT : NTFS : Root Directory 부터삭제된 Directory Entry 검색 (value : 0xE5, offset : 0x00) $MFT 내의 MFT Entry bitmap 에서 0x00 값을가지는 MFT Entry 조사
비할당클러스터분석 (Unallocated Clusters Analysis) 비할당클러스터 : 메타정보를통해접근할수없는클러스터 대용량의하드디스크사용으로많은양의공간이비할당영역일가능성 비할당된클러스터는이전데이터가남아있을가능성 포맷하기이전의데이터 포맷한후할당되었다가삭제된데이터 비할당클러스터판별 FAT : NTFS : FAT 영역에서 0x00 값을갖는클러스터 MFT Entry 6 번의 $Bitmap 파일로부터할당되지않은클러스터를조사클러스터비트맵에서 0x00 값을갖는클러스터
슬랙공간분석 (Slack Space Analysis) Cluster 1 Cluster 2 Sector 1 Sector 1 Sector 2 Sector 2 Sector 3 Sector 3 Sector 4 Sector 4 File Slack : 이전에할당되었던데이터가남아있을가능성 File System Slack, Volume Slack : 마찬가지 의도적으로데이터를은닉할가능성
시간정보분석 (Timestamp Analysis) 사건이발생한시점을중심으로데이터분석 시간의흐름파악이중요 시간의역전및의도적인조작이발생했는지파악 시간정보위치 FAT : NTFS : 해당파일, 디렉터리의 Directory Entry (create time, last written time, created date, last accessed date, last written date) 이름 Created Time Created Date Accessed Date Written Time 해당파일의속성 Written Date ($STANDARD_INFORMATION, $FILE_NAME) 설명파일이생성된시간파일이생성된날짜마지막으로파일내용에접근한날짜마지막으로파일내용을수정한시간마지막으로파일내용을수정한날짜 이름 설명 Creation Time Modified Time MFT Modified Time Accessed Time 파일이생성된시간마지막으로파일내용이수정된시간 MFT 내용이마지막으로수정된시간마지막으로파일내용에접근한시간
Signature Analysis 파일시그니처와확장자가일치하는지검사 확장자변경을통해의도적으로파일을은폐할가능성 확장자위치 FAT : NTFS : 해당파일의 Directory Entry 해당파일의 $FILE_NAME 속성
부트코드분석 MBR 부트코드 : 파티션테이블읽어부팅가능한파티션의부트섹터호출역할 부트섹터의부트코드 : 파일시스템의 BPB 활용하여부트로더호출역할 분석방법 MBR : 부트코드해석하여부팅가능한파티션의시작위치로점프하는지확인 부트섹터 : 부트코드를해석하여정상적으로부트로더를로드하는지확인
미사용영역분석 미래를위해예약해둔영역, 불필요하게생성된영역 기본적으로참조하는영역이아니므로쉽게파악어려움 파일시스템별미사용영역 FAT : MBR 과예약영역사이 / 예약영역에서사용하지않는섹터 (0,1,2,6,7,8 번제외 ) / FSINFO 구조체섹터 ( 예약영역의 1, 7 번섹터 ) 에서사용되지않는영역 NTFS : VBR 에서부트섹터를제외한나머지섹터 / 미래를위해예약해둔 MFT Entry 12 ~ 15 번영역
은닉파일분석 파일시스템에서숨긴속성을가진파일을분류해분석하는방안필요 파일시스템별숨긴속성확인방법 FAT : 파일의 Directory Entry 항목중오프셋 11 의 Attribute 가 0x02 값인것조사 NTFS : 파일의 MFT Entry 에서 $STANDARD_INFORMATION 속성의오프셋 32 ~ 35 Flags 가 0x0002 인것조사
암호파일분석 NTFS 는 EFS 에의해파일시스템수준에서암호화기능제공 NTFS 에서암호화속성을확인하는방법 파일의 MFT Entry 에서 $STANDARD_INFORMATION 속성의오프셋 32 ~ 35 Flags 가 0x4000 인것조사
ADS 파일분석 NTFS 는하나의파일이두개이상의데이터속성을가질수있는 ADS 를지원 운영체제통해확인할수없으므로데이터은닉목적으로이용될가능성존재 NTFS 에서 ADS 파일을확인하는방법전체 MFT Entry 를대상으로 $DATA 속성을두개이상가지는 MFT Entry 를조사
로그정보분석 사건발생시점의파일시스템변경사항들을조합하여용의자의행위를파악 NTFS 파일시스템의변경사항기록되는파일조사 MFT Entry 2 번인 $LogFile 과 MFT Entry 11 번인 $Extend 파일에포함된 $Extend\$UsnJrnl 파일조사
$Boot 파일분석 NTFS 의 MFT Entry 7 번인 $Boot 파일의 $DATA 속성에서부트섹터의위치정보, 부트코드가저장됨 부팅용도로사용되지않는 NTFS 에서의 $DATA 속성에데이터은닉가능성
$BadClus 파일분석 NTFS 의 MFT Entry 8 번인 $BadClus 파일은배드섹터가발생한클러스터관리 정상적인클러스터를 $BadClus 에등록한후해당영역에데이터를은닉가능성
FAT 파일시스템은파일의메타정보를유지하기위해 FAT 영역과디렉터리엔트리를사용한다. 파일이삭제될경우 FAT 영역에서는파일에할당되었던클러스터에대응되는 FAT Entry 가 0x00 으로초기화된다. 그리고해당파일의디렉터리엔트리의오프셋 0x00 의값이삭제를나타내는 0xE5 값으로변경된다. 이경우파일에할당되었던클러스터에는파일의내용이그대로남아있게된다. 따라서해당클러스터가새로운파일에사용되지않는다면삭제표시된디렉터리엔트리에파일크기와시작클러스터정보를통해비교적쉽게파일을복구할수있다. 단, 디렉터리엔트리에는시작클러스터에대한정보만기록되어있기때문에파일이여러클러스터에조각나기록된경우에는 FAT 영역에서클러스터체인을확인할수없어완벽하게복구하기가어렵다. 1. 부트섹터의 BPB 에서데이터영역, 루트디렉터리, FAT 영역의위치, 클러스터크기를얻어온다. 2. \dir1 디렉터리의정보를얻기위해루트디렉터리에서 \dir1 에해당하는디렉터리엔트리를검색한다. 그결과 \dir1 디렉터리정보를가지는시작클러스터가 90 번임을확인했다. 3. 클러스터 90 번에서삭제된 file1.dat 파일의디렉터리엔트리를찾는다. 삭제표시를위해파일이름의첫바이트인 0x66('f') 대신 0xE5 값이기록되어있다. 4. 삭제된 file1.dat 파일의디렉터리엔트리에서파일의이름, 확장자, 크기, 시작클러스터의위치를확인한다. 5. 시작클러스터에서부터파일크기만큼데이터를획득한후저장할위치에디렉터리엔트리에서확인한파일이름과확장자로파일을저장한다. FAT 파일시스템에서삭제된 \dir1\file1.dat 파일복구
NTFS 에서는파일의메타정보를유지하기위해 MFT Entry, MFT Entry 의할당상태를표시하기위한 $MFT(MFT Entry 0) 파일의 $BITMAP 속성, 클러스터의할당상태를표시하기위한 $Bitmap(MFT Entry 6) 파일의 $DATA 속성을사용한다. 파일이삭제될경우 $MFT 파일의 $BITMAP 속성에서해당파일이사용했던 MFT Entry 비트가 0 으로세트되고 $Bitmap 파일의 $DATA 속성에서해당파일에할당되었던클러스터비트가 0 으로세트된다. 결국파일의 MFT Entry 와실제파일에할당되었던클러스터의내용은변경되지않는다. 따라서해당파일의 MFT Entry 와할당되었던클러스터내용이새로운파일의정보로덮여쓰여지지않았다면비교적쉽게파일을복구할수있다. NTFS 에서는 FAT 파일시스템과다르게파일의내용이 Resident 속성일경우 MFT Entry 상에저장되므로완벽하게복구할수있다. 또한 Non-resident 속성의경우에도 Cluster Runs 정보를통해완벽하게복구할수있다. 1. VBR 의 BPB 정보에 MFT 시작위치정보를얻어 MFT 시작위치로이동한다. 2. $MFT 파일의 $BITMAP 속성에서현재사용중이지않은 MFT Entry(0x00 값을갖는 ) 정보를얻어온다. 3. $MFT 파일의 $DATA 속성에서 0x00 값을갖는 MFT Entry 를대상으로 $FILE_NAME 속성의파일이름이 file1.dat" 를가지는 MFT Entry 를찾는다. 그결과 MFT Entry 301 번이해당파일의 MFT Entry 임이확인되었다. 4. MFT Entry 301 번의 $FILE_NAME 속성에서파일크기를확인한다. 그리고 $DATA 속성을확인한결과 Non-resident 속성임이확인되었다. 따라서 Cluster Runs 정보를기반으로파일크기만큼데이터를획득한다. 획득한데이터를저장할위치에앞서확인한파일이름으로파일을저장한다. NTFS 파일시스템에서삭제된 \dir1\file1.dat 파일복구
파일시스템정보를얻을수없는경우의복구 파일시스템에서얻을수있는정보없이 파일자체정보 기반복구 즉, 파일의고유한특성이있는파일만복구가능 연속적으로존재하는파일에대한복구는대부분가능, 조각난경우는어려움 추출된파일이올바른파일이라는보장이없음 많은시간이소요됨
파일이연속적이지않고조각난경우 조각난파일이생성되는이유 파일을저장할충분한연속공간이없을경우 기존파일에데이터가추가될때, 파일의후반부영역에할당되지않은영역의크기가충분하지않은경우 파일포맷의특성을이용한여러복구방안이연구중 Pattern Recognition, 통계분석등
파일카빙기법 : 저장매체의비할당영역으로부터파일을복구하는기법 연속적인카빙기법 파일내용이저장매체의연속된공간에저장된경우수행 비연속적인카빙기법 파일의내용이저장매체의여러부분에조각나저장된경우수행
시그니처기반카빙 파일포맷별로존재하는고유한시그니처를이용하는방법 헤더와푸터시그니처가모두존재하는파일의경우두시그니처사이의데이터가파일의 내용
파일의 Header 와 Footer 정보 일부파일은파일의시작과끝을알수있는고유한 Header 와 Footer 를가짐 PDF, GIF. PNG, JPG, ALZ, ZIP, RAR, MPG
램슬랙카빙 푸터시그니처이후에램슬랙이존재 시그니처기반카빙기법에서푸터시그니처와함께확인하여많은오탐줄일수있음
파일구조체카빙 푸터시그니처가존재하지않거나파일포맷내부에여러개의시그니처가존재하는경우 효과적인방법으로파일의구조를분석하여카빙하는기법 파일크기획득방법 파일구조검증방법
파일의 Header 와 File size 정보 일부파일은파일의시작과크기를알수있는정보를포함하고있음 DOC, ODT, ODS, BMP, AVI, ASF, WAV
데이터표현위한고유한계층구조를검증하여카빙하는방법 문서파일과같이빈번한수정이이루어지는경우사용 파일구조검증방법을적용할수있는파일포멧 파일포맷 헤더 (Hex) 시그니처 푸터 (Hex) ZIP 50 4B 03 04 50 4B 05 06 ALZ 41 4C 5A 01 43 4C 5A 02 RAR 52 61 72 21 1A 07 3D 7B 00 40 07 00 Compound D0 CF 11 E0 A1 B1 1A E1 -