티스토리 뷰

 

해당 포스트는 Start up 디스크 포렌식의 파일시스템 구조이해에 대한 내용입니다..


1.FAT32 파일추적 및 복구

FAT32 파일시스템 구조

FAT32의 파티션 구조는 간단하게 구성되어 있다.

 

Boot Sector는 MBR 구조와 같이 특정 오프셋 별로 가리키는 의미가 다르다.

 

1. Boot Code: 0 ~ 2byte

2. BIOS Parameter Block : 3 ~ 89byte

3. Boot Code와 Error Message : 90 ~ 509byte

4. 시그니처 2byte : 510 ~ 511byte

 

FAT32 BR 구조

의미 내용
Jump Boot Code Boot Strap Code로 점프하기 위한 부분
OEM Name OEM 회사를 나타내는 문자열로써, FAT32는 MSDOS5.X로 표시된다.
Byte Per Sector 한 섹터가 몇 byte로 구성되어 있는지를 나타낸다. 기본 512byte
SP 클러스터를 구성하는 섹터의 수 기본적으로 8개의 섹터를 사용한다.(4096byte)
RS 예약된 섹터의 개수
Num FATS FAT의 개수를 나타낸다. (기본적으로 FAT32는 2개 사용)
Media Type 볼륨이 어떤 미디어 매체를 이용하는지를 나타낸다. 고정식 디스크는 0xF8을 사용
Total Sector 32 파티션상의 총 섹터 개수를 의미
FAT Size 32 FAT 영역의 섹터 수를 의미 , FAT 1개에 대한 크기
File System Version FAT32 버전 정보 의미
Root Directory Cluster 루트 디렉터리의 시작위치를 나타낸다.
File System Information FSInfo 구조체에 대한 정보가 어디에 저장되어 있는지를 의미 BR기준 보톡 1번 섹터에 저장
Boot Record Backup Sector BR이 백업된 섹터 번호를 나타낸다. 기본값으로 6을 사용
Volume ID 볼륨 시리얼 번호를 의미
Volume Label(1,2) 볼륨의 이름을 기록
File System Type 해당 파일시스템의 타입을 나타낸다. FAT32의 값을 저장

 

Reserved 영역은 예약된 파일시스템에 대한 정보를 구조체로 저장하고 있다.

BR에 대한 백업 본을 저장하고 있으며 FAT의 경우 클러스터의 상태 값을 가지고 있는 영역으로 각각의 클러스터 정보는 4byte로 나타나게 된다.

 

(1) 루트디렉터리 추적

 

실습파일을 HxD로 열어주자

일단 아래는 루트 디렉터리 위치를 알아내기 위한 정보들이다.

위 사진의 FAT32의 BR영역에서 필요한 정보만 분석해보면 아래와 같다.

의미 내용
BS 0x200
SP 0x08
RS 0x101A
FAT 개수 0x2
Total Sector 32 0x001fe800
FAT Size 32 0x000007f3
Root Directory Cluster 0x02
File System Information 0x01
Boot Record Backup Sector 0x06

 

루트 디렉터리로 가기 위해서는 FAT Area의 위치를 알아야한다.

FAT Area의 위치는 BR주소 + RS = 128 + 0x101A = 4250 섹터

4250 섹터로 이동하면 FAT 구조를 볼 수 있고 아래 사진에서 00으로 채워진 공간은 사용하지 않는 FAT Area영역이다.

FAT 영역

루트 디렉토리로 가기 위해서는 FAT 주소에 FAT 크기의 2를 곱한 값을 더해 주면 된다. 2를 곱하는 이유는 FAT의 개수를 기본적으로 2개를 쓰고 있기 때문이다.

4250 + (2035(0x07F3)*2) = 8320

FAT32 루트 디렉터리 정보

8320번 섹터로 이동하게 되면 우리가 원하던 데이터에 대한 정보를 저장하고 있는 루트 디렉터리를 볼 수 있다.

32byte의 루트 디렉터리 구조

  • NAME : 파일에 대한 이름을 나타낸다. 첫 번째 byte가 0xE5로 시작되면 삭제된 파일을 의미한다. 삭제된 파일을 나타내는 0xE5를 다른 문자열로 바꾸면 해당 파일은 복구할 수 있다. 0x00은 사용하지 않는 영역이다.
  • Extension : 파일 확장자
  • ATTR : 파일에 대한 속성
  • Reserved : 예약된 영역
  • CreateTime : 파일이 생성된 시간을 의미한다.
  • Crearted Data : 파일이 생성된 날짜를 나타낸다.
  • Last Accessed Data : 파일에 마지막 접근된 날짜
  • Starting Cluster Hi : 파일에 마지막 접근된 날짜
  • Last Written Time : 파일에 대한 마지막 수정시간
  • Last Written Data : 파일에 대한 마지막 수정날짜
  • Starting Cluster Low : 파일에 대한 클러스터 하윗값
  • File Size : 파일에 대한 크기

 

위 내용들을 가지고 8320 섹터를 분석해보면 시작이 0xE5로 삭제된 파일이고 PNG 확장자를 가지고 있으며

파일 사이즈는 0x26E2byte이다. 파일의 생성시간은 18시 26분 12초이고 생성 날짜는 2016년 4월 2일이다.

 

(2) FAT32에서 파일 이름이 긴 파일

해당 실습 파일의 이미지 파일명은 abcdefg12345678.jpg이다.

이렇게 이름이 긴 파일은 루트 디렉터리에 새로 32byte의 영역을 새로 할당 후 이름만을 저장하게 되며, 실제 파일정보가 있는 루트 디렉터리는 Name 오프셋에 저장할 수 있는 byte 제한으로 파일이름이 ~으로 축소되어 저장된다.

2.NTFS 파일추적 및 복구

NTFS의 구조는 아래와 같이 FAT32보다 간단하다.

우선 Boot Sector는 FAT32에서의 Boot Sector 영역과 같이 특정 오프셋 별로 가리키는 의미가 다르다.

NTFS의 Boot Sector 영역은 아래와 같이 나눌 수 있다.

1. Boot Code : 0~2byte

2. BIOS Parameter Block : 3 ~ 83byte

3. Boot Code와 Error Message : 84 ~ 509byte

4. 시그니처 2byte : 510 ~ 511byte

 

NTFS BR 구조

NTFS BR구조는 FAT32와 비슷하지만 비교적 구조가 간단하다. FAT32는 모든 파일을 클러스터에서 직접 관리하지만 NTFS로 시스템이 변경되면서 파일에 대한 메타데이터를 파일에 기록한다.

 

의미 내용
Jump Boot Code Boot Strap Code로 점프하기 위한 부분이다.
OEM Name OEM 회사를 나타내는 문자열로써, FAT32는 MSDOS5.X로 표시
Byte Per Sector 한 섹터가 몇 byte로 구성되어 있는지를 나타낸다. 기본 512byte이다.
SP 클러스터를 구성하는 섹터의 수이다. 기본적으로 8개의 섹터를 사용(4096byte)
RS 예약된 섹터의 개수
Media Type 볼륨이 어떤 미디어 매체를 이용하는지를 나타낸다. 고정식 디스크는 0xF8 사용
Media Type 볼륨이 어떤 미디어 매체를 이용하는지를 나타낸다. 고정식 디스크는 0xF8 사용
Total Sector 파티션상의 총 섹터 개수
Start MFT MFT의 시작주소
Start of MFT Mirr MFT의 복사본 시작주소
MFT Size MFT File의 Size
Index Record Size Index Record 크기
Serial Number 볼륨 시리얼 번호

 

Master File Table 영역은 파일과 디렉터리를 관리하기 위한 MFT Entry의 집합체이다.

크기는 모두 가변적이고 MTF가 모두 사용되면 동적으로 클러스터를 추가 할당하여 파일시스템 여러 부분에서 조각되어 저장될 수 있다.

 

[MFT Entry 구조] 

Entry No File Name 설명
0 $MFT MFT를 담고 있는 파일
1 $MFT Mirr MFT 파일 백업본
2 $LogFile 트랜잭션 저널 기록을 저장
3 $Volume 볼륨의 레이블, 버전 등 볼륨에 대한 정보 저장
4 $AttrDef 인자값, 이름, 크기 등 여러 속성을 저장
5 - 파일시스템 루트 디렉터리를 저장
6 $Bitmap 파일시스템의 클러스터 할당 관리 정보저장
7 $Boot 부트레코드 영역의 정보를 저장
8 $BadCluster 배드 클러스터에 대한 정보저장
9 $Secure 파일에 대한 보안/접근 권한 정보저장
10 $Upcase 모든 유니코드 문자에 대한 정보저장
11 $Extend 추가적인 확장을 담고 있는 디렉터리/일반적으로 사용 안 함
12~15 사용 안함 사용 중이라고 설정되어 있지만 비어있음
16~23 사용 안함 예약공간
- $Objld 파일의 고유 ID 정보저장
- $Quota 사용량 정보저장
- $Reparse Reparse Point에 대한 정보저장
- UsrJrnl 파일이나 디렉터리 변경 사항에 대한 정보저장
24~ 일반파일 일반적인 파일이나 디렉터리 실제 저장위치
속성 식별 값 속성 이름 내용
0x10 $Standard_Information 파일의 생성/접근/수정시간, 소유자 정보 등
0x20 $Attribute_list 추가적인 속성들의 리스트
0x30 $File Name 파일 이름(유니코드), 파일의 생성/접근/수정시간 정보 등
0x40 $Volume_Version 볼륨 정보
0x40 $Object_id 16byte 파일, 디렉터리 고윳값
0x50 $Security_Descriptor 파일의 접근제어와 보안속성
0x60 $Volume_Name 볼륨 이름
0x70 $Volume_Information 파일시스템 버전과 다양한 플래그 정보
0x80 $Data 파일 내용
0x90 $Index_Root 인덱스 트리의 루트 노드
0xA0 $Index_Allocation 인덱스 트리의 루트와 연결된 노드
0xB0 $Bitmap $MFT와 인덱스 할당 정보관리
0xC0 $symbolic_Link 심볼릭 링크정보
0xC0 $Reparse_point 심볼릭 링크정보에서 사용하는 Reparse Point 정보