본문 바로가기

[+] Forensic

File System - Ext (2)

이번 글에서는 Ext 파일시스템에 파일시스템 참조 모델에 해당 하는 것들을 알아 볼 것이다.

[슈퍼 블록]
슈퍼 블록은 파일시스템의 시작(부트 섹터 제외)으로부터 1024byte에 위치한다. 크기는 1024byte이지만 실제로는 이보다 조금 더 작다. 슈퍼 블록은 설정 값만 포함하고 있고 부트 코드는 포함하고 있지 않다. 슈퍼 블록의 복사본은 보통 블록 그룹의 첫 블록(슈퍼블록)에 저장된다. 슈퍼 블록에 저장되는 정보는 아래와 같다.

 - 각 블록의 크기
 - 전체 블록의 수
 - 블록 그룹 별 블록 개수
 - 예약 블록 수
 - inode 전체 개수
 - 블록 그룹 별 inode 개수
 - 볼륨 이름
 - 마지막 수정 시간
 - 마지막 마운트 시간
 - 마지막 마운트 경로
 - 무결성 식별 실행 여부 값


많은 정보들이 포함되어 있지만 마짐가 수정 시간부터의 값들은 부가적 데이터이다. 또 슈퍼 블록은 비 사용 중인 inode와 블록들의 전체 개수에 대한 데이터를 기록하기도 하는데 이것의 이유는 inode와 블록들을 할당 할 때 참고하기 위해서 이다.
슈퍼블록에는 앞 글에서 설명한 세 가지의 호환성 기능 말고도 sparse 슈퍼 블록 기능이라고 있는데 이 기능에 대해서 아래와 같이 설명 할 수 있다.

[Sparse 슈퍼 블록]
이 기능은 기본적으로 Ext 파일시스템이 리눅스에 생성 될 때 활성화 되어 있는 기능으로 슈퍼 블록과 그룹 기술자 테이블의 복사본을 일부 블록 그룹에 포함되도록 한다. 이 기능으로 인하여 파일시스템의 시작 위치를 판별하는데 어려움이 생길 수 있다. 

 
 * 참고 : 슈퍼 블록 볼륨 레이블 이라는 것이 있는데 이것은 파일시스템을 구분하기 위하여 사용된다.  


[그룹 기술자 테이블 블록]
그룹 기술자 테이블 블록은 슈퍼 블록 다음으로 오는 블록이며, 해당 테이블의 복사본은 sparse 슈퍼 블록 기능이 활성화 되어 있지 않으면 각 블록 그룹에 존재하게 된다. 해당 테이블에는 파일 내용말고도 다른 정보들이 포함되는데 그 정보들은 아래와 같다.

 - 슈퍼블록, 그룹 기술자 그룹, inode 테이블, inode 비트맵, 블록 비트맵의 설정 데이터

위와 같은 정보들의 시작 위치등을 해당 테이블이 알려준다.


[부트 코드]
부트 코드는 슈퍼 블록 이전에 위치하며 크기는 1024byte이다. 즉 MBR 영역과 첫 번째 블록 그룹의 슈퍼블록 영역 사이에 존재하는 것이다.

 * 참고 : 부팅 파일시스템이 아니라면 부트코드는 포함되지 않으며, 많은 리눅스 시스템들은 파일시스템에 부트 코드를 포함시키지 않는다. 


[분석 시 주의 사항]
위에서 설명한 영역들에는 히든 데이터가 포함되어 있을 수도 있다. 특히 슈퍼 블록에는 사용되지 않는 공간이 많다.
또 슈퍼 블록 전 1024byte 영역은 부트 코드 예약 영역이지만 반드시 필요한 영역은 아니므로 이곳에 히든 데이터가 있을 수 있다. 그룹 기술자 테이블에는 많은 엔트리가 있지만 마지막에 있는 엔트리는 사용되지 않아 히든 데이터가 있을 수 있고, 이러한 이유로 백업본에도 히든 데이터가 있을 수 있다.
또 슈퍼 블록이 없거나 손상 되었다면 백업본을 찾아야 한다. 백업본은 시그니처 "0xEF53" 을 가지고 있어 이 시그니처를 검색하면 된다. 하지만 오탐률이 많아 검증을 해야 한다. 슈퍼 블록의 경우 각 블록 그룹에 복사본이 존재하기 때문에 일정 간격으로 동일한 값들이 나와야 한다. 이렇게 찾은 복사본은 원본이 수정되었는지 검증하는데 사용 된다.





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

File System - Ext (4)  (0) 2012.02.21
File System - Ext (3)  (0) 2012.02.21
File System - Ext (2)  (0) 2012.02.20
File System - Ext (1)  (0) 2012.02.20
File System - NTFS (20)  (0) 2012.02.19