파일 시스템 내부 구조, 파일 시스템의 생성, 삭제 매커니즘
영화에서 삭제된 파일을 복구하는 사이버 수사관을 본 적이 있을 것이다. 사라진 줄 알았던 증거를 마법처럼 복구시키는 그 장면은 단순히 영화에서만 발생하는 일은 아니다. 우리가 매일 사용하는 컴퓨터와 스마트폰 속에는 수많은 파일들이 저장되어 있으며, 이 파일들은 체계적으로 관리되고 있다. 우리가 클릭 한번으로 삭제한 파일은 정말 사라진 것일까? 파일 시스템에 대해 알면 이러한 질문에 쉽게 대답할 수 있다.
파일 시스템은 디지털 기기에서 파일을 저장하고 관리하는 방식을 결정하는 중요한 구조인데, 단순히 파일을 저장하는 것 이상을 담당한다. 파일의 이름, 크기, 생성 날짜 등의 정보를 관리하고, 파일이 저장된 정확한 위치를 추적하며, 심지어 삭제된 파일의 흔적까지 가지고 있다. 쉽게 말해서 파일 시스템을 분석하면 파일의 숨겨진 모든 비밀을 알 수 있는 것이다!
디지털 포렌식에서는 이러한 파일 시스템의 특성을 활용하여 증거가 될 수 있는 데이터들을 선별하고 수집한다.
이 글에서는 파일 시스템의 기본 개념부터 시작하여, 윈도우 운영체제에서 주로 사용되는 FAT와 NTFS 파일 시스템의 특징, 그리고 이들이 디지털 포렌식에서 어떻게 활용되는지 알아보도록 하자.
파일 시스템은 디지털 환경의 파일 및 디렉토리를 구성하고 검색하는 방법이다.
파일 수가 증가하면서, 파일을 관리하기 위해 디렉토리를 사용하다가 더욱 확장된 관리 방법인 파일 시스템을 사용하게 되었다.
파일 시스템의 기능은 크게 세 가지이다. 첫번째는 데이터의 효율적인 이용을 위한 저장 공간을 관리하는 것, 두번째는 파일 및 디렉토리의 상세 메타데이터 생성 및 관리하는 것(이름, 위치, 크기, 타임스탬프, 속성, 삭제 플래그 등), 마지막으로 압축/암호화/저널링/중복 제거 등이 있다.
: 메타 데이터 + 데이터
파일 시스템은 메타데이터 영역과 데이터 영역으로 구성되며, 메타데이터 영역에는 파일의 메타데이터(이름, 위치, 크기, 타임스탬프, 속성, 삭제 플래그 등)가 저장되고, 데이터 영역에는 파일의 실제 데이터(내용)가 저장된다. 우리가 쉽게 생각하는 파일의 위치, 디렉토리 등은 전부 메타 데이터이다. 즉, 파일을 실행시켰을 때 파일의 실제 콘텐츠에 액세스하려고 시도하게 된다.
디스크 저장 장치에서 가장 작은 물리적 기본 저장 단위는 섹터(Sector)이다. 전통적으로 섹터의 크기는 512 바이트에서 2 KiB, 4 KiB까지 다양하다. 섹터의 배수로 구성되는 클러스터, 블록, 페이지는 파일 시스템의 논리적 저장 단위로, 파일 시스템은 I/O 작업을 위한 최소 할당 단위를 정의한다.
데이터 I/O 효율성과 공간 낭비는 종종 트레이드오프 관계에 있다. 예를 들어, 1 바이트의 데이터를 저장하기 위해 4 KiB의 공간을 할당할 수 있다. 이 경우, 실제로 사용된 1 바이트 외에 나머지 4,095 바이트는 미사용 상태로 남게 되는데, 이처럼 고정 길이 할당 단위로 인해 발생하는 낭비된 공간을 슬랙 공간(Slack Space)이라고 한다.
슬랙 공간은 파일 할당 단위와 실제 데이터 크기의 차이로 인해 발생하며, 종류로는 파일 슬랙, RAM 슬랙, 드라이브 슬랙, 볼륨 슬랙 등이 있다.
윈도우 운영체제에서는 다양한 파일 시스템이 사용된다. 대표적인 파일 시스템으로는 FAT, NTFS, ReFS가 있다.
FAT 파일 시스템은 MS-DOS에서 사용되었으며, FAT12, FAT16, FAT32, exFAT 등 다양한 변종이 존재한다. 이 파일 시스템은 주로 SD카드, USB 드라이브와 같은 이동식 저장 장치에서 사용된다.
NTFS는 윈도우 NT에서 기본 파일 시스템으로 도입되었으며, 저널링, 파일 압축, 볼륨 섀도 복사 등의 고급 기능을 제공한다. NTFS는 높은 안정성과 보안성을 제공하여, 많은 윈도우 기반 시스템에서 기본 파일 시스템으로 사용된다.
ReFS는 윈도우 서버 2012에서 도입된 파일 시스템으로, 데이터 가용성을 극대화하고 대규모 데이터 세트를 지원하며, 데이터 무결성을 제공하는 것을 목표로 설계되었다. 주로 서버 환경에서 사용되며, 높은 안정성과 성능을 지원한다.
FAT 파일 시스템은 FAT 영역과 데이터 영역으로 구성된다.
FAT 영역은 클러스터 할당 테이블을 포함하며, VBR 영역에는 부트 섹터와 백업 부트 섹터가 포함되어 있다.
데이터 영역에는 파일과 디렉토리의 메타데이터 및 실제 데이터가 저장된다.
디렉토리 엔트리는 삭제 마커, 파일 이름, 속성, 타임스탬프(생성, 액세스, 쓰기), 첫 번째 클러스터 주소, 파일 크기 등의 정보를 포함한다.
삭제 마커는 파일 이름의 첫 문자로, 할당되지 않은 경우 0xE5로 표시된다.
파일 생성 과정에서는 디렉토리 엔트리 구조에 파일 메타데이터가 기록되며, 파일 내용은 데이터 영역의 클러스터에 저장된다.
파일 삭제 과정에서는 디렉토리 엔트리의 첫 번째 문자가 0xE5로 변경되며, FAT 테이블의 클러스터 할당 비트가 초기화된다.
NTFS는 마이크로소프트에서 개발한 독점 저널링 파일 시스템이다. NTFS의 주요 기능으로는 저널링, 대체 데이터 스트림, 희소 파일, 파일 압축, 볼륨 섀도 복사, EFS(암호화 파일 시스템), 할당량, 리파스 포인트, 유니코드 지원 등이 있다.
VBR 영역 : NTFS 볼륨의 시작 부분에 위치하며, 부트 섹터와 부트 로더를 포함한다.
MFT (Master File Table) 영역 : 파일 및 디렉토리의 메타데이터를 저장하는 특수 구조인 MFT 레코드로 구성된 영역이다. 파일 수가 증가함에 따라 'MFT' 영역이 '데이터' 영역에 동적으로 할당된다.
데이터 영역 : 파일의 실제 데이터가 저장되는 영역이다.
NTFS는 시스템 파일과 사용자 파일을 포함한 모든 저장된 데이터를 파일로 관리하며, 각 파일은 고유한 MFT 레코드를 가진다.
파일 생성 시에는 MFT 레코드가 할당되고, $BITMAP 속성으로 클러스터가 할당되며, 인덱스 정보가 업데이트된다. 또한, $LogFile에 생성 작업이 기록된다.
파일 삭제 시에는 클러스터 할당 비트와 MFT 레코드 할당 비트가 초기화되고, 폴더-파일 관계 인덱싱 정보가 재구성된다. 마지막으로, 로그파일에 삭제 작업이 기록된다.