ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MBR - NTFS(VBR, MFT Header)
    포렌식 통합/디지털 포렌식 한 권으로 끝내기 2024. 2. 29. 21:47

    실습을 위해서 디스크 구조가 어떻게 되어있는지 알아보려고 했다.

    일단 첨에 모두 포맷 시켜놓고, OS 새로 설치함

    MBR로 사용

    그리고 파티션들은 NTFS로 이루어졌다.


    MBR의 구조

    더보기

     

     

    MBR은

    446바이트의 Boot Code

    16바이트의 Partition Table 4개

    (총 64바이트)

    2바이트의 Signature

    로 이루어져있다.

     

    나는 FTK Imager로 실습을 진행했다.

    Add Evidence Item -> Physical Drive
    현재 자신의 OS가 실행되는 드라이브로 선택

    자 이제 여기서 446바이트는 0x0000 ~ 0x01bd이므로

    빨간 부분이 Boot Code가 된다.

    이후의 파란 부분은 16바이트의 4개의 데이터가 4개의 파티션 테이블

    검은 부분의 2바이트짜리 55 AA는 MBR 시그니처이다.

    여기서 정보를 알아내보자.

     첫번째 파티션을 보면 

    80 20 21 00 07 7F 39 06 00 08 00 00 00 90 01 00 이다.

    MBR 파티션 테이블에 대한 값들은 이러하다.

    Boot Flag : 80 (부팅 가능)

    CHS Start : 20 21 00 (CHS 형태로 저장하지 않으므로 상관 X)

    Part Type : 07 (NTFS 사용)

    End CHS : 7F 39 06 (CHS 형태로 저장하지 않으므로 상관 X)

    LBA Start : 00 08 00 00 (LBA 주소 체계로 0x800번째 섹터에 파티션 시작 위치)

    Size in Sector : 00 90 01 00 (파티션이 차지하는 총 섹터 수)

    이렇게 이루어져있다.

     

    책에서 나온대로 확인해보면

     Boot Flag 값이 0x80이므로 부팅이 가능한 파티션이고,

     

    Part Type 값이 0x07이므로 NTFS 시스템 파일을 사용한다.

    그리고 LBA의 시작 값이 00 08 00 00 인데

    이건 리틀 엔디안 방식으로 저장되어있으므로

    우리가 평소에 사용하는 빅 엔디안 방식으로 다시 바꿔주면

    실제 주소는 0x00000800 이다.

    여기서 LBA의 주소 값은 바이트 단위가 아닌 섹터를 기준으로 하므로

    0x800 = 2048번째 섹터부터 파티션의 시작이다.

    우클릭 후 섹터/클러스터 이동

     Physical Sector로 설정

    16진수 기준으로 0x800 이므로 Hex로 설정

    0x100000의 위치로 이동했다.

    섹터의 단위가 이러면 계산이 가능하다.

    0x100000 나누기 0x800 은 0x200이다.

    0x200은 10진수로 512이므로

    기본적으로 사용하는 512바이트를 기준으로 섹터 크기를 잡았음을 알 수 있다.

    MBR의 구조를 통해

    첫 번째 파티션의 위치가 부팅이 가능한 파티션인 것을 알아서 현재 OS가 실행 중인 파티션이라고 추측을 했다.

    그리고 그 파티션의 위치를 특정 지을 수 있었다.

    이제 이후는 해당 파티션이 어떤 파일 시스템을 사용하는지

    그 파일 시스템은 어떠한 구조와 특징을 가지는지 알아봐야한다.


    NTFS의 구조

     

    NTFS는 

    VBR(Volume Boot Record) + MFT(Master File Table) + Data Area(데이터 영역)으로 이루어져있다.

     

    1. VBR

    더보기

    VBR은 

    부트섹터 + 추가 VBR 영역 으로 이루어져있다.

    여기서 부트섹터는 VBR의 첫번째 섹터를 차지하므로

    총 512바이트의 크기를 가진다.

    마지막에 시그니처 55 AA가 있다.

    FTK Imager 로 보게되면

    1줄에 16바이트니까

    대충 512/16 = 32줄 정도 나올듯

    한 번 확인해보자.

    파티션 시작 위치가 0x100000 이니까

    512바이트 = 0x200

    0x1001f0 줄에 55 AA 로 파일 시그니처가 나왔다.

     

    어디서부터 어디까지가 VBR 임을 알아냈으니까

    이제 VBR의 구조를 파악해보자.

     

    0xEB 52 90 + 0x4E 54 46 53 20 20 20 20

    Jump Boot Code + OEM Name 으로 NTFS에 맞는 Jump Boot Code가 있다.

    만약에 NTFS가 아니라 FAT12/16/32 였다면 Jump Boot Code는

    0xEB 58 90 값을 가지게 된다.

     

    0x00 02

    Byte Per Sector으로 1개의 섹터 = 몇 바이트인지를 나타낸다.

    (데이터 입출력은 클러스터 단위로 이행된다.)

    (단순하게 생각하면 섹터<클러스터<트랙)

    리틀엔디안->빅엔디안 변환하면

    0x0200 -> 512 바이트로 1개의 섹터에 512라고 앞서 말했던 값과 같다.

     

    0x08

    Sector per cluster로 1개의 클러스터 = 몇 섹터인지를 나타낸다.

    바이트 1개로 나타냈으므로 변환 필요없다.

    1개의 클러스터 = 8개의 섹터이다.

     

    0xF8

    0xF8은 고정식 디스크라는 뜻이다

    만약에 0xF0이였다면

    플로피 디스크라는 뜻이다.

    근데 나머지 Media Descriptor Byte의 값에 따른 디스크 유형은 봐도 잘 모르겠다.

    ?) 나중에 화햇 되면 물어보던가 할까한다...

     

    0xFF 8F 01 00 00 00 00 00

    해당 파일시스템이 접근할 수 있는 저장공간인 볼륨이 갖는 섹터 수이다.

    빅 엔디안 방식으로 바꿔주면

    0x18FFF = 102399개의 섹터를 갖는다.

    많아보이지만이는 52428288 바이트 = 0.048828 기가 바이트밖에 안되는 크기이다.

     

    0xAA 10 00 00 00 00 00 00

    MFT의 시작주소(클러스터 기준)

    빅 엔디안 방식으로 바꿔주면

    0x10AA이다.

    책에서는

    MFT 위치 = Start of MFT * 클러스터당 섹터 수 + Boot Record 위치

    라고 되어있었다.

    클러스터당 섹터는 8이였으므로

    0x10AA * 8 = 0x8550 + Boot Record 위치

    첨에 Boot Record 위치는 0x800의 섹터에 위치함을 알았으니

    0x8550 + 0x800 번째 섹터일 것이다.

    그러면 0x8D50 섹터이므로

    MFT의 파일 시그니처 'FILE'이 시작되는 부분으로 온 것을 확인할 수 있다.

     

    2. MFT

    더보기

    MFT의 주소를 알아내어 확인했으니 MFT의 구조도 알아봐야한다.

     

    MFT는 파일 및 디렉터리의 변경등의 정보를 담아놓은 곳으로 파일 레코드라고한다.

    로그랑 비슷한듯함.

     

    MFT는

    1024바이트로 이루어진 여러개의 MFT 엔트리로 이루어져있다.

    MFT 엔트리는 파일이나 디렉터리의 생성시기에 함께 생성되어 해당하는 메타데이터를 저장한다.

    !) MFT를 통해서 숨긴 파일 찾기, 복사 유무, 삭제 유무등을 알아낼 수 있다.

     

    MFT 엔트리는 각각 1024바이트로 크기가 어느정도 정해져있지만,

    MFT 영역 자체는 고정된 크기가 있지않다.

    NTFS의 전체영역중에 대체적으로 12.5 %가 MFT 영역으로 할당된다.

    물론 뒤에 데이터 영역의 크기가 얼마인가에 따라 달라지긴 하겠지만 대략적으로 그렇다고한다.

     

    MFT 엔트리들 목록이다.

    0번부터 23번까지는 예약되어 있는 엔트리로

    데이터들을 관리하기 위해서 실질적으로 필수요소들로 이루어진 MFT 엔트리들이다.

    1024바이트면 16 *64이므로

    FTK Imager로 보면 64줄 그러니까 0x40줄 단위로 보면된다.

    사진은 MFT 엔트리의 구조이다.

    MFT Entry Header (48bytes)

    Fixup Array

    Attributes

    End Marker

    Unused Space 로 이루어져있고,

     

    세부적으로 Attributes들이 있다.


    1. MFT Entry Header

    MFT Entry Header는 0x30의 크기를 가지며

    아래와 같은 구조를 띄고 있다.

    비교해보자.

    값을 확인해보자


    0x46 49 4C 45

    단순하게 그냥 파일 시그니처이다.

    0x30 00

    Offset of Fixup Array으로 Fixup Array는 MFT 엔트리의 데이터에서 오류를 검출하기 위해 사용된다.

    현재 MFT Entry에서 0x30만큼의 오프셋을 지니므로

    MFT Entry 이후에는 Fixup Array가 나옴을 알 수 있으므로 이후에 서술할 내용을 보면 이해할 수 있을 것이다.

    0x03 00

    Number of entries of Fixup Array으로 Fixup Array의 항목 수가 3개임을 알려준다.

    0x3E 4F 70 00 00 00 00 00

    $LogFile Sequence Number으로 MFT의 2번 엔트리인 $LogFile에 존재하는 파일의 마지막 트랜잭션 위칫값이라고하는데

    간단하게 말하면 마지막으로 NTFS가 실행한 파일 생성, 삭제, 복사등의 기록을 이용하여 복구하는데 사용한다는 것이다.

    0x01 00

    Sequence Number으로 MFT 엔트리를 생성 후에 할당/해제 시마다 1씩 증가하는 값이다.

    현재 보고있는 MFT Entry는 $MFT인데 해당 엔트리는 0x1 값인 것을 보아 할당 이후 한번도 해제한 적이 없는듯하다

    0x01 00

    Link count으로 MFT 엔트리에 연결된 Hard link 개수를 나타낸다.

    0x38 00

    Offset to First Attribute으로 해당 MFT 엔트리 첫 번째 속성 위치이다.

    위에서 설명한 그림에서 지금 우리가 알아보고 있는 MFT Entry Header(0x30 바이트 크기)

    이후에 Fixup Array가 나오고, 그 다음에 나오는 Attributes(속성)의 첫 번째 값의 위치를 말하는 것 같다.

    빅 엔디언 방식으로 바꿔주면 0x38인데 그러면 지금 내가 보고 있는 엔트리는

    0x30 + 0x08 + Attributes + End Marker + 사용하지 않는 영역

    이렇게 이루어져있어서

    Fixup Array는 0x08의 크기를 가질 수도 있겠다는 추측이 가능하겠다.

    0x01 00

    Flag 값이다.

    현재 MFT Entry의 속성 상태를 나타낸다.

    0x00 = 사용하지 못함

    0x01 = 사용 중

    0x02 = 사용하지 않는 디렉터리 형태

    0x03 = 사용 중인 디렉터리 형태

    나는 0x1 이므로 사용 중인 MFT Entry라고 볼 수 있다.

    0x98 01 00 00

    Used size of MFT Entry는 실제 MFT Entry가 사용 중인 크기를 말한다.

    0x198만큼 사용하나보다.

    0x00 04 00 00

    Allocated size of MFT Entry는 MFT Entry에게 할당된 영역을 나타낸다

    0x400만큼 할당되었다.

    그러면 0x400만큼 할당된 공간 중에 사용하는 공간은 현재 0x198이라는 것이다.

    내가 앞에서 엔트리 하나는 0x40만큼의 크기 단위로 세서 확인하면 되겠다고 이야기한 그대로 값이 설정되어있네

    0x00 00 00 00 00 00 00 00

    File Reference to base record는 Base record 주소값을 의미한다.

    기본적으로 값은 0x0을 가진다고한다

    0이 아닌 경우에는 현재 속한 MFT Entry가 상위에 다른 MFT Entry에 속할 경우에 그 상위 MFT Entry를 가리키는 주소값을 갖게 된다. 반대로 상위 MFT Entry 또한 하위 MFT Entry에 관한 정보를 갖게된다. 아마 서로간의 위치를 나타낼 듯하다. ?) 요건 나중에 물어보자

    이에 관한 정보는 ATTRIBUTE_LIST 속성에 저장된다고한다.

    0x07 00

    Next attribute id는 다음 속성의 ID를 나타낸다.

    추가적인 Attribute 생성 시에 해당 Attribute에 할당될 ID 값을 나타낸다.

    현재까지는 1부터 6까지 만들졌음을 알 수 있다.

    0x00 00

    Align to 4Byte boundary는 예약 영역 ?) 어떻게 사용되는지 구글링해도 설명나와있는게 딱히 없다 물어봐야겠다.

    사용하지 않으므로 0x0으로 값이 매겨진듯하다.

    0x00 00

    Number of MFT Entry

    현재 우리가 보고 있는 MFT Entry는 0번째의 $MFT를 보고 있으므로 0x0의 값을 갖게 된다.

    pg. 75~83

    pg 98~106

    일단 여기까지

    MBR 구조

    NFTS 구조

    MBR Entry의 MBR Header에 대해 공부함

    다음 포스팅은 남은 MFT Entry의 요소인 

    Fixup Array, Attributes, End Marker, 사용하지 않는 영역에 대해서 작성할듯하다.

     

    출처)

    https://hyd3.tistory.com/124

     

    [File System] MBR 분석

    1. 실습 환경 VersionHost PCWindows 7 64bitGuest PCWindows xp sp2Hex EditorHxDPerl CodingEdit Plus3[표 1-1] 실습 환경 2. MBR 파티션이 여러 개인 다중 파티션의 경우 각 파티션의 첫 번째 섹터에 존재하는 BR 만으로는

    hyd3.tistory.com

    NTFS – VBR (Volume Boot Record) | FORENSIC-PROOF

     

    NTFS – VBR (Volume Boot Record) | FORENSIC-PROOF

     

    forensic-proof.com

    ELE22MIC Lecture 19 Microprocessor Storage Hierarchy –MAIN MEMORY –MASS STORAGE MEDIA, DISK FILE SYSTEMS Memory Management Unit Memory Protection and Privilege. - ppt download (slideplayer.com)

     

    ELE22MIC Lecture 19 Microprocessor Storage Hierarchy –MAIN MEMORY –MASS STORAGE MEDIA, DISK FILE SYSTEMS Memory Management U

    Storage Hierarchy Typical Memory Heirarchy: Speed, Capacity, Memory type <1ns,<1KB, Register 2ns, 1MB, Cache <10ns, 64M-1GB, Main memory 1s,<2MBFloppy Disk 10ms, 5-300GB, Hard Disk 1s/10min,650MB-4.7GBCDROM/RW/DVD 100s, 100MB-4TBTape

    slideplayer.com

    파일시스템 4_2 NTFS MFT : 네이버 블로그 (naver.com)

     

    파일시스템 4_2 NTFS MFT

    제목 : MFT 사용 환경 : Windows 7, Visual Studio 2012   기본설명   NTFS의 모든 파...

    blog.naver.com

     

Designed by Tistory.