정보보안공부

디지털 포렌식_NTFS_BR분석, MFT 헤더 분석 본문

디지털 포렌식

디지털 포렌식_NTFS_BR분석, MFT 헤더 분석

Steady_sp 2019. 1. 9. 12:28

@@실습환경

- 16기가 하드를 추가하고 하나의 파티션으로 구성한다.




- 바탕화면에 test.txt / Testdir / testdirfile.txt 3개를 만들어놓고

- test.txt를 E드라이브로 복사

- Testdir을 E드라이브로 복사

- C:\Windows\iis6.log를 E드라이브로 복사






@@ NTFS ( New Technology File System )

- WinHex사용

- 16G 하드디스크 만든후 16G 전체를 파티션 한개로 생성

- 해당 하드디스크안에 test.txt 파일생성, Testdir 디렉토리생성, Testdir 디렉토리안에 testdirfile.txt 파일생성


*** NTFS 특징

- 데이터 복구기능

- 암호화 ( NTFS 5.0 부터 지원 )

- 압축

- 디스크 쿼터 ( NTFS 5.0 부터 지원 )



*** NTFS Layout 구조

- Boot Record : FAT File System보다 간단한 구조

- MFT : NTFS 파일시스템의 구조를 가지고 있음

- Data 영역 : 데이터가 저장되는 영역, Cluster 단위로 읽고 씀




*** MBR 

-> BR을 구하기 위해 MBR먼저 분석

-> 디스크의 첫 512 Bytes, 0번섹터에 위치




** MBR분석




[ 첫 번째 파티션 분석 ]

0번 섹터에서 4개의 파티션중 첫 번째 파티션만 사용되는 것을 확인하고 분석을 진행한다.

07 : NTFS 파일시스템 의미

3F 00 00 00 : 63번 섹터에서 BR이 시작됨을 의미

E9 D5 FF 01 : 섹터의 총 개수는 33543657개 ( 33543657 x 512바이트 = 파티션용량 ) 약 16GB



[ Signature 분석 ]

-> 55 AA


** 분석시 주의사항

WinHex에서 보여지는 값은 리틀앤디안에 의해서 보여지는 값들로 십진수로 변환시 거꾸로 계산해서 분석해야한다.

예) 3F 00 00 00 -> 00 00 00 3F 이므로 63

예) E9 D5 FF 01 -> 01 FF D5 E9 이므로 33543657




*** Boot Record ( BR )

- Windows를 부팅시키기 위한 Boot Code와 NTFS의 다양한 설정값들이 들어있음

- 크기는 512Byte

- NTFS의 내용중 유일하게 고정되어 있는 구조체

- Boot Record를 이용하여 MFT에 접근




*** Boot Record 주요 내용

- 섹터당 바이트 수

- 클러스터당 섹터 수

- 볼륨의 크기

- MFT, MFT Mirror의 시작지점

- Boot Code




*** BR (Boot Record) 분석














** BR분석

- MBR 분석 후 BR의 시작위치가 63이므로 63번 섹터로 이동

- MBR 분석은 FAT와 같은 방식이다






[ BR 분석 ]

4E 54 46 53 20 20 20 20 : OEM Name으로 NTFS를 의미한다.

00 02 : Bytes Per Sector로 1개의 섹터가 512Byte를 의미한다.

08 : Sector per Cluster로 1개의 클러스터는 8개의 섹터를 의미한다.

E8 D5 FF 01 00 00 00 00 : 섹터의 총 개수는 33543657개 ( 33543657 x 512바이트 = 파티션용량 ) 

00 00 0C 00 00 00 00 00 : MFT 시작위치를 나타낸다. ( 단위가 클러스터이므로 x8 해야한다. )

786432 x 8 + BR의 시작위치 => 6291456 + 63 = 6291519

5E FD 1F 00 00 00 00 00 : MFT Mirror 위치를 나타낸다. ( 단위가 클러스터이므로 x8 해야한다. )

2096478 x 8 + BR의 시작위치 => 16771824 + 63 = 16771887

F6 : MFT Entry Size로 MFT Entry의 크기를 나타낸다. -10은 2^10 = 1024를 의미한다. => 1KB

01 : MFT Entry Size와 같은형식이다. => 1KB



** 분석시 주의사항

WinHex에서 보여지는 값은 리틀앤디안에 의해서 보여지는 값들로 십진수로 변환시 거꾸로 계산해서 분석해야한다.




** BR분석을 통해 알아낸 정보

-> 1개의 섹터는 512Byte, 1개의 클러스터는 8개의 섹터

-> 파티션 크기는 약 16G

-> MFT0번의 시작위치 : 6291519

-> MFT Mirror의 시작위치 : 16771887

-> MFT Entry 사이즈는 : 1KB ( 2섹터 )



*** MFT 레이아웃을 알아내는 순서

- BR에 기록된 MFT Entry 위치를 알아냄

- MFT Entry 첫 번째에 있는 Entry 0의 정보를 해석함

- MFT 전체 구조를 파악




*** MFT ( Master File Table )

- 볼륨이 존재하는 모든 파일과 디렉토리에 대한 정보를 담고 있는 테이블

- NTFS에서 가장 중요한 구조체

- 위치는 상관 없으나 주로 Boot Record 뒤에 위치

- 사이즈가 고정적이지 않음



*** MFT Entry Layout 구조



*** MFT Entry

- MFT는 여러개의 Entry로 구성되어 있음

- 파일이나 디렉토리는 최소 하나의 MFT Entry를 가져야 함

- Entry 0 ~ 15까지는 파일시스템관리를 위해 예약되어 있음

- Entry 24 이후부터 일반파일에 할당됨



*** MFT Entry 구조

- Entry Header와 Attribute로 구성됨
- 하나의 MFT Entry에 하나의 파일 또는 디렉토리 정보를 가짐
- 일반적으로 1KB의 크기를 가짐



*** MFT Entry값에 따른 위치 분석

-> BR분석을 통해 MFT의 시작위치를 구함

-> 한개의 MFT Entry는 1KB이므로 2개의 섹터

-> MFT Entry 0번 = MFT의 시작위치

-> MFT Entry 1번 = MFT의 시작위치 + 2

-> MFT Entry 2번 = MFT의 시작위치 + 4

-> MFT Entry 3번 = MFT의 시작위치 + 6 




*** MFT Entry Header 분석

-> MFT Entry 맨 앞 42 Bytes

-> Entry의 상태를 담고 있음












** MFT Entry Header 분석


- Ctrl + F 이용해서 검색

- test.txt가 위치한 MFT Entry로 이동





- test.txt를 검색해보면 6160527, 6160528이 검색되지만 MFT0 보다 뒤에 있어야 하므로 F3으로 다음검색
- MFT0이 6291519에 위치하므로 test.txt가 위치한 MFT Entry는 6291577로 MFT 29에 위치하게 된다.
- MFT Entry 한개당 2섹터씩 차지한다.


** test.txt를 검색후 알아낸 정보
-> MFT0 : 6291519
-> MFT29 : 6291577 -> test.txt 위치




               : 부분

[ MFT Entry Header분석 ]





46 49 4C 45 : Signature로 "FILE"문자열을 의미 MFT Entry를 의미한다.

30 00 : Offset of Fixup Array으로 나중에 사용

03 00 : Count of Fixup Values으로 나중에 사용

01 00 : Sequence Value로 변경 사항이 생기면 값이 1씩 증가한다.

38 00 : Offset to First Attribute는 첫번쨰 속성의 시작위치를 알아낸다. MFT Entry시작부터 56바이트 뒤에 위치

01 00 : Flag값을 알아낸다. -> 1은 사용중을 의미 ( 2는 디렉토리를 의미 )

38 01 00 00 : Used Size of MFT Entry로 MFT에서 사용한 Byte 수를 저장한다. 8의배수로 저장

00 04 00 00 : Allocation Size of MFT Entry로 MFT Entry의 크기를 Byte로 저장한다. 1K로 고정

00 00 00 00 00 00 00 00 : File Reference to Base MFT Entry로 전부 0일경우 Base MFT Entry를 의미한다. 

-> non-Base MFT Entry일 경우 자신의 Base MFT Entry 위치를 가지고 File Reference Address 형태로 저장

03 00 : Next Attr ID


** Base MFT Entry : 파일의 정보를 하나의 MFT Entry에 담지 못할 경우 여러개의 MFT Entry를 사용하게 되는데 이때 처음 MFT Entry

** non-Base MFT Entry : Base MFT Entry 이외의 MFT Entry


[ 굳이 따지자면 MFT Entry Header는 아니지만 분석 ]


1D 00 00 00 : MFT Entry번호를 29번으로 알수 있다.





** MFT Entry Header 분석을 통해 알아낸 정보

-> 29번째 MFT Entry

-> 수정번호 값 1

-> 첫번째 속성위치 : Entry 시작 위치로 부터 56Byte 뒤에서 첫번째 속성 시작

-> Flag : 사용중(0x01)

-> Base MFT Entry




*** Metadata File -> MFT Entry 번호에 따른 파일 이름
- MFT Entry 번호에 따른 의미






Comments