본문 바로가기

Ext 파일시스템 포렌식

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 (6) 이번 글에서는 파일시스템 마지막 참조 모델인 응용 프로그램 참조 모델에 대해서 알아 보도록 하겠다. Ext 파일시스템에서는 응용 프로그램 참조 모델에 속하는 기능이 저널링 기능 밖에는 없다. [저널링] 저널링 기능은 파일시스템의 손상을 대비하여 복구를 위해 파일시스템의 변경사항을 기록 해두는 기능으로 설명을 할 수 있다. Ext에서 저널은 슈퍼블록에서 그 위치를 지정하여 주기 때문에 파일시스템 어느 곳이든 위치 할 수 있지만 보통 inode 8을 사용한다. 슈퍼 블록에는 저널을 위한 호환 설정 필드가 있는데 이 값을 어떻게 설정 하는가에 따라 로컬 저널 기능의 활성 여부를 결정 할 수 있다. 만약 로컬 저널 기능을 비 활성화로 설정하면 외부 저널을 사용 할 수 있다. 하지만, 이 저널의 데이터는 로컬에 .. 더보기
File System - Ext (5) 이번 글에서는 파일 이름 참조 모델에 해당하는 데이터에 대해서 알아 보도록 하겠다. [디렉토리 엔트리] Ext 파일시스템에서는 파일과 디렉토리의 구분을 Inode에 있는 특별한 타입 값으로 구분 짓는다. 디렉토리들은 디렉토리 엔트리 데이터 구조체의 목록을 포함하는 블록들을 할당 받게 되는데, 디렉토리 엔트리는 파일 이름과 메타데이터가 어디 있는지 설명하는 데이터 구조체이다. * 참고 : 디렉토리 크기는 디렉토리 엔트리 구조체 목록을 포함하는 블록의 크기와 관련이 있다. 모든 디렉토리는 자신과 부모를 나타내는 ".', ".." 디렉토리 엔트리를 포함하고 또 이 두개를 엔트리 시작으로 삼는다. ".", ".." 다음으로는 디렉토리 내의 파일과 하위 디렉토리의 엔트리들이다. * 참고 : 루트 디렉토리는 항상 .. 더보기