[제 10강] (최종) [FAT32]-[D.E] Start of the analysis, Directory Entry
『Cyber Forensics』/Forensics - File System 2016. 1. 29. 18:43안녕하세요 EnIaC 입니다.
어제는 몸이 좀 많이 아팠던 관계로 블로깅 하다가 좀 쉬었습니다. (내용 쓰다가 그상태로 잠들었네요..) 여튼 오늘 배워볼 내용은 이전 [제 9강] 에서 바로 이어지는 Directory Entry 에 대해 공부해 보도록 하겠습니다.
1. Directory Entry
[그림 1. Disk allocation letters]
[그림 1-1. Root Directory]
2. Directory Entry Detail Structure
[그림 2. Directory Entry Detail Structure]
이름 | 설명 |
Name | 파일/디렉토리의 이름, 대문자로 최대 8자까지 넣을 수 있으며 남는 공간은 0x20으로 채워진다. 단 만약 해당 파일/디렉토리가 지워진 경우에는 최고 상위 bit가 0xE5로 채워짐. |
Extender | Hidden file확장자, 대문자로 최대 3자리까지 입력이 가능하며 이 역시 남는 공간은 0x20으로 채워지는데 디렉토리의 경우에도 이 공간이 0x20으로 채워진다. |
Attribute | 해당 Directory Entry의 용도를 기록하는 항목으로 System File은 0x04로, 서브 디렉토리의 경우 0x10, 일반 파일은 0x20, LFN 이 적용되었다면 0xF0로 채워진다. |
(Reserved) NT Resource | Windows NT 의 예약된 공간으로 항상 0으로 채워져 있다. |
(Reserved) Create Time Tenth | 파일이 생성된 시간을 1/10 초 단위로 기록하는 항목. |
Create Time | 파일 생성 시간으로 상위 5bit는 초, 다음 6bit는 분, 마지막 5bit는 시를 의미한다. 다른 값은 일반적으로 식별하는 시간이 맞으나 초의 경우 값이 1증가할때마다 2초씩 증가한다. |
Create Date | 생성 날짜로 상위 5bit는 일, 다음 4bit는 월, 마지막 7bit는 년을 의미한다. 단 년도의 경우 1980년으로 부터의 오프셋인데 만약 11이라면 1980+11=1991년을 의미한다. |
Last Access Date | 가장 최근의 읽기/쓰기를 한 날자를 의미한다. |
First Cluster High 2Byte | 파일의 첫 번째 클러스터 번호의 상위 2Byte를 말한다. |
Write Time | 최근 파일 수정 시간을 말하며 파일 생성 역시 쓰기로 간주하기 때문에 파일 최소 생성 시에는 이 Write Time과 Create Time 이 일치한다. |
Write Date |
|
First Cluster Low 2Byte | 파일의 첫 번째 클러스터의 하위 2Byte를 말한다. |
| 파일의 크기를 의미하며 단위는 Byte이다. 만약 디렉토리라면 이항목은 0으로 채워진다. |
위 내용으로 디렉터리 엔트리 구조에 대한 설명은 마치도록 하겠습니다. 다음은 지금까지 배운 디렉터리 엔트리 구조를 이용한 파일 분석 입니다.
3. Directory Entry Detail Analysis
위에서 지금까지 배운 내용을 토대로 실제 분석을 진행 해 보도록 하는 시간을 갖겠습니다. 우선 최상위 즉, 루트 디렉터리에 테스트용 파일을 하나 생성해 주시길 바랍니다. 여기서는 test04 라는 파일 명으로 txt 파일을 생성 하였습니다. 여기서 주의하실점이 있는데, 파일을 생성한 뒤 "우클릭 - 이름바꾸기" 메뉴를 통한 이름 바꾸기는 실제 이미 이전에 이름으로 기록된 데이터의 파일이 있기 때문에 새로운 클러스터에 할당받아 데이터를 저장하는 경우가 발생합니다. 따라서 파일 생성은 다른 디스크 혹은 다른 파티션에서 생성하여 이름 변경까지 마친 뒤, 테스트를 할 수 있는 디스크 혹은 파티션으로 복사[Ctrl + C] 후 붙여넣기[Ctrl + V] 해 주시면 분석시 굉장히 깔끔한 데이터 구성을 보실 수 있습니다.
[그림 3. Directory Entry Analysis Example]
[그림 3] 과 같이 F:\ 로 명명된 Partition 2 혹은 [n] 의 Root Directory 에는 dirtest 라는 디렉토리가 있으며 그 내부에는 test04.txt 라는 파일을 갖고 있습니다. 지금부터 Root Directory Entry 로부터 test04.txt 라는 파일까지 찾아가 보도록 하는 실습을 시간을 갖겠습니다.
[그림 3-1. Partition Root Directory Entry]
[그림 3-1] 은 Partition 의 Root Directory Entry 로써 최상위 디렉터리가 있는 곳 입니다. 이곳에 있는 Directory 중 Attribute 항목이 디렉토리로, 즉, 0x10 으로 표기된 항모글 찾으면 가장 하위에 있는 것을 확안할 수 있습니다. 위 그림에 있는 내용중 일부를 덤프뜬 내용 입니다. 아래의 내용으로 상세 분석을 하도록 하겠습니다.
44 49 52 54 45 53 54 20 20 20 20 10 08 2A 17 89 03 45 03 45 00 00 18 89 03 45 07 00 00 00 00 00 |
- Name : 0x4449525445535420 (파일명 DIRTEST)
- Extender : 0x202020 (Directory)
- Attribute : 0x10, Directory
- NT Resource : 0x08
- Create Time Tenth : 0x2A
- Create Time : 0x8917, 10001 001000 10111 => 17시 8분 46초
- Create Date : 0x4503, 0100010 1000 00011 => 2014년 8월 3일
- Last Access Date : 0x4503, 2014년 8월 3일
- First Cluster High 2 Byte : 0x0000
- Write Time : 0x8918, 10001 001000 11000 => 17시 8분 48초
- Write Date : 0x4503, 2014년 8월 3일
- First Cluster Low 2Byte : 0x0007 => High + Low = 0x00000007 => Cluster 7
- File Size : 0x00000000, Directory
위 분석 결과를 토대로 TEST04.TXT 의 위치는 15번 클러스터로 확인 되었으며, 해당 클러스터가 갖는 섹터를 계산 (15 - 2) * 8 = 104 Sector 하여 104 Sector 만큼 이동해야 함을 알아 냈습니다. 그럼 위 계산을 통하여 위치를 이동하도록 합니다.
[그림 3-2. TEST04.TXT Data Check]
이로써 해당 섹터로 이동하면 파일의 데이터 값이 그대로 보이게되며 여기서는 TXT 파일로 저장 했으므로 데이터가 그대로 저장되어 내용물을 알아볼 수 있음을 알 수 있습니다.
4. LFN, Long File Name Entry Structure
LFN Entry 란, 기존의 파일 작명 방식은 이름 8자와 확장자 3자의 한계를 보완하기 위해 생겨난 작명 방법입니다. 이 LFN 방식은 UTF-16 인코딩을 사용하여 다국어 지원이 가능하며 최대 255자 라는 엄청난 파일이름 작명까지 가능하게 되었습니다. LFN 구조는 다음과 같습니다.
[그림 4. LFN Structure]
이름 | 설명 |
Order (Sequence Number or Status Byte) | LFN 의 순서를 기록하는 항목으로써 가장 처음은 0x01 로 시작되고, 가장 마지막은 0x40 과 OR 연산을 한 값으로 기록. |
Name 1 | 1~5번째 문자열 기록하는 곳. (Unicode) |
Attribute | 항상 0x0F 로 고정 되어있는 값. |
Type | 일반적으로 0x00 으로 채워지는 값. |
Checksum | 해당 LFN 과 대응되는 Short Directory Entry 의 Checksum DATA 를 저장하는 곳. |
Name 2 | 6~11번째 문자열 (Unicode) |
| 반드시 0 이 들어가는 값 |
Name 3 | |
위 표를 토대로 LFN 을 사용하는 파일을 분석 해보도록 하겠습니다.
[그림 4-1. LFN File Data GUI Check]
[그림 4-1] rhk rkxdl F:\LNF Test\thislnftestfile 이라는 파일을 분석하여 실제 LFN 이 어떻기 기록하는가에 대해 두 눈으로 직접 확인 해 보도록 하겠습니다. 파일 명은 thisislfnfile 이며 확장자를 빼고도 16개의 문자로 이루어져 있기 때문에 기존의 Short Directory Entry 로는 저장할 수 없다는 사실을 직접 계산할 수 있습니다.
[그림 4-2. LFN File Data Hex Check]
Test File 의 Directory Entry 로 이동해보면 THISIS~1TXT 로 파일명과 확장자가 표현 된 것을 확인할 수 있는데, 그 윗쪽을 살펴보면 Attribute 값이 0x0F 로 되어있는 2개의 Entry 가 보일 것 입니다. 이는 해당 Test File 이 LFN 임을 알 수 있습니다.
아래 HEX 값을 통해 보다 자세히 알아보도록 하겠습니다. 색을 달리하고 기울림 처리가 되어 있는 곳이 중요하게 보아야 할 곳 입니다.
42 66 00 69 00 6C 00 65 00 2E 00 0F 00 43 74 00 78 00 74 00 00 00 FF FF FF FF 00 00 FF FF FF FF 01 74 00 68 00 69 00 73 00 69 00 0F 00 43 73 00 6C 00 66 00 6E 00 74 00 65 00 00 00 73 00 74 00 |
LFN 에 대해서만 상세히 분석하려 하는데 우선 2개의 Order 을 확인하면 가장 처음은 01로 그 다음에는 42로 시작하는 것을 확인할 수 있습니다. 이는 0x40 | 0x02 의 결과로 해당 LFN 이 가장 마지막 LFN 임을 의미하는 것 입니다. 그러므로 1번 Entry 의 Name 1 부터 Name 3 까지 읽고 그 다음 2번 Entry Name 1 부터 Name 3 까지 읽으면 thisislfntestfile,txt 로 정확히 파일 명과 일치하는 것을 알 수 있습니다.
이로써 FAT32 에 대한 모든 내용은 끝난 상태 입니다. FAT32 구조를 직접 다 보았고 다음 강의부터는 보충 설명과 실제 필자가 만든 문제를 풀어보고 풀이 과정을 상세히 정리하여 포스팅 하는 방식으로 포스팅 하도록 하겠습니다. 또한 NTFS 는 제가 시간 되는대로 하나씩 최대한 빠르게 포스팅 하도록 하겠습니다.
지금까지 FAT32 공부하시느라 고생하셨고, 앞으로 NTFS 가 기다리고 있으니 좀더 화이팅 하시길 바랍니다...!! :)
* 본 FAT32 강의는 이론적 내용을 담고있으며 본인의 것으로 만드려면 직접 문제를 풀어보고 실습하는 시간을 필수로 요구하는 과정입니다. 그에 따라서 직접 분석 과정을 올릴 예정이오나, 독자분들 스스로 공부하려는 의지가 받쳐줘야 한다는 사실을 명심 하시길 바랍니다.
감사합니다!
'『Cyber Forensics』 > Forensics - File System' 카테고리의 다른 글
[제 9강] [FAT32]-[D.A] Start of the analysis, DATA Area (0) | 2016.01.27 |
---|---|
[제 8강] [FAT32]-[F.A] Start of the analysis, FAT Area(FAT32 Table) (0) | 2016.01.26 |
[제 7강] [FAT32]-[R.A] Start of the analysis, Reserved Area (0) | 2016.01.25 |
[제 6강] [FAT32]-[B.R] Start of the analysis, Boot Record (0) | 2016.01.25 |
[제 5강] [FAT] Reserved area, Common area analysis (0) | 2016.01.24 |
WRITTEN BY
- EnIaC
WhiteHackerGroup 『LockDown』 EnIaC 입니다.