티스토리 뷰
해당 포스트는 Start up 디스크 포렌식의 파일시스템 구조이해에 대한 내용입니다..
1.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
의미 | 내용 |
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 크기의 2를 곱한 값을 더해 주면 된다. 2를 곱하는 이유는 FAT의 개수를 기본적으로 2개를 쓰고 있기 때문이다.
4250 + (2035(0x07F3)*2) = 8320
8320번 섹터로 이동하게 되면 우리가 원하던 데이터에 대한 정보를 저장하고 있는 루트 디렉터리를 볼 수 있다.
- 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구조는 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 정보 |
'Digital Forensics > DISK Forensic' 카테고리의 다른 글
NTFS 파일 시스템 파일 복구 -1- (0) | 2025.02.13 |
---|---|
FTK imager로 VMDK 파일을 DD파일로 이미징 (0) | 2025.01.20 |
PeTya 랜섬웨어 감염 MBR 복구 (0) | 2024.07.02 |
악성코드 감염 MBR 복구 (0) | 2024.06.26 |
다중 파티션 이해 (0) | 2024.06.26 |