디지털 포렌식 정리 #7 (FAT32, NTFS)

0

디지털포렌식

목록 보기
77/115
post-custom-banner

1. FAT 32 : File Allocation Table 32.

FAT32의 구조는 다음과 같다.

Boot RecordReservedFAT #1FAT #2Root DirectoryData사용하지 않는 영역

Boot Record로 시작하여, 사용하지 않는 영역으로 끝난다.

다음으로, Boot Record의 세부 구조는 다음과 같다.

명칭내용
Jump Boot codeBoot Strap Code로 이동
OEM NameOEM 회사를 나타내는 문자열
Byte per SectorSector의 구성 byte를 표현한다. (기본 512byte)
SPCluster 구성 섹터 수
RS예약된 Sector의 개수
FAT 개수FAT의 개수
Media TypeVolume이 사용하는 Media의 종류를 나타낸다.
FAT Size 32FAT 영역의 섹터 수 (1개 당)
File System VersionFAT32의 버전 정보
Root Directory ClusterRoot Directory의 시작 위치
File system InformationFSInfo 구조체의 위치
Boot Record Backup SectorBR이 백업되어 있는 섹터 번호 (기본 6)
Volume IDVolume Serial Number
Volume LabelVolume의 이름을 기록
File System Type해당 File System의 Type
  • BPS / SP / Total Sector 32 / Volume ID 를 디지털 포렌식 전문가 2급 시험 때 주로 사용하였다.

  • BPS * SP = Cluster 당 Byte를 구할 수 있음.

  • Boot Record Backup Sector의 값이 기본적으로 6 이기 때문에, Back up 본을 기본 VBR 주소 + 6을 통해 구할 수 있는 것이다.

  • Root Directory Address = VBR Address + Reserved Address + (FAT Size * 2)(=FAT#1 + FAT#2)

2-1. Root Directory
Root Directory는 FAT32에 존재하는 File과 Directory들의 정보를 가지고 있는 영역이다. 자세한 설명에 앞 서서, 실제 Root Directory로 찾아가는 과정을 경험해보자.


앞 서 살펴본 것 처럼, MBR 영역에서 우리는 FAT32의 LBA 시작 주소를 확인할 수 있다. 0x3F(=63) 섹터이다.


이동한다면, 우리는 FAT32의 VBR 영역을 확인할 수 있고, 그림에서 표시된 부분은 각각 우측 상단이 Reserved, 좌측 하단이 FAT Size를 표현한 위치이다. Root Directory의 위치를 구하기 위하여 계산을 수행해보자.

VBR Address : 63
Reserved : 0x01 F0 (=496)
FAT Size : 0x0F 08 (=3848)
63 + 496 + 3848*2 = 8255

8255 Sector로 이동하면 Root Directory가 위치하고 있음을 확인할 수 있다.

그런데, Root Directory의 위치를 구하기 위해 앞 서 언급한 계산을 수행해야하는 것은 알겠지만, 그 값들이 의미하는 건 무엇일까? 다시 말해, FAT 영역은 무엇을 하는 공간일까?

  1. FAT#1, FAT#2
    FAT영역은 Cluster의 상태 값을 가지고 있는 영역이다. FAT#2는, FAT#1의 복사본이며 Back Up 역할을 한다. 앞 서 살펴본 것처럼 FAT#1의 위치는 BR 다음, Reserved의 다음에 위치하고 있기에 63 + 496 = 559 (Sector)에 위치하고 있다.

FAT32에서 FAT 영역은 4바이트씩 표현된다.

0~34~78~1112~15
Media TypePartition StatusCluster 2Cluster 3
Cluster 4Cluster 5Cluster 6Cluster 7
Cluster 8Cluster 9Cluster 10Cluster 11
Cluster 12Cluster 13Cluster 14Cluster 15
Cluster 16Cluster 17Cluster 18Cluster 19
Cluster 20Cluster 21Cluster 22Cluster 23
.....+@

추 후 파일을 복구 작업 시에 다시 언급하겠지만, FAT32의 0번 1번 클러스터는 별도의 용도로 예약된 영역이다. (Media Type : F8 FF FF 0F => 하드디스크)

FAT Entry의 값에 따라 다음과 같다. (FAT32의 경우)
0x00000000 : 해당 클러스터가 사용 가능하다는 의미. 비할당 상태이다.
0x0FFFFFF7 : Bad Cluster
0x0FFFFFF8(보다 큰 값) : 파일의 끝을 나타낸다.

따라서 OS가 새로이 파일과 디렉터리를 할당하기 위해서는, 0x00인 클러스터를 찾아 할당한다.

Q. 그렇다면 할당이 된다면, 어떻게 될까?

A. 파일이나 디렉터리의 크기가 항상 1개의 Cluster의 크기보다 작지는 않을 것이다. (BPS * SP = Cluster Size, 보통 4096) 그렇다면, 여러개의 클러스터를 묶어서 사용한다. 묶는 과정은 다음과 같다.

Cluster 02Cluster 09Cluster 10Cluster 17
00 00 00 0900 00 00 0A00 00 00 110F FF FF FF

2번 Cluster -> 9번 Cluster -> 10번 Cluster -> 17번 Cluster
(17번이 마지막 Cluster니까, 0xFFFFFF8보다 큰 값으로 마지막임을 나타낸다.)

다시 Root Directory로 돌아가자

2-2. Root Directory

Root Directory는 Directory Entry들의 집합이다. Data 영역에 저장되어 있는 File들의 정보들의 위치와 시간 등의 정보 (Directory의 경우, 자신의 정보와 하위 Directory, File들의 정보)를 가지고 있다.

기본적으로는, 위 그림과 같은 구조를 가지고 있다. (SFN)

  • 첫번째 바이트에 따른 뜻
    0xE5 : 삭제되었음을 의미
    0x00 : 비어있음

  • Attribution의 값에 따른 의미
    0x01 : Read only
    0x02 : Hidden
    0x04 : System
    0x08 : Value Label
    0x10 : Directory
    0x20 : File
    0x0F : LFN


  • 시간 정보를 구하는 방법은 다음과 같다.
    시간 : 5/6/5 (초는 *2)
    날짜 : 7/4/5 (+ 1980)
    이게 실제로 어떻게 계산되는지는 다음과 같다.

사진은 Directory Entry의 일부다. 생성 시간의 값은 C8 6E, 생성 날짜는 30 48, 마지막 접근 날짜는 30 48, 마지막 수정 시간은 95 95, 마지막 수정 날짜는 26 48이다.

생성 시간 : C8 6E는 Big endian 표기이니, Little Endian으로 변경하여 bit 단위의 값을 확인하면 다음과 같다. (6E C8) = 01101/110110/01000 = 13시 / 54분 / 16초 (8*2)

생성 날짜 : (48 30) = 0100100/0001/10000 = 36 + (1980)년 / 1월 / 16일

실제와 동일하게 찾아냈음을 알 수 있다.


다시 본론으로 돌아와서 SFN과 LFN에 대해 알아보자. FAT32는 이름이 8자 이하라면 SFN(Short File name)으로 저장하지만, 그 이상이라면 LFN으로 저장한다.

LFN의 구조는 다음과 같다.

명칭의미
Order순서, 마지막인 경우, 0x40과 xor한 값이 들어감.
Name11-5번째 이름
Attribute속성, LFN이기에 0x0F
Type일반적으로 0x00
Checksum
Name26-11번째 문자열
First Cluster Low반드시 0
Name312-14번째 문자열

실제 파일의 Hex 값들이다. 한글 파일이기에 명칭을 바로 확인할 수는 없지만, 그림에서 확인한 형식들을 볼 수 있다.


  • FAT 32 File Carving.
    그럼, 앞 서 공부한 내용들로 File들의 실제 위치를 찾아가보자.

일부러 아무 표시 없는 그림을 준비했다. 구조가 눈에 보이는가?
기본적으로 32바이트씩 잘라서 보면된다.

상단의 2개의 덩어리는 Directory, 하단의 큰 두개의 덩어리는 각각 LFN 구조인 File 2개이다.
하단의 파일을 우선 복구해보자
이름의 1번째 바이트가 E5가 아니니, 삭제된 파일은 아니다. 또한 Attribute가 0x20인 것으로 보아 File이다. File의 Low cluster의 정보는 0x0382(litte endian)이고, 크기는 0x40DFCA (byte)이다.

Root Directory : 8255 sector
Low Cluster : 0x0382 : 898
Size : 0x40DFCA
값은 다 준비되었으니 계산해보자.
File의 시작 주소 : Root Directory + (Low Cluster - 2) 8
File의 끝 주소 : Root Directory + (Low Cluster - 2)
8 + Size

2를 빼는 이유는, 앞 서 FAT#1 영역을 살펴보았듯 2개의 클러스터가 시스템 영역으로 예약되어 사용 중이기 때문이다.

값을 대입해본다면, File의 시작 주소는 15423 Sector가 나옴을 확인할 수 있다.

PDF의 Signature도 확인할 수 있으니 잘 찾아 온 것 같다. 그렇다면 시그니처를 시작점으로, File의 Size만큼을 복사해서 새로 파일을 만들면, 복구는 끝이 난다.

PDF 파일이 잘 열렸다. 복구 끝.

(Winhex 구간 지정 단축 키 : Alt + 1, Alt + 2 )


NTFS

(작성중)

post-custom-banner

0개의 댓글