FAT 파일시스템-데이터 영역 #2

심야·2022년 12월 21일
0

디지털 포렌식

목록 보기
10/23

루트디렉터리5.png

위 그림은 데이터 영역의 루트 디렉터리다.
루트 디렉터리는 FAT영역 바로 뒤 데이터 영역의 맨 앞부분에 위치해 FAT 엔트리 2번에 해당한다. FAT 엔트리 0번과 1번은 예약되어 사용할 수 없다. 자세한 내용은 추후에 설명하겠다.
FAT 파일시스템은 Directory Entry구조로 디렉터리와 파일들을 관리한다.
디렉터리 내부에 포함되는 하위 디렉터리, 파일의 이름, 확장자, 시간 정보, 크기 등을 표현하기 위해 Directory Entry를 사용한다.

Directory Entry

디렉터리 엔트리.png
0x0000 - 0x0000 | 파일 이름 첫 문자(할당 상태) 표시 : 할당 상태라면 파일명의 첫 글자가 저장되겠지만 삭제된 파일이면 0xE5, 비어 있으면 0x00으로 표시된다. 0xE5를 다른 문자열로 바꾸면 해당 파일은 복구할 수 있다.
0x0001 - 0x0007 | Name : 8Bytes 크기의 파일 이름을 표시한다. 영문(ASCII) 및 한글로 표시되며 공백은 0x20(ASCII, space)로 표시된다.
0x0008 - 0x000A | Extension : 3Bytes 크기의 파일 확장자를 표시한다.
0x000B - 0x000B | Attributes : 해당 파일의 속성 플래그 값을 나타낸다. 전체 8bit로 표시되며 상위 2 bit는 예약되어 있다. 플래그 값에 따른 속성 설명은 다음과 같다.

플래그 값속성설명
0000 0001(0x01)Read Only읽기 전용
0000 0010(0x02)Hidden File숨김 파일
0000 0100(0x04)System FileOS 시스템 파일
0000 1000(0x08)Volume Lable볼륨레이블
0000 1111(0x0F)Long File Name긴 파일 이름 엔트리
0001 0000(0x10)Directory디렉토리
0010 0000(0x20)Archive일반 파일

0x000C - 0x000D | Reserved : 예약된 영역
0x000E - 0x000F | Created Time : 파일 생성시간(시, 분, 초)
0x0010 - 0x0011 | Created Date : 파일 생성 날짜
0x0012 - 0x0013 | Last accessed Date : 마지막 접근 날짜
0x0014 - 0x0015 | Starting Cluster High : 파일이 위치한 첫 번째 클러스터 주소의 상위 2 바이트
0x0016 - 0x0017 | Last Written Time : 마지막 수정 시간(시, 분, 초)
0x0018 - 0x0019 | Last Written Date : 마지막 수정 날짜
0x001A - 0x001B | Starting Cluster Low : 파일이 위치한 첫 번째 클러스터 주소의 하위 2 바이트
0x001C - 0x0020 | File Size : 파일 크기 (디렉터리의 경우 0), Bytes 단위로 표시

루트디렉터리5.png

디렉터리 엔트리 구조를 알아봤으니 분석을 해보자.

파일 이름 첫 문자(할당 상태) 표시 : A5 # 첫 문자가 E5 가 아니므로 활성화된 파일이다.
Name : 41 4D 31 20 20 20 20 # YAM1
Extension : 50 4E 47 # PNG
Attributes : 20 # 일반 파일
Reserved : 10 AA
Created Time : A6 93
Created Date : 82 48
Last accessed Date : 82 48
Starting Cluster High : 00 00
Last Written Time : 0D 95
Last Written Date : 36 48
Starting Cluster Low : 05 00
File Size : E2 26 00 00 # 9954 Bytes

파일 시간정보 분석

FAT 파일시스템 시간 변환방법은 Time 형식변환 방법과 Date 형식변환 방법이 존재한다.

  1. 시간 형식 변환
    현재 분석하는 파일의 Created Time은 A6 93이다. 이 값을 리틀 엔디안으로 변환한다. 리틀 엔디안 변환 값 : 93 A6

    93 A6을 2진수로 변환해 우측에서 좌측으로 5자리 6자리 5자리씩 끊어준다.
    5비트는 시, 6비트는 분, 5비트는 초를 나타내며 각 비트를 10진수로 표현하면 18시 29분 6초가 된다. 초는 2초 간격으로 표시되어 0-29 유효범위를 가진다. 이는 0-58의 초 범위를 2초 간격으로 표시하기 때문이다. 그래서 * 2를 해야한다.
    최종 시간은 18시 29분 12초가 된다.

FAT 시간.png

  1. 날짜 형식 변환
    현재 분석하는 파일의 Created Date는 82 48이다. 이 값을 리틀 엔디안으로 변환한다. 리틀 엔디안 변환 값 : 48 82
    48 82를 2진수로 변환해 좌측에서 우측으로 7자리, 4자리, 5자리씩 끊어준다.
    7비트는 년, 4비트는 월, 5비트는 일을 나타내며 7비트 값에 1980년도를 더해 실제년도를 구한다. 각 비트를 10진수로 표현하면 36년 4월 2일이 되고 년도 값 36 + 1980을 계산해 최종 날짜는 2016년 4월 2일이다. # 값의 유효 범위가 1980-2107 년도 까지 표현하는 0-127이여서 1980을 더한다.
    FAT 날짜.png 최종시각 : 2016년 4월 2일 18시 29분 12초
    FAT-Dcode.png

값이 정확한지 시간변환 도구 Dcode를 사용한 결과 정확하다.


본 글은 보안프로젝트 디지털포렌식 통합과정과 디지털포렌식 도서들을 참고해 작성했습니다.

출처

http://forensic-proof.com/archives/385
http://forensic.korea.ac.kr/DFWIKI/index.php/FAT
START UP 디지털 포렌식 (이별 지음)
디지털 포렌식 개론 (이상진 지음)
파일시스템 포렌식 분석 (주필환 옮김)
디지털 포렌식 기술 (노명선 외 다수)

profile
하루하루 성실하게, 인생 전체는 되는대로.

0개의 댓글