DFIR/DFIR

[파일 시스템]FAT32 - 2편(FAT Area)

dotaky99 2021. 11. 12. 13:46
반응형

FAT구조

기존에 배웠던 FAT구조는 위의 사진과 같습니다. Reserved Area, FAT Area, Data Area로 이루어져 있으며, Reserved Area에는 FAT32기준 Boot Sector, FSINFO, Boot Strap, More reserved sectors로 총 32개의 섹터를 가지고 있습니다. 그렇다면 FAT Area는 어떻게 되는지 천천히 알아가 봅시다.

FAT Area는 총 두 구역으로 나뉘게 됩니다. 아래처럼 말이죠

FAT 파일시스템은 FAT 영역에 의해 관리됩니다. FAT영역은 백업본이 하나더 있어서 두 개로 나뉘게 됩니다. 즉, 같은 값을 가진 영역이 두 개란 것입니다.  FAT 백업본은 FAT Mirror라고도 말합니다.

더불어 FAT영역의 목적은 데이터 영역에 저장된 파일의 클러스트 할당 관계를 테이블 형태로 보여줍니다. FAT12/16은 2바이트씩, FAT32는 4바이트를 통해서 데이터 영역의 시작부터 마지막까지 클러스터 할당 관계를 보여줍니다. 그렇다면 FAT32는 4바이트씩 클러스터를 표현하므로 한 섹터에는 128개의 클러스터를 표현이 가능합니다.
(1섹터는 512바이트, 512바이트/4바이트 = 128개의 클러스터)

또한 FAT영역에서의 클러스터 0,1번은 이미 Media Type, Partition Status로 예약이 되어있어서 사실상 클러스터 2번, 즉 3번째부터 실제 데이터가 시작된다.

위에는 서로 다른 FAT32로 포맷된 USB를 캡쳐한 것이다. 좌측에 보면 4바이트씩 끊어서 미디어 타입와, 파티션 상태가 있으며 4바이트씩 같은 값이 써있는 것을 볼 수 있고, 우측에는 0으로 채워진 것을 볼 수 있다.

- 0x00000000 : 비할당 상태를 나타냄.

- 0x0FFFFFFF : 파일의 끝을 나타냄

- 0xFFFFFFF7 : 배드 클러스터

하지만 꼭 파일의 끝이 하나씩만 결정되는 것은 아니다. 다음은 USB에 5KB짜리 파일을 하나 만들었다.

사진의 빨간네모를 보면 6번 클러스터가 7번 클러스터를 가리키고 있다. 7번클러스터는 파일의 끝을 나타내고 있다. 한 개의 클러스터는 4096바이트이다. 즉 파일의 크기는 5KB~8KB 사이라는 것을 유추 할 수 있다. 또한, 연결되는 특성이 있어서, 삭제가 이루어진 상태에서 사용하게 되면 파일이 항상 연속적으로 할당이 되어있지는 않다.

이를 통해서 우리가 알 수 있는 것은, 클러스터의 크기가 크면 클수록 용량이 낭비되는 상황을 야기한다는 것이다.

그렇다면 FAT 백업본은 어떻게 볼수 있을까? 너무 당연하다. 현재 위치에서 FAT크기만큼 더해주면 된다.

FAT크기는 BPB에서 0x24위치에서 확인이 가능하다.
[Digital Forensic] MBR이란? (tistory.com)

요약

처음 MBR에서 파티션 위치를 확인해준다. 파티션 테이블의 구조는 다음과 같습니다. CHS는 예전 방식이므로, LBA주소를 봐야겠지요? 0x00000800 = 2048이므로 2048섹터로 이동해 줍시다.

그러면 아래와 같은 반가운 모습이 보입니다. MSDOS5.0도 보이므로 잘 도착했습니다. 우리가 봐야할 곳은 빨간색 네모입니다. 이 곳은 어떤 필드일까요? Reserved Sector Count라는 필드입니다. FAT Area이전에 Reserved Area가 있으니 그 크기만큼 넘어가야겠죠? 0x1B66(7014) 이므로 현재 위치 + 7014를 해주면 됩니다. 즉, 현재 2048이므로 9062섹터로 점프해봅시다.

9062섹터로 넘어온 상태입니다. 위에서 파일 크기 테스트 했을 때와 같은 구조를 보이고 있네요. 네 같은 USB입니다. 그러면 FAT 백업 영역으로 가기위해서 필요한건 FAT 크기가 필요합니다. 즉, 9062 + FAT크기를 하면 FAT 백업 영역으로 넘어가게 됩니다. FAT 크기는 어디서 구할까요?
[파일 시스템]FAT32 - 1(Reserved Area) (tistory.com)
BPB의 0x24 위치를 확인해주시면 됩니다. 바로 위에 사진에 값이 보이죠? 저의 경우는 0x0000724D(29261) 값이 나옵니다. 즉, 현재 위치 + 29261를 해주시면 FAT 백업 영역으로 갈 수 있습니다. 29261 + 9062 = 38323입니다.

다음은 FAT 백업영역으로 넘어온 사진입니다. 조작한거 아니냐고요? 왼쪽에 Offset이 12B6600 보이시나요? 위에 언급했던 FAT백업 영역이 38323 섹터라고 했죠? 38323 * 512 = 19,621,376(0x00662B01) 나옵니다.

반응형