진짜 개발자
본문 바로가기

Security

보안 - 디스크 포렌식 실습 -삭제된 파일 복원, FAT32 구조 파악 (FAT 32)

728x90

MBR과 FAT 구조를 알면 쉽다 

MBR 구조 - http://galid1.tistory.com/56

FAT 32 구조 - http://galid1.tistory.com/159


시나리오

1. 가상의 디스크 파일을 하나 준비한다

2. 해당 디스크파일에서 삭제된 파일들을 복원한다.


가상 디스크파일 만들기

하드디스크 및 파티션 -> 동작탭 -> VHD 만들기 -> VHD 분리


과정


1. 가상 디스크 파일 만들기


하드디스크 및 파티션만들기로 들어가 VHD 만들기를 선택한다.


Test.vhd를 만든다


1GB 크기로 지정 


생성된 디스크2를 MBR로 초기화 한다.


디스크 파티션이 완료되었다.


생성된 파티션에 각각 파일들을 넣고 조금 기다린 후 지운다 (생성후 바로 지운다면 포렌식이 남지 않을 수도 있다.)


작업이 완료된 가상 디스크 파일을 분리한다


만들어진 가상 디스크 파일이다.


2. MBR 정보 파악


   1) Hexedit에 디스크 이미지 넣기


 Hexedit 을 실행하여 기타설정탭의 디스크 이미지 열기를 누른다


준비한 가상 디스크파일을 추가한다.


    2) MBR 파악


   *MBR 데이터구조

범위 (Byte Range)

설명 (Decription)

크기 (Size)

10 진수

16 진수

 0 – 445

 0x0000 – 0x01BD

 Boot code

 446 bytes

 446 – 461

 0x01BE – 0x01CD

 Partition table entry #1

 16 bytes

 462 – 477

 0x01CE – 0x01DD

 Partition table entry #2

 16 bytes

 478 – 493

 0x01DE – 0x01ED

 Partition table entry #3

 16 bytes

 494 – 509

 0x01EE – 0x01FD Partition table entry #4 16 bytes
 510 – 511 0x01FE – 0x01FF Signature (0x55AA) 2 bytes


445 Byte까지 Boot Code 영역이다


 3) 파티션 테이블 파악


       *파티션 데이터 구조




446 Byte 부터 16Byte 씩 하나의 파티션에 해당한다 

우리는 2개의 파티션만을 했으므로 446Byte 부터 16Byte씩 2개의 영역만을 파악하면 된다



LBA Address는 해당 파티션의 파일시스템 BR이 시작하는 Sector 주소를 의미한다

첫번째 파티션의 LBA : 0x 00 00 00 80 => 128 Sector

두번째 파티션의 LBA : 0x 00 10 00 80 => 1,048,704 Sector


계산된 LBA 주소를 10진수로 바꾸면 Sector의 위치가 나온다 

(Sector : 128)


계산된 LBA 주소를 10진수로 바꾸면 Sector의 위치가 나온다 

(Sector : 1048704 Sector)


3. FAT32 파일시스템 구조 파악





1) BR 분석


 128 Sector로 이동하면 해당 파티션의 시스템파일의 BR이 나온다

 

11 12 번째 바이트는 섹터당 바이트수를 의미한다

(0x 200 = 512 Byte)


13번째 바이트는 클러스터당 Sector를 의미한다

(0x08 = 8Sector)


14 15 번째 바이트는 예약된 영역(Sector 단위)을 의미한다

(0x18 0E = 6158 Sector)


37번째 바이트부터 4바이트는 FAT 32의 사이즈를 의미한다.

(0x3F9 = 1017 Sector)

 

2) Root Directory 위치 구하기


RootDirectory Addr = BR + Reserved + FAT1 + FAT2

(128 + 6158 + 1017 + 1017 = 8320 Sector)



8320 Sector로 이동하면 해당 파티션의 RootDirectory Entry가 보인다


3) Root Directory 분석



2줄씩 하나의 파일에 대한 Root Directory 데이터 이다.



*1번째 파일 

1) 파일의 위치

다음의 2바이트는 다음 파일이 위치한 오프셋이다 

클러스터 단위이며 시스템에서 2개의 클러스터는 사용한다

(Cluster = 0x0006 - 2(10진수) => 4(10진수)


오프셋 = (6-2) * 8

(클러스터당 8개의 섹터로 이루어져 있으므로)


파일의 위치 = 8320 + 32 = 8352




2) 파일의 사이즈

다음의 4바이트는 파일의 사이즈를 의미 한다

(0x101 = 257Byte)



4) 파일 뽑아내기


우선 파일의 위치로 이동한다(8352 Sector)


우측 마우스 클릭하여 블록선택을 누른다


오프셋 종료를 -> 길이로 바꾸고 

10진수를 체크한다

그다음 파일의 사이즈를 입력한다


블록 선택된 파일을 복사한뒤 (Ctrl + c)

파일탭의 새로 만들기를 클릭


         새로 만든 파일에 복사한 파일블록을 붙혀넣는다



  

원본 파일의 형식으로 저장한다(Root Directory 정보에 보면 파일의 형식을 찾을 수 있다.)


  

 기존 파일이 그대로 복원 되었다.