[제 6강] [FAT32]-[B.R] Start of the analysis, Boot Record
『Cyber Forensics』/Forensics - File System 2016. 1. 25. 16:35안녕하세요 EnIaC 입니다.
오늘 공부할 내용은 바로 FAT32 중에서도 시작이라고 할 수 있는 BR 영역에 대해 공부 하기 전에 기존 FAT 들의 레이아웃을 한번 살펴보고 시작 하도록 하겠습니다.
0. FAT Layout
[그림 1. FAT16 Layout]
보시면 아시겠지만 상당히 단순한 구조를 띄고 있습니다. 물론 기준은 현재 가장 가장 많이 사용하는 NTFS 와 차세대 파일시스템으로 개발된 REFS 에 반해 간단하다는거죠. ㅋㅋㅋ.... 그래도 그냥 봤을때 어느정도 쉽게 이해 가능할 것 같은 그런 구조를 띄고 있습니다. 다음 [그림 2] 에서는 FAT32 레이아웃을 보여줍니다.
[그림 2. FAT32 Layout]
FAT32 또한 굉장히 단순한 구조를 띄고 있음을 보여줍니다. 하지만 FAT16 과 다른점이 하나 있죠. 바로 Root Directory 에 관한 구조 입니다. FAT16 의 경우 루트 디렉토리가 고정 되어있는 반면, FAT32 는 유동적으로 DATA 영역 안에 어디서든 존재할 수 있습니다. 다만, FAT32 를 분석 해 보시면 아시겠지만 대부분 거의 Cluster 2 에 루트 디렉토리를 위치 시킵니다. 이론적으로는 DATA 영역 어디든 존재할 수 있지요.
1. BR, BootRecord
[그림 3. MBR Partition Table LBA Addr]
보시면 아시겠지만 Partition Table 영역에서 첫번째 파티션을 보고 있습니다. 그중 LBA Addr 은 빨간색 네모칸으로 표시 해 두었습니다. [그림 3] 에서 볼 수 있듯 첫번째 LBA Addr 은 바로 0x00000800 임을 알 수 있습니다. 따라서 10진수로 변환을 해주게 된다면 2048 이 되겠죠. 바로 2048이 첫번째 파티션의 시작을 알리는 BR 영역의 주소를 알려주는것 입니다.
자 그럼 위에서 구한 2048 (단위 : Sector) 로 이동 해 보도록 하겠습니다. 2048 섹터로 이동하게 되면 아래 [그림 3-1] 과 같은 화면을 볼 수 있습니다.
[그림 3-1. FAT32 Boot Record]
위 그림이 바로 FAT32 의 BR 영역 입니다. FAT32 BR 중에서도 저희가 중요시 봐야할 영역은 시작 섹터로부터 Offset 6번 까지 입니다. 따라서 96Byte 를 중요시 봐야 한다는 얘기죠.
이제 그 96Byte 영역을 좀더 확대해서 보도록 하겠습니다. 아래 [그림 3-3] 로 정리 합니다.
그리고 [그림 3-3] 을 쉽게 이해하기 위해 BR 에서 관여하는 영역을 색깔 별로 나누어 그려보자면 [그림 3-2] 와 같습니다.
[그림 3-2. FAT32 Partition Layout]
1. Boot Record : 1 Sector, Boot Record는 볼륨의 첫 번째 섹터이자 Reserved Area의 첫 번째 섹터이다. 이 영역에는 부팅하기 위한 Boot Code와 함께 FAT 파일 시스템의 값들이 저장되어 있으며 BIOS Parameter Block(BPB)라고도 한다.
2. Reserved Area : 32 Sector(이중 맨처음 1 Sector는 Boot Record), 나중을 위해 비워둔 예약된 공간이다.
3. FAT #1 / FAT #2 : 클러스터를 관리하기 위한 테이블이 모여 있는 공간으로 이 공간은 HDD 내의 파일들과 연결된 클러스터에 대한 정보들이 있으므로 만약 손상이 되면 해당 파일을 사용할 수 없게 된다. 이 때문에 FAT #1과 동일한 정보를 FAT #2에 백업하여 두게 된다.
4. Root Directory : Data Area 내의 아무 곳에나 존재해도 관계 없으며 그 위치를 Boot Record에 기록하게 된다. 하지만 FAT 32 이전의 파일 시스템 즉 FAT 16등에는 FAT 영역 바로 다음에 Root Directory 가 존재하였으므로 일반적으로는 FAT 32에서 역시 FAT 영역 바로 뒤에 둔다.
5. Data Area : 파일 또는 디렉토리가 저장되어있는 영역으로 이전 영역과의 차이는 이전 영역의 경우 Sector 단위로 읽기 쓰기를 하지만 Data Area의 경우 Cluster 단위로 읽기와 쓰기를 진행한다.
[그림 3-3. FAT32 Boot Record Detail]
저희가 중요시 보아야 할 목록을 뽑아보자면 아래와 같습니다.
1. Jump Boot Code (부팅 가능한 파티션이라면 부트 코드로 이동)
2. Byte Per Sector (한 섹터당 몇 바이트를 할당 할 것인지)
3. Secter Per Cluster (한 클러스터당 몇 섹터를 할당 할 것인지)
4. Reserved Sector Count
5. Number of FATs (기본값 0x02)
6. Total Sector 32 (= MBR Partition Table - Size in Sector)
7. Boot Record Backup Sector
1-1. FAT32 area, analyzing and Introduction
1. Jump Boot Code : Boot Code 로 점프하기 위한 코드
2. OEM Name : OEM 회사를 나타내는 문자열이 들어있음
3. Bytes per Sector : 한 개 섹터를 구성하는 바이트 수
4. Sector per Cluster : 한 개 클러스터를 구성하는 섹터 수 → Sector Per Cluster * Bytes Per Sector = Cluster 의 크기
5. Reserved Sector Count : [그림 3-1]의 Reserved Area 의 섹터 개수
6. Number of FATs : 해당 볼륨에 존재하는 FAT 영역의 개수
7. Root Directory Entry Count : Root Directory 내에 몇 개의 파일/디렉토리를 수용할지에 대해 기록하는 항목으로 반드시 Bytes Per Sector의 짝배수로 구성이 되어야 한다. 하지만 FAT 32에서는 반드시 0으로 채워져야한다.
8. Total Sector 16 : FAT 16에 해당되는 항목으로 FAT 32에서는 0으로 채워진다.
9. Media : 해당 볼륨에 어떤 미디어가 저장되어있는지 기록되며 플로피 디스크를 제외한 모든 장치의 경우 0xF8로 기록이 된다.
10. FAT Size 16 : FAT 영역의 섹터 수를 저장하는 부분으로 FAT 32에서는 0으로 채워진다.
11. Sector Per Track : Track 당 Sector의 개수를 의미하는데 Window 계열에서는 더이상 이 값을 참조하지 않는다.
12. Number Of Heads : 해당 저장 장치의 헤더 수를 의미하며 Window 계열에서는 더이상 이 값을 참조하지 않는다.
13. Hidden Sector : 해당 볼륨 앞의 숨겨진 섹터 수를 의미하며 Window 계열에서는 더이상 이 값을 참조하지 않는다.
14. Total Sector 32 : 해당 볼륨 상의 총 섹터 수를 의미한다. (MBR 에서 Size in Sector)
15. FAT Size 32 : FAT 영역의 섹터 수를 의미하는데 이 수는 FAT #1 과 FAT #2의 합산이 아닌 한 개의 FAT 영역의 섹터 수를 의미한다.
16. Ext Flags : FAT 테이블의 사용 여부 등의 여러가지 설정 값을 기록한다.
17. File System Version : FAT32의 버전 정보로 상위 1Byte는 주, 하위 1Byte는 부 버전을 의미한다. 하지만 실제로는 특정 값이 적히지 않고 0x00으로 기록된다.
18. Root Directory Cluster : FAT32는 이전 버전들과는 달리 Root Directory가 Data Area 내 아무 위치에 와도 상관 없기 때문에 그 시작 위치를 Root Directory Cluster 에 기록한다.
19. File System Information : File System 구조체의 위치가 기록되나.
17. Boot Record Backup Sector : Boot Record 를 백업한 위치를 기록하는 것으로 일반적으로는 6번 섹터를 이용한다. 만약 이 위치에 0이 기록되어있다면 백업을 하지 않았음을 의미한다.
18. Reserved : 예약된 영역으로 항상 0으로 채워진다.
19. Dirve Number : Window 계열에서는 더 이상 참조하지 않는다.
20. Reserved1 : Windows NT 계열에서 사용하려고 만든 예약된 영역이며 0으로 채워져 있다.
21. Boot Signature : 확장 부트 서명으로 0x29 라는 값이 들어간다(이후에 3가지 항목이 더 존재함을 의미).
22. Volume ID : 볼륨의 시리얼 번호
23. Volume Label : 볼륨 레이블을 적어준다.
24. ile System Type : 항상 FAT32로 적혀 있다.
위 표에 대한 정리는 아래의 표로 다시 한번 정리 하겠습니다.
2. FAT12 & FAT16 & FAT32 Common area
범위 | 설명 | |
10진수 | 16진수 | |
0 – 2 | 0x0000 – 0x0002 | Jump command to boot code (usually 0xEB5890) |
3 – 10 | 0x0003 – 0x000A | OEM ID (Win95=MSWIN4.0, Win98=MSWIN4.1, Win2K/XP/Vista=MSDOS5.0, Linux=mkdosfs) |
11 – 12 | 0x000B – 0x000C | Bytes per sector |
13 – 13 | 0x000D – 0x000D | Sectors per cluster |
14 – 15 | 0x000E – 0x000F | Reserved sector count (FAT12/16=1) |
16 – 16 | 0x0010 – 0x0010 | Number of FAT tables |
17 – 18 | 0x0011 – 0x0012 | Root directory entry count (FAT12/16=512, FAT32=0) |
19 – 20 | 0x0013 – 0x0014 | Total sector 16 (FAT12/16=variable, FAT32=0) |
21 – 21 | 0x0015 – 0x0015 | Media Type |
22 – 23 | 0x0016 – 0x0017 | FAT size 16 (FAT12/16=variable, FAT32=0) |
24 – 25 | 0x0018 – 0x0019 | Sector per track (typically 32 for hard drive) |
26 – 27 | 0x001A – 0x001B | Number of heads (typically 255 for hard drive) |
28 – 31 | 0x001C – 0x001F | Hidden sectors |
32 – 35 | 0x0020 – 0x0023 | Total sector32 |
3. FAT12 & FAT16 Additional data structure
범위 | 설명 | |
10진수 | 16진수 | |
36 – 36 | 0x0024 – 0x0024 | INT 0x13 drive number (Floppy=0x00, Hard Drvie=0x80) |
37 – 37 | 0x0025 – 0x0025 | Not used |
38 – 38 | 0x0026 – 0x0026 | Boot signature |
39 – 42 | 0x0027 – 0x002A | Volume serial number |
43 – 53 | 0x002B – 0x0035 | Volume label (ASCII) |
54 – 61 | 0x0036 – 0x003D | File system type |
62 – 509 | 0x003E – 0x01FD | Boot code and error message |
510 – 511 | 0x01FE – 0x01FF | Signature (0x55AA) |
4. FAT32 Additional data structure
범위 | 설명 | |
10진수 | 16진수 | |
36 – 39 | 0x0024 – 0x0027 | FAT size 32 |
40 – 41 | 0x0028 – 0x0029 | Ext flags |
42 – 43 | 0x002A – 0x002B | FAT32 volume version |
44 – 47 | 0x002C – 0x002F | Root directory cluster offset |
48 – 49 | 0x0030 – 0x0031 | FSINFO(File System INFOrmation) offset |
50 – 51 | 0x0032 – 0x0033 | Backup boot sector offset |
52 – 63 | 0x0034 – 0x003F | Reserved |
64 – 64 | 0x0040 – 0x0040 | INT 0x13 drive number (Floppy=0x00, Hard Drive=0x80) |
65 – 65 | 0x0041 – 0x0041 | Not used (typically 0) |
66 – 66 | 0x0042 – 0x0042 | Boot signature |
67 – 70 | 0x0043 – 0x0046 | Volume serial number |
71 – 81 | 0x0047 – 0x0051 | Volume label (ASCII) |
82 – 89 | 0x0052 – 0x0059 | File system type |
90 – 509 | 0x0060 – 0x01FD | Boot code and error message |
510 – 511 | 0x01FE – 0x01FF | Signature (0x55AA) |
다시한번 정리 하자면 FAT32 의 BR 에서 36Byte 는 이전 FAT16 과 동일한 구조를 띄고 있으며 FAT32 에서만 추가된 영역은 그 다음부터 있습니다.
이로써 FAT32 BR 에 대한 이야기가 끝났네요. 다음 강의에서는 FAT32 BR 영역 바로 다음에 오는 FSINFO (File System Infomation) 영역에 대해 간단하게 이야기 해 보도록 하겠습니다.
감사합니다.
'『Cyber Forensics』 > Forensics - File System' 카테고리의 다른 글
[제 8강] [FAT32]-[F.A] Start of the analysis, FAT Area(FAT32 Table) (0) | 2016.01.26 |
---|---|
[제 7강] [FAT32]-[R.A] Start of the analysis, Reserved Area (0) | 2016.01.25 |
[제 5강] [FAT] Reserved area, Common area analysis (0) | 2016.01.24 |
[제 4강] [FAT] Start of the analysis (0) | 2016.01.24 |
[제 3강] MBR, Master Boot Record (0) | 2016.01.23 |
WRITTEN BY
- EnIaC
WhiteHackerGroup 『LockDown』 EnIaC 입니다.