NTFS 설명

min_fo·2023년 7월 28일
0

NTFS

목록 보기
1/3

참고 및 인용 사이트 : http://forensic-proof.com/page/2?s=ntfs
Windows NT가 개발되면서 FAT의 구조상의 한계점을 개선하기 위한 새로운 파일시스템인 NTFS가 함께 개발되었다

이러한 NTFS는 아래와 같은 특징이 있다.

NTFS 특징

1) USN 저널 (Update Sequence Number Journal 또는 Change Journal)

2) ADS (Alternate Data Stream)

3) Sparse 특징

4) 파일 압축

5) VSS (Volume Shadow Copy Service)

6) EFS (Encrypting File System)

EFS는 NTFS 상에서 파일 및 디렉터리를 암호화 하는 기능으로 CryptoAPI와 EFS File System Run-Time Library(ESRTL)를 사용한 대칭키 방식으로 암호화 한다. 앞선 그림에서와 같이 각 파일 및 디렉터리의 고급 항목을 통해 암호화를 사용할 수 있다.

7) Quotas

Windows 서버형 제품군은 다중사용자를 위한 시스템이다. 다중 사용자를 지원할 경우 각 사용자의 디스크 사용량을 제한하기 위해 쿼터(Quotas) 기능을 사용한다. 만약, 쿼터 기능이 설정된 시스템에서 자신에게 할당된 공간 이상으로 사용하고자 할 경우 경고메시지를 받게 된다.

8) 유니코드 지원

NTFS는 파일, 디렉터리, 볼륨 등의 이름을 지정할 때 모두 유니코드를 사용해 처리한다.

9) 동적 배드 클러스터 재할당

배드 섹터가 발생한 클러스터는 사용할 수 없다. 배드 섹터가 발생한 클러스터는 $BadClus 파일에 추가되어 더이상 사용되지 않도록 관리된다.

이러한 특징은 추후 MFT의 속성에 나타난다.

NTFS 구조

  • mft는 mft entry로 이루어짐
  • mft는 고정적인게 아님
  • mft는 물리적으로 연결 x
  • vbr뒤에 mft가 바로 나오지 않음

MFT 영역의 마지막이 점선으로 표시된 점은 MFT 영역의 크기는 미리 예측할 수 없기 때문에 항상 고정적으로 VBR 다음에 오는 것이 아니라 볼륨에 파일 및 디렉터리가 많아 질수록 데이터 영역에 조각나 저장될 수 있다. 따라서 초기 포맷 시에는 일정 영역만 MFT를 위한 영역으로 할당된다. 추가적으로 VBR 뒤에 물리적으로 MFT가 붙어나오는 것은 아니다.

VBR

VBR(Volume Boot Record)는 NTFS 구조에서 가장 앞부분에 위치하는 영역이다. VBR의 크기는 고정된 크기를 가지지 않고 다음과 같이 클러스터 크기에 의존한다.

부트섹터

VBR의 첫 번째 섹터는 부트 코드를 포함한 부트 섹터가 위치한다. 나머지 섹터들은 추가적인 부트 코드를 저장하기 위한 용도로 사용되거나 NTLDR(NT Loader)을 빠르게 로드하기 위해 NTLDR의 위치를 저장하기 위한 용도로 사용된다.

MBR에서 부팅 가능한 파티션(볼륨)을 찾으면 해당 볼륨의 첫 섹터(부트섹터)를 메모리에 로드한 후 실행한다. 위 부트섹터 그림에서 첫 3바이트는 “EB 52 90″으로 되어 있는데 이 내용을 해석하면 다음과 같다.

  • EB 52 90 : JMP 52h + NOP (즉, 54h로 점프하여 BPB 이후의 부트 코드가 실행)

이후 BPB 항목을 참조하여 해당 볼륨의 운영체제를 로드하는 부트 코드가 실행된다.

부팅과정

위 과정을 더욱이 잘 알기위해서 기본적인 부팅과정을 알아 보겠다.

  • cpu에 전원이 들어옴 -> ROM BIOS 부트프로그램 POST 수행 -> 부트 프로그램은 운영체제를 로드하기 위해 MBR이동 -> 부팅가능한 파티션 찾음 -> VBR로 이동 -> NTLDR이 추가적인 정보 로드 -> 윈도우 실행

자세한 내용 참고 : http://forensic-proof.com/archives/178

MFT 상세

$MFT 파일이 존재한다. 이는 MFT가 MFT ENTRY로 이루어져있고, MFT 엔트리는 디렉토리 및 파일 당 하나 이상 만들어진다. 이렇게 만들어진 MFT ENTRY는 파일의 메타정보를 가진다. 이러한 영역을 파일로 만든 것이 $MFT이다.

참고적으로 MFT 영역의 16개 엔트리는 파일시스템 자체의 메타 역할 및 추가적인 특성을 지원하기 위해 파일시스템 포맷시 미리 할당된다.

MFT 엔트리 구조

여기서 속성(Attr)은 상당히 중요하다. 일반적인 파일의 경우에는 위의 많은 속성 중 아래 그림과 같이 $STANDARD_INFORMATION, $FILE_NAME, $DATA 속성만 온다.

속성들은 크게 Resident 속성과 Non-resident 속성으로 나뉜다.

Resident 속성은 속성의 내용이 속성 헤더 바로 뒤에 위치하는 속성이다. 이에 반해, Non-resident 속성은 속성 내용이 너무 커서 MFT 엔트리 (1,024 바이트) 내부에 넣지 못할 경우, 별도의 클러스터를 할당 받아 저장하는 방식이다. 이때, 속성 내용 위치에는 할당 받은 클러스터의 위치 정보가 저장되어 있다

$DATA 속성은 700 byte 이상일 경우 Non-resident가 된다.

클러스트 런

클러스터 런은 Non-resident의 속성 내용의 위치를 표시해준다.

상세한 내용은 http://forensic-proof.com/archives/590 확인하길 바란다.

속성 헤더

속성의 헤더는 공통된 헤더 뒤에, Resident 혹은 Non-Resident에 따라 헤더가 달라진다.

속성 내용

속성은 16가지가 존재하며, 속성에 따라 분석하는 방식이 다르다. 기본적으로 $name, $stand_info, $DATA 가 기초적임으로 이 3가지를 중점적으로 알아보길 바란다.

profile
포렌식을 공부하는 학생입니다.

0개의 댓글