이번 글에서는 Ext 파일시스템의 파일이나 디렉토리의 확장 속성 데이터 구조체에 대해서 알아 볼 것이다.
확장 속성에는 3가지 구역이 존재한다.
- 헤더 영역
- 이름 엔트리 영역
- 값 영역
헤더 영역 다음에 이름 엔트리 영역이 오는데 일반적으로 영역들은 붙어 있기 마련이지만, 값 영역은 나머지 두 영역과 다르게 블록 마지막에 존재 해 두 영역과 붙어 있지 않다. 더군다나 값 영역은 블록 마지막에서 블록 처음을 향하여 값이 점차 쌓인다.
값 영역에 있는 값들은 속성에 이름 엔트리와 대응되는 값들이지만, 이름 엔트리 순서와 값 순서에 따라 대응되는 것은 아니다.
일단 헤더 영역부터 알아보자.
* 참고 : 현재 필자가 가지고 있는 샘플 이미지에는 확장 속성을 가진 디렉토리나 파일이 존재 하지 않아 오프셋 분석은 표로 대신 한다.
- 참고 카운트 : 확장 속성의 블록은 여러 파일이나 디렉토리에 공유 되어 참고 카운트는 해당 블록을 공유 받아 사용 중인 블록이 몇 개 인지 판별 해 주는 필드이다.
- 블록 개수 : 확장 속성을 가진 블록이 몇개의 확장 속성을 가졌는지 판별 해주는 필드이다(현재까지는 사용되지 않는다.)
- 해시 값 : 중복 속성을 구별 할 때 사용되는 해시 값이다.
- 속성 타입 : 아래 목록에 있는 타입 값들 중 하나가 설정된다.
0~1에 존재하는 타입 필드는 POSIX ACL 속성이 설정 된 엔트리의 허가권 종류를 의미한다. 허가권 목록은 아래와 같다.
0x01, 0x04, 0x20의 경우 inode에서 복사 된 정보들이다. 그렇기에 따로 접근 권한을 설정 해 줄 필요가 없다.
나머지 값들의 접근권한 플래그는 엔트리 목록에 있는 필드 중 접근 권한 필드에서 설정 해 주어야 한다.
그 목록은 아래와 같다.
- 값 오프셋 : 해당 이름 엔트리와 대응 되는 값의 오프셋 위치이다.
- 값의 블록 위치 : 해당 이름 엔트리와 대응 되는 값의 블록 위치이다(현재 리눅스에서는 하나의 블록만 사용하기 때문에 해당 필드에 설정이 되어 있지 않을 수도 있다.)
- 값 크기 : 해당 엔트리와 대응되는 값의 크기이다.
확장 속성에는 3가지 구역이 존재한다.
- 헤더 영역
- 이름 엔트리 영역
- 값 영역
헤더 영역 다음에 이름 엔트리 영역이 오는데 일반적으로 영역들은 붙어 있기 마련이지만, 값 영역은 나머지 두 영역과 다르게 블록 마지막에 존재 해 두 영역과 붙어 있지 않다. 더군다나 값 영역은 블록 마지막에서 블록 처음을 향하여 값이 점차 쌓인다.
값 영역에 있는 값들은 속성에 이름 엔트리와 대응되는 값들이지만, 이름 엔트리 순서와 값 순서에 따라 대응되는 것은 아니다.
일단 헤더 영역부터 알아보자.
* 참고 : 현재 필자가 가지고 있는 샘플 이미지에는 확장 속성을 가진 디렉토리나 파일이 존재 하지 않아 오프셋 분석은 표로 대신 한다.
[확장 속성 헤더]
확장 속성의 헤더 영역은 32byte 크기이며, 시그니처를 가지고 있고 블록 0 byte부터 시작한다.
[그림 1 - 헤더 오프셋]
- 참고 카운트 : 확장 속성의 블록은 여러 파일이나 디렉토리에 공유 되어 참고 카운트는 해당 블록을 공유 받아 사용 중인 블록이 몇 개 인지 판별 해 주는 필드이다.
- 블록 개수 : 확장 속성을 가진 블록이 몇개의 확장 속성을 가졌는지 판별 해주는 필드이다(현재까지는 사용되지 않는다.)
- 해시 값 : 중복 속성을 구별 할 때 사용되는 해시 값이다.
[확장 속성 이름 엔트리]
이름 엔트리 영역은 헤더 영역 바로 다음에 위치한다.
[그림 2 - 이름 엔트리 오프셋]
- 속성 타입 : 아래 목록에 있는 타입 값들 중 하나가 설정된다.
[그림 3 - 속성 타입 목록]
값 중 3이라는 값을 가지는 속성은 디렉토리에만 해당하며, 5라는 값을 가지는 속성은 현재 리눅스에서는 사용되지 않고 있다.
POSIX ACL 속성은 데이터 구조체로 이루어져 있는데, 그 데이터 구조체는 헤더와 엔트리 목록에 나누어져 존재한다.
[그림 4 - 헤더에 존재하는 POSIX ACL]
[그림 5 - 엔트리 목록에 존재하는 POSIX ACL]
0~1에 존재하는 타입 필드는 POSIX ACL 속성이 설정 된 엔트리의 허가권 종류를 의미한다. 허가권 목록은 아래와 같다.
[그림 6 - POSIX ACL 허가 타입 목록]
0x01, 0x04, 0x20의 경우 inode에서 복사 된 정보들이다. 그렇기에 따로 접근 권한을 설정 해 줄 필요가 없다.
나머지 값들의 접근권한 플래그는 엔트리 목록에 있는 필드 중 접근 권한 필드에서 설정 해 주어야 한다.
그 목록은 아래와 같다.
[그림 7 - 접근권한 필드의 플래그 목록]
- 값 오프셋 : 해당 이름 엔트리와 대응 되는 값의 오프셋 위치이다.
- 값의 블록 위치 : 해당 이름 엔트리와 대응 되는 값의 블록 위치이다(현재 리눅스에서는 하나의 블록만 사용하기 때문에 해당 필드에 설정이 되어 있지 않을 수도 있다.)
- 값 크기 : 해당 엔트리와 대응되는 값의 크기이다.
'[+] Forensic' 카테고리의 다른 글
File System - Ext (13) (0) | 2012.02.28 |
---|---|
File System - Ext (12) (0) | 2012.02.27 |
File System - Ext (10) (0) | 2012.02.24 |
File System - Ext (9) (2) | 2012.02.24 |