-
NTFS - 1 (기본&VBR 영역)Digital Forensics/분석하며 알아가는 File System 2020. 2. 12. 08:39반응형SMALL
안녕하세요. Luke입니다.
저번 포스팅에서는 NTFS에서의 VBR을 복구해보았었습니다. https://weekhack.tistory.com/51
원래는 NTFS 구조가 아닌 윈도우 레지스트리에 대해 다루어 보려 했으나, NTFS를 이전 글에 다루었는데, NTFS에 대해서 간단하게 포스팅을 하고 넘어가야 할 것 같아 이번에는 NTFS의 기본적인 내용에 대해 다루어 보려고 합니다. (윈도우 레지스트리는 이거 끝난 뒤 언젠가로 미루기로 ㅎㅎ)
NTFS 시리즈는 세가지로 구성할 계획이며 아래와 같이 포스팅하려 합니다.
- NTFS - 1 (기본&VBR 영역)
- NTFS - 2 (MFT 영역)
- NTFS - 3 (DATA 영역)
이 글은 NTFS 시리즈의 첫 번째 글로 NTFS의 기본 정보와 VBR 영역에 대해 다루어 보려 합니다.
목차
- NTFS 파일시스템 소개
- FAT에서 추가된 기능
- NTFS의 버전
- NTFS의 구조
- VBR 분석
먼저 NTFS 실습을 위해 이미지를 하나 만들었으며, 함께 실습을 해보고 싶으신 분은 아래의 링크에서 다운로드 받으실 수 있습니다. (논리적 파티션만 이미징하였습니다. 비상업적 용도로는 공유를 포함해 어떤 방법으로 사용하셔도 상관없습니다.)https://drive.google.com/file/d/1BeUYy9_9_FRWfOQNURerDwnjt0Pc24ow/view?usp=sharing2022.01 추가
파일이 삭제되어 현재 이용이 불가능합니다. 따로 NTFS 파일시스템으로 하나 만드시면 실습이 가능합니다.
1. NTFS 파일시스템 소개
NTFS?
New Technology File SystemNTFS는 MS 사에서 Windows NT를 개발하며, FAT의 단점을 개선하기 위해 개발한 파일시스템 운영체제입니다.
- FAT에서 추가된 기능
FAT에 비해 NTFS는 아래의 새로운 기능들이 추가되었습니다.
- 디스크 관련 오류 자동 복구 기능
- 대용량 하드디스크에 대한 지원 확장
- 사용 권한 및 암호화 기능 제공
- FAT에서 한 파일당 최대 용량(4GB) 개선 => NTFS는 1파일 당 최대 용량 16TB
- FAT32에서 NTFS로 변환 기능 제공
가장 눈에 띄는 기능은 아무래도 한 파일의 최대 용량이 4GB에서 16TB로 증가하였다는 것입니다. 혹시 FAT32를 파일시스템으로 USB를 사용해보신 분은 알겠지만, FAT32에서는 4GB 이상의 파일은 저장되지 않습니다. 그 이유는 추후에 FAT32 분석기를 쓸 예정이지만 간단히 설명해보도록 하겠습니다.
FAT32의 경우 데이터 영역에서 데이터의 크기를 나타내는 영역은 4 바이트로, 이를 이용해 최대로 표현 가능한 용량은,
2^32 = 4294967296 = 4GB
입니다. 따라서 FAT32가 설계된 구조상의 이유로 4GB 이상의 파일을 넣을 수 없는 것이지요.(마치 MBR에서 4개를 초과한 주 파티션을 추가할 수 없듯이 말입니다.)
- NTFS의 버전
NTFS는 이제까지 총 4가지 버전으로 존재해 왔습니다.
1. NTFS 1.0
NTFS 1.0은 NTFS의 최초 버전으로, Windows NT 3.1에 탑재되어 있었던 버전입니다.
2. NTFS 1.2
NTFS 1.2는 NT 4.0에 포함된 버전으로, Windows NT가 실질적으로 많이 사용되기 시작하면서 쓰인 버전입니다.
3. NTFS 3.0(NTFS5.0)
Windows 2000(Windows NT 5.0)에 포함된 버전으로, 해당 버전에서 여러가지 기능들이 포함되었습니다.
- Reparse Point(리눅스에서의 소프트 링크와 유사) 지원
- 개선된 보안과 권한
- 디렉토리와 파일 변경 로그를 기록하는 Change Journals 기능 지원
- 암호화 기능 지원
- 디스크 쿼터 기능 지원
- 디스크 조각 모음 지원
- 실제 데이터만 기록하는 Sparse 파일 기능 지원
4. NTFS 3.1(NTFS5.1)
Windows XP와 Windows Server 2003 이후의 운영체제에 포함된 것으로, 기본적으로 NTFS3.0(5.0)과 거의 같으며 호환이 가능하다고 합니다.
2. NTFS의 구조
NTFS의 가장 큰 특징은 모든 데이터를 파일 형태로 관리한다는 점입니다. 따라서, NTFS는 대부분 FAT와 다르게 볼륨 레이아웃이 정확하게 정형화되어 있지 않습니다.(파일시스템을 관리하는 파일도 일반 파일이기에, 어디에 있던지 상관이 없기 때문) 그러나, Windows 운영체제에서 운영체제의 안정성을 위해 어느정도 구조를 정해놓았기 때문에 대부분은 어느정도의 레이아웃은 지켜진다고 합니다.
NTFS는 크게 세 가지 구조로 나눌 수 있습니다.
- VBR(Volume Boot Record)
- MFT(Master File Table)
- Data Area
해당 구조를 시각화 하면 다음과 같으며, VBR, MFT, Data Area 순으로 위치하고 있습니다.
이 글에서는 VBR만을 다룰 예정이며, MFT와 Data Area의 경우는 2, 3편에서 다루어 보도록 하겠습니다.
3. VBR 분석
VBR은 Volume Boot Record의 약자로, 부팅 단계에서 MBR 다음 단계로 정의된 파티션의 운영체제를 부팅하는 일을 합니다. 유일하게 NTFS에서 첫 섹터로 위치가 고정되어 있는 영역입니다.
아까 미리 받았던 LearnNTFS 이미지 파일을 HxD의 디스크 이미지 열기 기능으로 열어봅시다.(1섹터 크기는 512로 해주세요.)
섹터 0에서 우리는 VBR을 발견 할 수 있었습니다. 그렇다면 VBR의 크기는 어느정도 일까요?
이는 클러스터 크기에 따라서 달라지는데, 클러스터 크기가 512kb 늘어날 때 마다 VBR의 크기가 1섹터 씩 늘어난다고 생각하면 될 것 같습니다. 기본적으로 NTFS의 클러스터 크기는 해당 볼륨의 용량에 따라 결정되며, 볼륨 용량에 따른 클러스터 크기는 다음과 같습니다.
볼륨 크기 클러스터 크기 7MB – 512MB 512Byte 513MB – 1GB 1KB 1GB – 2GB 2KB 2GB – 4KB 그럼 조금 더 세부적으로 분석을 한 번 해봅시다.
VBR에는 부트섹터, NTLDR의 위치, 부트코드 등이 내장되어 있으며, VBR 분석을 통해 MFT의 시작 주소, 볼륨 크기, 클러스터 크기와 같은 중요한 정보를 얻을 수 있습니다. 한 번 VBR의 구조를 살펴 봅시다.
(아래 이미지는 퍼온 이미지로, 첨부된 LearnNTFS 파일과는 조금 상이할 수 있습니다.)주요된 부분을 정리해 보았습니다.
- Jump Instruction: 부트코드로 점프하도록 합니다.
- OEM ID: NTFS___로 시작하며, 제조사 식별 값을 가지고 있습니다.
- BIOS Parameter Block: BPB라고 하며, 해당 볼륨의 중요한 정보들을 담고 있습니다. 아래서 더 자세하게 다룰 예정입니다.
- Boot Code: Jump Instruction에서 점프하게 되는 부트 코드 입니다.
- Signature: 시그니처로 0x55 0xAA가 항상 위치해 있습니다.
우리는 그 중에서 VBR에서 가장 중요한 정보를 담고 있는 BIOS Parameter Block(0x00 - 0x53) 영역을 분석해 볼 것 입니다.
BIOS Parameter Block의 구조는 다음과 같습니다.
아까 언급했었던 OEM ID 이후로부터 정리해보도록 하겠습니다.
- Bytes Per Sector: 파일 시스템이 가지는 한 섹터당 바이트 수를 기록해두었습니다.
- Sectors Per Cluster: 한 클러스터가 몇 섹터를 가지고 있는지를 기록해두었습니다.
- Reserved Sectors: FAT에서 발전된 흔적으로, NTFS 파일시스템은 Reserved Secㄱtors가 존재하지 않으므로 항상 0입니다.
- Media Description: 고정식 디스크인지를 확인합니다. 고정식 디스크일 경우 0xF8이며, 그 외의 값은 플로피 디스크를 구분하기 위한 값이 기록됩니다.
- Total Sectors: 볼륨이 가지는 전체 섹터 수를 기록합니다.
- Start Cluster for $MFT: MFT 영역의 LBA 주소를 기록합니다.
- Start Cluster for $MFTMirr: MFT영역의 백업본인 $MFTMirr의 LBA 주소를 기록합니다.
- Cluster Per MFT Record: MFT 영역의 크기를 기록합니다.
- Clusters Per Index Buffer: 폴더 구조에 사용되는 인덱스 버퍼의 크기를 기록합니다.
- Volume Serial Number: 볼륨 시리얼 번호를 기록합니다.
- Unused: 사용되지 않는 영역입니다.
그럼 BPB에 대해 알아보았으니, 한 번 직접 이미지를 분석하여 주요 정보들을 가져와보겠습니다.
먼저, Bytes Per Sector부터 알아보도록 하겠습니다.
Bytes Per Sector 값은 0x0200으로, 1섹터는 512 바이트를 가지고 있음을 알 수 있습니다.
Sectors Per Cluster을 알아보겠습니다.
Sectors Per Cluster은 0x08로, 1클러스터에는 8개의 섹터가 존재함을 알 수 있습니다. 즉, 1클러스터는 4KB의 크기를 가지고 있음을 알 수 있습니다.
Reserved Sector을 알아보겠습니다.
Reserved Sector은 아까 말했듯, NTFS는 항상 0입니다.
Media Description을 알아보겠습니다.
Media Description의 경우 해당 디스크가 고정식 디스크이기에 0xF8 값을 가짐을 알 수 있습니다.
Total Sectors를 알아보겠습니다.
Total Sectors의 경우 0x1FF7FF 이므로, 0섹터를 포함하여 총 2095104 섹터임을 알 수 있습니다.
그림과 같이 Total Sectors를 통해 얻어낸 정보가 정확합니다.
이를 통해 해당 볼륨의 총 크기도 계산할 수 있을것으로 보입니다. 아까 1섹터당 크기가 512bytes 였으므로,
512 * 2095103 = 1072693248 바이트로,
대략 1GB를 조금 넘는다는 것을 알 수 있습니다.
Start Cluster for $MFT를 알아보겠습니다.
MFT의 시작 클러스터는 0x015500으로, 87296 클러스터부터 입니다. 이는
87296 * 8 = 698368 섹터부터 MFT가 시작함을 알 수 있습니다.
실제로 698368섹터부터 MFT가 시작함을 알 수 있습니다.
Start Cluster for $MFTMirr에 대해 알아보겠습니다.
MFT의 사본인 MFTMirr은 0x2를 가지고 있으며, 이에 8을 곱하면 16입니다. 즉, 16섹터에 MFT의 사본이 존재할 것 입니다.
위 그림과 같이 아까 보았단 MFT와 MFTMirr가 일치함을 알 수 있습니다.
Cluster Per MFT Record에 대해 알아보겠습니다.
MFT는 총 0xF6 클러스터로, 246 클러스터의 크기를 차지하고 있습니다.
246 * 8 = 1938 섹터를 MFT의 총 크기로 가지고 있음을 알 수 있습니다.Cluster Per Index에 대해 알아보겠습니다.
폴더구조에 사용되는 인덱스 버퍼의 크기는 0x01 즉, 1 클러스터, 8섹터를 차지함을 알 수 있습니다.
Volume Serial Number에 대해 알아보겠습니다.
Volume Serial Number은 0x7D 0x49 0x51 0x52 0x5F 0x51 0x52 0xD2 값을 가지고 있다는 것을 알 수 있습니다.
마무리
이제까지 NTFS에 대한 기본 개념과 구조, VBR의 구조를 알아보고 BPB를 통해 볼륨의 중요한 정보를 획득해 보았습니다. 다음 포스팅에서는 MFT에 대한 포스팅으로 다시 가져와보도록 하겠습니다.
참고한 자료:
[링크] http://forensic-proof.com/archives/357
[링크] https://m.blog.naver.com/PostView.nhn?blogId=s2kiess&logNo=221168121707
[링크] https://kali-km.tistory.com/entry/NTFS-File-System-3
[서적] 디지털포렌식 기술(한국포렌식학회, 미디어북)
반응형LIST