-
NTFS - 손상된 NTFS VBR(Volume Boot Record) 복구Digital Forensics/분석하며 알아가는 File System 2020. 2. 11. 23:45반응형SMALL
안녕하세요. Luke입니다.
2022.01. 추가
해당 글은 계획적으로 작성된 글이 아닌 NTFS VBR을 복구하는 문제를 푼 뒤 인상 깊어서 이를 기록에 남기고 싶었기에 작성했던 포스팅입니다. VBR이 무엇인지에 대하여 이해를 하고 싶으신 분께서는 NTFS VBR의 기본적인 구조를 다룬 NTFS - 1 편을 먼저 보고 오시면 이해가 더욱 쉽습니다.
https://weekhack.tistory.com/52
디지털 포렌식을 공부하며 이런저런 블로그를 둘러보던 중 재미있는 실습 문제를 만들어 놓은 글을 발견하여 문제를 풀고 포스팅을 하게 되었습니다.
https://m.blog.naver.com/bitnang/220188735136
NTFS의 Boot Record를 임의로 손상시킨 후 이를 분석하는 형식의 문제로 보입니다. 이는 예전의 CAT-Security에서 주최한 HolyShield CTF 2019에서 본 것과 유사한 문제였습니다.(해당 문제는 NTFS의 BR부분의 첫부분을 NTFS가 아닌 SFTN으로 적어 놓았던 것으로 기억합니다. 이를 복구하면 풀 수 있는 문제였습니다.)
먼저 해당 파일을 받아보도록 하겠습니다.(출처: 위의 블로그의 글의 구글 드라이브입니다. 혹시 파일 다운로드가 되지 않을 경우 댓글로 달아주시면 감사하겠습니다.)
https://drive.google.com/open?id=1ACMQQRLkmnuv2xh99Jr88qejKg6Gv09R
파일을 받은 후 먼저 FTK Imager로 이미지를 열어보겠습니다.
FTK Imager로 열어보아도 파일시스템이 깨져있는지 제대로 안에 들어있는 파일을 인식하지 못합니다. 그럼 다시 FTK Imager를 뒤로 하고, Hxd로 해당 파일을 열어보도록 하겠습니다.
Hxd에서는 디스크 이미지 열기 기능(이미지 파일을 섹터로 나누어서 표시해줍니다.)을 제공하기에, 보편적으로 쓰이는 섹터 크기인 512를 섹터 크기로 지정해 파일을 열어보았습니다.
그럼 다음 그림과 같이 이미징 된 내용이 담기게 됩니다.
그럼 먼저 첫 부분인 0섹터부터 한 번 살펴보도록 하겠습니다. 0섹터에는 뭔가 친숙한 문구가 보이지 않나요?
네 예전에 분석했었던(https://weekhack.tistory.com/43) MBR의 부트코드 영역의 에러메시지가 보입니다. 이로 미루어 보아 해당 이미지는 논리적 파티션을 이미징한 것이 아닌, 물리적 디스크를 이미징 한 것으로 알 수 있을 것 같습니다.
그럼 이전 글을 참고하여 다시 한번 MBR의 구조와 컴퓨터의 부팅 순서에 대해 생각해 봅시다.
이전 글: https://weekhack.tistory.com/43
이전 글에서 설명하였듯이 컴퓨터는 BIOS -> Pre POST -> POST 의 단계를 거치고 MBR을 거쳐 각 파티션의 VBR을 참조하여 부팅을 실시합니다.
그렇기에 먼저 MBR 영역을 조사해보도록 하겠습니다. MBR 영역에서 파티션 테이블을 통해 각 파티션이 몇 개인지, 어떤 용량을 가졌는지, 어느 섹터부터 파티션의 주소가 시작되는지 등등 여러 정보를 알 수 있습니다.
먼저 파티션 테이블의 4개의 파티션 중 첫 번째 파티션에만 데이터가 존재하는 것으로 보아 해당 컴퓨터에는 하나의 파티션이 존재하는 것 같습니다.
부팅은 부트 플래그가 0x80값이 아니기에, 부팅은 불가능한 디스크 인 것 같습니다.
크기는 0x00019000 섹터, 즉 102400 섹터를 가지고 있다는 것을 알 수 있습니다.
또, LBA 주소 지정방식에 따라 해당 파티션의 시작 섹터는 0x00000080 즉, 128섹터 부터 시작인 것 같습니다. NTFS의 처음 부분은 VBR이므로, 해당 파티션의 VBR 주소의 시작은 128섹터 부터라는 것도 역시 알 수 있죠.
그럼 128섹터로 가보도록 하겠습니다.
VBR 영역이 깨져있는 것을 알 수 있습니다. 원래는 0xEB 0x52 0x90 N T F S라는 데이터가 있어야 할 자리에 이상한(?) Disk melong이라는 문구가 있는 것을 알 수 있습니다. 이 때문에 아까 FTK Imager로 열어보았을 때 정상적으로 파일이 존재하지 않았던 것 같습니다.
그럼 이를 어떻게 복구할 수 있을까요?
답은 바로 해당 파티션의 마지막 섹터에 있습니다. NTFS의 경우 가장 마지막 섹터에 VBR의 사본이 존재합니다. 이를 통해 VBR을 복구할 수 있습니다. 그럼 한 번 NTFS의 마지막 섹터로 가봅시다.
마지막 섹터를 계산하는 법은 간단합니다. 먼저 아까 우리가 MBR에서 얻었던 정보들을 분석해 봅시다.
1. 해당 파티션의 시작 섹터: 128 섹터
2. 해당 파티션의 섹터 크기: 102400 섹터그럼 이제 마지막 섹터를 구하기 위한 간단한 계산을 해봅시다.
128 + 102400 - 1 = 102527
102527에 해당 파티션의 마지막 섹터가 존재한다는 것을 알 수 있습니다. 한 번 찾아가 봅시다.
VBR의 사본이 해당 파티션의 마지막 섹터였던 102527 섹터에 존재했습니다. 그럼 우리는 이를 어떻게 해야할까요?
바로 아까 VBR의 원래 섹터인 128 섹터에 복사해서 해당 데이터를 붙여주면 복구가 될 것 같습니다.
해당 데이터를 복사하여 128 섹터에 붙여 넣어 주었습니다.
한번 FTK Imager에 새로운 이미지를 저장한 다음 읽혀 봅시다.
이미지가 복구되어 정상적으로 NTFS 파일시스템으로 인식하고, 안에 들어있는 파일들이 표시됨을 알 수 있습니다. 이미지 파일 복구에 성공하였네요 ㅎㅎ.
NTFS에 대해 공부하던 중 파일시스템을 복구하는 문제가 있어 한 번 풀어보게 되었습니다. VBR을 복구하는 것은 아마 이미지가 손상되었거나, 악성코드가 VBR영역을 훼손하여 이미지 파일에서 증거를 찾는데 어려움이 있을 때에 유용하게 쓰일 수 있을 것 같습니다. 나름대로 오랜만에 디지털 포렌식 실습을 할 수 있어서 좋았던 것 같습니다.
반응형LIST