본문 바로가기

드림핵

[드림핵] 파일 시스템 + 실습

 

Digital Forensics Basics | Path | Dreamhack

 

Digital Forensics Basics | Path | Dreamhack

이런 이유로 이 Path를 추천해요 기업 정보 유출, 악성코드 감염, 내부자 위협 등 다양한 사이버 사건의 이면을 밝혀내고, 그 증거를 수집하는 분야가 바로 디지털 포렌식입니다. 본 Path는 실제 사

dreamhack.io

 

[ 1. 파티션, 볼륨 ]

 

1. 파티션(Partition)이란?

  • 저장 장치 내 공간을 분리하여 독립적인 공간을 만드는 것
  • 예를 들어, 하나의 하드디스크를 파티션 1, 2, 3으로 나눌 수 있다

2. 볼륨(Volume)이란?

  • 하나의 저장 공간을 의미하며, 보통 C 드라이브, D 드라이브처럼 불린다.
  • 하나의 파티션에 하나의 볼륨이 생성되는 경우가 많다.

 

포맷과 볼륨 재생성

  • 포맷(Format) 이란? → 볼륨에 파일 시스템을 새로 설치하는 작업.
  • 볼륨 삭제 후 "할당되지 않음" 공간에 새 파티션 및 볼륨을 만들 수 있다.

볼륨 크기(단위: MB)는 생성할 때 직접 설정할 수 있다.

 

파티션, 볼륨 실습 

[준비]

  • USB나 여분의 저장 공간 필요
    (※ 기존 데이터 삭제 위험 있으니 주의!)

[실습 과정]

 

1. 디스크 관리 열기 (Windows + S → '디스크 관리' 검색)

2. 파티션 나누기 → 새로운 볼륨 생성

 

3. 볼륨을 포맷(Format)하여 파일 시스템(FAT32, NTFS 등) 지정

 

4. 볼륨 이름(레이블) 설정

5. 볼륨 삭제

 

6. 볼륨 재설정 ("할당되지 않음" 우클릭 -> "새단순 볼륨" 클릭)

 

7. 볼륨 재설정 - 파티션 크기 (자동으로 넣어주는 값보다 훨씬 작게 설정)

 

 

[실습 결과]

디스크 1에 파티션 2개. 

 

파티션1에는 FAT32 파일 시스템
파티션 2에는 NTFS 파일 시스템 

 

 

파티션 = 공간 구획
볼륨 = 파일 시스템이 설치된 저장 공간
포맷 = 파일 시스템 새로 설치하는 과정

 

 

 

 

 

 

 

 

[ 2. 파일 시스템 ]

1. 파일 시스템이란? 
디지털 데이터를 효율적으로 관리하기 위해 파일을 체계적으로 기록하는 방법

파일 시스템이 하는 일:

  • 저장장치 공간을 파악하고, 파일을 효율적으로 저장
  • 사용자가 파일을 생성, 수정, 삭제할 수 있게 지원
  • 파일의 생성 시간, 수정 시간, 변경 시간 기록
  • 파일의 생성·수정·삭제 이력을 로그로 남기고 복구 지원
  • 파일이나 폴더에 접근 권한 부여


"파일을 효율적이고 체계적으로 관리하기 위한 필수 시스템"

 

 

2. 파일 시스템의 종류

 

 

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

 

파일 시스템이 중요한 이유 3가지

  1. 파일 위치 파악
    • 파일 시스템 정보 없으면 데이터 저장 위치를 알기 어렵다.
    • '파일 카빙(File Carving)' 기법으로 어느 정도 찾을 수 있지만 정확도는 떨어진다.
  2. 메타데이터 추출
    • 파일 위치를 알아도, 파일 이름, 경로, 생성/수정 시간 등 메타데이터를 알기 위해서는 파일 시스템 구조 이해가 필수다.
  3. 파일 복구 및 변경 이력 확인
    • 파일 시스템은 변경 이력(저널링, Journaling)을 남겨 복구를 돕는다.
    • 시스템 충돌, 정전 등에도 데이터 상태를 기록해 분석에 유리하다.

 

 

 

[ 3. MBR 과 VBR ]

1. MBR (Master Boot Record)

  • 디스크(저장장치)의 가장 첫 번째 섹터에 저장되는 데이터입니다.
  • 크기는 전통적인 하드디스크 기준 512바이트.
  • 역할: 저장장치 파티션 정보, 부팅 가능한 볼륨 정보 기록 → 부트 코드 실행.

2. VBR (Volume Boot Record)

  • 각 볼륨의 첫 번째 섹터에 저장되는 데이터입니다.
  • 파일시스템과 클러스터 크기에 따라 크기가 달라질 수 있습니다.
  • 역할: 부팅 가능한 볼륨을 로드하여 운영체제를 시작하는 데 사용.

 

BIOS → POST → MBR → VBR → 운영체제 부팅

- MBR: 부트 가능한 볼륨을 지정

- VBR: 해당 볼륨의 부트로더와 커널을 불러오는 역할

 

 

3. 슬랙

 

  • 슬랙은 파일 시스템 구조 내 남는 빈 공간을 뜻합니다.
  • MBR 슬랙: MBR 이후 다음 구조가 오기 전까지의 빈 공간.

 

4. MBR 구조

 

(색깔 별로 표시됨)

 

 

  • 맨 앞 1바이트 → 부트 가능한지?
  • 그 다음 3바이트 → 시작 위치(CHS)
  • 그 다음 1바이트 → 파일 시스템 종류
  • 그 다음 3바이트 → 끝 위치(CHS)
  • 그 다음 4바이트 → 시작 위치(LBA)
  • 그 다음 4바이트 → 파티션 크기(총 섹터 수)

 

 

 

 

 

 

 

 

[ 4. FAT32 ]

1. FAT32 파일 시스템의 기본 구조

구역 이름 설명
Reserved Area VBR, FSINFO, Boot Strap 등을 저장하는 구역
FAT Area 파일 위치를 기록하는 테이블 (FAT Table 2개)
Data Area 실제 파일과 폴더 데이터가 저장되는 구역

 

 

2. Reserved Area

  • Boot Sector: 0번 섹터에 위치 (백업은 6번 섹터)
  • FSINFO: 파일 시스템 정보 저장 (1번 섹터)
  • Boot Strap: 부트 코드 저장 (2번 섹터)
  • Reserved Sector: 나머지 빈 공간

-> 디지털 포렌식에서는 특히 Boot Sector가 중요!

 

FAT32 Boot Sector 구조

 

3. FAT Area

  • FAT Table 2개가 연속으로 저장돼 있다 (1개는 백업용)
  • FAT Table은 파일이 저장된 클러스터 위치를 기록
  • 하나의 FAT 엔트리는 4바이트

 

 

4. Data Area

  • 실제 파일 데이터가 저장되는 영역입니다.
  • Root Directory(루트 디렉터리)부터 시작해 파일 목록(Directory Entry) 관리.

 

 

5. 파일 찾기 흐름 

  1. Reserved Area → FAT Area 시작 찾기
  2. FAT Area → 파일의 클러스터 위치 찾기
  3. Data Area → 실제 파일 데이터 접근

 

 

 

 

[ 4. NTFS  ]

1. NTFS 구조

구역 설명
VBR (Volume Boot Record) 볼륨 정보와 부트 코드 저장
MFT (Master File Table) 모든 파일과 폴더의 메타데이터 저장 (파일 이름, 크기, 위치 등)
Data Area 실제 파일/폴더 데이터가 저장되는 곳
Backup VBR VBR의 복사본, 맨 끝에 있음 (복구용)

 

 

 

2. NTFS의 VBR 구조

 

 

 

3. MFT

 

NTFS 파일 시스템에서는 모든 파일과 폴더 정보를 MFT (Master File Table) 에 기록해 관리한다.
파일에 대한 메타데이터를 체계적으로 저장하는 "목차" 같은 역할

  • 파일 이름
  • 생성/수정/접근 시간
  • 실제 파일 데이터의 위치
  • 파일 크기 등

모든 파일/폴더는 MFT Entry 하나씩을 가지고 있고, 이 Entry들이 모여 거대한 MFT를 이룬다.

 

 

  • Entry Header는 "나 누구야" 기본 정보
  • Fix-up Array는 에러 대비용
  • Attribute Area는 진짜 중요한 파일 정보를 가짐
  • End Marker는 "여기서 끝!" 표시

Attribute Area란?

Attribute Area 안에는 여러 개의 "Attribute"가 들

Attribute ID 이름 설묭
0x10 $STANDARD_INFORMATION 파일의 생성/수정/접근 시간 정보
0x30 $FILE_NAME 파일/폴더 이름 및 경로 정보
0x80 $DATA 파일 실제 내용 또는 데이터 위치

 

 

 

 

4. Data Area

 

NTFS 파일 시스템에서는 파일 데이터가 MFT에 직접 저장될 수도 있고,
Data Area라는 별도 공간에 저장될 수도 있다.

기준:

  • 700 Byte 이하 파일 → MFT 내부($DATA Attribute)에 저장
  • 700 Byte 초과 파일 → Data Area에 저장 (MFT에 위치 정보만)

->  파일 크기에 따라 저장 방식이 달라짐

 

Data Area 주소 계산 방법

Data Area에 파일이 저장될 경우,
Cluster Run이라는 특별한 방식으로 데이터 위치관리.

- Cluster Run 해석하는 방법

  1. 첫 번째 nibble(4bit) → Length (데이터가 차지하는 클러스터 수)
  2. 두 번째 nibble(4bit) → Offset (어디부터 저장되어 있는지)

 

 

 

 

 

 

 

[ 5. FTK Imager  ]

1. FTK Imager란?

  • FTK Imager는 디스크 이미지를 생성하고, 생성한 이미지를 분석하는 포렌식 도구
  • 파일 시스템에 저장된 데이터뿐만 아니라 파일의 메타데이터(생성 시간, 수정 시간 등)까지 추출할 수 있음.

2. 디스크 이미지 생성

  • NTFS로 포맷된 USB나 Windows 시스템 디스크를 대상으로 디스크 이미지를 생성.
  • 생성된 이미지는 FTK Imager를 통해 탐색 및 분석할 수 있다
  • [Image File 생성] 메뉴를 이용해 대상 드라이브를 선택하여 이미지를 만든다

3. 메타데이터 추출

  • FTK Imager는 단순히 파일 데이터만 복사하는 것이 아니라, 파일의 생성/수정/접근 시간 같은 메타데이터도 함께 추출
  • 추출한 파일은 원본 시스템에서의 시간 정보를 그대로 반영.
  • FTK Imager에서 표시하는 시간은 기본적으로 UTC+0 기준. (Windows 파일 탐색기에서는 로컬 시간대 설정을 적용해서 다르게 보일 수 있음)

 

 

[ 6. 파일 시스템의 필요성  ]

  1. 새로운 공격 기법에 대한 심층 분석 가능
    • 파일 시스템 구조를 의도적으로 변조한 공격을 분석하려면, 파일 시스템에 대한 이해가 필수
  2. 디지털 포렌식 도구의 한계 보완
    • 포렌식 도구들은 파일이나 폴더만 읽어올 뿐, 모든 공격 흔적을 찾아주지는 못합니다.
    • 파일 시스템을 직접 분석할 줄 알아야 도구가 놓친 부분까지 찾아낼 수 있습니다.
  3. 아티팩트(Artifact) 분석에 필수
    • 파일 시스템을 공부하면, 디지털 포렌식 과정에서 생성된 다양한 아티팩트 구조를 더 쉽게 이해하고 분석할 수 있습니다.
    • 새로운 유형의 흔적이나 변조를 찾아내는 데도 큰 도움이 됩니다.

 

 

 

 

 

 

[VBR 실습]

<문제>

주어진 VBR을 분석하고, 플래그를 계산하시오.

• A: 파일시스템이 FAT32면 1, NTFS면 2

• B: 해당 볼륨의 크기
• C: 볼륨 시리얼 번호

FLAG = DH{(A + B + C)} (단, 더한 값을 십진수로 변환할 것)

예를 들어 파일시스템이 NTFS, 볼륨의 크기가 0x100000 , 그리고 볼륨 시리얼 번호가 0×12341234 면, 2 + 0x100000 + 0x12341234 =
0×12441236 = 306450998 (십진수) 이므로 DH{306450998} |을 제출하시면 됩니다.

 

 

 

<풀이>


FAT32 가 보이므로 A = 1

 

 

"섹터 수" × "섹터 크기" = 실제 볼륨 크기

섹터 하나의 크기는 512바이트 (0x200)

섹터 수: 0x20 ~ 0x23

시리얼 번호: 0x43 ~ 0x46

 

볼륨 크기(Total Sectors 32)는 오프셋 0x20 ~ 0x23에 저장되므로 

00 80 3E 00 의 헥스값을 가짐.

 

0x3E8000 × 0x200 = 0x7D000000

0x7D000000 = 2097152000 (십진수)

->B: 2097152000

 

 

 

 

EA EE 8A 0E

리틀 엔디언이므로 거꾸로 읽으면 0E 8A EE EA

16진수: 0x0E8AEEEA

0x0E8AEEEA = 243760234 (십진수)

-> C = 243760234

 

 

 

 

 

FLAG = DH{(A + B + C)} (단, 더한 값을 십진수로 변환할 것)

 

(이미 십진수)

A + B + C = 2340912235

FLAG = DH{2340912235}