계속해서 Ext 파일시스템의 데이터 구조체를 알아보자.
* 참고 : 파일시스템 블록의 크기가 4096byte 일때는 슈퍼 블록이 0에 위치하고, 그룹 기술자 테이블은 블록 1에 위치한다. 또 파일시스템 블록의 크기가 1024byte 일때는 슈퍼 블록이 1에 위치하고, 그룹 기술자 테이블은 블록 2에 위치한다.
- 블록 비트맵의 시작 블록 주소 : 해당 오프셋의 값은 오프셋이 아니라 단순히 블록 번호에 불과하다. 위 이미지를 보면 "0x00000003" 이라는 값을 갖는데 이는 블록 3을 의미하는 것이다.
- inode 비트맵의 시작 블록 주소 : 블록 비트맵의 시작 블록 주소 오프셋과 의미가 동일하다.
각 바이트를 비트로 변환하면 할당 상태를 알 수 있다.
위에서 보듯이 기본적인 inode의 크기는 128byte이며, 만약 파일시스템 버전이 동적 버전으로 설정되면 inode의 크기 또한 동적으로 변한다.
- 파일 모드 : 파일 모드는 타입과 허가권을 나타낸다. 오프셋이 2byte 크기인데 bit로 변환하여 3개의 구역으로 나누어 플래그 값들이 설정된다. 해당 오프셋의 값을 bit로 변환하여 구역을 나눈 모습을 아래에서 볼 수 있다.
각 구역에는 아래와 같은 플래그 값이 2진수로 변환되어 들어 갈 수 있다.
계산은 간단하다. 위 이미지에 나와 있는 값을 예로 들어보자. 값을 각 자리별로 분리하여 hex로 변환 후 플래그 목록 값에서 해당하는 값을 찾으면 된다.
1) 110100100 -> 100000000, 10000000, 100000, 100
2) 100000000 -> 0x100 -> 사용자 - 읽기 권한
3) 10000000 -> 0x80 -> 사용자 - 쓰기 권한
4) 100000 -> 0x20 -> 그룹 - 읽기 권한
5) 100 -> 기타 사용자 - 읽기 권한
* 참고 : 만약 리눅스의 권한을 공부하였다면, 해당 2진수 값을 8진수로 변환하여 권한을 바로 파악하는 것도 좋다. 110100100 -> 644
[그림 4]에 나와 있는 값은 플래그 목록에서 보면 정규 파일을 뜻하고 있다.
- 타임스탬프(접근, 변경, 수정, 삭제 시간) : 해당 오프셋의 값들은 UTC 1970년 1월 1일을 기준으로 현재 시간까지의 초 값이다. 이 값들은 2038년 1월부터는 계산이 불가능하다.
- 플래그 : inode가 할당 된 파일에 설정되어 있는 속성들을 표시한 오프셋으로 플래그 목록은 아래에서 확인 할 수 있다.
[그룹 기술자 테이블]
그룹 기술자 테이블은 파일시스템 블록에 위치하는 그룹 기술자 그룹의 목록을 뜻하며, 슈퍼 블록 다음 블록에 위치 한다. 그룹 기술자 테이블의 엔트리는 각 블록 그룹의 정보를 가지고 있으며, 테이블의 크기는 32byte이다.
[그림 1 - 그룹 기술자 테이블 오프셋]
* 참고 : 파일시스템 블록의 크기가 4096byte 일때는 슈퍼 블록이 0에 위치하고, 그룹 기술자 테이블은 블록 1에 위치한다. 또 파일시스템 블록의 크기가 1024byte 일때는 슈퍼 블록이 1에 위치하고, 그룹 기술자 테이블은 블록 2에 위치한다.
- 블록 비트맵의 시작 블록 주소 : 해당 오프셋의 값은 오프셋이 아니라 단순히 블록 번호에 불과하다. 위 이미지를 보면 "0x00000003" 이라는 값을 갖는데 이는 블록 3을 의미하는 것이다.
- inode 비트맵의 시작 블록 주소 : 블록 비트맵의 시작 블록 주소 오프셋과 의미가 동일하다.
[블록 비트맵]
파일과 디렉토리의 내용이 저장되는 블록의 할당 상태를 관리하는 부분으로 각 비트와 블록은 맵핑관계이다. 이것에 시작위치는 그룹 기술자 테이블에 정의되어 있다.
[그림 2 - 블록 비트맵 내용]
각 바이트를 비트로 변환하면 할당 상태를 알 수 있다.
[inode]
inode 데이터 구조체는 파일이나 디렉토리의 메타데이터를 저장한다. inode들은 각 블록 그룹에 위치하는 inode 테이블에 위치하는데, inode 테이블 위치는 그룹 기술자 테이블에 정의되어 있고 그룹 별 inode 개수는 슈퍼블록에 정의되어 있다.
[그림 3 - inode 오프셋]
위에서 보듯이 기본적인 inode의 크기는 128byte이며, 만약 파일시스템 버전이 동적 버전으로 설정되면 inode의 크기 또한 동적으로 변한다.
- 파일 모드 : 파일 모드는 타입과 허가권을 나타낸다. 오프셋이 2byte 크기인데 bit로 변환하여 3개의 구역으로 나누어 플래그 값들이 설정된다. 해당 오프셋의 값을 bit로 변환하여 구역을 나눈 모습을 아래에서 볼 수 있다.
[그림 4 - 파일 모드의 bit 구역]
각 구역에는 아래와 같은 플래그 값이 2진수로 변환되어 들어 갈 수 있다.
[그림 5 - 접근 권한 플래그 목록]
계산은 간단하다. 위 이미지에 나와 있는 값을 예로 들어보자. 값을 각 자리별로 분리하여 hex로 변환 후 플래그 목록 값에서 해당하는 값을 찾으면 된다.
1) 110100100 -> 100000000, 10000000, 100000, 100
2) 100000000 -> 0x100 -> 사용자 - 읽기 권한
3) 10000000 -> 0x80 -> 사용자 - 쓰기 권한
4) 100000 -> 0x20 -> 그룹 - 읽기 권한
5) 100 -> 기타 사용자 - 읽기 권한
* 참고 : 만약 리눅스의 권한을 공부하였다면, 해당 2진수 값을 8진수로 변환하여 권한을 바로 파악하는 것도 좋다. 110100100 -> 644
[그림 6 - 실행 속성 플래그 목록]
[그림 7 - inode의 파일 타입 플래그 목록]
[그림 4]에 나와 있는 값은 플래그 목록에서 보면 정규 파일을 뜻하고 있다.
- 타임스탬프(접근, 변경, 수정, 삭제 시간) : 해당 오프셋의 값들은 UTC 1970년 1월 1일을 기준으로 현재 시간까지의 초 값이다. 이 값들은 2038년 1월부터는 계산이 불가능하다.
- 플래그 : inode가 할당 된 파일에 설정되어 있는 속성들을 표시한 오프셋으로 플래그 목록은 아래에서 확인 할 수 있다.
[그림 8 - inode 플래그 목록]
'[+] Forensic' 카테고리의 다른 글
File System - Ext (12) (0) | 2012.02.27 |
---|---|
File System - Ext (11) (0) | 2012.02.27 |
File System - Ext (9) (2) | 2012.02.24 |
File System - Ext (8) (0) | 2012.02.23 |