FORENSIC

[문제풀이-NTFS]170320_서트워게임 Damaged USB(150)

pong-pong 2017. 3. 20. 17:35



< 문제 풀이>


주어진 이미지는 USB의 이미지 이다. 


이 이미지는 NTFS 파일 시스템을 가지고 있다. // 참고1) NTFS 이미지 파일의 구조


 

USB를 인식하기 위해서는


MBR의 Partition Table이 파티션의 위치를 잘 가리키고 있고,


해당 (NTFS)파티션의 VBR이 MFT를 잘 가리키고 있어서,  


MFT와 DATA영역을 읽어들여야 


해당 이미지 파일에 어떤 파일이 들어있는지 파일 구조를 볼 수 있다.


((그림))

  MBR ---> VBR --->MFT

   ---> VBR --->MFT



USB를 마운팅 했을 때,  unallocated area로 읽히면  


파티션부터 제대로 인식되지 않는다는 것이다.  

( ENCASE에서도 partiton finder을 이용해서 VBR의 시그니쳐="   NTFS"를 검색하고 'add partition'을 눌러 추가해 주었었다.) 


따라서, MBR의 Partition table를 제대로 수정을 해 주어야 한다.


※부팅과 마운팅의 차이점


부팅은 운영체제가 설치되어 있는 파티션에서 꺼져있는 


마운팅은 이미 부팅되어 있는 시스템 파일 시스템을 읽어들여서 파일 내부 구조를 볼 수 있는 것을 말한다.











MBR은 맨 첫 번째 섹터에 있는 영역인데(크기 : 0x200), 없는 것으로 보인다. // 참고 2) MBR의 구조


부팅을 할 것은 아니므로, Partitoin Table만 추가를 해주면 된다.  // 참고3) 부팅과 마운팅이란.





Partitoin Table에는 VBR 영역(크기 : 0x200+추가코드 조금)의 시작주소를 찍어야 하는데, 


VBR은 백업 형태로 맨 아래에 한 번 더 저장되어 있다. // NTFS - VBR





VBR에서는 MFT를 상대주소지정방식으로 찍기 때문에 // NTFS - MFT


MFTStartingAddr= VBRStartingAddr + ( "StartOfMFT" * SizeOfCluster(0x10000) ) 


VBR backup을 올바른 위치에 위치시켜야 한다. 안그럼 백업파일이 있는 주소를 기준으로 MFT를 읽으려고 시도한다.





VBR은 보통 정해진 위치에 있는경우가 많고, 


이 문제의 경우에는 힌트로 0x1000주소에 NTFS가 잔뜩 들어있다.


혹은, $MFT를 유니코드로 검색한 후, 


MFT mirr가 아닌, 진짜 MFT의 주소로부터 VBR을 위치시켜야 할 값을 역으로 찾는다.


VBRStartingAddr = MFTStartingAddr - ( "StartOfMFT" * SizeOfCluster(0x10000) ) 


이 위치에 ctrl + B 해주면 된다.





그러면 FTF imager을 통해  열 수 있고,  


삭제한 파일과 삭제되지 않은 파일은 


현재 시스템에 마운팅 시켜보면 알 수 있다.



"hidden_key_picture.png"가 삭제되지 않은 파일이고 답이지만 키를 알 수 없다.


hidden key라고 하는 것을 보니 스테가노 그라피인것 같다. // 참고 4) 테가노그라피란



스테가노 그래피 툴 OpenStego를 받아서 키 값을 받으면 된다. // https://github.com/syvaidya/openstego/releases


키 값은 :  HS_{I_LIKE_HORROR_MOVIE}



CF) HxD를 관리자 권한으로 열면 현재 내 컴퓨터의 하드디스크나 메모리의 값을 HEX로 볼 수 있다. -->실습가능



참고 블로그 )) 

NTFS 구조 따라가기 실습 : http://ezbeat.tistory.com/405


삭제된 데이터 복구 // http://jmoon1601.tistory.com/86


삭제된 파일복구 자체는 상용화된 툴이나 오픈소스를 이용하는것이 편하다


MBR 파티션 구조 설명 자세하게 : http://hyd3.tistory.com/124

 




※ Partiton Table에서 LBA address는 상대 클러스터 지정 방식으로 되어있다. 




※ NTFS에서 주소를 가리킬 때는 


절대(이미지 전체에서 몇번째 Sector or Cluster)방식과 

상대 (해당 영역의 시작주소 + Sector of Cluster)방식이 있다. 


클러스터의 경우 = 곱하기 0x10000 ( Sector per Cluster가 8개인 경우)

섹터의 경우 = 곱하기 0x200 하면 된다. 





 참고 ))

 MFT mirr은 4섹터만 저장된다.


 





---------------------------------------------------------------------------------------------------------------------------------------


<문제를 풀면서 스스로 한 추론>


여러사진의 파편이 있을것으로 예상.

사진파일은 JPEG, PNG, GIF 등이 있고 - 이미지 파일의 종류?


여러장의 이미지중, 삭제하지 않은 한 이미지를 찾는것이 중요.

-> 삭제되지 않았으면 MFT가 그대로 있을테니, MFT가 남아있는 파일을 찾으면 되지 않을까?



인식이 안되는 이유는 

-> 파일 시그니쳐가 없다. MFT는 있으려나. 시그니쳐로 검색을 해봐야겠다.


---------------------------------------------------------------------


파일디거로 찾아보니 많은 JPEG랑 PNG가 있다.

파일 자체에 삭제여부는 없을테니,


MFT에서 찾아야 한다.




NTFS로 꽉찬 파일 하나를 보니짤리지 않고 잘 들어가있다. 

아마 0x1400 = 5120 바이트만큼이 클러스터 크기인가 보다. 

이건 출제자가 일부로 힌트를 주려고 바이너리를 조작한 것이다.



0x800(2048바이트)만큼이 밀려있는것 같다.




hint )) MBR과 VBR을 공부하시오 



카빙이라는 기법은 파일시스템 메타데이터가 없을때(덮어써졌을때) 복구하는 방법입니다. 따라서, 파일명을 알 수가 없기 때문에 도구마다 각자의 방법으로 파일명을 생성합니다. 






MFT Entry Header 구조



Q. 부팅 = 마운팅? 

A. 부팅은 운영체제가 설치되어 있어서 윈도우즈에서 

마운팅은 이미지파일 혹은 디스크의 파일 구조를 볼 수 있도록 뷰어로 여는것??


내생각 ) 마운팅 시킬 땐, 부트코드가 필요없고 그냥 파티션 테이블만을 읽어들이는것 같다.