본문 바로가기

Kitri_NCS3기 보안과정/디지털포렌식

Ext File System -1-

ext : 리눅스 초기에 사용되던 파일 시스템, 호환성 x

ext2 : ext3가 개발되기 이전까지 가장 많이 사용된 파일 시스템으로 리눅스 파일 시스템 대부분의 기능을 제공하는 파일 시스템이다. 특히 ext2는 뛰어난 안정성과 속도로 가장 유명한 파일 시스템으로 자리 잡았고 ext3 또한 ext2에 기반을 두어 개발되었다. 또한 쉽게 호환되며 업그레이드도 쉽게 설계되어 있다.

ext3 : ext2 파일시스템에 저널링(Journaling)을 지원하도록 확장된 파일시스템이다. 현재 리눅스에 가장 많이 사용되고 있다.

 

*Journaling : 변경을 기록하는 로그를 두어 시스템 비정상동료시 파일시스템 복구를 쉽게 하는 방법.

 

Ext4 란 ? 


64비트 기억 공간 제한을 없애고 ext3의 성능을 향상시키며, 하위 호환성이 있는 확장버전이다. 

Ext4는 저장장치를 논리블록의 배열로 나누아 오버헤드를 줄이고 전송크기를 크게하여 처리량을 높일 수 있다.


ext3 파일시스템을 확장한 파일시스템으로 Extent라는 기능을 제공하여, 파일에 디스크 할당 시 물리적으로 연속적인 블록을 할당할 수 있도록하여, 파일 접근속도 향상 및 단편화[각주:1]로 인한 성능차이를 줄이기 위해 설계된 파일 시스템.

'.' 으로 시작하는 파일은 숨겨진 파일 (ls -a 로 보임)

'.'은 현재 디렉토리, '..'는 부모디렉토리

 

기능 


  - 호환기능 : 마운트 하려는 파일시스템에 저널링, 확장 속성등 운영체제에서 지원하지않는 기능이 있더라도 마운트 가능 

  - 비호환기능 : 마운트하려는 파일시스템에 압축, 암호등 기능이 포함되어 있으면 해당파일 시스템을 마운트하지 않는 기능

  - 읽기전용 호환기능 : 비 호환 기능처럼 운영체제가 지원하지 않는 기능을 가진 파일시스템을 강제적으로 마운트한다면 읽기 전용으로 마운트


블록

NTFS나 FAT파일 시스템의 클러스터의 개념과 유사하다.

파일이름, 메타데이터, 파일 내용등을 저장하는 단위.

메모리에서 한번 I/O할 때마다 읽거나 쓰는 단위

 Boot Sector

Block Group 0 

 

Block Group 1

... 

 Block Group n

부트섹터와 블록그룹으로 이루어지며 블록그룹끼리는 같은 블록수를 가진다. (가장 마지막 블록 제외)

부트섹터는 블록그룹에 속하지 않는다.

1024, 2048,4096 byte의 크기를 가진다. 파일 시스템을 생성할때 설정이 가능하다.

그룹별 블록의 수는 superblock에 정의되어있다.

 

 

 

블록의 할당상태는 그룹기술자테이블에 정의된 Block Bitmap에서 맵핑관계를 확인할 수 있다.

블록과 비트의 맵핑관계를 확인하기 위해서는 블록의 상대적 주소를 계산해야 한다.

 첫번째 블록 = 블록그룹 * 그룹별 블록수 + 첫번째 데이터 블록


 

블록그룹 (Block Group)

 

블록은 같은 블록 그룹안에 저장되는 알고리즘을 사용하고 있다. → 단편화 감소

파일시스템의 전체적인 정보는 SuperBlock과 Group Descriptor Table에 저장된다. 이들은 0번 블록그룹의 데이터만 사용하지만 주요데이터이기 때문에 손상될 경우를 대비하여 모든 블록 그룹에 사본이 저장되어 있다.

 

블록 비트맵은 해당 블록그룹의 블록의 할당정보를 나타내는데 블록의갯수와 크기는 해당 파티션의 블록의 크기에 따라 달라진다.

 

주요 저장내용

- Super Block (1 Block)

- Group Descriptor Table (n Block)

- Block Bitmap (1 Block)

- I-node Bitmap (1 Block)

- I-node Table (n Block)

- File Data Block (n Block)


 



그룹기술자 테이블 블록 

복사본이 sparse 슈퍼블록 기능이 활성화 되어있지않으면 각 블록그룹에 존재하게됨.

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




Inode Table

Inode라는 데이터 구조체를 포함하고 있는 테이블이며 , 각 블록그룹에 1개씩만 존재한다. 

- inode table의 위치는 그룹기술자 테이블이 정한다.


inode = 파일과 디렉토리의 메타데이터를 포함하는 데이터 구조체로 고정된 크기를 갖는다. 

- 모든 Inode 는 모두 동일한 크기를 가지며 슈퍼블록에 정의되어 있다.

- inode는 inode table이라는 구조체에 저장되어 잇다.

- 1~10번은 예약되어 있고, 할당된 상태 이다.

 

- 소유권 : 사용자, 그룹 ID로 인해 저장된다. chown 등으로 변경가능 → 신뢰 x

- 타임스탬프 : 변경, 수정, 접근 시간뿐만 아니라 삭제시간까지 포함.  Touch 으로 수정가능 → 신뢰 x

- 모드필드 : 파일타입, 기본허가권등의 값이 포함, sticky bit라는 속성을 포함하고 있는데 오직 소유주만이 파일이나 디렉토리의 내용을 지울수 있도록 해줌

- 링크 카운트 : inode를 가리키를 파일이름의 개수를 뜻한다. default 0

- 블록포인터 : 파일에 할당 할 12개의 블록주소 저장. 부족할 경우 간접포인터 형식으로 하나의 블록에 다른 블록의 주소를 저장함.

 

inode를 새로운 파일이나 디렉토리에 할당 할 경우 inode가 디렉토리에 할당되는 것이 아니라면 부모 디렉토리와 같은 블록그룹에 할당한다.

inode는 균등하게 사용되도록 알고리즘이 적용되어 있다.

링크 카운터는 파일은 1, 디렉토리는 2 , 0은 고아파일이다.

 

inode는 속성값들이 변경이 가능하기 때문에 신뢰해서는 안된다. 로그나 네트워크 패킷등의 독립적인 정볼르 찾아 해당파일 시간의 신뢰성을 파악하는것이 가장 좋다. 블록포인터에서 영구 삭제되지않았다면 삭제한 파일을 복구 할 수도 있으며 슈퍼 블록에서 고아 inode가 있는지 확인보아야 한다.

 

 

  1. 기억장치의 빈 공간 또는 자료가 여러개의 조각으로 나뉘는 현상. 가용공간을 감소시키고 수행속도를 늦춤 [본문으로]