NTFS 파일 시스템
NTFS 파일 시스템의 구조는 위와 같습니다.
1. Boot Sector (BR) 영역
NTFS 파일 시스템의 BR 영역도 FAT32와 같이 특정 오프셋 별로 의미하는 바가 다릅니다.
0byte ~ 2byte : Boot Code
3byte ~ 83byte : BIOS Parameter Block
84byte ~ 509byte : Boot Code와 Error Message
510byte ~ 511byte : 시그니쳐 2바이트
위는 NTFS 파일 시스템의 BR 영역 구조입니다. FAT32 파일 시스템보다 구조가 간단해졌다는 점을 확인할 수 있습니다.
이는 FAT32 파일 시스템은 모든 파일을 클러스터에서 직접 관리하지만, NTFS 파일 시스템은 파일에 대한 메타데이터를 파일에 기록하기 때문입니다.
의미 | 내용 |
Jump Boot Code | Boot Strap Code로 점프하기 위한 부분 |
OEM Name | OEM 회사를 나타내는 문자열 (FAT32는 MSDOS 5.X로 표시) |
Byte Per Sector | 한 섹터가 몇 바이트로 구성되어 있는지 나타냄 (기본 512바이트) |
SP | 클러스터를 구성하는 섹터의 수. 기본적으로 8개의 섹터 사용 (4096바이트) |
RS (Reserved Sector) | 예약된 섹터의 개수 |
Media Type | 볼륨이 어떤 미디어 매체를 이용하는지를 나타냄 (고정식 디스크는 0xF8) |
Total Sector | 파티션 상의 총 섹터 개수 |
Start MFT | MFT의 시작 주소 |
Start of MFT Mirr | MFT의 복사본 시작 주소 |
MFT Size | MFT 파일의 크기 |
Index Record Size | Index Record의 크기 |
Serial Number | 볼륨 시리얼 번호 |
2. Master File Table 영역
MFT 영역은 파일과 디렉토리를 관리하기 위한 MFT Entry의 집합체입니다.
각 파일은 위치, 시간 정보, 크기, 파일 이름 등의 정보를 모두 MFT Entry라 불리는 구조로 저장하게 됩니다.
크기가 가변적이며, MFT가 모두 사용되면 동적으로 클러스터를 추가로 할당하여 파일 시스템의 여러 부분에서 조각되어 저장될 수 있습니다.
MFT Entry의 0번 ~ 15번은 파일 시스템 생성 시 자동으로 함께 생성되며 특별한 용도로 사용됩니다.
상위 MFT Entry 구조
Entry No. | 파일명 | 설명 |
0 | $MFT | MFT를 담고 있는 파일 |
1 | $MFT Mirr | MFT 파일 백업본 |
2 | $LogFile | 트랜잭션 저널 기록을 저장 |
3 | $Volume | 볼륨의 레이블, 버전 등 볼륨에 대한 정보 저장 |
4 | $AttrDef | 인자값, 이름, 크기 등 여러 속성 저장 |
5 | - | 파일 시스템 루트 디렉토리 저장 |
6 | $Bitmap | 파일 시스템의 클러스터 할당 관리 정보 저장 |
7 | $Boot | 부트 레코드 영역의 정보 저장 |
8 | $BadCluster | 배드 클러스터에 대한 정보 저장 |
9 | $Secure | 파일에 대한 보안/접근 권한 정보 저장 |
10 | $Upcase | 모든 유니코드 문자에 대한 정보 저장 |
11 | $Extend | 추가적인 확장을 담고 있는 디렉토리 (일반적으로 사용 안 함) |
12~15 | 사용 안 함 | 사용 중이라 설정되어 있지만 비어 있음 |
16~23 | 사용 안 함 | 예약 공간 |
- | $Objld | 파일의 고유 ID 정보 저장 |
- | $Quota | 사용량 정보 저장 |
- | $Reparse | Reparse Point에 대한 정보 저장 |
- | $UsrJrnl | 파일이나 디렉토리 변경 사항에 대한 정보 저장 |
24~ | 일반 파일 | 일반적인 파일이나 디렉토리 실제 저장 위치 |
하위 MFT Entry 구조
속성 식별 값 | 속성 이름 | 내용 |
0x10 | $Standard_Information | 파일의 생성/접근/수정 시간, 소유자 정보 등 |
0x20 | $Attribute_List | 추가적인 속성들의 리스트 |
0x30 | $File_Name | 파일 이름(유니코드), 파일의 생성/접근/수정 시간 정보 등 |
0x40 | $Volume_Version | 볼륨 정보 |
0x40 | $Object_Id | 16바이트 파일, 디렉터리 고유값 |
0x50 | $Security_Descriptor | 파일의 접근 제어와 보안 속성 |
0x60 | $Volume_Name | 볼륨 이름 |
0x70 | $Volume_Information | 파일 시스템 버전과 다양한 플래그 정보 |
0x80 | $Data | 파일 내용 |
0x90 | $Index_Root | 인덱스 트리의 루트 노드 |
0xA0 | $Index_Allocation | 인덱스 트리의 루트와 연결된 노드 |
0xB0 | $Bitmap | $MFT와 인덱스 할당 정보 관리 |
0xC0 | $Symbolic_Link | 심볼릭 링크 정보 |
0xC0 | $Reparse_Point | 심볼릭 링크 정보에서 사용하는 Reparse Point 정보 |
하위 MFT Entry 구조에서 나타나는 식별 값 중 0x10, 0x30, 0x80은 NTFS에서 파일의 시간 정보, 실제 데이터 위치를 알기 위한 중요한 정보가 됩니다.
'디지털 포렌식 (Forensic) > 디스크 포렌식 (Disk)' 카테고리의 다른 글
[디스크 포렌식] NTFS 파일 시스템 Non-Resident $DATA 속성 (0) | 2020.12.07 |
---|---|
[디스크 포렌식] NTFS 파일 시스템의 Resident 속성, Non-Resident 속성 (0) | 2020.12.04 |
[디스크 포렌식] 긴 파일 이름을 가진 FAT32 파일시스템 (0) | 2020.12.04 |
[디스크 포렌식] 루트 디렉토리의 CreateTime, CreatedDate 계산 (0) | 2020.12.04 |
[디스크 포렌식] 루트 디렉토리 추적 (0) | 2020.12.04 |