Piki's Play
(Part 2) Chapter 4 볼륨분석 본문
4.1 소개
보통 논리적 파티션을 나누고 이후 '드라이브', '볼륨' 몰록을 가진다. 이번장은 파티션에 할당되지 않은 섹터 분석시 유용하다.
4.2 배경
▶ 볼륨 개념
두가지의 중요한 개념이 존재한다.
1. 여러개의 저장볼륨을 한개의 볼륨으로 조합
2. 한개의 저장볼륨을 여러개의 '파티션'으로 분할
※ 볼륨(Volume) : OS나 응용프로그램이 데이터를 저장해 사용하도록 주소가 지정된 섹터들의 집합
-> 여기서 섹터들은 물리적으로 연속적일 필요는 없고 단지 존재함을 나타내주면 된다.
(연속적인 섹터들의 집합= 하드디스크)
▶ 파티션의 전반적인 이론 (볼륨시스템의 개념중 하나)
-> 볼륨안에 연속된 섹터들의 집합을 '파티션'이라고 부른다.
일반적인 파티션시스템은 한개 이상의 테이블을 보유한다. -> 이것이 '파티션 테이블'
각 테이블 엔트리는 하나의 파티션을 설명한다.
즉, 각 엔트리는 시작섹터위치, 마지막섹터 위치, 파티션 유형정보 등을 가진다.
▶ 유닉스에서의 볼륨 사용
유닉스는 윈도우처럼 C: D: 와 같이 드라이브를 확인할 수 없다. 대신에 루트디렉토리인 '/' 에서 시작하는 여러 하위 디렉토리를 확인할 수 있다.
▶ 볼륨조합의 전반적인 이론
-> 큰 시스템들은 여러 디스크를 하나처럼 보이게 볼륨 조합기술을 사용한다.
(한 디스크가 손상되는 것을 대비한 데이터 중복성 더하는 것이라 생각하면 된다.)
그림을 보면 두개의 하드디스크 볼륨에서 파티션2와 파티션3을 하나의 디스크볼륨처럼 보이게 결합하고 그후 또 나눈다.
* 하드웨어 장치는 단지 큰 볼륨만 제공
▶ 섹터 주소 지정
-> 2장에 나온 LBA는 첫 섹터를 0으로 시작하는 섹터의 물리적 주소하다. 하지만 논리적 볼륨주소(Logical Volume Address)는 볼륨안에서 시작으로부터의 상대적인 주소를 나타낸다.
- 파티션 볼륨주소는 해당파티션이 시작하는 부분을 0으로 잡고 계산한다. 여기서는 '디스크'볼륨주소가 LBA
4.3 분석 기초
-> 수사관은 전체 하드디스크를 수집하고 파일시스템을 분석할 때 '반드시' 파티션 테이블을 분석해야 한다.
▶ 분석기술
기본이론 : 파일시스템 분석도구를 이용해서 파티션 테이블 '위치'를 알아내고 레이아웃을 식별해서 파티션 테이블 '내용'을 알아낸다. 이후 파티션 '오프셋'을 알아내고 파티션 '정보'를 출력한다.
* 볼륨시스템 조합요소를 분석하기 위해서는 데이터 구조체 위치를 알아내고 처리할 필요가 있다.
▶ 일관성 검사
-> 한 파티션만 분석하는 것보다 여러 파티션의 위치를 확인하는 것이 더 유용!
=> 다른곳에 증거가 있는지 '상태점검' 제공
1. 마지막 파티션 확인 => 부모볼륨의 끝과 위치 비교 (a)
2. 연속적인 파티션들의 시작과 끝 검사 (4가지 시나리오)
- (b)는 유효하나 사이의 숨겨진 공간의 검사가 필요하다.
- (c)는 전형적인 유형으로 유효하다.
- (d)는 유효하지 않다. 한 파티션이 끝나기 전에 다른 파티션이 시작된다.
- (e)는 유효하지 않다. 첫번재 파티션 내에 두번째 파티션이 존재하므로 내용분석이 필요하다.
▶ 파티션 내용 추출 (dd기반)
(앞에서 기본적인부분을 설명했으나 다시 적도록 한다)
- if : 읽을 디스크 이미지 (안적으면 표준입력처리)
- of : 저장될 출력 파일 (안적으면 화면에 출력처리)
- bs : 한번에 읽어들일 블록의 크기 (1GB까지 가능)
- skip : 읽기전에 건너뛸 블록의 개수를 나타낸다 (블록크기는 bs기준)
- count : 입력에서 출력으로 복사할 블록의 개수
※ skip플래그와 count플래그를 통해서 어디서부터 내용을 추출하고 얼마나 추출할지 선택할 수 있다.
MMLS 도구는 시작 섹터를 기준으로 파티션 엔트리를 구성하고 아래와 같이 추출이 가능하다.
#dd if=disk1.dd of=part1.dd skip=63 count=1028097
#dd if=disk1.dd of=part2.dd skip=2570400 count=1638630
#dd if=disk1.dd of=part3.dd skip=4209030 count=2056320
(skip에 보면 주소 그 위치숫자만큼 적어준 것을 볼 수 있는데 이는 0부터 시작이여서 가능하다.)
▶ 지워진 파티션 복구
-> 안티포렌식 기술은 디스크재분할, 파티션 구조체삭제, 구조체 손상 등 다양하다. 이를 복구해보자
※ 파일 시스템이 파티션에 위치해 있다는 가정하에 동작 ※
- 많은 파일시스템들은 일정한 매직이나 시그니처를 가진다.
ex) FAT 파일시스템은 첫 섹터의 510-511byte에 0x55, 0xAA를 가진다.
- 많은 도구들은 데이터의 유효한 값 범위 내에서 검색을 수행한다.
ex) FAT 파일시스템은 한 클러스터에 얼마나 많은 섹터가 존재하는지 그 수를 가르키는 항목이 존재한다. 또한 섹터의 수는 2의 거듭제곱의 값으로 이루어진다.
-> 이것 때문에 FAT 파일시스템에서 0x55AA로 끝나도 그 위치가 섹터의 수와 다르면 부트섹터가 아닐 수도있다.
- 리눅스의 도구로는 'gpart'가 있다.
gpart : 섹터를 검사하고 어떤 파일 시스템이 가장 가능성이 있는지 보여준다. (-v플래그는 상세 내용을 보여준다.)
- gpart 도구를 통해 FAT 2개 ext2 1개가 존재함을 확인할 수 있다.
p.s 구조적인 부분과 코드적인 부분이 많아서 사진이 많았다!
'포렌식 > 파일시스템 (파일시스템 포렌식분석)' 카테고리의 다른 글
PC기반 파티션 - 애플파티션 (0) | 2020.01.31 |
---|---|
Chapter 5. PC 기반 파티션 - 도스파티션 (0) | 2020.01.30 |
Chapter 3. 하드디스크 데이터 수집 (0) | 2020.01.22 |
Chapter 2. 컴퓨터 기초 (2) (0) | 2020.01.18 |
Chapter2. 컴퓨터 기초 (1) (0) | 2020.01.16 |