Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Piki's Play

Chapter 5. PC 기반 파티션 - 도스파티션 본문

포렌식/파일시스템 (파일시스템 포렌식분석)

Chapter 5. PC 기반 파티션 - 도스파티션

Pikigod 2020. 1. 30. 20:59

여기서는 볼륨의 이론적인 설명과 개인사용자들이 사용하는 파티션 시스템들의 세부사항을 살펴보자!

도스, 애플, 이동식 매체 파티션의 동작과 구조를 분석하기로한다. (오늘은 도스만!)

 

5.1 도스파티션 (가장 흔하지만 가장 복잡한 분할 시스템이다)

-> 사실 도스파티션은 소규모를 위해서 세상에 나왔다. 오랜기간 인텔 하드웨어에서 사용했으나 공식적인 명세가 존재하지는 않는다. 

따라서 마이크로소프트에서는 이 '도스파티션'을 'MBR'(Master Boot Records)로 부른다. 

 

나중에 MBR을 EFI(Extensible Firmware Interface), GPT(GUID Partition Table)와 비교해보도록하자. 

 

- 기본적인 디스크들이 MBR이나 GPT를 참조하고, 디스크의 파티션들은 MBR이나 GPT에 독자적이다. -

 

▶ 전체 개요

-> 도스파티션의 개념과 부트코드 위치를 조사해보자

 

 

▷ 기본적인 MBR 개념

-> 도스파티션을 사용하는 디스크는 512바이트 섹터 내에 MBR을 갖는다. 

이 MBR은 부트코드, 시그니처, 파티션 테이블을 가진다.

부트코드는 파티션 테이블 처리 명령어, 운영체제 위치 확인 명령어를 가진다.

파티션 테이블에는 도스파티션을 설명하는 4개의 엔트리가 존재한다. 

엔트리는 다음과 같은 항목을 가진다. 

 

엔트리 항목!

 

▷ 확장 파티션 개념

-> MBR은 4개의 파티션을 표현한다. 하지만 더 많은 파티션을 나누고 싶으면 '도스파티션을 더욱 복잡하게' 하면된다. 

 

 

* 1,2,3 엔트리는 그대로 사용한다. 마지막 파티션을 '주 확장 파티션'으로 만든다.

* 주 파일 시스템 파티션(Primary File System Partition)

=> 파일 시스템이나 다른 구조화된 데이터 포함

* 주 확장 파티션(Primary Extended Partition)

=> 추가적인 파티션을 포함할 수 있다.

* 부 파일 시스템 파티션(Secondary File System Partition)

=> 윈도우에서 '논리파티션'으로 부르며 주 확장파티션 '내부'에 위치한다. 한개의 파일시스템파티션과 확장파티션으로 이루어져있다.

 

확장속의 확장속의 확장속...

 

▷ 확장 개념의 레이아웃

-> 3개까지는 MBR에서 '주 파일시스템'으로 지정하고 그 이상은 '주 확장 파티션'으로 지정한다. 

(아래는 12GB의 도스파티션을 2GB바이트 6개로 나누는 예이다)

- 기본적으로 3개의 주 파일시스템은 생성이 가능하다. 따라서 2GB 3개를 생성하고 남은 6GB를 나누도록 한다. 

 

 

▷ 부트코드

-> MBR 512Byte안에 1~446 번째 바이트에 존재한다. (즉, 0~465) 나머지는 '파티션 테이블'이다.

 

표준 마이크로소프트 부트모드는 파티션 테이블로 처리하고 부팅플래그가 있는 파티션을 구분한다.

이후 부팅코드는 부팅가능한 파티션의 첫 섹터를 찾고 OS코드를 실행한다.

 

* 부트섹터 바이러스는 MBR의 1~446번째 바이트에 코드를 삽입하여 부팅될때 매번 실행된다.

 

그렇다면 여러 OS를 사용하고 싶은 경우에는 어떻게 하면 될까?

1. 이 코드에 사용자가 OS를 선택할 수 있는 코드 삽입시 여러 OS를 쓰기 가능하다. 대신 크기가 크다.

2. MBR부트실행시 OS(윈도우)가 실행되고 '윈도우 부트 파티션'에서 선택모드를 삽입할 수 있다.

 

 

▷ 요약

-> 도스파티션 시스템은 파티션 테이블이 4개의 엔트리만 있어서 복잡하다. 앞서서 언급한 GPT같은 것들은 더 큰 테이블이여서 더욱 간단하게 여러 파티션을 나눌 수 있다.

 


▶ 데이터 구조체

-> 여기서는 시스템을 동작하도록 만드는 데이터 구조체들을 알아보자.

 

 

▷ MBR 데이터 구조체

-> 도스파티션 테이블MBR과 각 확장 파티션의 첫 섹터에 존재한다.

도스 파티션 테이블의 데이터 구조체

0~445번까지는 부트코드이며 각 파티션의 엔트리는 16Byte씩을 가진다. 

또한 각각의 파티션 테이블 엔트리는 다음과 같은 구조체를 가진다.

 

16Byte로 이루어진 파티션엔트리의 구조

타입은 워낙 많아서 따로 검색해보는 것을 추천한다!

 

 

※ 이제 구조체를 분석해보자! 예제는 리틀엔디안의 윈도우와 리눅스 그리고 8개의 파일시스템 파티션을 갖는다. 

 

#dd if=disk3.dd bs=512 skip=0 count=1 | xxd

(xxd : 헥사편집이랑 동일)

 

- 445까지는 부트코드이므로 그 뒤부터 보면(진하게 칠해진 부분) 16바이트로 이루어진 파티션 엔트리를 볼 수 있다. 또한 4번째바이트를 보면 타입이 'Ox07'임을 알수있다. 이는 NTFS를 나타낸다. 그 밑줄에 'Ox83'는 리눅스이다.  

-시그니처는 가장 마지막에 볼 수 있고 리틀엔디안 방식이므로 => Ox55AA(FAT 파일시스템)

따라서 위 코드의 결과는 그림으로 다음과 같다.

숫자는 그냥 abc로 표현했다.

 

 

▷ 확장 파티션 데이터 구조체

-> 구조는 MBR과 같지만 시작 섹터주소가 디스크 기준이 아니다.

거기다 '부 확장 파티션'이 시작하는 섹터와 '부 파일시스템'이 시작하는 섹터의 상대주소가 다르다. 

즉, 부 확장 파티션 엔트리의 시작주소는 '주 확장 파티션'에서 상대적이다. 

 

- 주 확장 파티션은 11,000 섹터의 길이를 가지고 섹터 1000에서 시작한다.

- 주 확장 파티션 기준으로 시작 섹터가 63인 FAT는 전체 파일시스템에서 1063이 시작섹터가 된다.

- 두번째 NTFS는 주 확장 파티션내의 부 확장 파티션 안의 기준으로 63이다. 

앞에 FAT가 5000에 끝났으므로 NTFS의 시작주소는 5063이 된다. 

 

 

▷ 도구를 이용한 예제 이미지 분석

1. fdisk (리눅스에 내장되어있는 명령어)

"-ㅣ" :  읽기모드,  "-u" : 실린더 대신 섹터들로 출력

예)

 

 

2. mmls

-> 파티션 테이블 위치, 사용되지 않은 섹터(Unallocated), 확장 파티션 위치를 나타내준다.

 

 

▶ 분석 고려사항

-> MBR과 확장 파티션은 63섹터를 할당해준다. 그런데 부트코드와 파티션 테이블은 한 섹터로도 충분하고 이때 공간이 생기게 되는데 이 공간에 데이터를 숨길 수 있다. 

 

=> 파티션 테이블이 손상되면 수동으로 추출해야하는데 다음과 같이 찾아야 한다.

 

#dd if=disk.dd bs=512 skip=63 of=part.dd

 

이론적으로 확장파티션은 두 개의 엔트리를 가진다. "부 파일시스템 파티션", "다른 부 확장 파티션"

 

그래서 다양한 도구들이 이 기준을 따르는데 3번째 엔트리도 수동으로 생성이 가능하다.

따라서 이부분이 존재하고 또 보이는지도 테스트 해야한다.

 

 


p.s 시간이 날때 살을 더 붙이도록!!