공부/Forensic

Forensic 기초 지식

완이버스 2025. 1. 18. 19:46

리틀엔디언

작은 바이트부터 메모리에 저장하는 방식

ex) 0x01234567를 메모리에 저장한다고 하면

메모리 주소 0x100 0x101 0x102 0x103
16진수 0x67 0x45 0x23 0x01
2진수 0110 0111 0100 0101 0010 0011 0000 0001

NTFS 환경 리틀엔디언 실습

VBR(Volumne Boot Record)

- 0x0B ~ 0x0C(2byte): Bytes per sector

- 0x0D ~ 0x0D(1byte): Sectors per cluster

- 0x1C ~ 0x1F(4byte): Hidden sectors

- 0x28 ~ 0x2F(8byte): Total sectors

분석

Bytes per sector: 0x20

Sectors per cluster: 0x08

Hidden sectors: 0x3A8

Total sectors: 0x3A1E246F

단 File Signature는 리틀 엔디언 형식이 아닌 빅 엔디언 형식으로 읽어야 함 

Encoding

데이터를 특정한 규칙에 따라 특정한 형식으로 변환하는 것

ASCII, Base64, URL... 등이 있다

ASCII 

특징 

1. ASCII 테이블에 따라 값을 문자로 변환하는 인코딩 방식

2. 128개의 문자와 특수문자를 0x00 ~ 0x7F(0 ~ 127)의 숫자로 매핑하는 테이블을 의미

3. 숫자, 영어(대,소문자), 특수문자들로 구성

Base64

바이너리 데이터를 미리 지정된 64개의 문자를 이용해 표현하는 인코딩 기법

원본에 비해 데이터 길이가 길어지는 특징이 있다

인코딩에 사용되는 문자열을 다음과 같다

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=

이러한 형태로 인코딩된 데이터라면 Base64로 인코딩 되었을 가능성을 의심해봐야할 것


파일 시스템

파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체제

파티션

저장 장치(디스크)내의 공간을 분리해 독립적인 공간을 만든 것

볼륨

하나의 저장 공간을 의미, 자세한 의미는 파일시스템을 갖춘 저장 공간을 지칭

볼륨과 파티션은 서로 혼용해서 사용

파일 시스템 종류

운영체제 파일시스템 특징
Windows NTFS  
  ReFS NTFS 대체 차세대 파일시스템
Linux EXT4  
Unix UFS  

디지털 포렌식에서 파일 시스템 파악이 중요한 이유

1. 파일시스템에 대한 정보 없이는 데이터 저장 위치를 파악하는 것이 어려움

    - 삭제된 파일을 복구하는 것을 파일 카빙(File Carving)기술이 요구

    - 파일 카빙이란 파일 시그니처와 같은 구조적 특성을 이용해 메타데이터 없이 원본 파일을 복원하는 기법

2. 데이터의 위치를 알아냈다 하더라도, 메타데이터를 알아내기 위해서는 파일시스템 구조에 대한 이해가 필요

3. 파일시스템을 이해한다면 파일의 변경 이력 혹은 삭제된 파일을 복구하는 것이 가능


MBR과 VBR

MBR(Master Boot Record): 디스크의 가장 첫 섹터에 저장되는 데이터
섹터는 디스크의 최소 기억 단위이며 512byte

VBR(Volume Boot Record): 볼륨의 가장 첫 섹터에 저장되는 데이터
파일시스템과 클러스터의 크기에 따라 달라질 수 있음

MBR과 VBR의 역할

컴퓨터의 부팅 과정에서 사용되는 데이터
BIOS가 시작될때 기본적인 하드웨어 점검을 마치면 MBR내의 부트 코드를 호출 가능
MBR은 저장 장치의 파티션 정보, 각 파티션에 설치된 볼륨의 정보를 가지고 있음

이름 오프셋 설명
부트 코드 0x0 - 0x1BD 부팅 과정에서 이용되는 코드
파티션 테이블 엔트리 #1 0x1BE - 0x1CD 1번 파티션에 대한 파티션 정보
파티션 테이블 엔트리 #2 0x1CE - 0x1DD 2번 파티션에 대한 파티션 정보
파티션 테이블 엔트리 #3 0x1DE - 0x1ED 3번 파티션에 대한 파티션 정보
파티션 테이블 엔트리#4 0x1EE - 0x1FD 4번 파티션에 대한 파티션 정보
시그니처 0x1FE - 0x1FF 고정값 0x55 0xAA

이름 오프셋 설명
부트 플래그 0x0 - 0x0(1 byte) 부팅 불가(0x00), 부팅 가능(0x80)
CHS 시작 주소 0x1 - 0x3(3 byte) CHS 방식 기반 시작 주소(섹터)
파일 시스템 타입 0x4 - 0x4(1 byte) NTFS(0x07), FAT32(0x0C)
CHS 끝 주소 0x5 - 0x7(3 byte) CHS 방식 기반 끝 주소(섹터)
LBA 시작 주소 0x8 - 0xB(4 byte) LBA 방식 기반 시작 주소(섹터)
파티션 총 섹터 개수 0xC - 0xF(4 byte) 섹터 개수 * 512 = 섹터의 크기

LBA(Logical Block Addressing)

물리적 시작 주소: 0x800 * 0x200(sector size) = 0x100000

FAT32

FAT(File Allocation Table)은 파일이 저장되는 위치를 기록한 테이블

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

Reserved Area

  • 32개의 섹터로 구성
  • Boot Sector, FSINFO, Boot Strap으로 구성

Boot Sector: 0번 섹터(원본), 6번 섹터(백업)
FSINFO: 1번 섹터(원본), 7번 섹터(백업)

Boot Strap: 2번 섹터(원본), 8번 섹터(백업)

Reserved Area: 나머지 섹터들이며 주로 비어있음

포렌식 관점에서 주요한 데이터들은 Boot Sector에 위치하고 있음

USB(FAT32)를 HxD로 확인한 Boot Sector 영역

FAT32 Boot Sector 구조

이름 오프셋 설명
Jump Command 0x0 - 0x2 부트 코드로 점프
BPB(Bios Parameter Block) 0x3 - 0x5A 볼륨의 전반적인 설정을 포함
부트 코드 0x5B - 0x1FD 볼륨 부트 코드
시그니처 0x1FE - 0x1FF 고정값 0x55 0xAA

BPB(Bios Parameter Block) 구조 분석

BPB Structure(Dreamhack)

  • OEM ID: MSDOS5.0
    • FAT32의 경우 MSDOS5.0으로 fix
  • Reserved Sector: 0xD60
    • FAT 영역 이전에 존재하는 섹터 수, FAT Area가 시작되는 오프셋을 의미
    • FAT Area: 0xD60 * 0x200(sector size: 512byte) = 0x1AC000
  • Total Sector 32: 0x3956FE0
    • 볼륨의 총 섹터 수
  • FAT Size 32: 0x3950
    • FAT Area 1개의 크기, 크기는 0x3950 * 0x200 = 0x72A000
  • Volume Serial Number: 0xEC590A1D
    • 볼륨 식별자
  • File System Type: 0x332020203233544146
    • FAT32

FAT Area

FAT Area는 FAT Table 2개가 연속으로 존재하는 영역(1개 원본, 1개 백업)

FAT Table은 FAT 파일시스템에 존재하는 파일 및 폴더에 대한 메타데이터를 저장하는 공간으로 중요 영역

FAT Area(0x1AC000)

각 엔트리는 Data Area의 할당 상태를 의미
각 엔트리는 4byte이고 Data Area의 클러스터 크기는 0x1000byte의 크기를 가짐

구분 방식은 0번과 1번 엔트리는 사용하지 않음/ 2번 엔트리부터 사용자 생성 폴더나 파일을 가짐(Dreamhack)

Data Area

Data Area Offest: VBR offest + Reserved Sector * Sector Size + FAT Size * Sector Size * 2

                                     0           +         0xD60          *       0x200     +   0x3950  *    0x200        * 2 = 0x100 0000

0x1000000에 FAT32의 Root Directory가 위치한다

먼저 VBR로부터 Reserved Sector 필드를 읽어 FAT Area 위치를 찾고, FAT Size 필드를 읽어 Data Area 위치를 찾아낼 수 있습니다. 이후에는 FAT Area의 각 엔트리를 통해 각 엔트리의 할당 여부를 확인할 수 있습니다. 또한 Data Area에서는 Root Directory로부터 모든 파일/폴더의 이름, 확장자, 생성/수정/접근 시간, 그리고 파일의 데이터까지 읽어낼 수 있습니다. 
출처:) Dreamhack.io

Root Directory는 2번 클러스터에 해당되며, FAT Table 2번에 대응된다
그리고 Directory Entry의 구조가 반복되면서 저장됨

Directroy Entry

  • Name: TEST
  • Extentsion : TXT
  • First Cluster: 0x6
  • File Size: 0x1C1

즉 원본 데이터는 0x6에서 확인할 수 있음. Root Directory가 2번 클러스터에 있으니 현재 클러스터에서 4개의 클러스터 이후에 원본 데이터를 확인할 수 있다.

원본 데이터: Root Directory(0x1000000) + Cluster size(0x1000) * 4 = 0x1004000

 

'공부 > Forensic' 카테고리의 다른 글

파일 시그니처(File Signature), 메모리 덤프(Memory Dump)  (0) 2025.01.19
NTFS 파일 시스템  (0) 2025.01.19
Volatility Tool 사용  (0) 2024.07.10