5) 파티션과 파일시스템
Last updated
Last updated
USB, 외부저장장치 같은 저장장치는 파티션을 나눠서 저장할 필요가 없을 수 있습니다. 그러다보니 굳이 파티션을 나누지 않고 단일로 파일시스템만 구성되어 있는 파티션도 존재하게 됩니다.
한번 파티션 테이블이 없는 파일시스템만 있는 저장매체를 만들어서 테스트 해보겠습니다.
디스크 관리에서 새롭게 가상디스크를 만들어 보도록 하겠습니다. 용량은 너무 크지 않게 200MB 정도로 세팅해보겠습니다. ※ 용량을 크게 할 경우 이후에 실습이 원활히 안될 수 있으니 300메가 이하로 설정을 추천합니다.
디스크 초기화를 하도록 하겠습니다.
새 단순 볼륨을 생성하여 파일시스템을 만들어 보겠습니다. 용량은 원하는 용량으로 설정하면 됩니다.
HxD를 관리자권한으로 실행 한 뒤 해당 저장 디스크를 읽기전용을 체크 해제 하고 열어봅시다.
이후 1번 파티션의 시작 섹터번호와, 전체 섹터 수를 이용하여 1번 파티션의 시작 섹터와 마지막 섹터번호를 확인하여 봅시다. - 시작 섹터 번호 : 80 00 00 00 -> 00 00 00 80 (128 번 섹터) - 전체 섹터 수 : 00 90 01 00 -> 00 01 90 00 (102,400 섹터) * 마지막 섹터 번호 : 시작섹터 번호 + 전체 섹터 수 -1 = 102,527 섹터 >> 128번 섹터 - 102,527번 섹터 (1번 파티션)
만약을 대비하여 먼저 0번 섹터를 복사하여 둡시다. ※ 사실 HxD로 파일시스템을 복사하는 방법은 파일시스템 용량이 작기 때문에 가능합니다. 실제 저장매체는 용량이 GB, TB 로 되는데 단순히 복사 붙여넣기로 감당이 안되는 용량입니다. 다만 개념을 익히는 공부용도로 이런 방식으로 해보는 정도로 시도해보시기 바랍니다.(즉, 실제로 써먹기 힘든 방법)
이후 새 파일을 만든 뒤 붙여넣기 하여 만약 대비용으로 가지고 있어 두겠습니다.
파일시스템 1번 영역을 선택하도록 하겠습니다. 먼저 hxd 에서 우클릭 - [블록 선택] 선택 후 [10진수]를 선택 한 뒤 오프셋을 계산하여 영역을 지정하겠습니다. - 시작 오프셋 : 파티션1 시작 섹터 수 X 512 = 128 X 512 = 65536 - 종료 오프셋 : 파티션1 마지막 섹터 수 +1X 512 -1 = (102,527 +1) X 512 -1 = 52494335
선택된 영역을 복사해보도록 하겠습니다.
0번 섹터로 이동해서 붙여넣기 해봅시다.
디스크 관리에서 F5를 눌러 저장매체 재인식을 해보도록 합시다. 50MB NTFS였는데 표시로는 200MB네요! 파일시스템부터 시작하는 저장매체가 된 것입니다.
파티션이 없는 파일시스템이라도 잘 인식 합니다. 즉, 윈도우는 0번 부터 파일시스템이 시작하여도 충분히 인식하고 있다는 의미 입니다. 위의 분석 준비대로 실습했다면 저장매체는 0번에 파티션 테이블 없이 바로 파일시스템이 시작됩니다. 탐색기에서 해당 저장매체의 논리 드라이브를 우클릭-속성에서 보면 용량이 기존과 동일하게 50MB 정도로 설정되어 있습니다.
FTK Imager에서 한번 살펴보겠습니다. 당연하게도 파티션 테이블이 없기 때문에 파티션이 구분되지 않고, 바로 파일시스템이 시작되는 것을 알 수 있습니다.
파티션이 있을 경우 아래 그림과 같이 파티션 영역에 대한 부분이 존재하게 됩니다.
만약 원상 복구 시도를 해보고 싶다면 HxD에서 아래의 순서로 진행하면 복구가 가능합니다.
0번부터 102,400 를 복사한 뒤
128번 부터 덮어 쓴다
초반에 0번 섹터 저장해준 것을 0번 섹터에 다시 덮어쓴다.
디스크 관리에서 해당 저장매체를 해제했다가 다시 연결해본다.
이번엔 파티션안에 이전에 남아있던 파일시스템에 접근이 되어 있는지 살펴보도록 하겠습니다. 사실 이런 경우는 잘 없지만 공부 차원에서 시도해보도록 합시다.
먼저 새로 가상디스크 200MB를 만든 후 50MB NTFS, 50MB FAT32를 한번 만들어 보겠습니다.
FAT32 파일시스템에는 간단한 텍스트 파일을 만들어 보겠습니다.
먼저 이상태에서 이 저장매체의 0번 섹터를 살펴보겠습니다. 여기서 파티션 2번에 대한 정보만 먼저 살펴보겠습니다. 파일시스템 타입이랑, 시작섹터, 전체섹터수 이부분을 복사해두겠습니다.
- 파티션2 타입 : 0C - 파티션2 시작 위치 : 80 90 01 00 -> 00 01 90 80 => 102,528 섹터 - 파티션2 전체 섹터 수 : 00 90 01 00 -> 00 01 90 00 => 102,400 섹터
디스크 관리에서 볼륨 삭제를 진행해보도록 합시다.
정말 파티션이 삭제되었까요? 파티션2의 시작위치를 한번 살펴보겠습니다. (102,528 섹터) 기존의 FAT32의 VBR이 그대로 존재하고 있습니다.
FTK Imager에서 한번 열어보겠습니다. 0번섹터 MBR에서 파티션2번 엔트리 영역을 지웠으나, 파일시스템의 시작점을 자동으로 찾아서 복구한 파티션으로 표시해주며 내용도 그대로 분석해줍니다. 그런대 파티션번호는 정확하지 않습니다. (아마 도구에서 VBR을 찾아서 복구해주지 않았을까요?)
자 이 상태에서 HxD, FTK Imager등을 다 종료하고 가상디스크를 다시 연결 한 뒤 볼륨 확장을 해봅시다.
보통 다음 선택 하면 전체영역으로 확장됩니다.
FTK Imager 에서는 아까전에 보이던 복구 된 파티션이 이제 보이지 않습니다.
과연 그럼 정말 우리가 만들어 두었던 FAT32 파일시스템은 사라진걸까? 한번 파티션2에 파일시스템이 위치하던 섹터로 가보도록 하겠습니다. 여전히 파일시스템의 BR이 남아 있네요.
특별히 수정한 것도 없어 보입니다. 우선 전체 섹터 수를 확인해봅시다. 00 90 01 00 -> 00 01 90 00 => 102,400 섹터를 쓰고 있네요 그렇다면 이 파일시스템의 BR을 분석해보니 - 마지막섹터 = 시작섹터 + 전체 섹터 수 - 1 = 102,528 + 102,400 -1 = 204,927 102,528 섹터 ~ 204,927 섹터까지 사용했을거 같네요
해당 부분을 한번 따로 뽑아서 이미지 파일로 만들어 봅시다. - 시작 오프셋 : 102,528 X 512 = 52494336 - 마지막 오프셋 : (204,927 +1) X 512 -1 = 104923135
오프셋을 지정하여 해당영역을 선택 후 복사한 뒤 새로운 이미지로 만들어 봅시다.
새 파일 선택 후 해당 파일시스템 영역을 붙여넣기 하여 파일을 만들어 봅시다. ※ HxD로 파일시스템을 복사하는 방법은 파일시스템 용량이 작기 때문에 가능.
우선은 FTK Imager로 열어봅시다. 파일시스템 내의 파일도 정상 분석이 가능해 집니다.
즉, 아래와 같이 NTFS 파일시스템 내의 삭제한 FAT32 파일시스템이 그대로 남아 있었던 것입니다.
사실 이렇게 까지 할 일은 없겠으나, 윈도우로 연결시기고 싶다면 NTFS 용량을 줄이고 추가된 파티션엔트리를 만들어서 해도 되겠지만.. 저는 그냥 NTFS 를 모두 지우고 FAT32만 넣도록 하겠습니다.
HxD를 관리자모드로 볼륨을 삭제한 가상디스크를 읽기전용 해제 후 열겠습니다. 그리고 0번 섹터에 다시 위에 파티션 만들어 두었전 전체 내용을 복사해서 덮어쓰겠습니다.
다시 FAT32가 인식이 되고 안에 있는 test.txt도 열리게 됩니다. 그런데 사용 가능용량이 50메가 미만이겠죠? 당연히 FAT32의 BR에 있는 용량을 기준으로 설정되었을 것입니다. 그러나 윈도우는 해당 저장매체의 마지막 섹터번호까지 체크해보니 200MB를 충분히 담을 수 있을거라고 보고 있습니다. 그런데 파티션 영역은 나눌 수 없습니다. 왜냐면 당연히 파티션 엔트리를 저장할 공간이 없기 때문입니다. (0번부터 FAT32 파일시스템이니까!)
그렇다면 포맷을 하면 어떨까요? 해당 저장매체의 전체용량까지 가능하다고 하네요!
만약 분석대상 저장매체가 오랜기간 사용되어 여러번 포맷이 되거나, 파티션을 구분하여 파일시스템을 여러개 사용했을 경우 파일시스템의 BR을 찾아야 하는데 어떤 것을 검색해서 찾는게 빠를까요? 그리고 찾은 파일시스템의BR이 정말 BR인지, BR의복사본인지 어떻게 알 수 있을까요?
먼저 테스트를 위해 가상디스크를 생성 후 FAT32로 파일시스템을 생성해보도록 하겠습니다. 정해진용량은 상관 없으나, 빨리 찾기 위해 용량을 작게 설정하겠습니다.
그리고 파일시스템이 어디있는지 모르게 하기 위해 파티션 엔트리를 모두 00으로 초기화 하겠습니다. HxD를 관리자 권한으로 연 뒤, 파티션엔트리 부분을 00 으로 초기화 후 저장합니다.
당연하게도, 파티션을 못찾기 때문에 인식을 할 수 없을 것입니다.
혹시 FTK Imager는 찾아주지 않을까? 하고 살펴보니 여전히 우리가 만들어 두었던 FAT32는 못찾네요!
자 우리는 지금 FAT32 파일시스템을 만들어 두었는데 어디에 있는지 모르는 상황입니다. 그러나 FAT32의 VBR에서 항상 가지고 있는 값이 있을 것이고 그것을 검색해서 찾아봅시다. 우선 항상 가지고 있는 값을 알아보겠습니다.
- 파일 시스템 타입/식별자 (오프셋 0x52): 이 값은 "FAT32 " (8바이트, 공백 포함)로 설정 46 41 54 33 32 20 20 20 (FAT32 ) - 부트 시그니처 (오프셋 0x1FE): 부트섹터 마지막 2바이트가 55AA 설정. 이는 부트 섹터의 끝을 표시 *나머지는 파일시스템 생성(포맷)을 어떻게 하냐에 따라 조금씩 바뀌는 값이나 그나마 고정값인 것은 파일시스템 식별자와, 마지막 55 AA 입니다. 결론은 특정 섹터에 오프셋 0x52(82) ~ 0x59(89)에 hex값 : 46 41 54 33 32 20 20 20 마지막 2섹터에 55 AA인 것을 검색하면 되는 것입니다. [참고] NTFS 의 BR 검색
NTFS의 BR이 주로 가지고 있는 고정값을 알아보겠습니다. - OEM ID (오프셋 0x03): NTFS 부트 섹터에서는 보통 NTFS (7바이트, 공백 포함)로 설정됩니다. > 4E 54 46 53 20 20 20 20 ("NTFS ") - 부트 시그니처 (오프셋 0x1FE): 항상 0x55 0xAA로 설정됩니다. 이는 부트 섹터의 끝을 표시합니다.
HxD에서 한번 찾아보도록 합시다. 가능하면 Hex 값으로 검색하는 것을 추천합니다. (문자열 검색도 가능하나, 용량이 큰 경우 텍스트보다 Hex 값 검색이 조금 더 빠를 수 있습니다.)
F3을 누르면 다음 찾기가 되며, 계속 찾으면서 해당되는 섹터를 모두 살펴봅니다. 당연히 우리는 파일시스템만 만들고, 다른 내용이 없기 때문에 비교적 빠르게 찾을 수 있게 됩니다. 128번, 134번 섹터에서 FAT32의 BR로 보이는 것이 발견되네요! 즉, FAT32는 파일시스템의 BR의 복사본을 BR의 위치 + 6섹터 뒤에 가지고 있기 때문에 당연하게도 이 파일시스템은 BR, BR의 복사본이 잘 있는 것으로 보이게 됩니다.
이렇게 찾은 것을 분석을 위해선 0번 섹터의 파티션 엔트리를 수정하여도 좋고, 이 파일시스템 전체 크기를 계산하여 파일시스템 영역을 추출하여 분석하여도 될 것입니다. 우선 확인을 위해 BR영역이 있는 128번 섹터를 0번 섹터 파티션 엔트리에서 인식 할 수 있도록 우리가 넣어보도록 하겠습니다.
이번에 실습해볼 것은 파일시스템의 BR이 훼손되었다고 생각하고 진행해봅시다. 먼저 먼저 파일시스템 BR을 훼손하여 봅시다. 일단 우리는 128번이 FAT32 파일시스템 시작인것을 알고 있기 때문에 128번 섹터에서 VBR 영역을 00으로 채워보겠습니다.
자 이제 우리는 128번이 무었이었는지 전혀 모르는 상태에서 다시 검색을 해보겠습니다. 0번 섹터의 파티션 엔트리가 전혀 없는 아무것도 모르는 상태에서 FAT32 BR이 있는지 찾아봅시다. HxD에서 FAT32 식별자(46 41 54 33 32 20 20 20)를 검색해봅시다.
134번에서 발견이 됩니다. 계속 F3을 눌러서 검색해도 더 이상 발견되지 않습니다.
그렇다면 이상황에서.. 이것은 FAT32 파일시스템의 시작 BR일까요? BR의 복사본일까요? 만약 정상이라면 6섹터 앞뒤로 동일한게 있어야 하는데 1개 밖에 없는 상황입니다. 그렇다면 둘 다 시도해 봐야합니다. 134번이 시작 BR 이라면 복사본이 140번 섹터일 것이고, 134번이 복사본 BR이라면 128번 섹터가 원래의 BR이 겠지요. *일단 우리는 128번이 정상이라는 것을 알았으니.. 만약 134번이 시작 BR이라고 생각하고 복구를 해보면 어떤 일이 발생할까요? 한번 테스트 해보겠습니다. 0번 섹터에 1번 파티션의 시작이 134번이라고 두고 파티션 엔트리를 만들어 보도록 해보겠습니다.
우선, 찾아낸 BR을 분석해서, 전체 섹터 수를 계산해봅시다.
MBR에서 파티션 엔트리에 필요한 부분은 시작 섹터 번호 4바이트, 전체 섹터 수 4바이트가 필요하니 준비해보도록 하죠! - 파일 시스템 타입 : 0C (FAT32) - 시작 섹터: 134 (10진수) -> 86 (16진수) => 00 00 00 86 (빅엔디안) => 86 00 00 00(리틀엔디안) - 전체 섹터 수: 00 90 01 00 0 번 섹터 파티션 엔트리에는 16진수 값 리틀 엔디안으로 넣어야 하니 그대로 넣어봅시다.
우선 윈도우에서는 제대로 인식이 안되고 있습니다. FAT 영역이나, 데이터 영역 섹터들이 모두 6섹터 밀렸기 때문에 제대로 인식이 안 될 것입니다.
그런데 FTK Imager에서 보면 먼가 해당 파일시스템을 분석해주는 것 처럼 보입니다. 그러나 자세히 보면 FAT영역도 이상하고, 제대로 표시가 안됩니다. 지금은 데이터가 없어서 이렇게 나오지만, 만약 실제로 데이터가 많았던 파일시스템이라면 온통 디렉토리나, 내용들이 깨져서 보일 수 있습니다.
[예시] FAT32 파일시스템의 복사본 BR을 시작 BR로 잘못 인식한 경우, 파일 수가 많은 경우 의외로 이런 현상의 원인을 잘 모는 경우가 있습니다. 일단은 안보이던 파일시스템이 보이니 복구 했다고 판단하고.. 분석했더니 제대로 데이터가 안보여 단순히 파일시스템이 훼손되서 복구가 도저히 안되는구나.. 하고 오해할 수 있습니다.
*특히 EnCase의 Add Partition 기능 쓸 때 정확히 이해하고 사용하셔야 합니다.
그렇다면 정상적으로 분석을 하기 위해서는 어떤 순서로 진행해야 할까요? 사실 파일시스템 BR의 복사본 영역은 복구할 필요가 없습니다. 따라서 원래 시작 BR만 정상적으로 복구하면 됩니다. 134번으로 시도했을 때 제대로 안나오면 당연히 128번이 시작이구나.. 하고 시도해보면 되는 것입니다. 그렇다면 134번 섹터를 그대로 복사하여 128번에 덮어쓰고, 파티션 엔트리를 128번 시작 섹터로 기준으로 수정하면 정상 인식이 될 것입니다. [134번 - FAT32 파일시스템 복사본] ★ FAT32의 복사본 BR은 정상 FAT32 파일시스템의 6번째 뒤에 있습니다. > FAT32의 복사본BR의 섹터 번호 - 6 = FAT32 BR 섹터번호 ★ NTFS의 복사본BR은 해당 파일시스템 맨뒤에 있기 때문에 시작 위치계산을 잘해야합니다. > NTFS의 복사본BR의 섹터 번호 - 전체 섹터 수 = NTFS BR 섹터번호
[128번 - FAT32 파일시스템 BR 위치]
[0번 파티션 엔트리] 파티션 시작 섹터 : 128 -> 80(16진수) -> 00 00 00 80 => 80 00 00 00 정상 시작 섹터로 수정 후 저장합니다.
윈도우의 경우 0번 섹터를 수정할 경우 디스크 관리에서 가상디스크를 분리 하였다가 다시 연결해야 적용이 정상적으로 됩니다.
다시 한번 정리하면, 파티션과 파일시스템의 구조와 관계를 제대로 이해하지 못하면, 해당 저장매체에 저장된 파일에 접근이 안되어 포렌식 분석자체를 하지 못할 수 있기 때문에 전문가가 되고자 한다면, 완벽히 이해하고 있어야 합니다.
사실 복구의 기본 개념은 매우 간단합니다. 복사본 위치를 잘 알고 원래 있어야 할 위치에 덮어 쓰는 것입니다. 다른 어떠한 이유 때문에 파일시스템의 BR 위치에 내용이 덮어써지게 되면 제대로 파일시스템 인식이 안되는데, 복사본이 살아 있다면, 그것을 이용하여 복구 시도를 해볼 수 있는 것입니다.
윈도우에서 파일시스템 볼륨을 단순 삭제한 경우 파일시스템 영역을 그대로 두고 파티션 엔트리만을 초기화 한 것을 확인할 수 있을 것입니다. 기존에 있던 파일시스템을 삭제하고 오랜시간 동안 그리고 용량이 가득 찰 정도로 사용했다면, 파일시스템 영역을 덮어써서 온전히 복구가 안되겠지요.
파일시스템을 완전히 초기화 하지 않기 때문에 언제든지 포렌식 관점에서 파일시스템이 있었고 복구가능성이 있다고 판단 될 경우 분석을 해봐야 할 필요성이 있게 됩니다.
위의 실습에서는 파일시스템의 시작 섹터를 알았지만, 실제로 분석할 때는 시작 섹터를 당연히 우리는 알 수가 없습니다. 따라서 파일시스템의 BR을 따로 검색하여 찾는 방법으로 분석해볼 수 있을것 입니다. (다만 운영체제에서 파일시스템의 BR을 파일형태로 따로 저장하는 경우도 있으니 이게 정말 파일시스템의 BR인지, 파일형태의 BR인지도 잘 판단 할 수 있어야 합니다.)
요즘에는 용량이 크기 때문에 상황에 따라 파일시스템이 은근히 삭제되지 않고 그대로 남아 있는 경우도 종종 있으니, 언제든 이러한 저장매체와 파일시스템의 관계를 잘 알고 분석해볼 수 있어야겠지요!
참고로 디지털포렌식 2급 실기시험의 단골문제로 파티션 엔트리는 정상이나, 파일시스템 BR을 훼손하여, 복사본을 이용하여 복구하는 문제가 거의 매번 출제되고 있으니 파일시스템의 BR을 복구하는 것은 잘 알고 있어야 합니다.