본문 바로가기

파일시스템 포렌식

File System - Ext (9) 이번 글부터는 Ext 파일시스템의 데이터 구조체들을 알아 볼 것이다. [슈퍼 블록] 슈퍼 블록의 파일시스템에서 1024byte offset에 위치하고, 그 크기 또한 1024byte 이다. * 참고 : 크기가 너무 커 오프셋 별로 분석을 하지 않고 표로 대체 하였다. 아래는 슈퍼 블록의 오프셋 부분이다. [그림 1 - 슈퍼 블록 위치] 이제 슈퍼 블록의 오프셋 별 의미를 알아보자. [그림 2 - 슈퍼 블록 오프셋] - 블록 크기 : 이 값은 직접적인 값이 아닌 간접적인 값으로, 1024를 해당 오프셋의 값만 큼 왼쪽으로 쉬프트 연산하여 블록 크기를 구해야 한다. - 단편 크기 : 이 값 또한 블록 크기와 동일한 방법으로 구한다. - 시그니처 : 슈퍼 블록은 "0xEF53" 시그니처를 가지며, 슈퍼 블록의.. 더보기
File System - Ext (8) 이번 글은 Ext 파일시스템에서의 파일 복구와 일관성 검사에 대해 이야기 해 보려 한다. [파일 복구] Ext 파일시스템은 Ext4 파일시스템까지 버전이 출시되어 있는데, Ext2와 Ext3의 파일 삭제 방식이 조금 달라 파일 복구 방법도 조금 다르다. Ext2에서는 파일 복구가 대체로 수월한 편이다. 그 이유는 파일이 삭제 될 때 inode에 블록 포인터 값이 지워지지 않고 계속 남아 있기 때문이다. 또 삭제 시간이 업데이트 되어 파일이 언제 지워졌는지만 안다면 그에 맞는 inode를 찾는 일은 좀 더 수월 해 진다. 하지만 블록 포인터 값이 inode에 남아 있다고 하여 100% 해당 파일의 내용을 복구하는 것은 아니다. inode가 가리키고 있는 블록이 재 할당되면 그 내용은 전혀 다른 내용이 되기.. 더보기
File System - Ext (7) 이전 글까지 해서 Ext의 참조 모델 별로 어떤 데이터가 있는지 알아 보았다. 이번 글에서는 이러한 참조 모델 데이터들이 어떻게 혼합되어 파일이 생성되고 삭제 되는지 알아 볼 것이다. [파일 생성] 이 과정에서는 dir 이라는 디렉토리가 있다고 가정하며, File.txt 파일을 생성한다는 가정 상황을 시나리오로 할 것이다. 1. 일단 파일시스템 1024byte 오프셋에 위치 하는 슈퍼 블록의 참조하여 블록의 크기와 블록 그룹의 블록 개수, 블록 그룹 내의 inode 개수를 파악한다. * 참고 : 해당 시나리오에서 블록의 크기는 1024byte, 블록 그룹의 블록 개수는 8192개, 블록 그룹 별 inode의 개수는 2016개라고 하겠다. 2. 슈퍼 블록의 분석이 끝나면 그룹 기술자 테이블을 참조한다. 이.. 더보기
File System - Ext (5) 이번 글에서는 파일 이름 참조 모델에 해당하는 데이터에 대해서 알아 보도록 하겠다. [디렉토리 엔트리] Ext 파일시스템에서는 파일과 디렉토리의 구분을 Inode에 있는 특별한 타입 값으로 구분 짓는다. 디렉토리들은 디렉토리 엔트리 데이터 구조체의 목록을 포함하는 블록들을 할당 받게 되는데, 디렉토리 엔트리는 파일 이름과 메타데이터가 어디 있는지 설명하는 데이터 구조체이다. * 참고 : 디렉토리 크기는 디렉토리 엔트리 구조체 목록을 포함하는 블록의 크기와 관련이 있다. 모든 디렉토리는 자신과 부모를 나타내는 ".', ".." 디렉토리 엔트리를 포함하고 또 이 두개를 엔트리 시작으로 삼는다. ".", ".." 다음으로는 디렉토리 내의 파일과 하위 디렉토리의 엔트리들이다. * 참고 : 루트 디렉토리는 항상 .. 더보기
File System - Ext (4) 이번 글에서는 메타데이터 참조 모델에 해당하는 것을 알아 볼 것이다. [Inode] Ext 파일시스템의 메타데이터들은 모두 Inode에 저장이 된다. Ext 파일시스템에서 Inode는 모두 동일한 크기를 가지며, 슈퍼 블록에 정의되어 있다. Inode는 Inode Table이라는 집합체에 저장되어 있으며 이 테이블은 각 블록 그룹에 존재하며 크기는 슈퍼블록에 정의되어 있다. Inode 테이블의 위치는 그룹 기술자 테이블에서 정해준다. 보통 Inode의 1~10번은 예약되어 있고, 할당 된 상태이다. 슈퍼 블록은 이런 예약 Inode들을 제외한 첫 번째 Inode를 값으로 가지고 있다. 각 Inode 필드 중에는 고정된 번호를 가지는 필드가 있고 추가 정보로는 확장 속성과 간접 블록 포인터가 있다. 또 I.. 더보기