SWUFORCE/드림핵

파일 시스템

amy06s 2026. 4. 29. 17:17

파일 시스템 + 실습

 

파티션과 볼륨

파티션: 저장 장치 내의 공간을 분리해 독립적인 공간을 만든 것

볼륨: 하나의 저장 공간(파일시스템을 갖춘 저장 공간)

    • 하나의 볼륨은 하나의 파티션 내에서 생성됨
    • 볼륨 = 드라이브(Drive)

 

파티션, 볼륨 실습

USB나 운영체제 설치 x인 D 드라이브나 E드라이브로 진행

현재 갖고 있는 USB가 없어서 추후 실습할 예정

 

파일 시스템

파일시스템

: 디지털 데이터를 효과적으로 관리하기 위해 파일을 체계적으로 기록하는 방식

 

주요 기능

  • 저장장치 내에 빈 공간 파악 및 적절한 공간에 파일 저장
  • 사용자가 파일 생성, 수정, 삭제가 가능하도록 함
  • 파일 생성 시각, 수정 시각, 변경 시각 등을 관리
  • 파일 생성, 수정, 삭제에 대한 로그를 기록 및 백업 복구 등 지원
  • 사용자에 따라 접근 권한 부여

 

파일 시스템 종류

NTFS(New Technology File System)

  • 1993년 Windows NT 3.2 버전 v1.0로 처음 출시된 파일 시스템
  • Windows 7, Windows 10, Windows 11등을 기본으로 사용
  • 파일 폴더 암호화 기능, 저널링 기능, 손상된 파일 복구 기능 등을 지원

 

ReFS(Resilient File System)

  • Microsoft에서 NFTS 대체를 위해 개발한 파일시스템
  • 현재 기본으로 생성x
  • Windows 8.1 이후부터 ReFS 파티션 생성 가능
  • 파일 무결성 검사, 데이터 복구 기능 제공 (NFTS에 비해 높은 성능)

 

EXT4(Extended File System 4)

  • EXT 파일시스템 중 가장 최신 버전
  • Linux 커널 2.6.19부터 등장
  • 기존 EXT2, EXT3에서 사용하던 블록 매핑 방식 => Extent 방식으로 변환(더 많은 파일에 빠르게 접근하게 됨)
  • 최대 볼륨 크기와 최대 파일 크기 확장, 하위 버전에 대한 하위 호환성 지원

 

UFS(Unix File System)

  • Unix 및 Unix 계열 운영체제에서 사용
  • Unix 기반 운영체제에서 사용되는 파일시스템들의 근간을 이룸

 

HFS+(Hierarchical File System Extended)

  • 기존 Macintosh에서 사용되는 파일시스템 HFS보다 많은 파일 개수, 용량, 파티션 용량 제공
  • 1998년 macOs 8.1과 함꼐 발표되어 맥북, 아이팟 등에 사용

APFS(Apple File System)

  • HFS+ 대체를 위해 2016년 발표됨
  • macOS Sierra 및 iOS 10.3부터 현재까지 사용되고 있음
  • HFS+의 데이터 체크섬, 나노초 타임스탬프, 스냅샷 등 한계를 극복하고 암호화, 데이터 무결성 등 
  • 더 나은 기능 제공

 

FAT32(File Allocation Table)

  • Microsoft에서 개발해 MS-DOS부터 이용되던 파일시스템
  • Fat을 기반으로 함
  • 최대 파일 크기가 약 4GB로 작은 편, 최대 파티션 크기가 8GB로 대용량 파티션에서 사용이 힘듦
  • 다양한 운영체제를 지원함으로써 호환성이 뛰어나고 비교적 저장 공간을 많이 확보함
  • USB, SDCard 등 이동식 저장장치에서 주로 사용

 

exFAT(Extended File Allocation Table)

  • FAT32 한께를 극복하기 위해 개발
  • FAT32에 비해 최대 파일 및 파티션 크기가 확장
  • 디렉토리에 저장 가능한 파일 최대 개수 증가 및 더 정밀한 시간 데이터 저장 가능

 

파일시스템과 디지털 포렌식

디지털 포렌식에서 파일시스템이 중요한 이유: 파일시스템을 알아야 디스크 이미지 분석이 가능해서

 

1. 파일시스템에 대한 정보 없이는 데이터 저장 위치를 알아내기 어려움

  • 디스크 이미지: 저장장치에 저장된 원본(Raw) 데이터를 단순히 복사해 파일로 저장한 것
  • 파일시스템 도움 없이 데이터 위치 알기 어려움
  • 파일 카빙 기법으로 일부는 알아낼 수 있지만 정확도가 떨어짐

*파일 카빙 기법: 파일 시그니처와 같은 파일의 구조적인 특징을 이용해 파일시스템 메타데이터 없이 원본 파일을 복원하는 기법

 

2. 데이터 위치를 알아내도 메타데이터를 알아내기 위해서 파일시스템 구조에 대한 이해가 반드시 필요

  • 메타데이터: 데이터에 대한 정보(파일이름/저장경로/파일크기/생성 및 수정, 접근 시간 )
  • 메타데이터는 파일의 데이터와 별도로 저장되고 파일시스템에 다른 위치의 정보들을 모아 보여주는 것

 

3. 파일시스템을 이해하면 파일 변경 이력을 가져오거나 삭제된 파일 복구 가능

  • 파일시스템 대부분이 저널링 기능 지원
  • 저널링: 시스템 충돌이나 정전을 대비해 데이터 쓰기 전후 상태 기록하는 파일시스템의 기능
  • 저널링 과정에서 생성되는 많은 로그가 포렌식 분석 대상임

 

MBR과 VBR

MBR(Master Boot Record): 디스크의 가장 첫 섹터에 저장되는 데이터

  • 섹터: 최소 기억 단위
  • 디스크 가장 처음 512 바이트 영역에 저장되는 데이터

VBR(Volume Boot Record): 볼륨의 가장 첫 섹터에 저장되는 데이터

  • MBR과 다르게 하나 이상의 섹터로 구성
  • 크기는 파일 시스템과 클러스터 크기에 따라 달라짐

 

MBR과 VBR의 역할

MBR

  • 저장 장치의 파티션 정보, 각 파티션에 설치된 볼륨의 정보를 가짐
  • 이러한 정보를 바탕으로 부팅 가능한 볼륨 식별 및 해당 볼륨을 부트 코드로 실행 흐름을 넘김

VBR

  • MBR에서 실행 흐름을 이어받아 해당 볼륨에서 컴퓨터가 부팅할 수 있도록 부트로더 및 커너 로드

  • 슬랙(Slack): 파일시스템이나 데이터 구조에서 빈 공간을 나타내는 표현
  • MBR 슬랙: MBR 이후 다음 자료 구조가 오기 전까지의 빈 공간
  • MBR 슬랙 외에 파일 슬랙, RAM 슬랙 등이 존재

 

MBR 구조(실습)

마찬가지로 USB가 없어서 예시 사진으로 구조를 볼 예정

MBR 구조1

 

  • 각 파티션 테이블 엔트리는 16바이트로 구성됨

MBR 구조2

파티션 엔트리 #1 함께 해석

  • 부트 플래그: 부팅 불가(0x00)
  • CHS 시작 주소: 0x2120
  • 파일시스템 타입: 0x0c
  • CHS 끝 주소: 0x7CC480
  • LBA 시작 주소: 0x800
  • 파티션 총 섹터 개수: 0xDAC000

 

CHS(Cylinder-Head_Sector)와 LBA(Logical Block Addressing): 각각 하드디스크 내 주소를 표현하는 방식

CHS

  • 하드디스크의 실린더, 헤드, 섹터라는 물리적 특성을 이용해 주소를 표기하는 방식
  • 현재 거의 사용x

LBA

  • 저장장치 내 모든 섹터들을 일차원적으로 배열, 순서대로 숫자를 지정해 주소를 계산하는 방식
  • 우리가 일반적으로 사용하는 주소 지정 방식
  • 시작 주소, 파티션 총 섹터 개수의 단위: 섹터(512바이트, 16진수로 0x200)
  • LBA 시작 주소: 0x800(섹터) => 0x800 * 0x200 = 0x100000
  • 파티션 크기: 0xDAC000(섹터) => 0xDAC000 * 0x200 = 0x1B5800000
  • ==> 실제 0x100000 오프셋에 VBR이 위치하는 것을 확인 가능

 

VBR 구조

  • FAT32, NTFS 등

 

FAT32, NTFS 파일시스템

FAT32

  • FAT(File Allocation Table): 파일이 저장되는 위치를 기록한 테이블
  • ex) 1번 파일: 0x1000 오프셋, 2번 파일: 0x2000 오프셋에 저장했다면,
  • FAT Area에 1번 파일: 0x1000, 2번 파일: 0x2000로 데이터를 저장

FAT32 구조

  • Reserved Area: VBR을 포함, 볼륨 전체 설정 값들을 저장하는 영역
  • FAT Area: 2개의 FAT 테이블이 저장되는 영역
  • Data Area: 실제 파일이나 폴더가 위치하는 영역

 

Reserved Area

  • 총 32개의 섹터로 구성
  • Boot Sector: 0번 섹터(원본), 6번 섹터(백업) 
  • FSINFO: 1번 섹터(원본), 7번 섹터(백업)
  • Boot Strap: 2번 섹터(원본), 8번 섹터(백업)
  • Reserved Secotr: 나머지 섹터들에 해당하고 일반적으로 비어있음
  • 디지털 포렌식의 주요 데이터는 Boot Sector에 위치

Boot Sector 구조
Boot Sector 구조: BPB1
Boot Sector 구조: BPB2

  • OEM ID: MSDOS5.0(FAT32의 경우 MSDOS5로 고정)
  • Reserved Sector: 0x12DE(FAT 영역 이전에 존재)
  • *FAT 영역: 0x12DE * 0x200 = 0x25BC00에 위치
  • Total Sector 32(볼륨의 총 섹터 수): 0xDAC000
  • FAT Size 32: 0x3691
  • *FAT Area 1개 크기 = 0x3691 * 0x200 = 0x6D200
  • Volume Serial Number(볼륨을 식별하는 4바이트로 구성된 숫자): 0x0E1EE980

Boot Sector 구조: Volume Serial Number

  • Volume Label(사용자가 볼륨에 붙인 이름으로 사용자 변경이 가능한 값): NO NAME
  • File System Type: FAT32

FAT Area

  • FAT Area: FAT Table 2개가 연속으로 존재하는 영역
  • FAT 파일 시스템에 존재하는 파일 및 폴더에 대한 메타데이터를 저장하는 공간
  • FAT Table이 2개인 이유는 1개 손상을 대비한 백업 역할을 위해
  • Reserved Area 값을 해석하면 FAT Area의 주소를 찾을 수 있음
FAT Area 오프셋 = VBR 오프셋 + Reserved Sector * 섹터 크기(0x200)
ex) 0 + 0x12DE * 0x200 = 0x25BC00
  • 여러 개의 엔트리로 구성, 이때 각 엔트리는 Data Area의 클러스터의 할당 상태를 나타냄
  • FAT Area 엔트리: 4바이트 값
  • Data Area 클러스터: 0x1000 바이트 크기
  • FAT Area의 엔트리와 클러스터가 일대일로 대응

FAT Area

  • 이때 0, 1번 엔트리는 사용하지 않기 때문에 2번 엔트리부토 사용자 생성파일 및 폴더가 등장함

2~9번 엔트리

  • 할당-마지막에 해당(각각 엔트리가 할당되어 있고 엔트리가 파일의 마지막을 나타냄)
  • 각 파일의 크기가 1개 클러스터보다 작기 때문에 각 파일에 1개의 클러스터만이 할당됨을 의미

10~17번 엔트리

  • 할당-계속에 해당

18번 엔트리

  • 할당-마지막에 해당

 

Data Area

  • Data Area를 찾아가는 방법: FAT Area 주소에서 FAT 크기 2개 더한 값(시스템마다 값이 달라 참고만)
Data Area 오프셋 = VBR 오프셋 + Reserved Secotr * 섹터 크기 + FAT Size * 섹터 크기 * 2
ex) 0 + 0x12DE * 0x200 _ 0x3691 * 0x200 * 2 = 0x1000000
  • 0x1000000주소에 Root Directory가 위치
  • Root Directory: 2번 클러스터에 해당, FAT 테이블의 2번 엔트리에 대응

Data Area 구조1
Data Area 구조2

  • 원본 데이터: 0x5번 클러스터에 위치
  • Root Directory가 2번 엔트리이므로 3개 클러스터만큼 이동하면 원본데이터 찾기 가증
  • 원본 데이터 = Root Directory(0x1000000) + 클러스터 크기(0x1000) * 3 = 0x1003000
  •  

FAT32 파일시스템 정리

  • VBR에서 Reserved Sector 필드를 읽어 FAT Area 위치를 찾고, FAT Size 필드를 읽어 Data Area 위치 찾기
  • 이후 FAT Area 각 엔트리를 통해 각 엔트리의 할당 여부 확인 가능
  • Data Area에서 Root Directory로부터 모든 파일/폴더 이름, 확장자, 생성/수정/접근 시간, 파일의 데이터까지 읽을 수 있음

NFTS

NTFS 구조

  • MFT라는 별도의 구조를 두어 모든 파일 메타데이터 저장
  • VBR은 볼륨 맨 끝에 Backup VBR을 별도로 두고 복구 가능하게 함

 

VBR

  • 전체적으로 FAT32의 VBR와 유사

NTFS VBR 구조

  • OEM ID: NTFS
  • Total Sectors(볼륨 총 섹터 수): 0xC0000
  • Start Cluster for $MFT( 해당 값 기반으로 MFT 영역 찾아감 ): 0xC0000
  • Volume Serial Number(볼륨 식별하는 8바이트로 구성된 숫자): 0x50256A0A2669F200

Volume Serial Number

 

MFT

  • MFT: 0x200 크기의 MFT 크기의 엔트리가 계속해서 반복되는 구조
  • 0~15번 엔트리: 시스템 메타데이터 저장하기 위해 미리 예약되어 있음
  • 16~23번 엔트리: 비어있는 엔트리
  • 24번 이후: 사용자 데이터에 대한 MFT 엔트리 위치
MFT 주소 = Start Cluster fot MFT * 클러스터 크기(0x1000) = 0xC0000000

NTFS MFT 구조

    • Signature: FILE
    • Attribute Offest: 0x38
    • Flags: 0x1
    • 사용 중(0x1), 디렉토리(0x2)로 해당하는 속성 OR연산한 값
    • Number of this MFT Entry(해당 MFT Entry 번호): 0x26

주요 Attribute

  • Attribute 구조는 ID 값에 따라 다르므로 간략하게 소개

Data Area

  • 파일데이터가 700바이트모다 큰 경우 MFT가 아닌 Data Area에 파일데이터가 저장됨

NTFS MFT Data Area

  • 붉은색 영역: 실제 데이터를 담고 있는 오프셋을 가리키는 Cluster Run 구조

Cluster Run 구조

  • Cluster Run의 첫바이트를 4비트씩 쪼개 앞 4비트는 Run Offest의 길이, 뒤 4비트는 Run Length의 길이를 나타냄
  • Run Offset: 데이터가 저장되어 있는 볼륨의 클러스터 번호
  • Run Length: 총 몇 개의 클러스터에 데이터가 존재하는지 나타냄
  • 볼륨의 0xB88번째 클러스터로부터 0x9클러스터만큼 파일 데이터가 위치
  • 데이터 위치: Run Offest(0xB88) * 클러스터 크기(0x1000) = 0xB88000

 

NTFS 파일시스템 정리

  • NTFS VMR에서 Start Cluster for $MFT 값으로 MFT 주소를 구함
  • MFT 영역은 0x200크기의 MFT Entry로 구성, 각 엔트리에 Attribute를 찾을 수 있음
  • $STANDARD_INFORMATION Attribute: 파일의 생성/수정/변경 시각 데이터 찾기 가능
  • $FILE_NAME Attribute: 파일의 이름 찾기 가능
  • $DATA Attribute: 파일 데이터 찾기 가능
  • => 실제 파일 데이터는 크기에 따라 MFT 내에 있기도 하고, Data Area에 있기도 함(이때는 Cluster Run구조를 분석해 위치 찾기)

 

파일시스템 필요성

  • 새로운 공격 기번에 대한 심층적 분석 가능
  • 디지털 포렌식 도구들 온전히 신뢰 불가
  • 파일시스템 공부하며 데이터 구조를 따라가는 과정이 다른 아티펙트 분석에도 도움이 됨

실습

VBR

Corrupted Disk Image