디스크 스패닝은 RAID와 비슷한 개념으로 여러 디스크를 하나의 큰 디스크로 운영체제가 인식하게 끔 하는 기술이다.
하지만 RAID와 같이 성능 향상이나 중복성등은 지원하지 않고, 오직 디스크의 크기만을 늘려 준다.
이러한 점 때문에 통합되어 있는 디스크에 또 다른 디스크를 추가 할 수도 있고 파일 시스템의 크기를 동적으로 늘리는 일도 가능하다.
많은 운영체제에서 디스크 스패닝 기술을 지원하고 있지만 이 글에서는 리눅스와 윈도우만 다뤄 볼 것이다.
[리눅스 디스크 스패닝]
리눅스에는 두가지로 디스크 스패닝 기술이 나뉘는데 MD, LVM으로 나눌 수 있다.
[MD]
리눅스에는 MD 드라이버라고 불리는 드라이버가 있는데 이 드라이버는 도스 기반 파티션을 사용하고, RAID나 디스크 스패닝 볼륨을 조립하여 모두 그룹으로 만드는 역할을 한다. MD는 파티션이 할당 된 순서대로 목록을 정리한 '/etc/raidtab' 이라는 파일이 존재하는데 볼륨은 이 파일 없이 마운트 될 수 없다. 해당 파일의 설정 값 중에 persistent-superblock 이라는 항목이 있는데 이 항목의 값이 0일 경우 설정 데이터들이 /etc/raidtab 파일안에만 존재하게 되며, 값이 1일 경우 설정 데이터들이 MD 장치를 생성 할 수 있도록 디스크나 파티션 끝에 포함되게 된다. 이는 "자동 감지" 기능을 뜻하며 자동 감지 기능이 동작하기 위해서는 설정 데이터가 위치한 파티션의 타입이 "Linux raid partition with autodetect using persisten superblock(0xfd)" 이어야 한다. 부팅하는 동안 MD 장치가 생성된 것을 확인 하려면 Messages 로그를 보면 된다. MD 장치가 생성되도록 superblock 이 설정되어 있다면 디스크나 파티션은 1024byte로 나눠진 여러 구역의 구조를 갖는다. 각 구역에는 여러 정보가 포함되는데 이는 다음과 같다.
1. 첫 번째 구역
- 디스크 스패닝 또는 RAID 버전
- 디스크 수
- 생성 시간
- 식별자
2. 두 번째 구역
- 마지막 업데이트 시간
- 카운터
- 볼륨 상태
- 동작 중인 디스크와 오류 난 디스크 수
3. 나머지 구역
- 주/부 장치 번호
- 볼륨 내 각 장치 역할
- 디스크 상태
* 참고 : 리눅스는 부팅 할 때 디스크 스패닝 볼륨을 마운트 하지 않더라도 슈퍼블록 값은 업데이트 한다. 이를 이용하여 커널이 디스크를 제거했는지와 디스크 순서를 체크한다.
[LVM]
Logical Volume Manager의 약자인 LVM은 MD의 개선된 기술로 볼륨 그룹이라는 것을 사용한다. LVM을 사용하려는 파티션은 "Linux Logical Volume Manager Partition(0x8e)" 이어야 한다. 각 시스템에는 1개 또는 그 이상의 볼륨 그룹이 있으며, 각 볼륨 그룹은 /dev/ 디렉토리에 하위 디렉토리를 갖는다. LVM은 물리적 확장 세트를 볼륨 그룹을 이용하여 논리적 볼륨을 생성하는데 이는 물리적 확장 세트들을 연속적으로 연결하거나 스트라이핑을 사용하여 생성한다.
이렇게 생성된 논리적 볼륨은 /dev/ 볼륨 그룹 하위 디렉토리 내 장치 파일이 주어지며, 논리적 볼륨의 설정 데이터는 로컬 시스템과 볼륨 두 곳에 저장된다. LVM 설정 파일 같은 경우는 "/etc/lvmtab, /etc/lvmtab.d" 디렉토리에 저장된다.
* 참고 : 설정 파일들은 바이너리 파일들이며, vgimport, vgscan, vgchange 등의 유틸리티로 업데이트 된다.
[윈도우 디스크 스패닝]
윈도우는 NT 버전 이후로 디스크 스패닝을 지원해 왔으며 사용하는 기술은 LDM 이다.
LDM은 기본적인 파티션, 디스크 스패닝, RAID 레벨 0, 1, 5와 유사하고 간단한 볼륨들을 지원한다.
기본적인 디스크들은 LDM이 사용되지 않으며 LDM이 사용되기 위해서는 디스크에 추가적인 데이터 구조체가 포함되어야 한다. 아래는 기본적인 LDM 구조이다.
위 이미지를 보면 LDM 파티션 영역 뒤에 LDM 데이터베이스 라는 것이 있는데 이 영역은 동적 파티션을 정의하고 논리적 볼륨을 생성한 규칙을 만드는 곳이다. 이 영역은 다음과 같은 엔트리를 갖는다.
- 디스크 엔트리 : 도스나 GPT 디스크가 있는 각 동적 디스크를 위해 존재
- 파티션 엔트리 : 동적 디스크 파티션 방법 설명
- 컴포넌트 엔트리 : 파티션들의 결합 방법 설명
- 볼륨 설명 엔트리 : 파티션 컴포넌트 유형을 적용한 결과인 논리적 볼룸을 표현
[디스크 스패닝 포렌식]
1. 리눅스의 MD 볼륨을 분석하기 위한 최선의 선택은 단일 드라이브 또는 파티션으로 볼륨을 수집하고 표준 분석 도구를 사용하는 것이다. 슈퍼블록이 설정되어 있다면 더 쉽겠지만, 그렇지 않다면 대상 시스템에서 /etc/raidtab 파일을 생성해야 한다. 그 후 raidstart 명령어로 MD 장치를 생성한 후 dd 종류의 도구로 MD 장치를 이미징 할 수 있다. 수집 후에는 MD 장치를 정지시키기 위해 raidstop 명령어를 사용하여야 한다.
2. 리눅스의 LVM 볼륨 분석은 MD 장치보다 분석을 더 자동화 할 수 있다. 시스템으로부터 디스크를 분리하여 신뢰할만한 리눅스 시스템에 디스크를 결합하여 분석을 할 수도 있고, LVM을 지원하는 Live CD(Linux)를 대상 시스템에 부팅 시켜 분석을 할 수도 있다. vgscan 명령어를 사용하면 "/etc/lvmtab, /etc/lvmtab.d" 파일이 자동생성 되는데 자동생성이 디면 vgchange -a y 명령어를 실행 해 볼륨을 활성화 시킨 후 dd 종류의 도구로 이미징을 시도 할 수도 있다.
3. 윈도우의 LDM 경우 분석이 어렵고 또 읽기 전용으로 볼륨을 재생성 하는 것 또한 쉽지 않다. Live CD(Linux)를 사용하여 LDM을 분석 할 수 있는데 이는 조금 수정이 필요하다. 기본적으로 리눅스는 LDM을 지원하지 않아 커널 재컴파일을 해야만 한다. 재컴파일 된 커널은 데이터베이스를 읽고, 각 동적 디스크에 물리적 파티션을 위해 하드디스크 장치를 생성하게 된다. 이 장치들을 통해 이미징을 시도 하면된다.
'[+] Forensic' 카테고리의 다른 글
File System (2) (0) | 2012.01.26 |
---|---|
File System (1) (0) | 2012.01.26 |
File System - Partition (6) (0) | 2012.01.24 |
File System - Partition (5) (0) | 2012.01.22 |