(120107) #fitalk mft and indx slacks

35
FORENSICINSIGHT SEMINAR MFT & INDX Slack Analysis proneer [email protected] http://forensic-proof.com Security is a people problem

Upload: insight-forensic

Post on 18-Jan-2017

45 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: (120107) #fitalk   mft and indx slacks

FORENSICINSIGHT SEMINAR

MFT & INDX Slack Analysis

proneer

[email protected]

http://forensic-proof.com

Security is a people problem

Page 2: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 2 / 50

개요

1. 슬랙 공간

2. MFT 슬랙

3. INDX 슬랙

Page 3: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 3 / 50

슬랙 공간

Page 4: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 4 / 35

슬랙 공간

슬랙 (Slack)

• 물리적인 구조와 논리적인 구조의 차이로 발생하는 낭비되는 공간

램 슬랙

드라이브 슬랙

파일시스템 슬랙

볼륨 슬랙

MFT 슬랙

INDX 슬랙

… …

슬랙 소개

Page 5: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 5 / 35

슬랙 공간

램,드라이브,파일시스템,볼륨 슬랙

RAM Slack

Drive Slack

Cluster (2048 Bytes)

used area wasted area

sector 1 sector 2 sector 3 sector 4

File Slack

Partition 1 Partition 2 Partition 3 Volume Slack

cluster cluster cluster cluster … … cluster cluster cluster

File System Slack

Page 6: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 6 / 50

MFT 슬랙

Page 7: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 7 / 35

MFT 슬랙

• NTFS는 파일, 디렉터리, 메타정보를 모두 파일 형태로 관리

• 각 파일의 위치, 속성, 시간정보, 이름, 크기 등의 메타정보는 MFT Entry라는 특별한 구조로 저장

• MFT(Master File Table)는 NTFS 상에 존재하는 모든 파일의 MFT Entry의 모음

• MFT 영역은 파일시스템 상의 파일 수에 따라 동적으로 할당

• 일반적으로 볼륨의 12.5% 정도가 MFT 영역으로 할당

• MFT Entry 0 ~ 15번은 파일시스템 생성 시 함께 생성되는 예약된(특별한 용도) 영역

MFT 구조

Volume Boot

Record Master File Table Data Area

Volume Boot

Record

Master File Table

Data Area Master

File Table

Data Area

Page 8: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 8 / 35

MFT 슬랙

MFT 구조

VBR

MFT Entry 0

MFT Entry 1

MFT Entry 2

:

:

MFT Entry 15

MFT Entry 16

:

:

Data Area

메타 데이터파일

Entry 번호 Entry 이름 설명

0 $MFT MFT에 대한 MFT Entry

1 $MFTMirr $MFT 파일의 일부 백업본

2 $LogFile 메타데이터(MFT)의 트랜잭션 저널 정보

3 $Volume 볼륨의 레이블, 식별자, 버전 등의 정보

4 $AttrDef 속성의 식별자, 이름, 크기 등의 정보

5 . 볼륨의 루트 디렉터리

6 $Bitmap 볼륨의 클러스터 할당 정보

7 $Boot 볼륨이 부팅 가능할 경우 부트 섹터 정보

8 $BadClus 배드 섹터를 가지는 클러스터 정보

9 $Secure 파일의 보안, 접근 제어와 관련된 정보

10 $Upcase 모든 유니코드 문자의 대문자

11 $Extend $ObjID, $Quota, $Reparse points, $UsnJrnl 등의 추가적인 파일의 정보를 기록하기 위해 사용

12 – 15 미래를 위해 예약

16 - 포맷 후 생성되는 파일의 정보를 위해 사용

- $ObjId 파일 고유의 ID 정보 ( Windows 2000 - )

- $Quota 사용량 정보 ( Windows 2000 - )

- $Reparse Reparse Point 에 대한 정보 ( Windows 2000 - )

- $UsnJrnl 파일, 디렉터리의 변경 정보 ( Windows 2000 - )

Page 9: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 9 / 35

MFT 슬랙

MFT 레코드(엔트리)

0x0000

0x0400

MFT Entry Header

Fixup Array

Attributes

End Marker

Unused Space (Slack)

Page 10: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 10 / 35

MFT 슬랙

MFT 레코드(엔트리) 속성(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 0x90 $INDEX_ROOT 인덱스 트리의 루트 노드

160 0xA0 $INDEX_ALLOCATION 인덱스 트리의 루트와 연결된 노드

176 0xB0 $BITMAP $MFT와 인덱스의 할당 정보 관리

192 0xC0 $SYMBOLIC_LINK 심볼릭 링크 정보 (Windows 2000+)

192 0xC0 $REPARSE_POINT 심볼릭 링크에서 사용하는 reparse point 정보 (Windows 2000+)

208 0xD0 $EA_INFORMATION OS/2 응용 프로그램과 호환성을 위해 사용 (HPFS)

224 0xE0 $EA OS/2 응용 프로그램과 호환성을 위해 사용 (HPFS)

256 0x100 $LOGGED_UTILITY_STREAM 암호화된 속성의 정보와 키 값 (Windows 2000+)

Page 11: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 11 / 35

MFT 슬랙

MFT 레코드(엔트리) 일반 파일

0x0000

0x0400

MFT Entry Header

Fixup Array

End Marker

Unused Space (Slack)

$STANDARD_INFORMATION

$FILE_NAME

$DATA Resident Data (0 ~ 600 Bytes)

Page 12: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 12 / 35

MFT 슬랙

MFT 레코드(엔트리) 일반 파일

0x0000

0x0400

MFT Entry Header

Fixup Array

End Marker

Unused Space (Slack)

$STANDARD_INFORMATION

$FILE_NAME

$DATA (500 Bytes) 600 Bytes 추가

Page 13: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 13 / 35

MFT 슬랙

MFT 레코드(엔트리) 일반 파일

0x0000

0x0400

MFT Entry Header

Fixup Array

End Marker

$STANDARD_INFORMATION

$FILE_NAME

$DATA

($DATA)

Unused Space (Slack)

DATA (1100 Bytes)

Cluster

Page 14: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 14 / 35

MFT 슬랙

MFT 레코드(엔트리) 디렉터리

0x0000

0x0400

MFT Entry Header

Fixup Array

End Marker

Unused Space (Slack)

$STANDARD_INFORMATION

$FILE_NAME

$INDEX_ROOT

($INDEX_ALLOCATION)

($BITMAP)

Page 15: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 15 / 35

MFT 슬랙

MFT 레코드(엔트리) 디렉터리

0x0000

0x0400

MFT Entry Header

Fixup Array

End Marker

Unused Space (Slack)

$STANDARD_INFORMATION

$FILE_NAME

$INDEX_ROOT 파일 더 추가

Page 16: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 16 / 35

MFT 슬랙

MFT 레코드(엔트리) 디렉터리

0x0000

0x0400

MFT Entry Header

Fixup Array

End Marker

Unused Space (Slack)

$STANDARD_INFORMATION

$FILE_NAME

$INDEX_ROOT

$INDEX_ALLOCATION 파일 더 추가

Page 17: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 17 / 35

MFT 슬랙

MFT 레코드(엔트리) 디렉터리

0x0000

0x0400

MFT Entry Header

Fixup Array

End Marker

Unused Space (Slack)

$STANDARD_INFORMATION

$FILE_NAME

$INDEX_ROOT

$INDEX_ALLOCATION

INDEX Records … …

Cluster

Page 18: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 18 / 35

MFT 슬랙

일반 파일의 경우

• 파일의 내용 $DATA

디렉터리의 경우

• 디렉터리 내의 이전/삭제/현재 파일 목록 $INDEX_ALLOCATION

MFT 슬랙 데이터

Page 19: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 19 / 50

INDX 슬랙

Page 20: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 20 / 35

INDX 슬랙

이진 트리 (Binary Tree)

• 한 노드가 최대 2개의 자식 노드를 갖는 트리

• 노드의 왼쪽 하위트리의 모든 노드값은 키값보다 작음

• 노드의 오른쪽 하위트리의 모든 노드값은 키값보다 큼

인덱스 구조

7

5 22

3 11

15

7

Page 21: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 21 / 35

INDX 슬랙

B 트리 (B Tree)

• 차수가 m인 m-원 탐색트리

• 루트와 단말 노드를 제외한 각 노드는 최소 m/2의 서브 트리를 가짐 (절반 이상이 채워져야 함)

• 루트는 최소 2개의 서브 트리를 가짐

• 모든 단말 노드는 같은 레벨

인덱스 구조

10 18 30

35 50 3 8 9 15 20 21

Page 22: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 22 / 35

INDX 슬랙

빠르게 검색이 필요한 데이터는 인덱스 구조로 관리 (디렉터리 등)

인덱스 구조

인덱스 이름 인덱싱하는 데이터 위치

$I30 $FILE_NAME 속성 디렉터리의 MFT Entry

$SDH Security Descriptors $Secure 메타데이터 파일

$SII Security ID $Secure 메타데이터 파일

$O Object ID $ObjId 메타데이터 파일

$O Owner ID $Quota 메타데이터 파일

$Q Quota $Quota 메타데이터 파일

Page 23: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 23 / 35

INDX 슬랙

$I30 (B-Tree) : B 트리의 노드값은 파일 이름 ($FILE_NAME 속성)

인덱스 구조

eee.txt lll.txt ttt.txt

aaa.txt bbb.txt

A

B ooo.txt rrr.txt vvv.txt zzz.txt

fff.txt ggg.txt iii.txt

D

C

E

Root Index Node

Page 24: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 24 / 35

INDX 슬랙

$I30 (B-Tree) : jjj.txt 파일 삽입 (1)

인덱스 구조

eee.txt lll.txt ttt.txt

aaa.txt bbb.txt ooo.txt rrr.txt vvv.txt zzz.txt

fff.txt ggg.txt iii.txt jjj.txt

Root Index Node

Page 25: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 25 / 35

INDX 슬랙

$I30 (B-Tree) : jjj.txt 파일 삽입 (2)

인덱스 구조

eee.txt ggg.txt lll.txt ttt.txt

aaa.txt bbb.txt ooo.txt rrr.txt vvv.txt zzz.txt

fff.txt

Root Index Node

iii.txt jjj.txt

Page 26: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 26 / 35

INDX 슬랙

$I30 (B-Tree) : jjj.txt 파일 삽입 (3)

인덱스 구조

aaa.txt bbb.txt ooo.txt rrr.txt vvv.txt zzz.txt fff.txt

iii.txt jjj.txt

Root Index Node ggg.txt

eee.txt lll.txt ttt.txt

Page 27: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 27 / 35

INDX 슬랙

Non-Resident 인덱스 노드

인덱스 구조

$INDEX_ROOT Attribute

$INDEX_ALLOCATION Attribute

[eee.txt] MFT 20

[lll.txt] MFT 55

[ttt.txt] MFT 87

End of Node

[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 Record Header

Index Node Header

Index Entry 1

Index Entry 2

Index Entry 3

End of Node

Unused Space Index Node

$FILE_NAME Attribute

$INDEX_ROOT Header

Page 28: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 28 / 35

INDX 슬랙

Non-Resident 인덱스 노드

인덱스 구조

$STANDARD_INFORMATION

$FILE_NAME $INDEX_ROOT

(resident) $INDEX_ALLOCATION

(non-resident)

MFT Entry

Index Record

0

1

2

Index Entry

Page 29: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 29 / 35

INDX 슬랙

Non-Resident 인덱스 노드

인덱스 구조

1 2 3 X A )

$INDEX_ROOT

X B )

$INDEX_ROOT

1 2 3 4 … … 14 15 X Index Record 1

$INDEX_ALLOCATION

14 X C )

$INDEX_ROOT

1 2 3 4 … … 12 13 X

15 16 17 18 … … 24 25 X

Index Record 1

$INDEX_ALLOCATION

Index Record 2

Page 30: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 30 / 35

INDX 슬랙

Non-Resident 인덱스 노드

인덱스 구조

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 … … … MFT

Entry

$INDEX_ROOT $INDEX_ALLOCATION $BITMAP

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

Cluster 1045 VCN : 4

Index Record Header

삭제

Page 31: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 31 / 35

INDX 슬랙

인덱스 구조

0x0000

0x0400

MFT Entry Header

Fixup Array

End Marker

$STANDARD_INFORMATION

$FILE_NAME

$INDEX_ROOT

$INDEX_ALLOCATION

$INDEX_ALLOCATION

Unused Space (Slack)

… …

Cluster

Index Node Header

Index Entry

Index Entry

Index Entry

Index Entry

Index Entry

Page 32: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 32 / 35

INDX 슬랙

$I30

• 디렉터리 내의 삭제된 파일 목록

INDX 슬랙 데이터

Page 33: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 33 / 50

그래서…?

Page 34: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 34 / 35

그래서…?

MFT 슬랙 분석 도구 $MFT 파일만 입력으로 받음

• MFT 레코드 분석 기능

• 전체 경로 출력 기능 ($FILE_NAME의 부모 파일 참조 주소 활용)

• MFT 슬랙 출력 (하단 도킹 패인 활용)

파일 : 16진수 데이터 출력

디렉터리 : 각 파일의 $FILE_NAME 속성 출력

• 전체 MFT 슬랙 모음 기능

INDX 슬랙 분석 도구 활성 상태에서 분석 혹은 파일시스템 이미지 분석

• 각 디렉터리 별 슬랙에 존재하는 $FILE_NAME 속성 출력

• 디렉터리 경로를 옵션으로 받거나 전체 디렉터리의 슬랙 데이터를 csv로 출력

어쩌라고

Page 35: (120107) #fitalk   mft and indx slacks

forensicinsight.org Page 35 / 35

질문 및 답변