FAT 파일시스템 – 데이터 영역 (Data Area)

예약된 영역, FAT 영역 다음에는 데이터 영역이 온다. 데이터 영역에 저장되는 데이터는 크게 파일의 메타 정보(파일 이름, 크기, 타입, 시간 정보, 시작 클러스터 위치 등)을 저장하고 있는 디렉터리 엔트리라는 구조와 실제 파일 데이터로 나눠볼 수 있다. 다음은 데이터 영역을 간단히 나타낸 것이다.

위의 그림은 루트 디렉터리 내부에 서브 디렉터리가 하나 일때를 가정하여 나타낸 것이다. 루트 디렉터리는 FAT12/16의 경우에는 FAT 영역에 바로 따라 온다. 하지만 FAT32는 그 위치가 고정되어 있지는 않고, 예약된 영역 부트 섹터 내부의 BPB의 값(44~47;Root Directory Cluster Offset)을 통해 그 위치를 나타낸다. 하지만 FAT32도 일반적으로 FAT 영역에 따라 나온다. (지금까지 분석해온 FAT의 경우 모두 FAT 영역 다음의 첫 클러스터에 위치하였다.)
루트 디렉터리가 FAT 영역 다음의 첫 클러스터에 오지만 FAT 엔트리 0, 1번이 예약되어 사용되지 않기 때문에 첫 클러스터의 번호는 FAT 영역을 기준으로 했을 때 2번이 된다. (잘 이해가 되지 않는 분들은 앞의 글을 읽고 오기 바란다.) 루트 디렉터리는 우리가 탐색기로 루트(C:)를 클릭했을 경우 나타나는 폴더 및 파일의 정보를 담고 있다.
폴더 및 파일의 정보는 디렉터리 엔트리라는 구조를 통해 나타낸다. 각각의 폴더 및 파일은 하나 이상의 디렉터리 엔트리를 통해 표현되며, 그 크기는 32 바이트이다. 다음은 디렉터리 엔트리의 데이터 구조이다.

디렉터리 엔트리는 위의 그림과 같이 이름, 확장자, 속성, 생성 날짜 및 시간, 마지막 접근 시간, 마지막 수정 날빠 및 시간, 시작 클러스터 위치, 논리적 파일 크기 정보를 가지고 있다. 폴더를 표현할 경우 확장자가 없으므로 확장자는 표현하지 않는다. 루트 디렉터리에 위치한 특정 파일이나 폴더에 접근하고자 하는 경우 루트 디렉터리의 디렉터리 엔트리를 검색하면서 해당 파일 이름을 찾는다.
파일 이름을 가진 디렉터리 엔트리를 찾았다면 시작 클러스터 정보(Starting Cluster Hi + Starting Cluster Low)를 얻어 해당 위치부터 파일 크기 만큼 파일을 획득하면 될 것이다. 하지만 파일은 항상 데이터 영역의 연속된 클러스로 표현되지 않고 조각날 수 있기 때문에 이러한 조각난 파일 정보는 FAT 영역에서 시작 클러스터부터 따라가면서 원하는 클러스터 만큼 획득하면 된다. 파일 크기에 해당하는 클러스터를 획득한 경우에 마지막 클러스터에는 파일 슬랙이 존재할 수 있으므로 정확한 파일 데이터만 얻고자 한다면 파일 크기 만큼만 떼어내면 될 것이다.
하위 디렉터리를 탐색하고자 한다면 파일과 마찬가지로 하위 디렉터리 이름을 가진 디렉터리 엔트리를 얻어, 하위 디렉터리가 위치한 클러스터로 이동하면 될 것이다. 이동하게 되면 다시 그 클러스터에는 하위 디렉터리의 폴더 및 파일의 정보를 담고 있는 32 바이트의 디렉터리 엔트리가 연속적으로 나올 것이다.
우리가 탐색기를 열어 확인하는 파일의 이름, 확장자, 시간 정보 등은 데이터 영역의 실제 파일을 통해 얻어오는 정보가 아니라 디렉터리 엔트리만 탐색하여 얻는 정보이다. 그렇다면 숨긴 파일, 읽기 전용 파일, 시스템 파일 등은 어떻게 구분하는 것일까? 그것은 디렉터리 엔트리의 속성을 통해 가능하다. 다음은 디렉터리 엔트리의 속성(offset 11)에 나올 수 있는 값이다.
| 값 (Binary) | 설명 |
| 0000 0001 | Read only |
| 0000 0010 | Hidden file |
| 0000 0100 | System file |
| 0000 1000 | Volume label |
| 0000 1111 | Long file name |
| 0001 0000 | Directory |
| 0010 0000 | Archive |
여기서 한가지 궁금한 점이 있을 것이다. 위의 디렉터리 엔트리 구조에 의하면 파일 이름을 표현하기 위해 8 바이트를 사용한다. 그렇다면 8 바이트보다 긴 파일 이름은 어떻게 표현할까? 눈치 빠른 독자라면 속성에 “0000 1111″을 갖는 긴 파일 이름 속성이 있다는 것을 발견하였을 것이다. 긴 파일의 경우에는 긴 파일 이름 (Long File Name) 엔트리를 추가적으로 사용한다. 디렉터리 엔트리에 대한 자세한 내용은 이전 글을 참조하기 바란다.
이처럼 복잡한 폴더 구조도 루트 디렉터리를 기점으로 탐색해 나가게 되면 쉽게 모든 파일을 탐색할 수 있을 것이다. 탐색하여 원하는 파일을 찾은 경우 해당 파일은 시작 클러스터 위치를 통해 FAT 영역을 확인하여 연결된 파일 데이터를 획득 한 후 슬랙 영역을 제거하면 논리적인 파일을 얻을 수 있다.
-
http://www.facebook.com/people/박상호/100002191726106 박상호
-
http://www.facebook.com/proneer Jinkook Kim
-
http://www.facebook.com/people/박상호/100002191726106 박상호
-
-
Categories
- 0×00 News (18)
- 0×01 Fundamentals (18)
- 0×02 Live Forensics (3)
- 0×03 Incident Response (15)
- 0×04 Storage Forensics (27)
- 0×05 File System Forensics (36)
- 0×06 Windows Forensics (44)
- 0×07 *nix Forensics (3)
- 0×08 Mac Forensics (1)
- 0×09 Web Forensics (8)
- 0x0A Data Forensics (8)
- 0x0B Forensic Challenges (15)
- 0x0C Forensic Education (9)
- 0x0D EnCase (16)
- 0x0E Forensic Tools (10)
- 0x0F Slides (26)
- 0×11 Forensic Articles (10)
- 0×12 Forensic Interview (5)
artifacts CEIC challenge Codegate conference Data recovery defcon DFRWS ENCASE EnCE encoding FAT File System FTK hardware imaging index.dat interview Live Forensics live response malware mbr memory forensics network ntfs padocon practitioner prefetch process RAID Recycle Bin SCSI signature Slack slide SSD timeline timestamp USB usb artifacts virtual forensics WDFS web browser windows 8 writeup
WP Cumulus Flash tag cloud by Roy Tanck requires Flash Player 9 or better.
Archives
- May 2013 (2)
- April 2013 (3)
- March 2013 (9)
- February 2013 (1)
- January 2013 (7)
- December 2012 (1)
- November 2012 (3)
- October 2012 (4)
- September 2012 (10)
- August 2012 (1)
- July 2012 (4)
- June 2012 (7)
- May 2012 (5)
- April 2012 (5)
- March 2012 (2)
- February 2012 (2)
- January 2012 (5)
- December 2011 (1)
- November 2011 (5)
- October 2011 (2)
- September 2011 (2)
- August 2011 (5)
- July 2011 (3)
- June 2011 (6)
- May 2011 (2)
- April 2011 (7)
- February 2011 (11)
- December 2010 (3)
- November 2010 (4)
- October 2010 (8)
- September 2010 (5)
- August 2010 (6)
- July 2010 (4)
- June 2010 (1)
- May 2010 (12)
- April 2010 (4)
- March 2010 (14)
- February 2010 (16)
- December 2009 (3)
- November 2009 (9)
- October 2009 (10)
- September 2009 (7)
- August 2009 (9)
- July 2009 (7)


