## What is $MFTMirr? $MFTMirr는 단어에서도 유추할 수 있듯 MFT의 백업본을 의미한다. 백업 파일을 하나의 메타데이터 파일로 보존해 놓는 것이다. 전체 MFT를 보관하는 것은 아니고, MFT Entry에 해당하는 영역만 저장하여 $MFTMirr 파일의 $DATA 속성에 저장해 놓는다. 이걸 이용한 문제 해결능력을 주로 디지털 포렌식 전문가 2급 시험에서 많이 다루곤 하는데, 이 글을 읽고 나면 완벽하게 풀이할 수 있을 것이다. $MFTMirr 파일에 대해서 알아보자 :) ## Why is $MFTMirr important? NTFS 파일시스템에 있어서 MFT의 중요성은 [[$MFT 1]] 를 공부하면서 자세히 알아보았을 것이다. 그렇다면 하필 딱 $MFT부분에 오류가 생겨 파일 위치를 알수 없게 된다면 어떻겠는가? 혹은 $LogFile이나 $Boot 같은 초반부에 고정 할당된 메타데이터 파일이 훼손되는건? 아주 작은 오류나 데이터 변화로 인해 시스템이 정상적으로 작동하지 않는 현상을 목격할 수 있다. 이런 문제를 해결하기 위해 NTFS파일시스템에서는 시스템의 부팅에 중요한 메타데이터 파일들이 있는 MFT엔트리 초반부에 대해서 백업본을 생성해 놓은 것이다. 즉 사소한 오류로 인해 시스템 운용에 문제가 생기더라도, 백업본의 존재로 인해 정상 구동시킬 수 있다는 것이다. 실제로 부팅 시에는 $MFT에 문제가 있어 정상적인 부팅이 불가능할 때 시스템은 $MFT를 참조하는것이 아닌 그 복사본의 위치인 $MFTMirr의 값을 참조하며 이후 그 값을 원래 $MFT의 자리에 복원하는 절차를 갖는다. ## Structure of $MFTMirr 구조에 대해 알아보기 전에 구체적이며 정확하게 어떤 내용에 대한 백업을 하고 있는지 알아보자. 먼저 가장 일반적인 경우로 클러스터의 크기를 4KB로 할당하는 경우는 0-3번 엔트리인 $MFT, $MFTMirr, $LOGFILE, $VOLUME을 저장한다. 누가 봐도 중요해 보이는 파일들 아닌가? MFT와 파일의 트랜잭션(수정,생성,삭제)를 다루는 $LOGFILE, 파일시스템 내부의 볼륨 구조를 저장하는 $VOLUME이다. 이 4개만 저장하는 이유는 바로 저장 공간의 한계이다. 백업본을 많이 저장하면 더 다양한 손실에 대한 대비를 할 수 있겠지만, 저장 공간을 효율적으로 사용하기에는 좋지 않은 선택이다. 그래서 최소한의 데이터만을 저장하고 있다. 다른 경우는 클러스터의 크기가 4KB와 다른 경우이다. 주로 4KB보다 큰 경우를 지칭하는데, 이런 경우는 하나의 클러스터에 저장될 수 있는 만큼의 데이터를 저장한다. 다르게 설명하긴 했는데 결국은 하나의 클러스터에 저장할 수 있는 만큼의 데이터를 저장한다는 것이다. MFT 엔트리 크기는 1KB이기 때문이다. 그럼 이제 예시를 통해 그 구조를 알아보도록 하자. 아래 사진은 $MFTMirr의 얘시이다 ![[Untitled 9.png]] 일반적인 하나의 속성처럼 보인다. 0x80오프셋 자리를 봤을 때 Flag값이 1로 설정되어 있으므로 이는 Non-Resident 속성임을 알 수 있다. 따라서 0xC0 오프셋의 Run List 정보를 보면 클러스터의 오프셋을 획득할 수 있다. (0x2000) 위치를 계산해 이동하면, 바로 그 위치값에 원래 $MFT의 복사본이 존재하는 것을 볼 수 있다. ![[Untitled 2.jpeg]] 이제 아까 이야기한 디지털포렌식 전문가 2급에 자주 등장하는 까닭에 대해 고민해 보자. 어짜피 시스템 상에서는 문제가 생기더라도 알아서 $MFTMirr파일을 읽어서 대체하면 뭣이 문제가 될 게 있겠는가? 라는 의문이 들 수 있다. 하지만 포렌식 분석을 할때는 Live 포렌식을 하기도 하지만 주로 이미징을 한 상태에서 정적으로 분석하는 Dead Forensic을 하는 경우가 압도적으로 다수이다. 따라서 이미징을 하는 과정에서 앞서 말한 MFT 영역에서 오류가 생긴다면 분석 도구를 이영할 때 정상적인 파일시스템으로 인식하지 못하는 경우가 발생하기 때문이다. 이처럼 문제를 낼 때는 MFT초반 영역의 $VOLUME부분을 건드리거나 해서 정상적으로 여러 볼륨이 인식되지 않도록 설정한다. 하지만 Hex Editor를 이용하여 $MFTMirr영역의 데이터를 원래 MFT에 덮어쓴다면, 이전에 확인하지 못한 데이터를 확인해 볼 수 있다. ## Analysis Tool > [!info] HxD - Freeware Hex Editor and Disk Editor | mh-nexus > undefined > [https://mh-nexus.de/en/hxd/](https://mh-nexus.de/en/hxd/) ## Conclusion 파일시스템 오류 시 가장 주요한 역할을 하는 $MFTMirr에 대해서 알아보았다. 시스템의 입장에서도 매우 중요한 파일이지만 예기치 못한 오류가 분석 파일에 생겼을때 분석관에게도 매우 중요한 파일이다. 주로 이미징을 여러번 하면 해결될 문제지만 실제 사례에서는 이미징을 여러번 하면 클라이언트 측에서 좋아할 이유가 없기 때문이다. 아무쪼록 이 글을 읽고 잘못된 NTFS 파일시스템을 고쳐보도록 하자.