본문 바로가기

보안/파일시스템

NTFS 파일 시스템

0. NTFS 개요


1) 정의 :


 - 윈도우 XP 이전 버전의 FAT 파일 시스템을 대체한 새로운 파일시스템


2) 개선 사항 : 


 - 메타데이터 지원

 - 고급 데이터 구조 사용

- 성능 개선

- 신뢰성

- 추가 확장 기능


3) 위키피디아 요약 : 


NTFS
마이크로소프트

New Technology File System

도입일1993년 7월
도입 운영 체제윈도 NT 3.1
파티션 ID0x07 (MBR)
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (GPT)
디렉터리 구조

B+ 트리

파일 구조비트맵
불량블록 구조$badclus
최대 파일크기16 EB − 1 KB (포맷);

16 TB − 64 KB (추가된 기능)

최대 파일수

4,294,967,295 (232-1)

최대 파일이름 길이

255 UTF-16 코드 단위

최대 볼륨크기264 클러스터 − 1 클러스터 (포맷);

256 TB (256 × 10244 바이트) − 64 KB (64 × 1024 바이트) (추가된 기능)

날짜 사용권한작성, 수정, POSIX 변경, 접근
날짜 범위1601년 1월 1일 – 60056년 5월 28일
날짜 정밀도100ns
포크 스트림
특성읽기 전용, 숨김, 시스템, 압축, 콘텐츠 색인화 안 함, 오프라인, 임시, 압축
파일시스템 권한ACL
압축파일 당 압축 지원, LZ77 (윈도 NT 3.51 이상)
암호화파일 당 암호화 지원,
DESX (윈도 2000 이상),
트리플 DES (윈도 XP 이상),
AES (윈도 XP 서비스 팩 1, 윈도 서버 2003 이상)




1. NTFS 구조


1) 전체적인 NTFS 구조


 - NTFS의 전체적인 구조는 다음과 같다. 여기서 중요한 영역은 MFT 이다.

 - 모든 데이터를 파일 형태로 관리

 - 부트 레코드 영역을 제외한 모든 영역을 데이터 영역으로 설정 

   (사실 MFT 또한 DATA 영역에 파일형태로 존재)



- 부트레코드 : 부팅을 위한 기계어코드, 몇가지 설정이 존재


볼륨, 클러스트 크기

- MFT 시작 주소

- 파일 시스템의 메타 데이터가 저장


- MFT  : 볼륨에 존재하는 모든 파일, 디렉터리에 대한 정보를 가지고 있는 테이블


- 파일 / 디렉터리의 수에 비례하여 점점 커짐

- 지운 영역은 0으로 채워짐 0이 60개면 0x3C로 표현 (모드 0으로 채우지 않는다)

- 각 파일과 디렉터리의 메타데이터가 저장


- DATA : 실제 데이터 저장



2) 부트 레코드(Boot Record) 영역은 다음과 같다. 


 - 파일시스템의 전체적인 정보를 가지고 있다.




3) MFT (Master File Table) 


 - MFT에는 현재 파일시스템에 전체적인 정보를 제공한다. 

 - MFT는 레코드 단위로 나누어져 있다.


 가. 예약된 영역


 - 0~11번 까지는 지정된(예약된) 레코드가 쓰여져 있다.

 - 12~15번 까지는 미래를 위해 예약된 영역이다.

 - 윈도우 2000 이후로 4개의 기본 레코드($Objid, $Quota, $Reparse, $UsnJrnl) 가 더 추가 되었다.

 - 따라서 윈도우xp 부터 $UsnJrnl을 찾을 수 있다.

 - 24번 부터 일반 파일의 정보가 기록된다.

 - 예약된 부분은 다음과 같다.


번호 

이름 

설명 

0

 $MFT

 MFT 엔트리 (포렌식 조사시 사용)

1

 $MFTMirr

 $MFT 백업본

2

 $LogFile

 MFT의 트랜잭션 저널 (로그)  (포렌식 조사시 사용)

 $Volume

 볼륨의 식별자, 버전

4

 $AttrDef

 속성의 식별자, 이름, 크기

5

 .

 루트 디렉토리

6

 $Bitmap

 볼륨 비트맵 (클러스터 할당 관련)

7

 $Boot

 부트 섹터 정보 (데이터 은닉 가능)

8

 $BadClus

 베드 섹터 클러스터 (데이터 은닉 가능)

9

 $Secure

 보안, 접근 제어 관련

10

 $Upcase

 유니코드의 대문자

11

 $Extend

 추가적인 $Objid, $Quota, $Reparse, $UsnJrnl 파일 정보 기록

12

 

 비어있음

13

 

 비어있음

14

 

 비어있음

15

 

 비어있음

16

 

 포맷 후 생성되는 파일의 정보

17

  비어있음

18 

 

 비어있음

19

 

 비어있음

20

 

 비어있음

21

 

 비어있음

22

 

 비어있음

23

 

 비어있음

$Extend참고

 $ObjId

 파일 고유의 ID

$Extend참고

 $Quota

 전체 사용량

$Extend참고

 $Reparse

 Reparse point 정보

$Extend참고

 $UsnJrnl

 파일, 디렉토리 변경 정보 (포렌식 조사시 사용)



 나. MFT 레코드 구조


 - MFT 레코드의 구조는 다음과 같다.



- MFT 레코드는 0x400 크기이므로 1024 byte 이다.

- 1024바이트 크기보다 커지면 count of fixup values 는 3이 된다. (1에서 3으로 건너뛴다).

- 추가된 섹터의 마지막 2바이트를 Fixup array에 이어쓰고 그 마지막 2바이트 부분에는 Fixup array의 시그니처를 기록한다. (서로 맞교환 했으므로 오류를 쉽게 찾을 수 있어 신뢰성이 향상된다.)

- 속성(Attribute) 값이 일정 이상 많아지면 논-레지던트 방식으로 바뀌어 다른 클러스터에 내용을 저장한다.

- 속성(Attribute) 값의 종류는 다음과 같다




2. 실습 : 파일 찾아가기


1) 부트 레코드 영역에서 다음과 같은 정보를 얻는다



2) MFT 엔트리 위치로 이동한다.


 - MFT 엔트리의 위치는 다음과 같다. : 0xC0000 * 0x1000(1클러스터) =  0xC0000000



3) 원하는 MFT 레코드 위치로 이동한다


 - 여기서 찾으려는 레코드는 루트 디렉토리이다. (예약된 영역, 5번 레코드)

 - 0xC0000000 + 0x400 * 5 = 0xC0001400 

 - 만약 다른 레코드를 찾으려면 0x400 * 엔트리 번호 를 통해 계산하면 된다.



4) 속성을 확인한다

 - 다음주에 추가 작성(3월25일)




'보안 > 파일시스템' 카테고리의 다른 글

EXT4 (Extended File System 4)의 소개  (0) 2015.04.02
FAT  (0) 2014.02.06