$LogFile
$LogFile: NTFS의 로그 파일로, 로그에는 파일의 생성, 수정, 삭제와 같은 파일의 변경사항이 포함된다. MTF Entry의 세 번째(0x02)로 할당되는 파일이다.
$LogFile의 특징으로는 트랜잭션을 로그로 기록함으로써, NTFS의 무결성을 유지하는 데에 초점을 둔 로그 파일이라는 점이다. 특히, $LogFile은 Undo와 Redo 정보를 기록하여 시스템 충돌 또는 전원 장애 같은 예기치 않은 상황에서도 파일 시스템의 안정성과 일관성을 보장한다. Undo 정보는 시스템이 중단된 상태에서 이전 안정 상태로 돌아갈 수 있게 돕는 반면, Redo 정보는 중단된 작업을 완료하여 파일 시스템의 최신 상태로 업데이트하는 데 사용된다. 이러한 $LogFile로 NTFS는 데이터의 무결성과 안전성을 보장한다.
접근 방법으로는 $LogFile의 MFT Entry에서 $Data(0x80)의 RunList를 참조하여 접근한다.
$LogFile Structure
$LogFile은 크게 Restart Area(재시작 영역), Buffer Area(버퍼 영역), Common Page Area(일반 페이지 영역)으로 나뉜다. 이때, 버퍼 영역과 일반 페이지 영역의 합을 Logging Area(로깅 영역)이라고 부른다. $LogFile은 Page(각각의 네모 한 칸(예시: 회색))라는 4,096(0x1000) Byte의 크기로 고정된 데이터 단위를 사용하여 로그 레코드(하나의 완전한 로그 기록 집합)를 저장한다.
Restart Area
Restart Area: 2개의 페이지로 이루어진 영역이다. 1번 페이지는 Restart Page, 2번 페이지는 Restart Page의 Back Up으로 1번 페이지와 내용이 동일하다.
Restart Page: Magic Number로 Restart를 의미하는 'RSTR'가 존재하고, Current LSN 정보를 이용해 로그 레코드 기록의 재시작을 돕는 페이지이다. Current LSN 정보는 NTFS가 새롭게 로그 레코드를 작성할 때 새롭게 작성해야 할 다음 레코드 영역으로의 접근을 돕는 중요한 역할을 한다. NTFS는 재시작 영역의 Current LSN 정보를 읽고 해당 LSN 정보를 가지고 있는 로그 레코드를 찾아 다음 레코드부터 새롭게 로그 레코드를 기록한다.
LSN($LogFile Sequence Number): $LogFile에서 새로운 로그 레코드를 기록할 때마다 증가시키는 숫자이다.
아래는 Restart Page의 구조로, 분석 시 중요한 부분을 표시해 두었다.
Offset | Info |
0x00 ~ 03 | Magic Number ('RSTR') |
0x30 ~ 37 | Current LSN |
Buffer Area
Buffer Area: 2개의 페이지로 이루어진 영역이다. 3번 페이지는 Buffer Page, 4번 페이지는 Buffer Page의 Back Up으로 3번 페이지와 내용이 동일하다.
Buffer Page: NTFS는 페이지를 기록할 때 일반 페이지에 바로 기록하는 것이 아니라 버퍼 페이지에 먼저 작성하고 페이지 작성이 완료되면 일반 페이지에 복사하여 기록한다. 이러한 이유로 Buffer Page의 구조와 Common Page의 구조는 완벽하게 동일하며, Buffer Page에는 마지막으로 기록된 로그 레코드의 페이지가 존재한다. 이러한 방법을 통해 NTFS는 보다 신속하게 로그를 기록한다.
Buffer Page의 구조는 Common Page의 구조와 동일하므로, 아래의 Common Page를 설명하는 글에 구조를 분석해 두었다.
Common Page Area
Common Page Area: Common Page의 집합으로 이루어진 영역이다. 특징으로는 만약 일반 페이지 영역의 모든 페이지를 기록했다면 가장 오래된 기록(가장 초기의 기록) 페이지부터 순차적으로 덮어쓴다.
Common Page: 실제 주된 로그 내용을 담고 있는 페이지로 Common Page Header와 여러 개의 트랜잭션 레코드의 집합으로 이루어져 있다. 하나의 트랜잭션 레코드는 Checkpoint Record, Update Record, Commit Record로 이루어져 있고, 하나의 트랜잭션 레코드에는 여러 개의 Update Record가 포함된다. 아래는 Common Page와 Record의 큰 구조를 시각화 한 모습이다.
아래는 Common Page Header의 실제 구조이다.
Offset | Info |
0x00 ~ 03 | Magic Number ('RCRD') |
0x04 ~ 05 | Update Sequence Offset |
0x06 ~ 07 | Update Sequence Count |
0x08 ~ 0F | Last LSN |
0x18 ~ 19 | Next Record Offset |
0x20 ~ 27 | Last End LSN |
아래는 Record의 실제 구조이다.
연두색 영역은 하나의 완전한 전체 Record 영역이다. Redo Offset(0x28), Redo Length(0x58) 값은 해당 라인(0x60240 B0)에서 0x28 뒤(0x60240 D8)부터 0x58까지의 영역(파란색 영역)을 의미한다. 해당 영역에는 Parent File Reference Address와 File Name Length, File Name이 존재한다. Undo Op의 값이 0x00이므로 이는 Noop(No Operation)을 의미하며, Undo Offset은 Redo 영역(파란색 영역)의 바로 다음을 가리키지만 Undo Length가 0x00으로 내용이 존재하지 않는다.
Offset | Info |
0x20 ~ 23 | Record Type (0x01: Update Record, Commit Record) (0x02: Checkpoint Record) |
0x28 ~ 29 | Flags 0x00: 현재 레코드가 페이지 초과 X 0x01: 현재 레코드가 페이지 초과 O |
0x30 ~ 31 | Redo Op 0x00: Noop(No Operation) 0x01: CompensationLoaRecord 0x02: IntialzeFleRecordseament (MET Entry 신규 할당, 파일 생성) 0x03: DeallocatedFileRecordSegment (MFT 레코드 파일기록 비활성화, 파일삭제) 0x04: WriteEndofFileRecordSegment 0x05: CreateAttribute (파일명 변경 시) 0x06: DeleteAttribute (파일명 변경 시) 0x07: UpdateResidentValue (데이터 작성 시, Redo, Undo 모두 생성) 0x08: UpdateNonResidentValue 0x09: UpdateMappinaPairs 0x0A: Delete DirtyClusters 0х0В: SetNewAttributeSizes 0x0C: AddlindexEntrvRoot (Root 디렉터리의 MFT 엔트리 $Index 속성에 인덱스 레코드 추가) (Deletelndex Entry Allocation(Root)) 0x0D: SetindexEntryVenAllocation 0×0F: Update File NameRoot 0x12: UpdateFile Name Allocation 0x13: SetBitsInresidentBitMap 0x14: Update File Name Allocation 0x15: SetBitsinNonresidentBitMap 0x16: ClearBitsInNonresidentBitMap 0x19: Prepare Transaction 0x1A: Commit Transaction 0x1B: ForgetTransaction 0x1C: OpenNonresidentAttribute 0x1F: DirtyPage Table Dump 0x20: Transaction Table Dump 0x21: UpdateRecordDataRoot |
0x32 ~ 33 | Undo Op (Redo Op와 동일) |
0x34 ~ 35 | Redo Offset |
0x36 ~ 37 | Redo Length |
0x38 ~ 39 | Undo Offset |
0x3A ~ 3B | Undo Length |
다음 글
[Digital Forensic] NTFS File System "$J & ADS" Analysis
메인 글
[Digital Forensic] NTFS File System Detailed Analysis
Reference
https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE01916712
https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE08736972