0. NTFS 개요
1) 정의 :
- 윈도우 XP 이전 버전의 FAT 파일 시스템을 대체한 새로운 파일시스템
2) 개선 사항 :
- 메타데이터 지원
- 고급 데이터 구조 사용
- 성능 개선
- 신뢰성
- 추가 확장 기능
3) 위키피디아 요약 :
NTFS | |
마이크로소프트 | |
New Technology File System | |
도입일 | 1993년 7월 |
---|---|
도입 운영 체제 | 윈도 NT 3.1 |
파티션 ID | 0x07 (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의 트랜잭션 저널 (로그) (포렌식 조사시 사용) |
3 |
$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 |