본문 바로가기
9. 디지털 포렌식

디지털 포렌식 Sub 4 - 3.20 악성코드 감염 MBR 복구하기

by Robert8478 2023. 12. 14.

실습 파일 - 3.20_MBR_VBR_Recovery.zip 안의 Windows 7.vmdk
목표 - MBR 및 BR 영역이 모두 손상된 파티션 복구

3.20 악성코드는 3.20 특정 시간에 발동되는 악성코드로 MBR 영역을 파괴하는 악성코드로 유명하다.
MBR 영역과 VBR(Volume Boot Record), 파티션 시작위치인 BR을 모두 특정 문자열로 덮어씌워서
부팅이 불가능하도록 만든 악성코드이다.

​복구를 위해 진행하는 단계는 크게 3단계이다.

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

이번에는 가상 이미지를 virtual box나 vmware를 이용해서 사용할 것이다.

vmdk 파일 속성을 보니 버추얼박스를 열고 새로만들기를 한뒤
windows 7으로 맞추고 가상이미지 선택에서 해당 파일을 선택해주었다. 

그렇게 불러오면 MBR이 손상되어서 그런지 FATAL 에러가 나온다. 이 파일을 한번 복구해보자.
HxD로 Windows 7.vmdk 파일을 불러오자.

HxD로 불러왔더니 0섹터 영역이 MBR이 아니라 VMDK 예약 영역이 보여진다.
VMDK를 제외하고 보려면 FTK Imager로 열어야한다.

열어보면 3.20 악성코드의 특징이 보인다. MBR 영역이 모두 HASTATI 라는 문자열로 뒤덮여있다.
밑에 뷰어에서 ctrl+f 로 HASTATI를 검색하면 MBR 외에도 두 영역에서 HASTATI를 찾을 수 있었다.
두 영역은 파티션의 시작 주소임을 추측할 수 있었다.

이제 MBR을 복구하려면 정상적인 OS의 MBR이 필요하다.
실습파일의 MBR_446Byte 파일에 정상적인 OS의 MBR이 들어있다. 이 파일을 사용하여 파티션 테이블을 완성해본다.
복구에 사용할 파일은 MBR영역 512byte에서 파티션 테이블 64byte와 GUID 값을 수정해야한다.
우선 MBR_446Byte를 HxD로 연다.

표시한 곳을 80으로 변경해 ctrl+s로 저장해서 bootable로 변경한다.
이제 나머지 변경할 부분을 FTK Imager 에서 원본을 열어 찾아야한다.

아까 열어두었던 FTK Imager에서 HASTATI를 검색해서 파티션 타입(시작 위치)인 두번째 영역으로 넘어간다.
밑의 상태표시줄에 phy sec=2048 가 보일텐데 이는 2048 섹터 영역이라는 뜻이다.
첫번째 검색할때 나오는 0섹터가 MBR 영역이므로 두번째 영역인 이곳이 첫번째 파티션 시작 위치이다.

첫번째 파티션을 복구하기 위해서는 부팅가능 여부와 파티션 타입 확인 및 시작주소, 총 섹터 수를 확인해서 파티션 테이블 16byte와 손상된 BR영역을 복구시켜 주어야 한다.

1)파티션 타입 확인 - FAT32냐 NTFS냐 확인하는것이 보통인데 시작주소에서 6번째 뒤에 BR 백업이 있다면 FAT32, 없다면 NTFS라고 볼수 있다.


ctrl+s를 누르고 6번째 다음 섹터임 2054를 넣고 ok를 누른다.
확인해본 결과 BR 백업본이 없으므로 NTFS (0x07)다

2)파티션 시작주소 확인 - 파티션 시작주소를 확인하는 것은 두가지 방법이 있다.

위의 phy sec 값을 확인하거나 옆에있는 000100000 값을 확인해본다. 영역의 주소가 0x100000임을 의미하는데
섹터단위로 이동하게 되므로 16진수로 표현된 값을 섹터단위로 변환해준다.
변환법은 0x100000 / 0x200 으로 나누어주면 = 0x800이 된다.
즉 첫번째 파티션 시작 주소는 0x800이다.

3)파티션 총 섹터 수 확인 - 총 섹터 수는 세번째로 검색되는 HASTATI 영역인 206848 섹터로 넘어간다.

NTFS의 경우 BR영역 백업본이 파티션의 가장 마지막에 저장되는 특성 때문이다.
즉, 206848 바로 위 섹터에 BR 백업본이 있는것이다.

206847 섹터에 NTFS 가 써져있다.
총 섹터의 개수는 두번째 파티션 시작주소인 0x6500000 - 첫번째 파티션 시작주소 0x100000 에 / 0x200을 해준다. 그러면 0x32000 값이 나온다.
이제 206847 섹터 내용을 모두 긁어서 ctrl+h 로 hex 복사한 뒤 HxD 에디터에서 새로만들기 후 ctrl+v로 붙여넣고 저장해준다. 파일명은 partition1 로 지정해주었다. 이 정보를 이용해 MBR_446Byte 의 정보를 수정해서 파티션1을 완성하는 것이다. 또한, 파티션 시작주소, 총 섹터수와 같은 얻어낸 정보들을 보관해 두자.

그러면 이제 파티션 2,3,4도 같은 방식으로 하면 된다.

두번째의 경우 206848 섹터에 두번째 BR 정보를 찾을 수있었다. 
0x6500000 / 0x200을 하면 0x32800 값이 나온다.
그리고 6섹터 뒤에 br 백업정보가 없으므로 ntfs다

이제 총 파티션 개수만 알아내면 되는데 첫번째는 두번째 파티션이 있어 총 섹터갯수를 알아냈지만
두번째는 마지막 파티션인데 어떻게 알아내야 할까?
이럴때는 BR의 시그니처 기반으로 백업본 위치를 찾으면 된다.
단, 512 Byte 안에 들어와야 한다.
FTK Imager의 경우 가는 실선으로 512byte 단위로 구분되기 때문에 실선 사이에 512byte가 들어와야한다.
NTFS의 BR 시그니처 값은 [EB 52 90 4E 54 46 53] 이다.
해당 시그니처 값을 통해 시스템의 마지막 영역에서부터 검색하면 두번째 파티션 총 섹터 개수와 BR 백업본을 알 수 있다.

ctrl+f 로 검색 시 binary 에 체크하고 hex값을 검색해서 찾아내자.
스크롤을 맨 밑으로 내려서 맨 밑으로 내려간 다음에 Up으로 찾아서 맨 처음에 나오는 값을 찾으면 된다.

그러면 0x9ffeffe00 주소 영역에 두번째 파티션의 BR백업본 영역이 나왔다.
이 백업본은 아까처럼 ctrl+h 로 복사해서 HxD에 붙여넣어 주자.
계산은 제일 마지막인 0x9fff00000 - 0x6500000 / 0x200 으로 하면 0x04fcd000 이 나오게 된다.

이제 복구에 필요한 모든 정보를 얻었으니 정보를 토대로 MBR 파티션 테이블에 오프셋별로 입력해서 복구해주면 된다.
HxD에서 열었던 MBR446으로 가자.

80(부팅정보)-00 00 00(chs 시작주소)-07(파티션 타입)-00 00 00(chs 마지막 주소)- 00 08 00 00(BR 시작 주소(2048)) - 00 20 03 00(총 섹터 개수(204800)) 그 뒤 다시 80인 부팅정보가 붙고 나머지도 구한 방식대로 값을 넣어준 뒤 ctrl+s로 저장해준다. 아까 계산했던 값 0x800 과 0x32000 을 Decimal로 변환하면 2048과 204800 값이 나오게 될것이다. 이런 방법으로 채워넣어준다.

이제 복구된 MBR과 BR 백업본을 가지고 복구를 시켜주면 된다.

HxD로 vmdk 파일을 열고 ctrl+f로 HASTATI를 검색해주면 나온다.
10368은 MBR일 것이고 그 다음 나오는 10496이 첫번째 파티션, 15616이 두번째 파티션 영역일것이다.

MBR 영역 -변경했던 MBR_446Byte 영역으로 덮어씌워준다.
첫번째 파티션 - Partition1을 덮어씌워준다.
두번째 파티션 - Partition2를 덮어씌워준다.

그렇게 복구한 뒤 FTKImager로 열면 폴더가 복구된것을 볼 수 있다.

그런데 MBR 구조에서는 하드디스크별 고유의 GUID 값이 부여되는데 이 값이 일치하지 않으면
FTK Imager에서 정상으로 보여도 부팅할때 에러가 난다.
GUID는 MBR 구조의 440~443 오프셋 영역에 저장된다. 이 GUID 정보는 레지스트리 SYSTEM 하이브 파일에서 확인 가능하다.

FTK Imager에서 열 수 있는데 경로는 두번째 파티션에서 root\Windows\System32\config\ 폴더에 저장된다.  SYSTEM 파일을 우클릭하고 export files로 저장해서 추출하여 로컬 PC의 레지스트리에 로드하여 GUID 정보를 확인하자.

regedit을 키고 HKEY_LOCAL_MACHINE 폴더로 들어간뒤 위에 파일을 누르면 하이브 로드가 나온다. 클릭해서 export한 SYSTEM 파일을 클릭하고 키 이름은 320으로 지정하고 저장하였다.

MountedDevices에 밑에서 두번째 DosDevices\C: 라고 된 항목을 더블클릭하고 78 6D EF 00 인 GUID를 복사한다. 이를 MBR에 넣어주면 부팅까지 완벽하게 될것이다.

마크해둔 78 6D EF 00 영역을 변경하면 된다.