본문 바로가기

[+] Forensic

File System - UFS (2)

이번 글에서는 UFS를 파일시스템 참조 모델에 기초하여 알아 볼 것이다.

파일시스템 참조 모델은 앞에서 여러번 언급하여 잘 알고 있겠지만, 파일시스템의 전체적인 레이아웃을 설명해 주는 데이터를 말한다.

UFS에는 3 개의 데이터 구조체가 존재한다. 슈퍼블록, 실린더 요약 그룹, 그룹 기술자 라는 것들인데, 슈퍼 블록은 파일시스템 시작부분에 위치하고 있으며 파일시스템 크기와 설정 정보를 포함하고 있다.

실린더 요약 그룹은 실린더 그룹의 간략한 정보를 포함하고 있는데 슈퍼 블록에서 실린더그룹 사용을 위해 이 영역을 참조한다.

그룹 기술자는 각 실린더 그룹에 존재한다.

[슈퍼블록]
UFS에서 슈퍼블록은 수많은 정보들을 포함하고 있다. 이러한 값들로 파일시스템에 레이아웃을 정의 할 수 있는 것이다.
또 슈퍼블록은 볼륨 레이블과 파일시스템이 마지막으로 마운트 된 시간 정보도 포함하고 있다. 대체로 Ext 파일시스템에 슈퍼블록과 동일한 역할을 수행하지만 필수 데이터를 제외한 비 필수 데이터가 조금은 다르다.
UFS 슈퍼블록은 보통 이동식 매체에서는 첫 번째 섹터에 위치하고, UFS1의 경우 파일시스템 시작에서부터 8KB 떨어져 위치 한다. UFS2의 경우 파일시스템 시작으로부터 64KB 떨어져 위치 한다.
UFS2의 슈퍼블록은 가끔 파일시스템 시작으로부터 256KB 떨어진 곳에 있기도 한다.

 * 참고 : UFS1과 UFS2는 슈퍼 블록의 데이터 구조체가 약간은 다르다. 하지만 둘다 1KB 이상이며 100개 이상의 필드를 가지고 있다.

UFS1과 UFS2의 슈퍼블록 차이는 데이터 구조체의 차이도 있지만 UFS2의 날짜와 크기 필드가 64bit 라는 점도 있다.
슈퍼블록에는 inode, 조각, 블록 전체 수 등의 정보가 저장된다. 또 슈퍼블록에는 실린더 그룹 요약 영역의 위치가 포함되어 있는데 실린더 그룹 요약 영역은 실린더 그룹을 위한 엔트리가 포함되어 있는 테이블이 있다. 실린더 그룹을 위한 엔트리는 비사용 블록, 조각, inode를 파악하고 저장한다.
슈퍼블록은 파일시스템 최적화를 위해 디스크 위치 정보도 포함하고 있다.  

 

[실린더 그룹 기술자]
UFS는 실린더 그룹으로 이루어져 있는데 각 그룹은 모두 같은 크기이며, 마지막 그룹만 크기가 다르다. Ext 파일시스템의 블록 그룹과 유사하다고 생각하면 된다. 각 실린더 그룹에는 실린더 그룹을 설명하는 그룹 기술자 데이터 구조체가 포함되어 있다. 그룹 기술자 외에도 실린더 그룹은 inode 테이블과 슈퍼 블록 백업본, inode 비트맵, 블록 비트맵, 조각 비트맵을 포함한다. 그룹 기술자에는 이러한 정보들이 어디에 위치하는지 설명하는 데이터가 있는데 이 데이터는 오프셋이며, 이 오프셋은 그룹 기술자 시작 위치를 기준으로 각 정보들이 어디에 있는지 설명 해 준다(그룹 기술자 시작 위치에서 상대적인 오프셋이다)
그룹 기술자의 위치는 슈퍼 블록에 정의되어 있지만, UFS 버전에 따라 위치 배치 방법이 조금 다르다.
UFS1의 경우 각 그룹별로 그룹 기술자의 위치를 달리 하여 엇갈리게 배치 해 놓는다. 이렇게 하는 이유는 오래 된 디스크들의 트랙 별 섹터 수가 같은데 이는 모든 첫 번째 섹터가 같은 플래터에 존재한다는 것을 의미하고 하드디스크 오류에 영향을 줄 수 있기 때문에 이러한 경우를 피하기 위해 엇갈리게 배치해 놓은 것이다.
UFS2는 더 이상 UFS1과 같은 방법을 사용하지 않는다.
UFS1의 경우 배치 할 때의 위치 계산을 슈퍼 블록에서 제공하는 사이클 값(c)와 델타(d)값으로 한다. 사이클 값은 배치 패턴 개수를 나타내는 것이고, 델타 값은 실린더 그룹 시작 위치로부터의 그룹기술자 오프셋이다. 좀 더 쉬운 이해를 위해 아래와 같이 가식화하였다.

 [그림 1 - 사이클 값과 델타 값]

 UFS1에서 델타 값의 증가는 상대적이다. 만약 델타 값이 10 오프셋이라면 첫 번째 그룹에서는 파일 시작 위치로부터 10 오프셋 떨어져 위치 할 것이고, 두 번째 그룹에서는 20, 세 번째 그룹에서는 30 이런식으로 위치하게 된다. 


[부트 코드]
UFS 파일시스템에 OS 커널이 포함되어 있다면 부트 코드는 파일시스템 첫 번째 섹터에 위치한다. 그 다음에 슈퍼 블록이나 디스크 레이블이 위치하게 된다.   


[분석 시 주의 사항]
UFS의 파일시스템 참조모델 데이터들에는 사고와 관련된 증거가 거의 없다. 또 이 참조 모델 데이터들에게서 히든 데이터를 얻으려고 할 때 많은 비필수 데이터들이 있어 분석 또한 쉽지 않다. 하지만 증거가 있을 수도 있으니 아래와 같은 사용하지 않는 공간들을 조사 해 볼 필요가 있다.

 - 슈퍼 블록에 할당 된 마지막 블록
 - 실린더 그룹에 할당 된 마지막 블록
 - 실린더 그룹 요약 영역에 할당 된 마지막 블록
 - 그룹 기술자에 할당 된 마지막 블록


위와 같은 공간들을 조사하기 위한 전초적 단계로 볼륨의 크기와 파일시스템의 크기를 비교하는 방법이 있다. 





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

File System - UFS (4)  (0) 2012.03.02
File System - UFS (3)  (0) 2012.03.02
File System - UFS (1)  (0) 2012.03.01
File System - Ext (13)  (0) 2012.02.28