본문 바로가기

[+] Forensic

File System - Partition (3)

이번 글에서는 BSD(FreeBSD, OpenBSD, NetBSD) 파티션에 대해서 알아 볼 것이다.

컴퓨터 포렌식 조사 대상에는 BSD 시스템들이 많이 속한다.(물론 리눅스 또한)

BSD 시스템들은 IA32 기반 하드웨어(x86/i386)을 사용하며 자체 분할 시스템을 사용한다.

IA32 기반 하드웨어를 사용하기 때문에 MS 제품들과 같은 디스크에 공존 할 수 있도록 설계되어 있다.

BSD 파티션 시스템은 도스 파티션보다 간단하기 때문에 이해하는데 큰 어려움은 없으며 애플 파티션 맵 보다는 약간의 한계를 가지고 있다.

BSD 파티션은 도스 파티션과 공존 할 수 있기 때문에 도스파티션에서 생성한 볼륨에 위치 할 수 있다.

즉, BSD 파티션은 "주 도스 파티션"이 될 수 있는 것이다.

아래는 도스파티션 내에 BSD 파티션들이 공존하는 모습을 가식화 한 것이다.

[그림 1 - 도스파티션과 BSD 파티션의 공존]


BSD 파티션의 핵심은 디스크 레이블(Disk Label)이다. 최소 크기는 276Byte이며 BSD 파티션 두 번째 섹터에 위치 한다.

일부 IA32가 아닌 시스템들은 첫 번째 섹터에 위치하기도 한다.

디스크 레이블의 구조체들은 디스크 하드웨어 명세서를 포함하고, 8개 또는 16개의 BSD 파티션 테이블을 포함한다.

애플 파티션 맵과 다르게 BSD 파티션 테이블은 크기가 고정적이다.

BSD 파티션 테이블의 엔트리 항목들은 다음과 같다.

 - BSD 파티션 시작 섹터 주소 : 도스 파티션이나 디스크 레이블에서의 상대적 주소가 아닌 디스크 시작 주소에서의 상대적 주소이다.
 - BSD 파티션 크기
 - 파티션 타입 : BSD 파티션에 있는 파일시스템 타입을 구분할 때 쓰이는 항목이다.
 - UFS 파일시스템 조각 크기
 - 블록당 UFS 파일시스템 조각의 수
 - UFS 실린더 그룹 당 실린더 개수


마지막 3개 항목은 UFS 파일시스템을 포함할 때만 사용된다.

BSD 파티션은 구조체 하나를 읽어서 전체 파티션 구조를 파악한다.

이제 FreeBSD 파티션을 알아보자.

[FreeBSD]
FreeBSD는 하나의 디스크에서 도스 파티션과 BSD 파티션 둘다 사용 할 수 있도록 되어 있다. FreeBSD에서 도스 파티션은 "슬라이스" 라는 용어로 불리우며, BSD 파티션은 "파티션" 으로 불리운다.
디스크 레이블 구조체는 FreeBSD 도스 파티션에 있으며, 그 구조체는 도스 파티션 내 존재하는 BSD 파티션의 레이아웃을 구성하는데 쓰인다.
FreeBSD는 각 파티션과 슬라이스에 특별한 장치 이름을 부여하는데 슬라이스의 경우 디스크 기본 이름에 's'와 번호를 부여한다. 파티션의 경우 슬라이스 이름에 알파벳으로 순서를 매긴다.
파티션의 경우 이름을 줄일수도 있는데 이는 아래 이미지를 참고하기 바란다

[그림 2 - 슬라이스 파티션 이름 할당]

BSD 파티션은 이름에 따라 특별한 의미를 갖게 되는데 'a' 라는 이름을 할당 받은 파티션의 경우 보통 부트코드가 위치하고 있는 파티션이 된다.
'b' 이름을 할당 받은 파티션은 보통 스왑 공간을 나타내며, 'c' 이름을 할당 받은 파티션은 보통 전체 슬라이스를 나타내고,
'd' 이름을 할당 받은 파티션은 보통 어떠한 파티션도 될 수 있는 파티션을 나타낸다.
하지만 이 이름 부여 원칙은 절대적이 아니며 수정이 가능하다.


 이번에는 FreeBSD와는 조금 다른 OpenBSD와 NetBSD를 알아보자.

[OpenBSD(NetBSD)]
원래 OpenBSD의 코드와 NetBSD의 코드는 함께 있었지만 지금은 따로 분리되어 있다.
원래 똑같은 것이었으므로 OpenBSD만 설명하겠다.(NetBSD와 OpenBSD는 같은 구조라고 보면 된다)
OpenBSD의 사용자들은 오직 BSD 디스크 레이블 구조체 엔트리에만 접근 할 수 있다. FreeBSD와는 달리 해당 시스템들의 디스크 레이블 구조체는 디스크의 파티션 위치 상관없이 관련 파티션들을 설명한다.
OpenBSD에서는 도스 파티션이 단지 OpenBSD 파티션의 시작부분을 확인시켜 주기 위해서만 사용되기 때문에 OpenBSD 커널이 적재되어 실행되면 도스 파티션은 무시된다.
OpenBSD의 이름 할당 방법은 FreeBSD와 동일하지만, 슬라이스 개념은 없다.


BSD시스템의 부트코드는 첫번째 섹터에 위치한다.(무조건은 아님)

이번에는 디스크 레이블 구조체에 대해서 알아 보도록 하겠다. 아래는 디스크 레이블의 각 항목 목록이다.

[그림 3 - 디스크 레이블 항목 목록]

위 항목 중 BSD 파티션의 레이아웃은 다음과 같다.

[그림 4 - BSD 파티션 레이아웃]

위 항목 중 파일 시스템 타입은 BSD 파티션이 위치한 파일시스템의 타입 값을 가지며 그 목록은 아래와 같다.

[그림 5 - 파일시스템 타입 값 목록]

* 참고 : FreeBSD와 OpenBSD 파일시스템은 4.2BSD FFS이며, 적어도 해당 시스템에서 Swap 파티션은 하나 이상 있어야 한다. 

[분석시 고려사항]
디스크 레이블은 보통 404byte이다. 8개의 엔트리를 갖는다면 276byte가 될수도 있다. 그래서 512byte 섹터에서 디스크 레이블 크기를 제외한 나머지 섹터에 크기는 작지만 중요한 데이터를 숨길 수도 있다.
또 FreeBSD의 경우 도스파티션과 BSD 파티션 모두 접근이 가능하므로 FreeBSD 파티션 분석 시 둘 모두 분석을 수행해야 한다는 것을 잊으면 안된다. 



'[+] Forensic' 카테고리의 다른 글

File System - Partition (5)  (0) 2012.01.22
File System - Partition (4)  (0) 2012.01.20
File System - Partition (2)  (0) 2012.01.18
File System - Partition (1)  (0) 2012.01.18