보안/디지털 포렌식

[8장]파일 시스템과 파일 복구(2)

haerim9.9 2025. 1. 21. 17:23

이 글은 아래의 책 5장을 읽고 공부 목적으로 작성됨.

이상진, 「디지털 포렌식 개론」, 이룬, 2015


목차

더보기

4. NTFS

5. 디지털 포렌식 관점에서의 파일 시스템 분석

6. 파일 복구


4. NTFS

1) NTFS 소개

NTFS(New Technology File System) : 윈도우 NT부터 사용되기 시작한 파일 시스템

  • USN 저널(Update Sequence Number 또는 Change Journal) : 파일의 변경 내용을 기록하는 로그, 오류 발생 시 시스템이 재부팅될 때 완료하지 못한 작업을 복원한다.
  • ADS(Alternate Data Stream) : 
  • Sparse 파일 : 파일의 데이터가 0일 때, 실제 데이터를 기록하지 않고 크기 정보만 유지하는 파일
  • 파일 압축
  • EFS(Encrypting File System) : 파일 및 디렉터리를 암호화하는 기능, 대칭키 방식으로 암호화한다.
  • VSS(Volume Shadow Copy Serivce) : 새롭게 덮여 쓰인 파일 및 디렉터리에 대해 백업본을 유지하는 기능
  • Quotas : 다중 사용자를 지원하는 환경에서 각 사용자의 디스크 사용량을 제한하는 기능
  • 유니코드 지원
  • 동적 배드 클러스터 재할당 : 배드 섹터가 발생한 클러스터에 있는 정상 데이터를 자동으로 새롭게 할당한 클러스터에 복사하는 기능

 

2) NTFS 구조

NTFS 구조 : 

VBR(Volume Boot Record)
영역
MFT(Master File Table)
영역
Data
영역

 

VBR(Volume Boot Record) : 부트 섹터(Boot Sector)와 추가적인 부트 코드가 저장되는 부분

첫 섹터에는 부트 코드를 포함한 부트 섹터가 위치한다.

VBR 크기 = 1섹터인 경우 : VBR 자체 = 부트 섹터

VBR 크기 > 1섹터인 경우 : 첫 섹터 제외 나머지 섹터 = 추가적인 부트 코드 저장 용도 / NTLDR(NT Loader) 위치 저장 용도

 

부트 섹터 : 

 

MTF(Master File Table) : MFT Entry의 묶음

  1. MFT Entry : 각 파일들의 위치, 시간 정보, 크기, 파일 이름 등의 속성 정보를 저장
  2. 속성 : 파일의 종류에 따라 다양한 속성(파일의 시간 정보, 이름, 데이터 등)들이 저장된다.

    각 속성 앞부분에는 속성 헤더(Attribute Header)가 온다. 속성 헤더 종류 2가지(Resident, Non-resident)에 따라 데이터 구조가 다르다.
    -Resident : MFT Entry 내에 속성 헤더와 속성 내용이 모두 저장되는 경우
    -Non-resident : 별도의 클러스터에 속성을 저장하고, 속성 내용에는 클러스터의 위치 정보만 저장하는 경우
     +)Cluster Runs : Non-resident로 저장된 속성 내용이 크면 많은 클러스터가 할당됨 -> 파일 크기가 커질수록 저장해야 하는 양多, 이러한 정보를 효과적으로 관리하기 위한 구조

    일반적인 파일들의 3가지 속성
    -$STANDARD_INFORMATION : 파일의 생성/수정/접근시간, MFT 수정시간, 타입(읽기전용, 숨김, 시스템, 장치 등), 소유자 등의 정보를 나타냄.
    -$FILE_NAME : 파일 이름을 나타냄. 파일 크기, 파일의 부모 디렉터리, 파일 이름의 생성/수정/접근 시간 등도 함께 저장함.
    -$DATA : 파일의 내용을 담음.

Data : 파일의 실제 내용이 저장되는 공간

 

3) 파일의 할당/삭제로 인한 변화 요소

① 파일 할당

파일 삭제

 

5. 디지털 포렌식 관점에서의 파일 시스템 분석

1) 파일 시스템 상의 삭제 파일 복구

FAT 파일 시스템과 NTFS 모두 파일 삭제할 경우, 파일 내용을 초기화하지 않고 관련 플래그만 변경시킨다. Directory Entry 또는 MFT entry가 덮여 쓰이지 않았다면 비교적 완벽하게 파일 내용을 복구할 수 있다.

① FAT : 오프셋 0x00의 값이 0xE5를 갖는 Directory Entry에 대응되는 파일 = 삭제된 파일

② NTFS :  MFT Entry 0번의 $MFT의 $BITMAP 속성에서, 0x00 값을 가지는 MFT Entry에 대응되는 파일 = 삭제된 파일

 

2) 미할당 클러스터 분석(Unallocated Clusters Analysis) 

미할당 클러스터 : 메타정보를 통해 접근할 수 없는 클파일러스터를 의미한다.

 

파일이 삭제되면, FAT 파일 시스템은 해당 파일의 Director Entry가 새로운 파일 정보로 덮여 쓰이기 전까지는 파일의 내용에 접근할 수 있다. NTFS 또한 해당 파일의 MFT Entry가 새로운 파일로 덮여 쓰이기 전까지는 파일 내용에 접근할 수 있다.

미할당 클러스터는 이러한 Directory Entry나 MFT Entry 정보도 남아 있지 않은 영역을 말한다.

 

파일 시스템 별로 미할당 클러스터를 판별하는 방법

  • FAT 파일 시스템 : FAT 영역에서 0x00 값을 갖는 Directory Entry를 검색하여 각 Entry에 대응되는 클러스터를 찾는다.
  • NTFS : MFT Entry 6번의 $Bitmap 파일로부터 할당되지 않은 클러스터를 찾는다.

 

3) 슬랙 공간 분석(Slack Spaces Analysis)

램 슬랙의 경우 자동적으로 0x00으로 쓰여지므로 특정 데이터가 남아 있을 가능성은 없다. 하지만 파일 슬랙과 파일 시스템 슬랙, 볼륨 슬랙은 이전 파일 데이터/이전 파일 시스템에서 사용한 데이터/이전 파티션에서 사용한 데이터가 남아있을 가능성이 있다.

 

슬랙 공간을 판별하는 방법

  • 파일 슬랙 : 파일에 할당된 클러스터와 실제 크기의 차이를 계산하여 파일 슬랙이 존재하는지 판별한다.
  • 파일 시스템 슬랙 : 파일 시스템의 클러스터 크기를 확인하여 파일 시스템 슬랙이 생길 수 있는지 판별한다.
  • 볼륨 슬랙 : 볼륨 전체 크기와 MBR의 파티션 테이블에 할당된 파티션 크기의 합 사이의 차를 계산하여 볼륨 슬랙이 존재하는지 판별한다.

 

4) 시간 정보 분석(Timestamp Analysis)

효율적인 사건 분석을 위해서 사건이 발생한 시점을 중심으로 데이터를 분석하는 것이 효과적일 것이다. 파일 시스템 별로 시간 정보의 위치는 다음과 같다.

 

-FAT 파일 시스템 : 파일들의 Directory Entry 정보를 확인하면 다음의 시간 정보를 확인할 수 있다.

이름 설명
Created Time 파일이 생성된 시간
Created Date 파일이 생성된 날짜
Accessed Date 마지막으로 파일 내용에 접근한 날짜
Written Time 마지막으로 파일 내용을 수정한 시간
Written Date 마지막으로 파일 내용을 수정한 날짜


-NTFS : 파일들의 MFT Entry 에서 $STANDARD_INFORMATION, $FILE_NAME 속성을 확인하면 다음의 시간 정보를 확인할 수 있다.

이름 설명
Creation Time 파일이 생성된 일시
Modified Time 마지막으로 파일 내용이 수정된 일시
MFT Modified Time MFT 내용이 마지막으로 수정된 일시
Accessed Time 마지막으로 파일 내용에 접근한 일시

 

5) 부트 코드 분석

부트 코드는 MBR과 파일 시스템의 부트 섹터에 있다. 부트 코드를 분석하여 정상적인 실행 흐름을 벗어나는지 판단할 필요가 있다.

 

부트 코드 별 분석 방법

  • MBR : 부트 코드를 해석하여 부팅 가능한 파티션의 시작 위치로 점프하는지 확인한다.
  • 부트 섹터 : 부트 코드를 해석하여 정상적으로 부트 로더를 로드하는지 확인한다.

 

6) 미사용 영역 분석

파일 시스템에는 미래를 위해 예약해 둔 영역이나 불필요하게 생성된 영역이 있다. 이 영역 역시 기본적으로 참조하는 영역이 아니기 때문에 쉽게 파악하기 어렵다. 따라서 미사용 영역을 분석하여 특정 데이터가 삽입된 흔적이 있는지 분석할 필요가 있다.

 

파일 시스템 별 미사용 영역

-FAT 파일 시스템

  • MBR과 예약 영역 사이의 미사용 영역
  • 예약 영역에서 사용하지 않는 섹터(0, 1, 2, 6, 7, 8번 섹터 제외)
  • FSINFO 구조체 섹터(예약 영역의 1, 7번 섹터)에서 사용되지 않는 영역

-NTFS

  • MBR과 예약 영역 사이의 미사용 영역
  • VBR에서 부트 섹터를 제외한 나머지 섹터
  • 미래를 위해 예약해 둔 MFT Entry 12-15번 영역

 

7) 은닉 파일 분석

운영체제에 의해 기본적으로 숨긴 속성이 설정된 시스템 파일도 있지만, 그 외의 은닉하기 위한 목적으로 숨긴 파일도 존재한다. 따라서 숨긴 속성을 가진 파일을 분류해 분석하는 방안이 필요하다.

 

파일 시스템 별 숨긴 속성 확인 방법

  • FAT 파일 시스템 : 파일의 Directory Entry 항목 중 오프셋 11의 Attribute가 0x02 값을 가진다.
  • NTFS : 파일의 MFT Entry에서 $STANDARD_INFORMATION 속성의 오프셋 32~35의 FLAGS가 0x0002이다.

 

8) 암호 파일 분석

NTFS는 EFS에 의해 파일 시스템 수준에서 암호화 기능을 제공한다. 이러한 암호 파일을 분류해 분석하는 과정이 필요하다.

 

NTFS에서 암호화 속성을 확인하는 방법 : 파일의 MFT Entry에서 $STANDAR_INFORMATION 속성의 오프셋 32~35의 Flags가 0x4000이다.

 

9) ADS 파일 분석

NTFS는 하나의 파일이 두 개 이상의 데이터 속성을 가질 수 있는 ADS를 지원한다. ADS 파일들은 운영체제를 통해 확인할 수 없는 만큼 데이터를 은닉하기 위한 목적으로 이용될 가능성이 있다.

 

NTFS에서 ADS 파일을 확인하는 방법 : 전체 MFT Entry를 대상으로 $DATA 속성을 두 개 이상 가지는 MFT Entry를 조사한다.

 

10) 로그 정보 분석

NTFS는 파일 시스템의 변경 사항을 기록하기 위한 목적으로 MFT Entry 2번인 $LogFile과 MFT Entry 11번인 $Extend 파일에 포함된 $Extend\$UsnJrnl 파일을 사용한다. 이 파일들의 크기는 제한적이기 때문에 포맷 후 모든 변경 사항을 기록하진 못하고 최근 작업을 기준으로 저장된다. 따라서 이러한 파일들을 분석하면 최근에 발생한 파일 시스템의 변화를 알 수 있다.

 

11) $Boot 파일 분석

NTFS의 MFT Entry 7번인 $Boot 파일의 $DATA 속성에는 부트 섹터의 위치 정보와 부트 코드가 저장되어 있다.

부팅 용도로 사용되지 않는 NTFS에도 해당 속성은 존재하며, 이는 활동되지 않기 때문에 해당 파일의 $DATA 속성에 데이터를 은닉할 수 있다.

 

12) $BadClus 파일 분석

NTFS의 MFT Entry 8번인 $BadClus 파일의 용도는 배드 섹터가 발생한 클러스터를 관리하기 위한 목적으로 사용된다.

배드 섹터가 발생한 클러스터는 파일 시스템의 할당 알고리즘에 적용받지 않으며, 정상적인 클러스터도 $BadClus에 등록할 수 있다. 따라서 정상적인 클러스터를 $BadClus에 등록한 후 해당 영역에 데이터를 은닉할 수 있다.

 

6. 파일 복구

파일 복구는 크게 하드웨어를 사용한 복구와 소프트웨어를 사용한 복구로 나눌 수 있다. 소프트웨어를 사용한 복구는 운영체제를 통해 파일을 복구하는 기법으로, 다시 파일 시스템 상의 파일 복구와 파일 카빙으로 나눌 수 있다.

 

1) 파일 시스템 상의 파일 복구

파일을 삭제할 경우 메타정보와 실제 파일 내용을 초기화하지 않고 단순히 메타정보의 특정 플래그만 변경시킨다. 파일 시스템 상의 팡리 복구는 이와 같이 삭제된 것으로 표시된 메타정보를 찾아서 해당 파일을 복구하는 기법이다.

 

① FAT 파일 시스템에서 파일 복구

FAT 영역에서는 파일이 삭제될 경우

  1. 파일에 할당되었던 클러스터에 대응되는 FAT Entry가 0x00으로 초기화된다.
  2. 해당 파일의 Directory Entry의 오프셋 0x00의 값이 0xE5의 값으로 변경된다.

이 경우 클러스터에는 파일의 내용이 그대로 남아 있게 된다. 해당 클러스터가 새로운 파일로 덮여 써지지 않았다면 파일을 비교적 쉽게 복구할 수 있다. 단, 파일이 여러 클러스터에 조각나 기록된 경우에는 FAT 영역에서 클러스터 체인을 확인할 수 없어 완벽하게 복구하기 어렵다.

 

② NTFS에서 삭제된 파일 복구

NFTS에서는 파일의 메타정보를 유지하기 위해 MFT Entry, MFT Entry의 할당 상태를 표시하기 위한 $MFT(MFT Entry 0) 파일의 $BITMAP 속성, 클러스터의 할당 상태를 표시하기 위한 $Bitmap(MFT Entry 6) 파일의 $DATA 속성을 사용한다.

 

파일이 삭제될 경우

  1. $MFT 파일의 $BITMAP 속성에서 해당 파일이 사용했던 MFT Entry 비트가 0으로 설정된다.
  2. $Bitmap 파일의 $DATA 속성에서 해당 파일에 할당됐던 클러스터 비트가 0으로 설정된다.

결국 MFT Entry와 클러스터의 내용은 변하지 않는다.

파일의 내용이 Resident 속성일 경우 MFT Entry상에 저장되므로 완벽하게 복구할 수 있다. Non-resident 속성의 경우에도 Cluster Runs 정보를 통해 완벽하게 복구할 수 있다.

 

 

2) 파일 카빙

파일 카빙 기법은 저장 매체의 미할당 영역으로부터 파일을 복구하는 기법으로, 저장매체의 공간 할당에 따라 연속적인 카빙(continuous carving)기법과 비연속적인 카빙(fragment recovery carving)기법으로 나눌 수 있다.

연속적인 카빙 기법은 파일 내용이 저장 매체의 연속된 공간에 저장된 경우 수행하는 카빙 기법이고, 비연속적인 카빙 기법은 파일의 내용이 저장 매체의 여러 부분에 조각나 저장된 경우에 수행하는 카빙 기법이다.

 

연속적인 카빙 기법

 

① 시그니처 기반 카빙

파일 카빙은 파일의 고유한 특성을 이용해 복구해야 한다.

 

시그니처 기반 카빙 기법 : 파일 포맷별로 존재하는 고유한 시그니처를 이용하는 방법

시그니처는 파일의 시작 부분에 위치한 헤더(Header) 시그니처와 파일의 마지막에 존재하는 푸터(Footer) 시그니처가 있다. 두 시그니처가 모두 존재하는 파일의 경우, 두 시그니처 사이가 파일 내용이 될 것이다.

 

파일 포맷 시그니처
헤더(Hex) 푸터(Hex)
JPEG FF D8 FF D9
GIF 47 49 46 38 37 61 ("GIF87a") 00 3B
47 49 46 38 39 61 ("GIF89a")
PNG 89 50 4E 47 0D 0A 1A 0A 49 45 4E 44 AE 42 60 82
PDF 20 50 44 46 2D 31 2E ("PDF-1.") 25 25 45 4F 46 ("%%EOF")
HTML "<HTML" or "<html" "</HTML>" or "</html>"
"<!DOCTYPE HTML" or "<!doctype html"

 

하지만 시그니처 기반 카빙의 경우 파일을 구분하는 시그니처의 크기가 작거나 일반적인 경우, 파일 내용의 바이트 스트림에서도 같은 값이 존재할 가능성이 있다.

 

② 램 슬랙 카빙

램 슬랙은 파일 크기가 512바이트의 배수가 되지 않아 0x00으로 채워지는 영역을 의미한다. 따라서 푸터 시그니처 이후에 램 슬랙이 존재하게 된다.

시그니처 기반 카빙 기법에서 푸터 시그니처와 함께 램 슬랙을 확인하면 오탐을 줄일 수 있다.

 

파일 구조체 카빙

파일 구조체 카빙 기법 : 파일의 구조를 분석하여 카빙하는 기법, 푸터 시그니처가 존재하지 않거나 파일 포맷 내부에 여러 개의 시그니처가 존재하는 경우에 효과적인 방법

 

파일 구조체 카빙 기법은 파일 크기 획득 방법과 파일 구조 검증 방법으로 나뉜다.

  • 파일 크기 획득 방법 :
    대부분의 파일은 파일의 앞부분에 파일 구조체가 위치한다. 파일 구조체에는 파일의 크기/형식 등의 정보가 포함된 메타정보가 저장되며, 파일 크기 정보를 획득하여 카빙하는 방법이 파일 크기 획득 방법이다.
  • 파일 구조 검증 방법 :
    빈번한 수정이 이루어지는 문서파일과 같은 경우에는 데이터 표현을 위해 고유한 계층구조를 사용한다. 이러한 계층 구조를 검증하여 카빙하는 방법이 파일 구조 검증 방법이다.
    소프트웨어로 확인 가능하고 속도에 큰 영향을 미치지 않는 범위에서 적용해야 한다.