이번 글에서는 마지막 참조 모델인 응용 프로그램 참조 모델에 해당하는 NTFS 데이터를 알아 볼 것이다.

다른 파일시스템들과는 다르게 NTFS는 많은 응용프로그램 수준의 기능을 지원한다.

여기서 알아볼 기능들은 디스크 할당, 저널링, 변경 저널링 기능이다.

이러한 기능들은 파일시스템에서 필수적으로 필요한 기능들은 아니지만, 사용자의 편의성등을 위해 제공되는 기능들이다.

지금부터 하나씩 알아보도록 하자.

[디스크 할당]
이 기능은 사용자 별로 사용 할 수 있는 공간을 할당 하는 기능으로, 할당 정보의 일부는 파일시스템 메타데이터 파일로 저장되는데, NTFS 3.0 버전을 전후로 3.0 이전 버전에서는 MFT 열 번째 엔트리인 \$Quota에 저장되었고 이후 버전에서는 \$Extend 디렉토리에 존재하였다. MFT 엔트리는 어떠한 것도 할당 가능하다.
3.0 이전 버전에서 할당 정보 저장을 위해 사용되는 $Quota 파일은 할당 정보를 관리하기 위해 두 개의 인덱스를 사용한다.
$O라는 인덱스가 그 첫 번째 인덱스 인데, 해당 인덱스는 $SID와 소유자 ID를 연관시키는데 사용된다.

 * 참고 : SID는 앞 글에서 알아보았던 SID(Security ID)가 아니다.

또 $Q라는 인덱스가 있는데 이 인덱스 소유자 ID와 사용자에게 할당된 바이트 크기, 할당 허용 용량등의 내용을 관리하는데 사용된다.
할당 정보는 포렌식적으로 의미가 크다. 할당 정보를 통해 어떤 사용자가 어떤 큰 데이터를 가지고 있었는지 판별 할 수 있기 때문이다. 하지만 할당 정보의 업데이트는 운영체제 입장에서 부가적인 사항이라 업데이트가 주기적으로 되지 않는다.
하지만 이러한 정보들은 꼭 할당 정보를 통해서만 얻을 수 있는 것은 아니다.
$STANDARD_INFORMATION 속성을 통해서도 이러한 정보를 얻을 수 있다.

 * 참고 : 디스크 할당 기능은 기본적으로 비 활성화 상태이다. 


[저널링]
해당 기능은 NTFS만의 고유한 기능이 아닌 다른 파일시스템에도 존재하는 기능이다. 저널링의 목적은 신뢰성으로, 파일시스템을 원래상태로 되돌리기 위하여 사용한다.

 * 참고 : MS에서는 NTFS의 저널링 기술을 로깅이라고 부른다.

NTFS 저널링 로그는 MFT 세 번째 엔트리인 $LogFile 이라는 파일에 저장된다. 이 파일에는 별 다른 속성은 존재하지 않으며, 로그 내용은 $DATA 속성에 저장된다.

 * 참고 : 로그파일의 크기는 파일시스템 전체 크기의 1~2%이다.

로그 내용을 저장하는 $DATA 속성의 내용은 아래와 같다.

[그림 1 - $LogFile의 $DATA 속성 내용]

위 이미지에서 보다시피 재시작 영역과 로깅 영역 두 영역으로 $DATA 속성이 나눠져 있는데, 재시작 영역은 운영체제가 어떠한 파일시스템의 정리를 수행 할 경우 어떠한 트랜잭션을 참고해야 하는지 판단하는데 도움을 주는 구조체이며, 성공적인 마지막 트랜잭션을 위한 어떤 로깅 영역을 가리키는 포인터를 포함한다.
로깅 영역은 연속적인 레코드의 집합이며, 각 레코드는 LSN(Logical Sequence Number) 이라는 64bit의 값을 가지고 있다.
레코드에는 두가지 유형이 있는데 그 유형은 업데이트 레코드와 검사 지점 레코드이다.
업데이트 레코드는 가장 흔히 볼 수 있는 레코드로 기본적으로 모든 레코드가 가지고 있는 LSN 값 말고 추가적인 주요 필드 두가지를 갖는다. 그 필드는 아래에 간략하게 정리 해 두었다. 

 - redo 필드 : 어떤 동작이었는지에 대한 정보를 저장
 - undo 필드 : 어떤 동작을 어떻게 원래대로 되돌리는지를 설명하는 정보를 저장


위 필드는 파일시스템 트랜잭션이 수행되기 전에 생성되며, 파일시스템 트랜잭션이 수행 된 후 다른 업데이트 레코드를 생성하면 그 트랜잭션이 수행되었다는 것을 보여준다.
두 번째 유형인 검사 지점 레코드는 운영체제가 파일시스템을 검증하려고 할 때 운영체제가 로그 파일의 여러 레코드들 중 어느 레코드에서 시작을 해야 하는지 알려준다.


[변경 저널]
변경 저널은 NTFS 버전 3.0 이상에서만 존재하는 기능으로 파일과 디렉토리들의 변경이 수행되는 것을 기록하는 기능이다.
기록은 파일로 저장된다. 해당 기능은 변경 사항을 목록화 해두어 기존에 변경 여부를 판단하려고 하였을 때 오래 걸리던 시간을 단축시켜 준다. 해당 기능은 응용프로그램 수준에서 활성 상태를 변경 할 수 있다.

 * 참고 : 기본적으로 해당 기능은 비 활성화 상태이다.

해당 기능의 파일에는 64bit 값이 포함되어 있으며 저널이 활성화 되거나 비 활성화되었던 시간을 해당 값으로 표현한다.
해당 기능은 \Extend\UsrJrnl 파일을 사용하며, 이 파일은 $DATA 속성 두가지를 가지고 있다. 하나는 $Max 라는 이름의 $DATA 속성이며, 또 하나는 $J 라는 이름의 $DATA 속성이다.
두 $DATA 속성은 레코드를 포함하고 있으며 각 레코드에는 파일 이름 변경 시간, 변경 타입을 저장된다.
각 레코드는 USN(Update Sequence Number)라는 이름의 64bit 값을 가지고 있다. USN은 저널 내 바이트 오프셋에 해당하며, $STANDARD_INFORMATION 속성에 저장된다.

 * 참고 : 레코드의 크기는 파일이름의 길이에 따라 다르다.

윈도우는 저널에 할당 할 수 있는 최대 크기가 있는데 해당 크기를 저널이 모두 사용하면 저널 파일은 sparse 파일로 변경되고 변경 된 파일 마지막에 계속해서 데이터를 추가한다. 파일 마지막에 새로운 클러스터를 추가 할 때는 첫 번째 클러스터는 제거하고 sparse 파일로 변경한다.

 * 참고 : USN은 파일 시작에서 바이트 오프셋에 해당 해 줄어들지 않고 계속 증가한다.

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

File System - NTFS (13)  (0) 2012.02.15
File System - NTFS (12)  (0) 2012.02.14
File System - NTFS (11)  (0) 2012.02.13
File System - NTFS (10)  (0) 2012.02.13
File System - NTFS (9)  (0) 2012.02.10
이번 글 에서는 파일시스템 파일 이름 참조 모델과 응용 프로그램 참조 모델에 대해서 알아 볼 것이다.

일단 파일 이름 참조 모델부터 알아보자.

[파일 이름 참조 모델]
해당 참조 모델은 파일명을 포함하며, 사용자 입장에서 메타 데이터 참조 모델을 통한 파일 접근이 아닌 파일 명으로 접근 하게 끔 도와준다. 이 참조 모델이 포함하는 데이터는 파일명과 해당 파일의 메타 데이터 엔트리 주소이다.
아래는 파일 이름 참조 모델의 개념이다.

[파일 이름 기반 파일 복구]
해당 기술은 파일 이름 참조 모델이 가지고 있는 메타 데이터 엔트리 주소를 이용하여 파일을 복구 하는 기술이다. 메타데이터 엔트리는 파일에 할당 된 클러스터 주소를 가지고 있기 때문에 이러한 복구가 가능하다.

[그림 1 - 파일 이름 참조 모델과 메타 데이터 참조 모델의 관계]

이 기술에서 주의해야 할 점이 있다. 만약 첫 번째로 특정 메타 데이터 엔트리에 할당 되었던 파일 이름이 비 할당 상태가 되고 특정 메타 데이터 엔트리에 새로운 파일명이 할당 되었다가 새롭게 할당 되었던 파일명이 비 할당 상태가 된 상태에서 조사관이 분석을 수행 한다면 조사관은 두 파일명 간의 할당 순서를 파악하지 못하게 된다.
이렇듯 파일 이름을 기준으로 지워진 파일들을 조사하거나 복구 할 때에는 메타 데이터와 클러스터들이 새로운 파일에 다시 할당 될 수 있다는 점을 명심해야 한다.
 

 
이번에는 분석 기술에 대하여 알아보도록 하자.

[파일명 목록 작성]
해당 기술은 이름, 경로, 파일 확장자 기반으로 증거를 검색할 때 사용된다. 이 기술의 기본적 방법은 파일시스템의 루트 디렉토리 위치를 파악하는 것이다. 루트 디렉토리의 레이아웃은 메타데이터 엔트리에 저장되어 있다.
디렉토리 위치를 파악하고 처리 한 후 파일의 목록과 그것들에 해당하는 메타 데이터 주소를 얻는다.
대부분의 도구들은 이러한 기능을 가지고 있으며, 메타 데이터 참조 모델의 데이터와 파일 이름 참조 모델의 데이터를 통합하여 분석해 사용자는 두 정보를 한번에 확인 할 수 있다. 

 

[파일명 검색]
해당 기술은 전체 파일명을 모를 때 사용하는 기술이다. 해당 기술의 방법은 아래와 같다.

 - 디렉토리 내용들을 불러와 하나씩 처리한 후 디렉토리의 각 엔트리와 지정된 패턴(검색 문자열)과 비교한다.

또 다른 검색 방법으로는 메타 데이터 엔트리에 할당 된 파일명을 검색하는 방법이다.
이 방법은 클러스터에서 증거를 찾은 후 해당 클러스터를 할당한 메타 데이터 구조체를 검색할 때 사용된다. 


[일관성 검사]
해당 기술은 할당 된 모든 파일명이 할당된 메타 데이터 구조체를 가리키고 있는지 증명하는 기술이다. 이 기술은 같은 파일 내용에 여러 파일명이 있는 파일시스템에 적합하다.  


[영구 삭제 기술]
해당 기술은 파일 이름 참조 모델의 데이터인 파일명과 메타 데이터 주소를 지운다. 또 다른 방법으로는 파일명 구조체에 특정 값을 덮어 씌어 엔트리는 존재하지만 더 이상 해당 데이터가 유효하지 않도록 한다.
또 다른 방법으로는 파일명 목록을 얻어와 삭제된 파일명을 기존의 파일명으로 덮어 씌우는 것이다. 이 방법은 복잡하고 파일명을 숨기는 기술이어서 조사관들이 조사 수행 시 어떤 파일에 해당 기술이 사용되었는지 알 수 없다. 

 
이번에는 마지막 파일시스템 참조 모델인 응용 프로그램 참조 모델에 대해서 알아 보도록 하겠다.

[응용 프로그램 참조 모델]
해당 참조 모델에 포함되는 데이터는 파일시스템에 있어서 필수적인 데이터는 아니지만 일부 파일시스템은 해당 참조 모델의 데이터를 포함한다.  

[파일시스템 저널]
파일시스템의 저널은 프로그램이 문제 없이 실행되기 위해 구성 된 것이다. 원리는 아래와 같다.

 - 파일시스템에 메타데이터가 변경되기 전 저널에 변경 되는 것을 알리는 엔트리가 생성 됨
 - 메타데이터가 변경 되면 저널에는 변경 되었다는 또 다른 엔트리가 생성 됨
 - 만약 프로그램이 실행 되는 도중에 프로그램이 손상되었을 때 점검 프로그램은 해당 프로그램의 저널을
   읽어 완성되지 않은 엔트리 위치를 확인 함 
 - 해당 프로그램의 엔트리 위치를 확인하여 복구를 완료하면 저널은 엔트리를 지우고 원래 상태로 돌아 감 


이처럼 프로그램 동작에 도움을 주는 기능이지만 파일시스템 동작에 있어서 필수적인 기능은 아니기 때문에 응용 프로그램 참조 모델에 속하는 것이다. 

 

[응용 프로그램 기반 파일 복구]
해당 기술은 시그니처를 기반으로 검색을 하는 기술이다. 대부분의 파일들은 표준적인 시그니처를 가지게 되는데 해당 기술은 그러한 시그니처들을 이용하여 검색을 하는 기술이다. 대표적인 도구로는 foremost가 있다. foremost는 각 파일시그니처가 목록화 되어 있는 설정 파일을 기반으로 동작한다. 


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

File System - FAT (2)  (0) 2012.01.31
File System - FAT (1)  (0) 2012.01.30
File System (5)  (0) 2012.01.28
File System (4)  (0) 2012.01.27
File System (3)  (0) 2012.01.26

+ Recent posts