본문 바로가기

[+] Forensic

File System - HFS+ (4)

이번 글에서는 HFS+ 에서 제일 핵심적인 Catalog File 영역에 대해서 알아 볼 것이다.

[Catalog File]
해당 영역은 파일의 주요 메타데이터들을 저장하고 있는 영역으로 b-tree 구조이다. 각 노드는 최소 4KB의 크기를 가지고 있으며 Mac OS X에서 파일이나 디렉토리에는 Catalog ID가 할당 되는데 각 ID 숫자 별 의미는 다음과 같다.

[그림 1 - CatalogID 목록]

앞서 말했듯이 카탈로그 파일 영역은 b-tree 구조라고 하였다. 그렇기에 모든 노드와 인덱스들은 키를 가지고 있으며 또 노드들의 레코드들은 네 가지 종류로 나뉘어져 있다.

[그림 2 - CatalogKey 오프셋 구조]

다음은 카탈로그 노드들의 레코드 종류이다.

[그림 3 - 레코드 종류]

각 레코드 별로 다른 구조를 가지고 있는데 그 구조는 아래와 같다.

 - 폴더 레코드 : 폴더의 정보를 기록하며 88byte의 크기를 가지고 있다.

[그림 4 - 폴더 레코드 구조]

 - 파일 레코드 구조 : 파일의 정보를 기록하며 248byte의 크기를 가지고 있다.

[그림 5 - 파일 레코드 구조]

 - 스레드 레코드 : 폴더와 디렉토리 구별 없이 스레드 레코드 구조는 동일하며, 크기는 264byte이다.

[그림 6 - 스레드 레코드 구조]

파일과 디렉토리 레코드를 보면 플래그 필드가 존재하는데 두 플래그는 동일한 플래그 목록을 지닐 수 있으며 그 목록은 다음과 같다.

[그림 7 - 플래그 목록]

이제 노드와 b-tree의 구조를 알아보자. b-tree는 크게 세 가지 구성 된다. 헤더 노드, 인덱스 노드, 리프 노드로 구성이 되는데 헤더 노드는 첫 번째 리프 노드와 루트노드, 마지막 리프 노드의 포인터를 가지고 있으며 인덱스 노드는 리프노드의 포인터를 가지고 있고 리프 노드가 실질적인 데이터를 가지고 있다. 간단하게 그림으로 표현하면 아래와 같다.

 

[그림 8 - b-tree의 노드 관계]

노드는 다음과 같은 구조이며 노드의 구분은 노드의 노드 기술자에서 정의하고 있다.

[그림 9 - 노드 구조]

다음은 노드 기술자의 구조이다.

[그림 10 - 노드 기술자 구조]

 - 노드 종류 : 헤더 노드, 인덱스 노드, 리프 노드를 구별 지어주는 필드이다. 각 노드들은 아래와 같은 값들로 구별지어진다.

[그림 11 - 노드 종류 목록]

노드 기술자 다음으로는 헤더 레코드가 위치한다. 헤더 레코드에는 노드의 여러가 정보가 기록되어 있다. 헤더 레코드 구조는 다음과 같다.

[그림 12 - 헤더 레코드 구조]

 - 속성 : 속성 목록은 아래와 같다.

[그림 13 - 속성 목록]

카탈로그 파일은 데이터를 가지고 있는 파일로 HFS+ 파일시스템에서 포렌식적으로 의미있는 파일이다. b-tree 구조를 파악하여 헤더 레코드를 통해 첫 번째 리프 노드를 확인 한 후 각 노드의 헤더 기술자를 확인하여 리프노드인지 계속 확인해 나가면서 삭제 된 데이터를 검색 할 수 있다. 

'[+] Forensic' 카테고리의 다른 글

이메일 헤더 분석  (0) 2012.04.02
File System - HFS+ (5)  (0) 2012.03.24
File System - HFS+ (4)  (0) 2012.03.23
File System - HFS+ (3)  (0) 2012.03.23
File System - HFS+ (2)  (0) 2012.03.22