ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Windows] NTFS
    > Information Security/Forensics 2014. 1. 2. 21:31

    NTFS File System


    NTFS 파일시스템은 New Technology File System의 약자이며, MS-DOS 이전의 Windows버전에서 사용되었던 FAT파일시스템을 대체하는 파일시스템이다. 최근의 대부분의 Windows계열의 OS는 NTFS 파일시스템을 이용하고 있다.


    NTFS의 구조는 크게 VBR(Volume Boot Record), MFT(Master File Table), Data Area로 구성되어 있다.


    VBR(Volume Boot Record)

    MFT(Master File Table)

    파일과 디렉토리를 관리하기 위한 MFT Entry의 집합체

    Data Area

    MFT영역은 그 자체를 하나의 파일로고려하기 때문에 데이터 영역과 구별되지 않고 혼재되어 있다.

    Boot Sector

    Additional Boot Code






    VBR(Volume Boot Record)


     시스템이 부팅을 시도할 때, 디스크에서의 VBR(Volume Boot Record)을 필요로 하며 VBR은 NTFS로 포맷된 드라이브의 가장 앞부분에 위치하며, 부트 섹터와 추가적인 부트 코드가 저장되어 있다



    VBR은 클러스터 크기에 따라 VBR의 섹터 수에 차이가 있다


    클러스터 크기에 따른 VBR 크기

    클러스터 크기 (Byte)

    VBR 크기 (Sector)

    512

    1

    1K

    2

    2K

    4

    4K

    8








    VBR의 첫 섹터에는 부트 섹터와 함께 추가적인 부트코드가 존재한다. 클러스터 크기가 512 바이트인 경우, VBR 크기가 1섹터이므로 VBR 자체가 부트 섹터가 된다. VBR의 크기가 1 섹터를 넘는 경우, 나머지 섹터들은 추가적인 부트 코드의 저장 용도 또는 NTDLR(NT Loader)을 빠르게 로드하기 위해 NTDLR의 위치를 저장하기 위한 용도로 사용된다.

    NTFS의 부트섹터의 구조는 아래와 같다.


    NTFS 부트 섹터 데이터 구조

    바이트 offset

    상세 내용

    10진수

    16진수

    0-2

    0x0000-0x0002

    Jump command to boot code

    (usually 0xEB5290)

    3-10

    0x0003-0x000A

    OEM ID (typically “NTFS “)

    11-12

    0x000B-0x000C

     

     

     

     

     

     

     

     

    BIOS

    Parameter

    Block

    (BPB)

    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 sector

    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-0x0053

    Volume serial number

    80-83

    0x0050-0x01FD

    Checksum

    84-509

    0x0054-0x00FF

    Boot code and error message

    510-511

    0x01FE-0x0002

    Siganature(0x55AA)

     

    다음은 Boot Sector의 세부 구조를 색 별로 구분해놓은 것이다. 












    MFT(Master File Table)


    MFT(Master File Table) VBR(Volume Boot Record)이후에 존재하지만 위치는 고정되어 있지 않다


    MFT는 메타 데이터 파일이라 불리는 여러 개의 MFT Entry의 집합으로 구성되어있다. MFT Entry에는 0부터 15까지 총 16개의 엔트리가 존재하는데, 파일이름 앞에 특수문자 ‘$’를 붙이는 형태이다.


    [MFT Entry]


    [MFT 엔트리 목록]


    MFT Entry1,024byte의 고정된 크기를 가지며, ‘Attributes’에는 각 파일의 특성에 따라 MFT 엔트리 속성타입을 가지고 있다


    [MFT Entry > Attributes]

    각 Attribute(속성)값의 16진수 형태는 $STANDARD_INFORMATION(0x0010), $ATTRIBUTE_LIST(0x0020) ....와 같이 각 속성들을 구분하는 구분자가 되기도 한다. 


    아래 그림을 보자. $MFT 엔트리를 열어본 것이다.

    미묘하게 색이 구분되어 있는 것을 볼 수 있는데, WinHex에서 기본적으로 제공하는 기능이기도 하다. 


    각 필드의 2byte는 속성값의 구분자의 역할을 한다.




    [ Attributes > Resident Attribute/ Non Resident Attribute]


    한편, AttributeMFT Entry내의 속성 내용의 사이즈에 따라 Resident AttributeNon-Resident Attribute로 분류된다.

     

    구분

    역할

    Resident Attribute

    - MFT Entry내에 속성헤더와 내용이 모두 저장되는 경우

    - 속성 내용이 많아지면 여러 개의 MFT Entry 사용

    Non-Resident Attribute

    - $Data 속성 내용이 700byte 이상일 경우

    - 별도의 클러스터에 속성 저장


     Resident AttributeMFT Entry 내에 속성 헤더와 속성 내용이 모두 저장되는 경우이며, 속성 내용이 많아지면 여러 개의 MFT Entry를 사용한다Non-Resident Attribute $Data의 속성 내용이 700byte 이상일 경우 별도의 클러스터에 해당 속성을 저장하는 경우이다. 기존 속성 내용에는 저장한 클러스터의 위치 정보만 저장한다














    <참고>

    www.forensicproof.com - MFT Entry

    UCS Lab 8. 파일시스템 구조 및 복구 - NTFS

    728x90
    반응형
Designed by Tistory.