Digital Forensics/File System

#3 MBR - 파티션 테이블 복구

geunyeong 2022. 1. 2. 19:23

Table of Contents

    Abstract

    본 글에서는 지워진 파티션 테이블 엔트리를 복구하는 법을 알아본다. 먼저 디스크 이미지 내에서 사라진 파일 시스템과 해당 파일 시스템의 BPB(Bios Parameter Block)에서 볼륨의 크기를 알아낸 후 이를 통해 파티션 테이블 엔트리에 적절한 값을 채워넣는 방법을 서술할 것이다.

    Recovering a Partition Table

    Scenario

    4GB 크기의 VHD를 만들고, 2040MB 크기의 파티션과 FAT 볼륨 2개를 생성했다. 그리고 두번째 FAT 볼륨이 위치한 파티션을 가리키는 파티션 테이블 엔트리를 모두 삭제했다. 이제 두번째 파티션을 복구해보자. 예제 이미지 파일은 아래 링크에 있다.

    https://drive.google.com/file/d/1mT2bMXzMWXncdNK_eLs1C6LZmk3jrlPZ/view?usp=sharing

    Example of Partition for Recovering

    MBR Partition Table

    MBR의 파티션 테이블에 대한 내용은 아래 링크를 참조하자.

    • #1 MBR - Master Boot Record
    https://geun-yeong.tistory.com/67
    • #2 MBR - Extended Partition Table
    https://geun-yeong.tistory.com/68

    Find a Hidden or Removed Partition

    먼저 삭제된 파티션의 정확한 시작 섹터를 알아내야 한다. 파티셔닝만 한 것이 아니라 파일 시스템도 적용했다면 파일 시스템의 VBR이 해당 파티션의 시작 섹터에 존재할 것이다. 본 글에서는 FAT VBR의 부트 코드 일부와 시그니처를 사용해 Binwalk로 찾았다. 이러한 VBR을 찾는 과정은 개인이 편한 방법을 사용하면 된다.

    FAT VBR의 0 바이트 오프셋부터 3바이트 크기의 데이터는 FAT의 VBR로 점프하는 JMP 인스트럭션이 존재한다. 이를 헥스 스트링으로 표현하면 "EB 3C 90"이 된다. FAT의 VBR 구조를 다루는 건 본 글의 주제에서 벗어나므로 설명하지 않겠다. 3바이트의 JMP OP코드 후 OEM 이름으로 MSDOS5.0이라는 문자열이 이어진다. 아래 그림은 FAT의 VBR 일부이다.

    FAT VBR의 JMP Code와 문자열 시그니처

    이러한 특징을 사용해 Binwalk로 찾아보면 아래 그림과 같이 2개 결과가 나타난다. 첫번째 결과는 첫번째 파티션에 적용된 FAT이고, 두번째 결과가 사라진 두번째 파티션에 적용된 FAT다.

    Binwalk로 찾은 FAT VBR

    Recovering a Partition Table Entry

    파티션 복구에 필요한 파티션 테이블 정보는 아래와 같다. CHS 값은 필수가 아니다.

    • 부트 플래그: Optional, 부팅 가능한 볼륨이라면 설정하면 된다. 하지만 데이터 복구 용으로 파티션을 복구하는 거라면 굳이 설정할 필요는 없다.
    • 파티션 타입: 해당 파티션에 적용된 파일 시스템 종류를 지정한다.
    • 시작 LBA: 파티션 시작 섹터의 LBA 값을 의미한다.
    • 파티션 크기: 섹터 단위의 크기를 의미한다. 

    부팅 가능한 볼륨은 아니므로 부트 플래그는 0으로 설정한다.

    FAT 볼륨이므로 파티션 타입 값은 0x0E 값을 넣는다.

    시작 LBA는 두번째 FAT VBR의 시작 바이트 오프셋이 0x7F900000이므로 섹터 크기인 512로 나눈 값 4,179,968(0x3FC800)이 된다.

    FAT 볼륨의 크기는 FAT VBR을 분석해 알 수 있다. 앞서 말했듯 FAT VBR 분석은 본 글의 주제를 넘어서므로 아래 그림의 위치가 해당 볼륨의 섹터 바이트 크기, 볼륨이 가지는 전체 섹터 개수를 의미한다고만 알아두자. 섹터 크기는 512(0x200) 바이트, 전체 섹터 개수는 4,177,920(0x3FC000)으로, 볼륨의 크기는 둘을 곱한 2,139,095,040 바이트(2040 MB)다. 섹터 개수인 0x3FC000을 파티션 크기로 지정한다.

    Sector Byte Size and Total Sector Count in Removed FAT VBR

    이제 앞서 구한 값들을 주 파티션 테이블의 두번째 엔트리 영역에 작성한다.

    Recovered Primary Partition Table Entry

    Boot Partition Type Start LBA Size in Sector
    0x00 0x0E 0x003FC800 0x003FC000

    파티션 테이블 엔트리를 복구하고 FTK Imager로 열어보면 FAT 볼륨이 올바르게 인식되는 걸 볼 수 있다. VHD이므로 Windows에 마운트하면 해당 볼륨이 잘 Attach되는 것도 확인할 수 있을 것이다.

    Recovered Volume

    Close

    이상으로 MBR 파티션 테이블을 복구하는 법을 알아봤다. 좋은 디스크 포렌식 도구는 MBR 파티션 엔트리에 내용이 없어도 VBR을 통해 자동으로 숨겨진/삭제된 볼륨을 찾아 보여주긴 하지만 분석 PC에 마운트 해야하는 등 MBR 파티션 복구가 필요할 수 있다. 파티션 테이블 복구를 통해 파티션이라는 개념을 이해하는 데 큰 도움이 됐으리라 생각한다.

    'Digital Forensics > File System' 카테고리의 다른 글

    #3 GPT - GPT 복구  (0) 2022.01.08
    #2 GPT - GUID Partition Table (2)  (0) 2022.01.08
    #1 GPT - GUID Partition Table (1)  (0) 2022.01.06
    #2 MBR - Extended Partition Table  (0) 2022.01.02
    #1 MBR - Master Boot Record  (3) 2021.12.26