본문 바로가기

Kitri_NCS3기 보안과정/디지털포렌식

170511 FAT32 복구 실습


실습 1. FAT로 데이터 복구하기


실습으로 주어진 이미지 파일을 열어보니 root directory가 비어있음.

entry를 확인 할 수 없으니 FAT상의 클러스터 정보로 파일을 추출해 보자.



각 색 별로 5개의 파일이 있음을 확인 할 수 잇다. 

root directory의 정보가 없기 때문에 단순히 fat와 클러스터를 매칭시켜 데이터를 긁어서 복구 하는 방법을 사용한다.


FAT에서 파일의 클러스터 시작과 끝정보를 알아내고 데이터영역에 있는 파일을 긁어서 파일로 생성하면된다.


두번째 파일을 예로 들면 

0x28~0x2A의 클러스터 범위를 사용했다.

0x27 = ( 39 -2 ) * 4(sector per cluster) = 148 sector + 8320(root directory의 위치) = 8468 sector에서부터 

0x29 + 4sector = 156 + 8320 = 8476+4sector(자기 자신포함) = 8476+3 = 8479sector까지의 범위를 추출하면 하나의 파일이 나올것이다.


8468sector의 처음 offset과 8479sector의 마지막 offset을 알아두면 블록설정에 편하다.


8468sector 처음 offset : 422800

8479sector 마지막 offset : 423fff


HxD에서 화면에 오른쪽 클릭하면 블록선택 기능을활용할 수 있다.

블록 설정후 새로 파일을 만들어 .jpg로 저장 (jpg의 이유는 처음 시작부분에 PNG, JFIF등의 그림파일 정보를 확인 할 수 있다.)


복구된 파일의 모습.




실습 2. VBR 손상, 백업 손상 FAT 손상 복구


손상 영역 


VBR1

Byte per sector 

Sector per Cluster

Reserved sector

Hidden Sector ( MBR에서 확인가능한 부분이라 찾을 수 있다. )

Total Sector

FAT size 32 의 구역이 변조됨.


FAT32의 경우 +6sector 뒤에 VBR의 백업이 있다. 확인해보자



VBR.bak


Byte Per Sector, Hidden Sector 값이 살아있는걸 확인.(별로 중요한 값들은 아님)


FAT#1

FAT영역은 Hidden + reserved 로 찾을 수 있었는데 지금 Reserved 영역에 대한 값은 FF로 변조된 상황이다. 

필자는 FAT영역을 FFFF0F 로 EOC(End Of Cluster) 값을 이용해 찾았다.


검색하다 보니 뭔가 굉장히 FAT 처럼 생긴 부분을 발견함. 

(좀 야매같지만 이것도 하나의 방법이니까..? 계산으로 구할수 잇는 방법이 있으면 댓글좀 달아주세요)


FAT의 시작 섹터를 파악하기 위해 위로 올려보니 CC로 변조되있는 끝부분을 발견했다. 


어쨋든 FAT#1 의 시작섹터는 8406



복구 작업


복구해야할 곳은 


VBR 

1. Sector Per Cluster

2. Reserved Sector

3. Total Sector

4. FAT size 32


FAT#1

1. CC로 변조된 상위 6sector 



FAT를 찾아가면서 Reserved Sector영역과 FAT size는 알아 낼수 있었다.


현재 FAT #1 = 8406 인데 이 값은 128 + reserved = 8406이므로 reserved sector = 8278


2. Reserved Sector : 8278 Sector(완료)


FAT Size는 FAT2의 시작 위치를 알아내면 될것이다.


FAT#1 로추정되는 시작 위치 와 변조된 내용을 확인했었다.  FAT2를 찾아서 내용이 보존되어 있는지 확인해봐야한다.



끝나는 부분부터는 FAT의 내용이 이어지고 있다. FAT에서는 다음 클러스터의 주소를 가리키는 값이 아니면 EOC밖에 사용하지 않기 때문에

내용에 대해 고유값의 특성이 강하다. 같은 배치 같은 모양이라면 아마 FAT2 에서도 해당하는 위치를 일치시켜 찾을수 있을 것이다.

검색 ㄱㄱ


같은 값으로 윗값이 살아있는 부분을 발견했다.

복붙해서 FAT의 변조된 부분을 복구하자.



CC로 변조된 상위 6sector



 FFFFFF8은 FAT의 midea type을 정의하는 시그니쳐이다. 여러정황상 FAT의 시작부분이 맞는듯하다.

그렇다면 FAT#2 의 시작위치는 12459이고 12459-8406 = 4053


4.FAT size 32 = 4053 sector를 알아낼 수있다.



1.Sector per Cluster는 직접 클러스터를 파악해 봐야 한다.


Root Directory에서 가장 처음의 파일 Entry(cluster0 과 1 말고) 를 보고 클러스터의 시작을 찾아가서 그 바로 위!

(partition state가 있는 자리. 얘는 어차피 하나의 클러스터만 먹기 때문에 그거만 보면 Sector per Cluster를 파악 할 수 있지 않을까 ?)

다시 말하면 partition state를 찾기 위해 그다음 클러스터에 올 파일의 entry를 보고 찾아 가자는 것. 이 방법은 cluster 1이 하나의 클러스터만 먹는다고 가정했을 경우에만 효용 될 듯하다.




entry에 기재된 파일의 first cluster high/low를 찾아가는 과정에서 cluster 값을 2/4/8 중에 대입시켜보는것.

(FAT32의경우 기본적으로 sector per cluster의 포맷이 8이된다고 하니 8부터 넣어보자)

Root Directory는 Hidden + Reserved + FAT#1 + FAT#2 에 위치해있다.



LFN의 형태를 띄고 있는데 SFN에서 first cluster high 와 First cluster low 값을 보고 가자 

0x5 클러스터 부터 사용한다고 되있는데 


(5-2)*(2 or 4 or 8) + root directory를 하면 ... 그 파일의 위치가 나오면 정답.

cluster를 4 곱해 보았더니 PDF 머시기하는거 보니 파일에 대한 헤더정보 같다. 

이런식으로 cluster가 4임을 유추


1.Sector per Cluster = 4


파일헤더 정보만으로 시작인지 아닌지 알수 잇는 경우가 아닐 경우에 + cluster1(partition state)가 하나의 클러스터만 사용할 경우.

cluster2의 주소를 유추해 찾아가 cluster 1까지 올라간다. 

cluster1 에서부터 다음 cluster2가 시작하는곳까지 섹터를 하나하나 센다.


3.total sector는 MBR의 partition table 마지막 4byte로 알 수 있다.


0x1FE8이 total sector값이다. 고대로 갔다쓰면됨


3.total sector= 00 E8 1F 00



1.Sector per Cluster = 4

2.Reserved Sector = 8278 Sector

3.total sector = 00 E8 1F 00

4.FAT size 32 = 4053 sector

알아낸 값을 이용해 VBR을 복구시킨다.




복구된 파일 확인 가능