Forensic/포렌식 공부

[디스크 복구] MBR과 BR영역이 모두 손상된 파티션 복구

Ron Weasley 2022. 8. 11. 02:31

*지금부터 작성을 하는 공부들은 악용을 할 시 법적인 책임을 질 수 있으니 공부 용도로만 쓰길 바랍니다.

 

이번에 배울 것은 MBR영역과 VBR(Volume Boot Record), 파티션 시작 위치(BR)을 모두 특정 데이터로 덮어씌워 부팅이 불가능하도록 한 악성코드에 감염되었을 때 복구 하는 방법입니다.

 

복구를 진행하는 단계를 살펴보겠습니다.

1. MBR, VBR의 위치 확인
2. MBR, VBR 복구
3. 복구된 MBR과 VBR을 원래의 위치로 복사

실습파일인 vmdk를 가상머신으로 실행을 시키면 부팅이 정상적이지 않는 것을 볼 수 있습니다.

복구를 위해 vmdk를 hxd 에디터로 열어 보겠습니다.

근데 우리가 디스크를 보통 열어보면 MBR영역이 나와야 하는데 여기서는 vmdk의 예약영역이 자리 잡게 됩니다. 그래서 vmdk에서 MBR영역을 보기 위해서는 FTK Imager로 열어서 파티션을 누르면 vmdk 예약 영역을 제외한 파일 시스템 정보만 볼 수 있습니다.

참고, vmdk 구조에서 0x40~0x41은 메타 데이터의 시작 위치임. 즉, MBR이 시작하는 주소 0x2880인것을 기억!!

MBR영역이 다 손상이 된 것을 볼 수 있습니다. 그래서 문자열인 [HASTATI]가 더 감염된 곳이 있나 확인을 해보겠습니다.

조금 떨어진 0x100000 오프셋에 손상된 영역이 보이는 것을 확인할 수 있었습니다.

또 0x6500000 오프셋에 손상된 영역이 1개 더 보입니다. 그럼 여기까지 분석 결과를 적어놓겠습니다.

MBR영역 : 0x000000000 offset
1번 파티션 시작 주소 : 0x000100000 offset
2번 파티션 시작 주소 : 0x006500000 offset

이제 MBR의 영역을 확인하여야 하는데 먼저, MBR을 복구하려면 정상적인 MBR이 필요합니다.

정상적인 MBR을 하나 가져오기 위해 가상 디스크를 하나 만들겠습니다. 만들고 난 후, 파티션 정보만 00으로 값을 씌워줄겁니다.

임의의 디스크를 하나 만들고, 이제 파티션 정보가 들어있는 64Byte만큼 0으로 채우겠습니다.

이 MBR을 가지고 이제 파티션 복구를 해보겠습니다.

복구 하려는 하드디스크는 OS가 설치된 시스템이므로 부팅 여부를 결정하는 부팅 플래그에 [0x80]으로 설정을 해줍니다.

이제 나머지 정보를 완성해보겠습니다.

FTK Imager로 열어서 1번 파티션 시작 위치의 섹터를 보겠습니다.

2,048 섹터 영역에서 확인이 가능합니다. 파티션 BR영역을 복구 하기 위해서는 부팅 여부, 파티션 타입, 시작 주소, 총 섹터 수만 파악하면 되기 때문에 바로 1번 파티션의 정보를 알아보겠습니다. 6번째 섹터에 BR 백업이 존재하지 않기 때문에 NTFS 파일시스템인 것을 확인할 수 있었습니다. 또 다른 방법은...MFT를 검색하는 것입니다.

그럼 파티션의 시작 주소는 2,048 섹터인 것을 확인할 수 있으니 마지막으로 총 섹터 수만 확인하면 됩니다.

파티션의 백업본이 저장되어 있는 NTFS 파일 시스템의 시그니처를 검색해보겠습니다.

[EB 52 90 4E 54 46 53] 을 검색해보겠습니다. 검색을 하다보면 여러개가 나오지만, 2번 파티션이 시작하는 영역인 206,848섹터 앞에 206,847섹터에 백업본이 존재하는 것을 확인할 수 있었습니다.

그럼, 계산을 해보겠습니다.

총 섹터 수 = (206,848 - 2,048) + 1 = 204,800섹터 입니다. 1을 더해주는 이유는 섹터가 0부터 시작하기 때문입니다.

파티션 타입 : 0x07 (NTFS)
시작 주소 : 2,048 섹터 (0x800)
총 섹터 : 204,800 섹터 (0x32000)

이것을 토대로 1번 파티션 정보를 복구 해보겠습니다.

두번째도 같은 방법으로 복구하면 되니까 과정은 생략하겠습니다.

파티션 타입 : 0x07 (NTFS)
시작 주소 : 206,848 섹터(0x32800)
총 섹터 :  83,677,184 섹터 (0x04FCD000)

복구된 MBR은 이런 정보를 가집니다. 이제 vmdk에다가 덮어씌워주기만 하면 됩니다. 

10,368 섹터에 MBR 정보를 덮어씌워주고 10,496섹터가 1번 파티션 영역, 15,616섹터가 2번 파티션 영역입니다.

물론, 파티션에는 백업본을 덮어 씌우는 것입니다. 다 복구를 하면, 정상적으로 파일이 열리게 됩니다.

하지만, 여기서 MBR 구조에서 하드디스크 별 고유 GUID가 존재하기 때문에 레지스트리에 SYSTEM 하이브 파일을 확인해야 합니다. 왜냐면 제가 임의로 가상 디스크를 만들었기 때문입니다. GUID를 찾는 이유는 파일 자체는 잘 보이더라도 부팅이 잘 안되기 때문입니다. 레지스트리 경로는 다음과 같습니다.

FILE PATH : Windows\System32\config\

추출한 하이브 파일을 가지고 GUID를 찾아 보겠습니다.

78 6D EF가 있습니다. 그대로 MBR에 옮겨주겠습니다.

여기까지 하면 정상작동이 되어야 하지만...실습 파일이 문제가 있는지 부팅이 되질 않네요...그래도 파티션 내부에 파일들을 확인한 것으로는 정상복구를 한 것으로 볼 수 있습니다!!

 

-Reference-

Start Up 디스크 포렌식