일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Whitehacker
- hacker
- 정보보안
- 25 Days of Cyber Security
- picoGym
- 정보보안산업기사 필기
- 디지털포렌식 자격증
- 정보보안산업기사 자격증
- TryHackeMe
- htb
- Hack The Box
- root
- INFOSEC
- flag
- 디지털포렌식
- 리눅스마스터 자격증
- 포렌식
- kali-linux
- 리눅스마스터 2급 2차
- picoCTF
- CTF
- hackthebox
- TryHackMe
- picoCTF 2021
- Cybersecurity
- THM
- Capture The Flag
- 자격증
- 해킹
- 디지털포렌식 전문가 2급
- Today
- Total
root@j4sper:~#
디지털포렌식 전문가 2급 필기 - 파일 시스템과 운영체제 (1) 본문
제1편 파일시스템
제1장 파일의 기본개념
파일 : 정보의 집합 또는 관련된 정보의 집합
- 물리적 정의 : 바이트의 나열(Sequence of Bytes)
- 논리적 정의 : 컴퓨터 등의 기기에서 의미 있는 정보를 담는 단위
텍스트 파일(Text File) : 일반 문자열이 들어가는 파일
- 사람이 인지할 수 있는 문자열 집합으로부터 문자열로만 이루어짐(ASCII, 유니코드)
- 저장 정보의 해석 방식, 운영체제와 연결되는 프로그램의 방식에 따라 이진 파일과 구분
이진 파일(Binary File) : 컴퓨터 파일로 컴퓨터 저장과 처리 목적을 위해 이진 형식으로 인코딩 된 데이터
- 많은 이진 파일 형식은 문자열로 해석될 수 있는 부분을 포함
- 포맷 정보가 없는 문자열 데이터만 포함하는 이진 파일은 완전한 텍스트 파일이라고 함
파일의 선별
- 파일의 이름과 파일의 확장자(Extensions)를 통해 파일의 종류를 식별
- 파일의 서명 또는 파일의 내용을 참조하여 구분
- 파일 시그니처(File Signature) : 매직넘버(Magic Number)라고도 하며, 파일의 형식을 식별하기 위해 일반적으로 파일의 시작(Header) 또는 끝(Footer) 부분에 배치된 2~4 Bytes 정도의 고유한 값 또는 정보
- jpg 포맷 : FF D8 FF DB or FF D8 FF E0
- 파일의 확장자 변경하는 것만으로 원하지 않는 응용 소프트웨어 파일이 실행될 수 있고, 확장자는 언제든지 임의로 변경할 수 있어 주의가 필요
- 파일의 유형을 선별할 때에는 파일의 확장자와 시그니처를 함께 사용
- 파일의 포맷과 더불어 파일 시그니처는 파일의 식별뿐만 아니라 파일 복구, 악성코드 탐지 등을 위한 필수적인 정보로 디지털 포렌식 관점에서 상당히 중요한 요소
파일의 상태 정보(메타데이터)
- 파일 이름(File naem)
- 파일 종류(File type)
- 파일의 크기(File Size)
- 파일 생성 시간(Created time)
- 최근 파일 접근 시간(Last Accessed time)
- 최근 파일 갱신 시간(Modified time)
- 파일의 소유자(File owner)
- 파일 속성(Attributes) 또는 접근 권한(Access rights)
- 파일의 저장 위치(Physical location)
제2장 파일의 기반 요소
파일 : 레코드 형태로 구성
- 레코드 : 연관된 데이터 항목들로 구성
- 항목 : 여러 개의 바이트로 구성되며 레코드의 특정 필드에 해당
- BLOB(Binary Large Object) : 필드의 데이터 타입, 자신이 속한 레코드와는 별도로 디스크 블록들의 풀에 저장되며 BLOB 포인터를 레코드에 포함시킴
고정 길이 : 파일 내의 각 레코드 크기가 모두 같은 경우,
- 고정 길이의 경우 각 레코드는 같은 필드들을 가지며 필드 길이는 고정
- 레코드의 시작 위치를 기준으로 각 필드의 상대적인 위치를 식별
가변 길이 : 레코드를 구성하는 하나 이상의 필드의 길이가 서로 다르거나, 다중 값을 가질 경우
- 가변 길이의 경우 각 레코드는 가변 길이 필드에 대해서 값을 갖지만 필드 값의 정확한 길이는 알지 못함
- 특정 레코드 내에서 가변 길이 필드의 바이트 수를 결정하기 위해 필드의 끝을 나타내는 특수문자를 사용하거나 필드 값 앞에 그 필드의 바이트 크기를 저장
블록킹 : 디스크와 주기억장치 사이의 데이터 전송 단위가 하나의 블록(block)이므로 한 파일의 레코드들을 디스크 블록들에 할당하여야 한다.
- 블록의 크기(B)가 고정 길이 레코드의 크기(R)보다 크다고 가정한다면, 각 블록에 Bf = B/R 개의 레코드들을 저장할 수 있으며, Bf를 블로킹 인수(Blocking factor)라고 한다.
- Bf 각 블록에 저장할 수 있는 레코드의 평균 개수를 의미하며, B/R의 나머지 값이 각 블록에서의 사용하지 않는 여유 공간이 된다.
- r개의 레코드들로 구성되는 파일이 필요로 하는 블록의 수는 b = r/Bf 개다.
- I/O 시간을 감소시키는 장점이 있는 반면에 단편화(fragmentation)에 의해 저장 공간이 감소하는 단점이 있다.
비신장(unspanned) 조직 : 레코드들을 디스크 블록들에 저장할 때 레코드가 각 블록의 경계를 넘지 않도록 하는 방식
- 각 레코드는 블록 내에서 이미 알려진 위치에서 시작하기 때문에 B > R 인 고정 길이 레코드에 사용되며 각 블록은 사용하지 않은 여유 공간을 갖게 된다.
- 블록의 사용하지 않은 공간을 활용하기 위해 레코드의 일부분을 한 블록에 저장하고 나머지 부분을 다른 블록에 저장할 수 있다.
신장(spanned) 조직 : 블록이 디스크 상에 인접해 있지 않으면 레코드의 나머지 부분을 저장하고 있는 블록을 가리키는 포인터를 처음 블록의 마지막에 두는 방식
- B < R 인 경우 주로 사용
제3장 파일시스템의 구조
파일시스템 : 운영체제는 사용자들이 생성, 저장하고 사용하는 파일들을 관리하고 사용자들로 하여금 보다 쉽게 이러한 작업을 할 수 있도록 지원 및 관리하는 역할
파일시스템의 논리적 구조 : 사용자에게 파일시스템이 어떻게 보이는지에 대한 구조
- 평면 디렉터리 구조 : 파일 시스템 전체에 하나의 디렉터리만 존재하고 모든 파일들을 이 하나의 디렉터리에 저장하도록 하는 구조
- 2단계 디렉터리 구조 : 다중 사용자 환경에서 평면 디렉터리 구조를 사용할 경우 여러 사용자들이 파일들이 하나의 디렉터리에 저장되어 혼잡성을 증가시키는 문제점을 해결하고자 제안되었으며, 각 사용자마다 디렉토리를 하나씩 배정, 하부 디렉터리 생성 불가능
- 계층 디렉터리 구조 : 사용자들로 하여금 자신의 파일들을 나름대로의 기준으로 분류하여 이를 별도의 디렉터리에 유지할 수 있도록 하고, 한 디렉토리 내에 다른 디렉토리의 생성 및 삭제가 동적으로 이루어질 수 있도록 하는 개념, 루트 디렉터리(root directory)라는 특별한 최상위 디렉토리가 존재하며 그 하부에 다시 여래개의 디렉터리 또는 파일들이 존재
- 그래프 디렉터리 구조 : 여러 사용자들이 공유하고자 하는 파일들을 하나의 디렉터리 또는 일부 서브트리에 저장해 놓고 여러 사용자들이 이를 같이 사용할 수 있도록 지원, 계층 디렉토리 구조를 기반으로 하여 확장
파일시스템의 물리적 구조 : 연속 할당(continuous allocation), 비연속 할당(disconitnous allocation)
- 비트 벡터(bit vector) 기법 : 파일시스템 내의 모든 데이터 블록에 대해 각 디스크 블록이 현재 사용 중인지 아닌지를 표시하는 1비트 플래그를 둔다. 이 비트 벡터는 커널(kernel)의 파일시스템 측에서 유지하고 관리한다.
- 연결 리스트(linked list) 기법 : 디스크 상의 모든 빈 블록을 연결 리스트로 연결하고 이중 첫 번째 빈 블록에 대한 포인터만을 커널에서 유지하도록 한다. 각 빈 블록에는 다음 빈 블록에 대한 포인터(블록 번호)를 유지하도록 한다.
- 그룹화(gruoping)에 의한 기법 : 각 빈 블록에 n개의 빈 블록 번호들을 유지하도록 한다. 이중 n-1개의 번호는 빈 블록들의 번호이며, 나머지 하나의 번호는 다음번 n개 빈 블록 번호를 갖는 블록의 번호이다. 연결 리스트를 기본적으로 사용하고 있으나 연결 리스트의 각 노드에 n개의 빈 블록 번호들이 유지된다.
- 카운팅(counting)에 의한 기법 : 디스크의 빈 공간을 블록 단위로 관리하지 않고 연속된 빈 블록들을 하나로 묶어 관리하는 기법이다. 커널에서는 빈 공간을 유지, 관리하는 테이블에 각 빈 블록의 묶음에 대하여 첫 번째 빈 블록의 번호와 그 묶음 내의 빈 블록의 수를 같이 저장함으로서 빈 공간 관리의 효율성을 높이고자 하는 것이며, 디스크 공간을 연속 할당하는 시스템에서 유용하다.
제4장 파티션
파티션 : 연속된 저장 공간을 하나 이상의 연속되고 독립된 영역으로 나누어서 사용할 수 있도록 정의한 규약
- 단일 파티션 : 디스크를 파티셔닝 하지 않고 즉, 논리적으로 나누어 사용하는 것 없이 그냥 사용하는 것
- 다중 파티션 : 디스크를 2개 이상의 파티션으로 나눈 것
볼륨 : 운영체제가 사용 가능한 섹터(Sector)들의 집합
- 여러 개의 물리적이 하드디스크를 묶어 마치 하나의 공간으로 인식하여 사용하는 것
- 하드디스크는 2개 이상이지만 실제 사용자가 사용하며 인식하는 볼륨은 하나인 것
- 파티션은 볼륨과는 달리 반드시 연속된 섹터들로 구성되어야 하는 차이가 있다.
MBR(Master Boot Record) : 부팅에 필요한 부트 코드와 각각의 파티션에 대한 정보를 저장하는 파티션 테이블을 저장하는 아주 중요한 영역
- 부트 코드(Boot Code, 446 Bytes), 파티션 테이블(Partition Table, 64 Bytes), 시그니처(Signature, 2 Bytes)로 총 512 Bytes로 구성
부트 코드 : MBR에 저장된 파티션 테이블에서 부팅 가능한 파티션을 검색하여 부팅이 가능한 파티션이 존재할 경우 해당 파티션의 VBR로 점프시키는 역할
부팅 가능한 파티션이 없을 경우 부트 코드에 저장된 오류 메시지
- Invalid Partition table
- Error loading operating system
- Missin operating system
파티션 테이블 : 16 Bytes 크기의 파티션 엔트리의 집합으로 구성되며 파티션 엔트리 한 개는 하나의 파티션 정보를 가진다.
파티션 엔트리 구조
- Boot Flag : 부팅이 가능한 파티션 인지를 구분하기 위한 값이 저장된다. 만약 부팅이 가능하다면 0x80의 값을 저장하고 부팅이 불가능하면 0으로 표시
- Starting CHS Addres : CHS(Cylinder, Head, Sector) 모드로 표현하는 파티션의 시작 주소를 의미
- Partition Type : 파티션에 존재하는 파일시스템의 종류를 나타낸다. 0x01에서부터 0x0F까지 아주 다양한 파티션 종류가 있다.
- Ending CHS Address : CHS 모드로 표현하는 파티션의 끝 주소를 의미
- Starting LBA(Logical Block Address) : LBA 모드로 표현하는 파티션의 시작 주소, LBA의 방식은 CHS의 3차원적인 방법을 사용하는 것과는 달리 하드디스크 한 섹터를 블록 단위로 하여 첫 번째 섹터를 0번으로 부여하여 순서대로 주소를 관리하는 방식
- Size in Sector : 파티션에서 사용하는 LBA의 총개수를 의미하는 것으로 해당 파티션의 총 섹터 개수, LBA 블록 하나는 512 Bytes 이므로 'Size in Sector x 512'를 하면 해당 파티션의 총용량을 구할 수 있다.
확장 파티션(Extended Partition) : MBR 영역의 파티션 테이블에서 4개까지만 파티션이 표현되었지만 4개 이상의 파티션 정보를 표현하기 위해서 사용
- 파티션 타입 값이 파일시스템(FAT, NTFS)을 나타내는 것이 아닌 '0x05'이거나 '0x0F'로 되어 있다.
- 확장 파티션 엔트리의 LBA Addr는 추가 파티션의 시작 주소가 아닌 확장 파티션에 대한 정보가 있는 곳을 저장한다.
- 확장 파티션 엔트리는 파티션에 대한 정보를 저장하는 것은 아니며 화장 파티션 엔트리 존재를 알려줌과 동시에 실제 파티션 엔트리가 저장된 곳의 위치를 알려주는 역할을 한다.
GPT(GUID Partition Table) : 기존 BIOS 기반 동작에서 개선된 EFI(Extensible Firmware Interface)에서 지원하는 파티션 테이블 형식
- EFI : 기존 BIOS(Basic Input/Output System)를 대체하는 운영체제와 하드웨어 펌웨어 사이의 새로운 인터페이스로 현재는 통합 UEFI(Unified EFI)로 발전
- 64bit 주소체계를 사용하여 산술적으로 최대 9ZB까지 지원
- 128개의 주 파티션 생성이 가능
- CRC를 이용해 파티션 테이블을 보호하고 GPT의 중요 데이터 구조에 대해 볼륨의 끝부분에 복제본을 저장하여 장애 발생 시 복구 기능도 지원
- LBA(Logic Block Address) 주소체계 사용
제5장 파일시스템의 유형
운영체제별 호환되는 파일시스템
운영체제 | 파일시스템 종류 |
Windows | FAT(FAT 12/16/32/exFAT), NTFS |
Linux | Ext 2/3/4 |
Unix | UFS |
OS-2 | HPFS |
Mac OS | HFS, HFS+ |
Solaris | ZFS |
AIS | JFX |
FAT(File Allocation Table) 파일시스템 : 파일 할당 테이블
- 1976년 빌 게이츠가 최초로 구현
- 연결 리스트를 사용한 자료 구조
FAT 12 : FAT 파일 시스템의 최초의 표준
- 플로피 디스크에 파일을 저장하기 위해 개발
- 계층형 디렉터리 구조 지원
FAT 16 : 하드디스크를 지원하기 위한 파일시스템으로 구조는 FAT 16과 유사
- 클러스터를 표현하는 비트 수가 12개에서 16개로 늘어나 최대 클러스터 개수가 65.535개로 늘어남
- 클러스터 크기를 32KB로 할 경우, 최대 2GB 표현 가능
VFAT : 32bit 보호 모드에 적합하도록 코드를 재작성하여 성능 향상, 독점 모드 추가 등 기능 향상
- LFNs(Long File Names) 지원하여 최대 255자까지 파일명 작성 가능
FAT 32 : VFAT를 수정하여 클러스터를 표현하는 비트 수를 32개로 늘림
- 32bit 중 4bit는 예약 영역으로 사용하지 않아 총 28bit를 이용하여 클러스터를 표현
- 클러스터 크기를 16KB로 할 경우, 최대 파일 크기 4GB 지원
exFAT(Extended FAT) : FAT 32의 한계를 극복하고자 개발되었으며 고용량의 플래시 메모리 미디어를 위한 파일시스템
- 여유 공간 계산과 파일 삭제 등 전체적인 기능 향상
- NTFS 파일시스템이 자료 구조 오버헤드 등의 문제로 적절치 못할 경우나 이전 버전인 FAT 파일시스템의 파일 크기/디렉터리 제약이 문제가 되는 경우에 사용 가능
- Windows Vista, Windows server 2008 이상의 서버 운영체제에 도입하기 위해 만들어짐
- 볼륨 크기 : 16EB(이론적으로 최대 64ZB, Microsoft 최대 512TB 권장)
- 파일 크기 : 128PB(이론적으로 최대 64ZB, Microsoft 최대 512TB 권장)
FAT의 기본 구조
Reserved Area | Fat Area | Data Area |
예약된 영역(Reserved Area) : FAT 32의 예약된 영역은 다른 구조와는 달리 32 섹터를 사용
- 부트섹터(Boot Sector) : FAT 파일시스템의 첫 번째 섹터에 위치
- FSINFO(FAT 32) : 운영체제가 새로운 클러스터를 어디에 할당하는지 설명하는 구조체
FAT 영역 : 클러스터의 할당 상태를 판단하고 파일이나 디렉터리 다음에 할당할 클러스터를 찾는 데 사용
- FAT 영역은 예약된 영역 바로 다음부터 시작되어 2개의 FAT(FAT #1, FAT #2)가 존재
- 두 개의 FAT는 서로 백업 관계로 동일
- 두 번째 FAT는 첫 번째 FAT가 끝나는 다음부터 바로 위치
- 각각의 엔트리는 같은 주소의 클러스터와 매칭 되는데 만약 클러스터가 할당되어 있지 않으면 엔트리의 값은 0
- 만약 클러스터가 할당되면 그 엔트리에는 파일이나 디렉터리의 다음 클러스트 주소가 포함
- 파일이나 디렉터리에 있는 마지막 클러스터라면 엔트리에는 마지막이라는 0x?FFFFFFF 값을 가진다.
- 엔트리의 값이 0x0FFFFFF7이라면 손상된 클러스터라는 표시이고 할당되지 않는다.
- FAT 엔트리 0번은 보통 매체 유형의 복사본을 저장하고 1번은 파일시스템의 불량 상태를 저장
데이터 영역(Data Area)
- 디렉터리 엔트리(Directory Entry) : 파일시스템에 저장된 각각의 파일과 디렉터리마다 할당된 데이터 구조체, 각각의 엔트리 크기는 32 Bytes
- 긴 파일명 디렉터리 엔트리(Long File Name Directory Entry) : 더 긴 이름의 파일을 저장하기 위해서 필요, 하나의 LFN 엔트리는 총 13 문자(Unicode)까지 표현할 수 있으며 LFN 엔트리 14개를 이용하여 최대 255 문자까지 표현
NTFS(New technology File System) 파일시스템 : FAT와 OS/2에서 사용되던 HPFS(HIigh Performance File System)의 내용을 기반으로 개발
- NTFS 1.0 : Winodws NT의 최초 판매 버전인 Windows NT 3.1에 포함된 것으로 최초로 공개된 버전
- NTFS 1.2 : Windows NT 4.0에 포함된 버전으로 NT 4.0이 나온 뒤 Windows NT가 많이 사용하기 시작하면서 실질적으로 가장 널리 쓰인 버전
- NTFS 3.0(NTFS 5.0) : Windows 2000(Windows NT 5.0)에 포함된 것으로 여러 기능이 추가된 버전
- NTFS 3.1(NTFS 5.1) : Windows XP와 Windows Server 2003에 포한된 것으로 기본적으로 5.0 버전과 거의 같으며 호환 가능
NTFS 3.0(NTFS 5.0)에 추가된 기능
- Reparse Point 지원
- 개선된 보안과 권한
- 변경 일지(Change Journals) 기능
- 암호화
- 디스크 쿼터(Disk Quota) 기능
- Sparse 파일 지원
- 디스크 조각 모음 지원
NTFS 구조 : 모든 데이터를 파일 형태로 관리
- 사용자 데이터를 비롯하여 파일시스템을 관리하기 위한 데이터 또한 데이터 영역에 파일 형태로 저장
- 다른 파일 시스템과의 차이점은 정형화된 볼륨 레이아웃이 존재하지 않는다는 것
NTFS 볼륨 구조 : VBR(Volume Boot Record), MFT(Master File Table), Data 영역
- VBR : 반드시 볼륨의 첫 번째 섹터에 위치, 운영체제가 가동될 때 볼륨이 인식되도록 하는 역할
- MFT : NTFS에 존재하는 모든 파일과 디렉터리의 MFT Entry의 집합체, 볼륨에 저장된 모든 파일과 디렉터리에 대한 정보를 저장
MFT
- MFT Entry : 하나의 파일 또는 디렉터리에 대한 정보를 저장, MFT Entry Header, Attribute(속성)로 구성, 크기는 1KB
- MFT Entry Header : MFT Entry의 정보와 상태를 기록, 크기는 42 Bytes
- Attribute(속성) : 저장된 각 파일과 디렉터리의 이름, 시간 정보, 속성, 실제 저장된 내용까지도 모두 속성 형태로 저장, 헤더와 내용 부분으로 구성
속성(Attribute)
- Resident : 속성 헤더 뒤쪽에 바로 속성의 내용 부분이 위치하는 형식
- Non-Resident : 속성의 내용이 너무 커서 MFT Entry 안에 전부 기록할 수 없을 때 사용, MFT Entry 안에 속성 헤더만 존재하고 속성의 내용은 별도의 클러스터를 할당받아 지원
- Cluster Run : 속성 내용이 저장된 클러스터의 시작 위치와 클러스터의 길이가 저장, VCN to LCN 매핑\
- LCN(Logical Cluster Number) : 볼륨의 첫 번째 클러스터부터 차례로 지정하는 주소, 하나의 볼륨에서 고유한 값을 나타내기 때문에 볼륨 안에서는 절대로 중복된 주소가 있을 수 없다.
- VCN(Virtual Cluster Number) : 파일의 첫 번째 클러스터부터 차례로 지정하는 주소, 하나의 파일 안에서 중복되는 주소가 없지만 볼륨 안에서는 중복된 주소가 존재
파일의 기본 속성
속성 | 설명 |
$STANDARD_INFORMATION(Type ID : 16) | 생성, 접근, 수정 시간과 같은 일반적인 정보 |
$FILE_NAME(Type ID : 48) | 파일 이름 |
$DATA(Type ID : 128) | 실제 파일의 내용 |
- $ATTRIBUTE_LIST(Type ID :32) : 어떤 파일이나 디렉터리의 속성 크기가 너무 크거나 많아서 MFT Entry 한 개에 모든 속성을 저장할 수 없는 경우 추가적인 MFT Entry를 생성하여 나누어 저장할 때 존재, Atrribute Header와 LIST_ENTRY로 구성
- $BITMAP(Type ID : 172) : MFT와 Index의 할당 정보를 관리, 0과 1로 할당, 비할당 상태를 나타냄
메타 데이터 파일
- $MFT : MFT에 대한 정보를 담고 있는 것으로 자기 자신에 대한 정보를 저장
- $MFTMirr : MFT Entry의 복사본을 별도로 저장, MFT Entry의 중요한 내용의 사본만 저장
- $LogFile : MFT Entry 2번에 저장, 볼륨에서 발생하는 트랜잭션에 대한 정보를 저장, 저널링(journaling)과 같은 기법
- $Volume : 볼륨에 대한 정보를 담고 있으며 MFT Entry 3번에 저장, $VOLUME_NAME과 $VOVLUME_INFORMATION 속성을 가짐
- $AttrDef : 볼륨에서 사용되는 모든 속성에 대한 여러 가지 정보를 저장, 각각의 속성마다 하나씩 존재
- $. (루트 디렉터리) : MFT Entry 5번에 위치하며 파일시스템의 최상위인 루트 디렉터리에 대한 정보를 저장
- $Bitmap : MFT Entry 6번에 위치하며 볼륨의 클러스터 할당 상태 정보를 $DATA 속성에 저장, 클러스터가 할당되어 있다면 1로 표시되고 비어있다면 0으로 표시
- $Boot : MFT Entry 7번으로 $DATA 속성 안에 부트 레코드 영역을 저장
- $BadClus : MFT Entry 8번으로 볼륨의 배드 클러스터에 관한 정보를 $DATA 속성에 저장, 볼륨에 배드 클러스터가 생길 때마다 배드 클러스터 주소를 Cluster Run에 추가하여 접근을 차단
- $UsnJrnl : MFT Entry 위치가 지정된 것이 아니며 Windows 2000 이상부터 존재, 파일이나 디렉터리의 변경이 있으면 그 기록을 담아 놓는 파일, $J와 $MAX라는 이름을 가진 $DATA 속성 두 군데에 나누어 저장
DATA Area : 실제 파일 내용과 디렉터리를 담는 영역으로 FAT 파일시스템과 같이 클러스터 단위로 읽기/쓰기가 이루어진다.
NTFS의 주요 기능
- 데이터 복구 기능 : 데이터 신뢰성을 높이기 위해서 볼륨에 수행하는 모든 작업에 대해 트랜잭션 단위로 기록
- 암호화 기능 : NTFS 5.0 이후 버전부터 암호화 기능 지원하는 이를 EFS(Encrypting File System)이라고 한다. EFS는 인증받지 않은 사용자나 프로그램으로부터 사용자의 데이터를 보호해 주는 역할을 한다. 파일을 암호화할 때는 암호화 키(FEK)로 암호화하며 이 FEK를 파일을 암호화한 사용자가 가지 ㄴ공개 키로 암호화해 암호화된 파일의 $EFS 대체 데이터 스트림(ADS)에 저장
- ADS(Alternate Data Stream) : 기본적인 $DATA 외에 추가적으로 존재하는 $DATA 속성
- 압축 : 파일시스템 수준의 압축 기능을 제공, 압축 알고리즘은 ZIP 파일 포맷으로 유명한 'LZ77'의 변형된 방식을 사용
- 디스크 쿼터 : 여러 명의 사용자가 하나의 시스템을 사용할 때 사용자마다 디스크 사용량을 제한하는 기능
- Sparse : 파일 내용이 대부분 0으로 저장되어 있을 경우 해당 파일의 내용을 그대로 볼륨에 저장하지 않고 0으로 저장되어 있다는 정보만을 유지하는 파일, $DATA 속성에만 적용
- Unicode 지원 : 파일, 디렉터리, 볼륨 등의 이름을 저장할 때 유니코드를 사용해 처리
- 대용량 파일 지원 : 이론상 Exa Bytes(2^64)까지 용량을 표현 가능, 실제 최대 표현 가능한 요량은 2^44 약 16TB 정도
- 동적 Bad Cluster 재할당 : 시스템 사용 중 Bad Sector가 발생한 경우 자동으로 새로운 클러스터를 할당해 정상 데이터를 복사하는 기능을 지원
- VSS(Volume Shadow Copy Service) 지원 : 시스템에 새롭게 수정된 파일 및 폴더에 대해 백업본을 유지하는 기능, 시스템 복원 시 운영체제의 재설치 없이 볼륨 백업본을 이용하여 과거의 특정 시점으로 복원하는 기능
UFS(Unix File System) 파일시스템 : Unix 및 Unix 계열 운영체제에서 널리 사용되는 파일시스템
- FreeBSD, HP-UX, NetBSD, OpenBSD, Apple OS X, Sun Solaris 같은 유닉스 시스템에서 사용
- Berkeley Fast File System, BSD Fast File System 또는 FFS라고도 불린다.
- Solaris : Sun Microsystems사는 UFS에 Logging 기능을 포함시켜 UFS를 Journaling 파일 시스템으로 개량
- BSD 4.4 및 BSD 계열 UNIX : UFS의 구현을 두 계층으로 분할, 상위 계층은 디렉터리 구조와 권한 및 소유와 같은 메타 데이터를 관리, 하위 계층은 inode 및 실제 데이터를 저장
- Linux : 다른 유닉스 운영체제와의 바이너리 호환성을 위해 UFS를 지원하지만 Read 동작에 국한된 것으로 UFS에 Writitng 하는 작업은 완벽하게 지원하지 않는다.
UFS 구조
- 부트 블록(Boot Block) : 디스크의 가장 처음 저장되는 데이터 영역으로 UNIX 운영체제의 Bootstrap을 위한 블록
- 슈퍼 블록(Super Block) : 디스크 파일시스템의 식별을 위한 Magic Number 등 전체 디스크에 대한 정보가 저장되어 있는 블록으로 파일시스템을 기술하는 정보를 저장
- 실린더 그룹(Cylinder Group) : 슈퍼 블록의 복제본, 실린더 그룹 블록, 아이노드(inode) 테이블, 데이터 블록
실린더 그룹 정보
- 슈퍼 블록의 복제본 : 슈퍼 블록은 매우 중요한 데이터이기 때문에 추후 문제 발생 시 복구를 위해 모든 실린더 그룹마다 복사본 유지
- 실린더 그룹 블록 : 각각의 실린더 그룹에 대한 정보를 포함
- 아이노드(inode) 테이블 : 개개의 파일이나 디렉터리에 대한 정보를 저장하고 있는 구조체, 아이노드는 파일에 관한 정보를 담고 있는 번호, 파일들은 고유한 아이노드 숫자를 통해 식별이 가능
- 데이터 블록 : 실제 데이터가 파일의 형태로 저장되는 공간
UFS의 사용자적 특징
- UFS는 계층적 파일시스템이며 완전한 사용자 기반 파일 접근 허가 메커니즘 사용
- 시스템상의 각 파일을 특정 사용자에게 소유되며(Owned), 원칙적으로는 해당 사용자만이 해당 파일에 대한 조작을 수행할 수 있다.
- Root 사용자와 같은 특권이 있는(privileged) 사용자는 예외적으로 파일시스템의 모든 파일에 대한 권한을 가진다.
- 예외적으로 특권이 없는(Unprivileged) 일반 사용자들이 Super User(SetUID)와 같은 특수권한을 통해 해당 파일에 접근할 수 있도록 한다.
UFS의 구조적 특징
- UFS(특히, BSD FFS)는 실린더 그룹(Cylinder Gruop)을 이용하여, 전체적인 파일시스템을 관리
- 각각의 실린더에는 Book-Keeping Information(BKI)를 두고 이를 이용해 실린더를 관리하며, Super Block의 백업본, 사용 가능한 블록 리스트를 나타내는 BitMap(Free List), 할당된 아이노드(inode) 개수 등의 정보를 포함, 이러한 실린더 그룹은 파일시스템의 기본 단위가 된다.
- 디스크 할당의 경우 4 KBytes의 블록을 사용하지만, 실제 사용단위는 Block보다 작은 Fragment를 도입하여 Fragment 단위로 할당받을 수 있게 하고, 할당에 제약을 가함으로써 선능이 떨어지지 않도록 하였다.
- 실린더 그룹을 사용하더라도 파일들의 단편화(fragment)는 여전하겠지만, 이전의 유닉스 파일시스템에서 발생하는 심각한 분산화(scattering) 현상은 나타나지 않을 것이다.
- 같은 디렉터리에 있는 파일은 같은 실린더 그룹으로, 같은 파일과 연관된 데이터 블록도 같은 실린더 그룹으로 최대한 할당되도록 한다.
- 한 파일의 데이터 블록을 찾을 때 최악의 경우라도 16개 이상의 실린더를 넘지 않는다.
- 큰 파일들이 할당될 때 실린더 그룹 당 2 MBytes를 할당하며 여러 실린더 그룹에 분산되게 한다.
- 클러스터링(clustering) 기법을 추가하여 큰 파일에 대한 읽기와 쓰기를 순차적(sequentially)으로 하도록 한다.
EXT 파일시스템 : 확장된 파일시스템, 최초의 파일시스템인 Minix 파일시스템의 여러 문제를 해결하고자 개발
- 0.96c 커널에 구현된 VFS(Virtual File System) 스위치를 최초로 사용하였으며 최대 2GB까지 저장할 수 있었고 최대 파일명의 길이는 255 Bytes까지 사용할 수 있었다.
- EXT 파일시스템의 성능, 확장성 및 신뢰성 등을 향상하기 위한 EXT2, EXT3, EXT4 등 차례로 개발
- UFS에서 불필요한 기능을 제거하고 복잡한 구조에서 보다 단순화하였기 때문에 구조적으로 가벼운 것이 특징
EXT1 : UFS(Unix File System)에 기초해 만들어진 리눅스용 파일시스템으로 현재는 거의 사용되지 않는다.
EXT2 : 현재 사용하고 있는 EXT 파일시스템의 기본 바탕이 된 구조
- EXT1의 단점을 보완하여 재구성한 것으로 Remy Card에 의해 개발되어 1993년 1월에 발표되었다.
- 데비안, 레드헷 등 다양한 Linux 배포판의 파일시스템으로도 사용
- 크기가 2TB 확장되었으며 2.6 커널에서는 32TB로 확장
- EXT1에서는 지원하지 않던 아이노드(inode) 수정 및 타임스탬프 기능을 지원
EXT3 : 예기치 않게 시스템이 중단될 때 파일시스템의 신뢰성을 높여주는 저널링(journaling)을 도입
- EXT2와 호환성을 제공, EXT2에서 자료 삭제 및 손실 없이 EXT3로 변경할 수 있으며 저널링을 지원
- 저널링 파일시스템은 쓰기 명령이 수행될 때 메인 파일시스템에 바로 업데이트하지 않고 미리 지정된 저널에 메타 데이터 또는 파일 콘텐츠를 기록
- 따라서 파일을 읽거나 쓰는 과정에서 시스템 전원이 꺼지거나 오류가 발생했을 때 복구하는 기능을 제공
EXT4 : 병렬 분산 파일시스템인 Lustre File System을 위해 저장공간을 늘리고 성능 향상을 목적으로 2003년부터 2006년까지 CFS(Cluster File Systems)에 의해 개발
- EXT3를 기반으로 대용량 파일을 지원하고 저널링 체크섬 기능을 추가하여 파일시스템 손상 가능성을 감소
- EXT2,3에서 매핑 블록(Block Mapping) 방식 대신 인접한 물리적 블록의 묶음인 extent 방식을 사용하여 파일 조각화 현상을 최소화
- 1EB 크기의 파일시스템을 지원하며 Linux 커널 버전 2.6.19부터 EXT4가 포함
EXT2/3/4 구조 : 부트 섹터(Boot Sector)와 블록 그룹(Block Group)으로 구성
Boot Sector |
Block Group 0 |
Block Group 1 |
... | Block Group N |
Unused Sectors |
블록 그룹(Block Group) : 여러 개의 블록들의 집합체
- 블록 : EXT 파일시스템에서 기본적으로 데이터를 저장하는 단위를 의미, FAT과 NTFS의 클러스터와 유사한 개념
- 슈퍼 블록(Super Block)과 그룹 디스크립터 테이블(Group Descriptor Table)과 그룹 내의 블록 할당 정보를 저장하는 블록 비트맵(Block Bitmap), 아이노드 비트맵(Inode Bitmap), 아이노드 테이블(Inode Table), 파일 데이터 블록(File Data Block)들로 구성
EXT 파일시스템 블록 그룹의 구조
Super Block |
Group Descriptors |
Block Bitmap |
Inode Bitmap |
Inode Bitmap |
Data Blocks |
- 슈퍼 블록(Super Block) : 블록 그룹의 가장 첫 번째 1개 블록에 위치하며 파일시스템의 크기와 환경 설정값 등 파일시스템의 전체적인 정보를 저장, NTFS의 VBR(Volume Boot Record)와 유사한 기능
- 그룹 디스크립터 테이블(Group Descriptor Table) : 각 블록 그룹의 정보를 저장한 그룹 디스크립터가 모여 있는 구조체, Reserved GDT 영역이 존재
- 블록 비트맵(Block Bitmap) : 그룹 디스크립터 테이블의 크기가 정해진 것이 아니므로 블록 비트맵의 위치도 정해진 것은 아니다. 블록 그룹 안의 블록 할당 현황을 저장, 블록 사용현황을 리틀 에디안 방식으로 표현
- 아이노드 테이블(Inode Table) : 1개의 아이노드를 1개의 비트로 표현하여 아이노드의 할당 현황을 알려주는 것, 아이노드란 파일시스템에 저장된 모든 파일 혹은 디렉터리에 대한 메타 데이터를 저장하는 구조체, 또한 실제 데이터가 위치한 블록에 대한 포인터도 저장
- 데이터 블록(Data Block) : 디렉터리 엔트리(Directory Entry)와 실제 데이터 내용이 저장되는 블록, 저장되는 데이터의 양에 따라 블록의 수는 가변적
EXT 파일시스템의 특징
- 하위 호완성 : EXT4는 EXT3와의 상호 호완성을 제공하여 현재 Linux에서 가장 많이 사용되는 파일시스템인 EXT3에서 EXT4로 큰 어려움 없이 마이그레이션 할 수 있도록 지원
- 시간 소인 정밀도 및 범위 향상 : EXT4 이전의 파일시스템에서는 초 단위의 시간 소인을 사용, EXT4에서는 기본적으로 나노초 LSB로 확장되어 후속 버전과의 호완성을 보장
- 파일시스템 확장 : EXT3에 비하면 EXT4에서는 파일시스템 볼륨, 파일 크기 및 서브 디렉터리 제한에 대한 지원이 향상,
- EXT4는 최대 1 EBytes 지원, EXT4에서 허용되는 최대 파일 크기는 16TB(EXT3의 약 8배), 서브 디렉터리 제한도 32KB에서 무한대로 확장, 디렉터리 인덱싱도 해시된 B 트리 형태의 구조로 최적화
- 익스텐트(Extent) : EXT3의 주요 단점 중 할당 기능을 향상하고 더욱 효율적인 스토리지 구조를 지원하기 위해 EXT3의 메커니즘을 Extent로 대체한 것이 EXT4, Extent는 연속되는 블록 시퀀스를 나타내며 EXT2/3에서 쓰이던 전통적인 블록 매핑(Block Mapping) 방식 대체, Extent는 인접한 물리적 블록의 묶음으로, 대용량 파일 접근 성능을 향상하고 단편화 감소
- 파일 레벨 사전 할당 : 드라이브에 대한 순차 블록 읽기 최적화를 사용하고 블록에 대한 읽기 명령 비율을 최대화하기 위해 연속 블록에 저장되는 파일을 사용, EXT4에서는 지정된 크기의 파일을 사전 할당 및 초기화하는 새로운 시스템 호출을 통해 구현
- 블록 할당 지원 : 파일 크기를 기반으로 하는 최적화 방법, 블록을 디스크에 강제로 기록할 때까지 디스크의 물리적 블록을 할당하지 않고 기다리며, 이에 따라 더 많은 블록을 연속 블록에 할당 및 기록할 수 있다.
- 멀티 블록 할당 : EXT3에서 블록 할당자는 한 번에 하나의 블록을 할당하는 방식으로 연속 데이터를 연속되지 않은 블록에서 찾을 수 있었다. EXT4에서는 디스크에 연속되어 있을 수 있도록 여러 블록을 동시에 할당하는 블록 할당자를 사용하여 문제를 해결
- 파일시스템 저널에 대한 체크섬 검사 : EXT4는 EXT3와 마찬가지로 저널링 파일시스템, EXT4에서는 저널에 대한 체크섬 기능을 구현하여 올바른 변경 사항만 기본 파일시스템에 적용하도록 함
- 온라인 조각 모음 : EXT4에서 파일시스템을 장기간 시용할 경우 어느 정도의 조각이 발생하는 것을 피할 수 없다.이 문제를 해결하여 성능을 향상하기 위해 파일시스템 및 개별 파일에 대한 조각 모음을 수행하는 온라인 조각 모음 도구를 제공, 인접한 익스텐트를 참조하는 새 EXT4 inode에 파일을 복사하는 단순한 도구
'License > 디지털포렌식 2급' 카테고리의 다른 글
디지털포렌식 전문가 2급 18회 시험일정 (0) | 2022.03.18 |
---|---|
디지털포렌식 전문가 2급 필기 - 컴퓨터 구조와 디지털 저장매체 (3) (0) | 2021.05.03 |
디지털포렌식 전문가 2급 필기 - 컴퓨터 구조와 디지털 저장매체 (2) (0) | 2021.05.02 |
디지털포렌식 전문가 2급 필기 - 컴퓨터 구조와 디지털 저장매체 (1) (0) | 2021.05.02 |
제16회 디지털포렌식 전문가 2급 필기 준비 (0) | 2021.04.27 |