본문 바로가기

[+] Forensic

File System - FAT (4)

이번 글에서는 FAT 파일시스템의 메타데이터 참조 모델에 대해 알아 볼 것이다.

메타데이터 참조 모델은 다른 데이터를 설명하는 데이터가 포함되어 있는 참조 모델로 디렉토리 내용의 저장위치, 날짜,

시간, 허가권 등의 데이터
가 포함된다.

메타데이터 참조 모델을 분석함으로써 특정 파일의 추가 정보와 의심스러운 파일을 식별하기 위한 정보를 얻기도 한다.

FAT 파일시스템에서는 메타데이터 참조 모델의 데이터를 디렉토리 엔트리 구조체에 저장하며, FAT 구조체를 파일이나

디렉토리 에이아웃에 대한 메타데이터 데이터를 저장하기 위해 사용한다.

이제부터 메타데이터 참조 모델의 각 개념들을 살펴보고 분석방법을 이야기 해 보자.

[디렉토리 엔트리]
디렉토리 엔트리란, 파일과 디렉토리마다 할당되는 데이터 구조체를 말한다.
디렉토리 엔트리의 크기는 32byte이며 아래와 같은 데이터를 포함한다.

 - 파일 이름
 - 파일 속성
 - 파일 크기
 - 클러스터 시작 주소
 - 날짜
 - 시간


디렉토리 엔트리는 위에서 보듯이 파일 이름을 포함하기 때문에 파일 이름 참조 모델의 역할도 수행한다.
디렉토리 엔트리의 위치는 데이터 영역 어디든지 가능하며, 그 이유는 디렉토리에 할당 된 클러스터가 해당 디렉토리 엔트리를 포함하기 때문이다. 디렉토리 엔트리는 클러스터처럼 고유주소를 사용하지 않고 할당 된 파일이나 디렉토리의 전체 이름을 사용한다(표준 방법)
디렉토리 엔트리에는 위에서 보듯이 파일 속성이 포함된다. 파일 속성에는 7가지 항목이 있는데 모두 OS에서 필요로 하는 것은 아니다. 아래에 몇가지 필수 속성에 대해 나열해 두었다.

 - 디렉토리 속성 : 서브 디렉토리를 위한 디렉토리 엔트리인지 구분하는 속성
 - 긴 파일명 속성 : 다른 레이아웃을 갖는 엔트리 유형인지 구분하는 속성
 - 볼륨 레이블 속성 : 하나의 디렉토리에만 설정되는 속성


 * 참고 : 위 필수속성이 없는 엔트리는 파일에 할당 된 엔트리이다.

아래에는 7가지 속성 중 부가 속성을 나열 한 것이다.

 - 읽기 전용 속성 : 파일쓰기를 방지 하는 속성
 - 숨김 속성 : 파일과 디렉토리 목록을 보여줄 때 사용자에게 해당 속성이 설정 된 파일이나 디렉토리를 보여
                  주지 않는 속성
 - 시스템 속성 : 시스템 파일로 구분하는 속성
 - 아카이브 속성 : 일반적인 파일 속성

 
디렉토리 엔트리에는 시간 정보도 포함되는데 세부적으로 나누어 보면 수정시간(Modify), 접근시간(Access), 생성시간(Create)로 나누어진다. 
디렉토리 엔트리의 할당 상태는 첫 바이트를 통해 알 수 있다. 할당 된 엔트리는 자신이 할당 된 파일이나 디렉토리의 이름을 사용하는데 할당 상태인 경우 자신이 할당 된 파일명이나 디렉토리 명의 첫글자가 첫바이트가 된다. 하지만 할당 되지 않은 상태라면 디렉토리 엔트리의 첫 바이트는 "0xE5" 로 설정된다. 

 

[클러스터 연결]
디렉토리 엔트리는 클러스터의 시작 주소를 포함한다. 또 FAT 구조체는 파일에 할당 된 클러스터를 찾는데 사용된다.
클러스터 할당 상태는 FAT 엔트리 값이 0이 아니면 할당 상태이고 0이면 비 할당 상태인 것으로 판단이 가능하다.
FAT 엔트리는 다음 클러스터 주소, 파일 끝(EOF), 불량 섹터가 있는 클러스터를 보여주는 값을 포함한다.
아래는 디레토리 엔트리와 FAT 엔트리가 클러스터를 찾을 때 어떻게 연관되는지 보여주는 이미지이다.

 [그림 1 - 디렉토리 엔트리와 FAT 엔트리의 관계]

FAT 파일시스템의 크기는 FAT 엔트리 크기에 의해 달라진다. FAT 엔트리는 다음 클러스터 주소를 저장 할 수 있는 크기가 한정적이다. FAT 32 파일시스템의 경우 32bit 중 28bit만 사용하여 268,435,456 클러스터를 표현 할 수 있다.

 * 참고 : FAT 32의 표현 할 수 있는 크기가 실제로는 예약된 EOF와 손상된 클러스터로 인해 조금 더 작다.  


[디렉토리]
OS는 새로운 디렉토리가 생성되면 클러스터를 할당하고 0으로 초기화 한다.

 * 참고 : 디렉토리 크기 필드를 사용하지 않는 경우 항상 0이어야만 한다. 

디렉토리 크기 결정 방법은 "클러스터 연결" 원리와 동일하다. 생성 이후에는 생성시간, 접근시간, 수정시간을 업데이트 하지 않는다. 이러한 성격은 디렉토리 생성 날짜의 무결성을 검증하는데 사용되기도 한다. 그 이유는 디렉토리의 생성 날짜와 시간은 디렉토리 내용의 "."".." 의 생성날짜와 시간이 동일하기 때문이다.

 [그림 2 - 검증 예시]

만약 서로 값이 다르다면 이는 악의적인 사용자에 의해 변경되었거나 시스템의 어떠한 응용 프로그램에서 수정 했을 가능성이 있다. 


[디렉토리 엔트리 주소]
디렉토리 엔트리 주소를 찾기 위해서는 파일명이나 디렉토리명의 전체이름을 사용하는 방법이 있다. 하지만 이 방법에는 두가 정도의 문제점이 있다.

 - 파일이 지워졌을 때의 충돌 가능성 : 1-1.txt 파일과 2-1.txt 파일이 있다고 가정 할 때 파일이 지워지면 해당
    디렉토리 엔트리는 첫 바이트가 0xE5로 설정되어 파일명이나 디렉토리명의 첫글자가 지워진다. 이럴 경우
    두 txt 파일은 -1.txt, -1.txt 파일명이 되어 이름이 충돌하게 된다.
 - 디렉토리 엔트리 재할당 : 디렉토리가 삭제된다고 하여 디렉토리 내용도 모두 데이터 영역에서 삭제 되는 것
    은 아니다. 삭제된 디렉토리 엔트리 자리에 새로운 디렉토리가 생기고 해당 디렉토리의 디렉토리 엔트리가
    할당 되면디렉토리 내용들은 모두 고아상태가 되고 만다. 이러한 파일들을 고아파일이라고 부른다. 아래는
    이 같은 상황을 도식화 한 것이다.


 [그림 3 - 고아파일]

위 이미지처럼 고아 상태가 된 파일들을 일반적인 커맨드 명령어로는 접근 할 수 없고 데이터 영역의 섹터를 전체적으로 분석해야만 찾을 수 있다.


[할당 알고리즘]

[디렉토리 엔트리 할당]
Windows XP의 경우 "다음 적용" 할당 정책을 사용하여 비 할당 엔트리를 검색한다. 만약 비 할당 엔트리가 없을 시 새로운 클러스터를 할당한다. 

 

[시간 값 할당]
디렉토리 엔트리에 포함되는 시간 값들은 부가적 데이터 이며, 잘못된 값을 가지고 있을 수도 있다.
아래는 각 시간별로 어떻게 할당되는지를 나열 해 놓은 것이다.

 - 생성 시간 : 새로운 파일을 생성하면 새로운 디렉토리 엔트리를 할당 하는데 이때 설정 된다.
   1) 다른 디렉토리나 다른 디스크로 파일을 이동시키면 이동 시킨 디렉토리나 디스크로 옴겨진 원본 파일의
       새로운 엔트리가 할당 되고 새롭게 할당 된 엔트리를 기존의 원본 엔트리가 덮어 씌운다.(생성시간
       변하지 않음)
   2) 예외의 경우가 있는데, 커맨드 명령어로 다른 디렉토리나 디스크로 이동 시킬 시 생성 시간은 이동시간
       으로 다시 할당 된다.
   3) 복사의 경우 새로운 파일로 간주하여 새로운 엔트리가 생성되고 새롭게 생성시간이 할당 된다.

 - 수정 시간 : 윈도우가 파일에 내용을 써 넣을 때 설정 된다.
    1) 파일을 이동하고 복사 할 시 새롭게 할당 된 엔트리는 원본 엔트리의 수정 시간을 할당 받는다.
    2) 윈도우의 경우 응용 프로그램이 파일에 접근하여 내용을 수정 한 후 저장하지 않아도 수정시간을
        새롭게 할당한다.
 * 참고 : 속성이나 파일명은 수정시간 업데이트에 영향을 주지 않는다.

 - 접근 시간 : 파일을 열때나 클릭 할 때 설정 된다.
    1) 파일을 열 때 할당 된다.
    2) 파일의 속성 창 버튼을 클릭하면 할당 된다.
    3) 파일을 다른 볼륨으로 이동 시킬 시 윈도우는 해당 파일의 내용을 참조하기 위하여 파일에 접근하고
        이때 접근 시간 또한 다시 할당 된다.
    4) 파일을 복사하거나 이동하면 원본, 복사본 모두 접근시간이 새롭게 할당 된다. 


[분석]
메타데이터 참조 모델을 분석하는 이유는 파일과 디렉토리에 대한 좀 더 세부적인 정보를 얻어 어떠한 판단을 하기 위해서이다. 디렉토리 엔트리와 FAT 구조체를 사용하여 클러스터를 찾고 해당 클러스터를 참조 하면 된다.
분석 시 주의사항으로는 시간값은 선택사항이어서 0이 될 수 있다는 것을 주의해야 하며, 또 시간 값은 수정이 쉬워 정확성이 보증되지 않는 다는 것이다.
어떠한 파일에 접근하기 위해서는 접근 하기 전 마지막 접근 시간을 체크 해 두고 접근하는 것이 좋다. 또 Windows XP 경우 "다음 적용" 할당 정책을 사용하기 때문에 지워진 파일 이름이 클러스터 내에서 더 오래 유지 된다.
하지만 DEFRAG 유틸리티가 실행 되면 사용되지 않는 디렉토리 엔트리들을 제거 하기 때문에 이 유틸리티가 실행된 후의 시스템을 분석한다면 이전 데이터들을 복구하기는 힘들다.
분석 할 때 슬랙 공간 분석을 수행하는 것이 좋고, Windows XP의 경우 볼륨 레이블 디렉토리 엔트리에 히든 데이터가 있을 가능성이 있기 때문에 조사를 수행 해 보는 것이 좋다.

 * 참고 : FAT 파일시스템은 시간 저장 시 표준 시간대를 고려 하지 않고 저장한다. 이로 인하여 서머타임등의
           계산이 불필요하다. 

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

File System - FAT (6)  (0) 2012.02.02
File System - FAT (5)  (0) 2012.02.02
File System - FAT (3)  (0) 2012.01.31
File System - FAT (2)  (0) 2012.01.31