Theory/Forensic

파일시스템

D4tai1 2019. 6. 17.


1. 파일시스템의 이해
1) 파일시스템의 종류
▶ FAT, NTFS[Windows], EXT2/3/4[Linux], HFS[Apple]


2) 플래시 메모리의 특성
▶ Erasing Block
▶ Random Access
▶ Wear Leveling


3) 일반적인 파일시스템의 구성
▶ Boot Sector
⤷ Drive의 시작부분, Drive를 어떻게 읽을지 결정
▶ Index or Metadata
⤷ Drive에 존재하는 파일이나 폴더들의 정보를 제공
▶ Data
⤷ 각 파일에 대한 실제 Data 저장


4) 파일 데이터의 구성 [두 가지 구성방식]
▶ Cluster Chain
⤷ 파일의 크기가 커서 연속되거나 분산된 여러 개의
  클러스터에 저장 후 이를 연결한 구조 및 형태
⤷ 하드를 여러 개의 블록으로 나눈 것 = 클러스터
▶ Fragmentation
⤷ 하나의 파일이 연속된 클러스터에 저장되어 있지
  않고 분산되어 저장되어 있는 형태


5) Logical Data의 저장위치와 특성
▶ Hidden blocks
⤷ Vender에 의해 별도로 할당된 블록(복구용)
⤷ OneNAND와 같은 플래시메모리의 OTP와 같은영역
▶ Bad blocks (ex] CD스크래치 시 접근하지 않도록..)
⤷ 실제는 정상인 block를 bad로 설정하는 경우도 존재
▶ Backup data
⤷ 동일한 저장장치 또는 별도의 분리된 장치에 저장된 data
▶ Unused space
⤷ 저장된 정상데이터의 사이즈가 변경되지 않아 일정한 Slack space를 보장 받을 수 있는 공간


6) Data Recovery 분류
▶ Partition Recovery
⤷ MBR의 Partition Table에 잔존정보를 이용하여 복구
▶ Undeletion
⤷ 삭제된 파일은 실제파일이 삭제되지 않고 파일의
  index의 일부정보만 삭제, 남겨진 index정보 이용->복구
▶ Signature Search
⤷ 어플리케이션이 자신과 관련된 파일에 로드 시
  정합성을 검식하기위해 표시
▶ Data Carving
⤷ File System 정보 없이 순수 Low Image에서 검색, 복구
▶ File hidden data
⤷ Disk에서 사용하지 않는 영역, 의도적으로 사용되지
  않는 영역 조작으로 file이나 data를 은닉 시 복구
▶ Packing / Unpacking
⤷ 불필요하게 size가 큰 파일 압축 / 해제
▶ Reverse Engineering
⤷ Binary형태를 Assembly 혹은 C언어로 변환


7) 하드디스크의 구
▶ 섹터
⤷ Disk상의 데이터 저장 최소 단위
▶ 클러스터
⤷ 파일의 disk 할당 최소 단위

8) MBR(Master Boot Record)이란?
▶ x86환경에서 사용
▶ 파티션에 대한 위치정보 저장
▶ OS부팅을 위한 boot code도 포함
▶ Boot code는 ROM에 있는 부트로더나 부트스트랩로더에 의해서 실행[메모리에 로드]
▶ 4개의 파티션정보를 포함하는 파티션테이블 소유
▶ 확장파티션에 의해 4개 이상의 파티션 생성가능
▶ MBR Signature는 섹터의 마지막 2바이트 [55 AA]


9) 클러스터 크기에 따른 장단점
▶ 크기가 작은 경우 버려지는 용량 적음
▶ 크기가 작은 경우 FAT영역[index]의 크기 큼
▶ 크기가 큰 경우 FAT영역[index]의 크기 작음
▶ 크기가 큰 경우 작은 파일이 많을시 버려지는 용량 증가

10) FAT16 파일시스템 구조


▶ Boot Record
⤷ 설정 값, 부팅을 위한 실행코드, 예약된 영역 (1섹터)
▶ Root Directory
⤷ FAT#1(클러스터[파일] 할당 테이블) 바로 다음에 위치
⤷ 최상위 디렉토리에 포함된 파일 or 디렉토리에 대한 메타데이터(Directory Entry) 저장
▶ Boot Record 510 511 = AA 55


11) Directory Entry, Clusters, FAT Structure[End of File]

 

12) FAT 파일 삭제 과정
▶ FAT Entry에서 File에 할당된 Cluster Entry를 0으로 설정
⤷ 즉, Cluster Entry가 0이면 다음클러스터도 없고 현재   클러스터도 사용 중이 아니라는 말
⤷ Directory Entry의 File Name 첫 번째 byte를 0xE5로 변경
⤷ 0xE5는 삭제된 파일을 의미
▶ 클러스터는 연속되어 있어 시작위치와 사이즈를 알면 전체를 알 수 있다.


13) FAT 파일 복구 과정
▶ Directory Entry에서 0xE5로 시작되는 파일명 검색
▶ 검색된 Directory Entry에서 파일명, 첫 번째 Cluster  번호, 크기정보 획득
▶ 파일의 사이즈가 작은 경우 정상 복구 가능
▶ 파일의 사이즈가 크거나 수정, 추가 된 파일의 경우  기술적인 Data Carving이 필요


14) FAT 데이터 은닉 방법[은닉 가능한 공간]
▶ Boot Code
⤷ 시스템을 부팅하기 위한 코드, 그러나 D드라이브의 경우부트코드가 필요 없으므로 부트코드 부분에 숨길 수 있음
▶ FAT32에서 예약된 영역
⤷ Boot Record, FSINFO, Boot Record Backup을 제외한 나머지 예약된 영역은 사용하지 않아 은닉가능성 있음
▶ FSINFO 내에 사용되지 않는 byte가 많고 이러한 영역이 zero로 세팅되어야 하는데 그렇지 않은 경우 분석 필요
▶ 파일시스템과 볼륨사이즈 차이 분석
⤷ 파일시스템 내의 볼륨사이즈를 조작하여 여분의 Space에 데이터 은닉 가능성 존재
⤷ Boot Record의 Total Sector 수와 MBR의 Partition Table에서 얻은 사이즈를 비교하여 판별
⤷ MBR의 Partition Table에는 파티션시작위치, 사이즈 저장
▶ 파티션복구
⤷ 섹터의 마지막 offset이 AA55인지 확인
⤷ FSINFO 비교, Boot Record Backup 확인
▶ 마지막 Sector
⤷ Data영역이 Cluster의 배수가 아니면 11/4 = 2...3
⤷ 나머지 여분의 Sector에 데이터를 은닉가능
⤷ 데이터가 존재하면 False Positive한 결과 검색
▶ 특정 클러스터 Bad로 mark
⤷ FAT# Entry에 0xfffffff7 값 write
▶ Directory Entry 조작분석
⤷ Directory Entry는 파일에 대한 메타데이터와 볼륨라벨(디스크이름)을 추가 가능
⤷ Directory Entry의 첫 번째 byte가 0인 경우 검색을 중지하는 경우 존재
⤷ OS가 검색하다가 어느정도 0이면 그 뒤는 검색x
⤷ 0xE5 인 경우 삭제된 파일을 의미


15) FAT 삭제된 파일 복구
▶ Allocated Cluster검사 없이 단편화를 고려하지 않고 순차적으로 데이터를 추출하는 방법보다 Allocaton Cluster를 제외하여 data를 추출 시 복구확률 증가
⤷ Allocated = 연속되지 않고 다른 것이 쓰고 있음
▶ 다른 클러스터가 있으면 빼고 다음 꺼 확인 가능
▶ 비어있을 경우 복구한 후 깨짐(Unallocated)


16) NTFS의 특징
▶ 데이터 복구 기능
⤷ 모든 작업을 트랜잭션 단위로 기록, 문제발생시 복구
▶ 암호화
⤷ EFS(Encryption File System), NTFS 5.0↑
▶ 압축
⤷ ZIP형식의 LZ77 변형 압축 기술사용
▶ 디스크쿼터
⤷ 디스크 사용량 제한, NTFS 5.0↑
▶ ADS [Alternate Data Stream]
⤷ 다중 스트림, 하나의 파일이 여러 이름의 데이터 소유
⤷ 즉, 파일 내 또 다른 파일이 있을 수 있음
▶ Sparase 파일
⤷ 파일내용이 0으로 채워진 경우 해당 영역을 표시만 함
⤷ 할당된 것처럼 보이지만 실제로 데이터를 할당하지 않음
⤷ 대용량지원 이론적으로 2의 64승까지 표현 가능


17) NTFS의 기본구조
▶ Boot Record
⤷ 1'st 섹터에 위치하며 해당 볼륨의 설정 값과 부팅을 위한 실행코드를 포함
▶ MFT [Master File Table]
⤷ 존재하는 모든 파일과 폴더에 대한 정보 저장
⤷ [메타데이터]
▶ Data 영역
⤷ MFT를 포함하고 파일 또는 폴더 등의 데이터가 저장되며 Cluster단위로 접근[실제데이터]
⤷ 데이터 영역 내 위치는 상관 x

18) MFT [Master File Table]
▶ 구성
⤷ 메타데이터파일
⤷ 일반파일 or 디렉토리에 대한 정보를 저장하는 MFT Entry[메타데이터]로 구성
▶ 파일시스템의 파일에 대한 메타데이터
⤷ $MFT는 Master File Table에 대한 메타데이터 저장
▶ $가 붙은 파일
⤷ 파일시스템에 관련된 파일
⤷ 숨김파일도 아니고 보여지지도 않는 파일
⤷ $MFT에 대한 메타데이터가 0번 Entry에 존재


19) MFT Entry
▶ MFT 전체 중 하나를 의미
⤷ 1024바이트[2개 섹터]의 크기
⤷ 위치 =  Boot Record
⤷ 구성 = 헤더[42byte] + 속성
⤷ 즉 Entry는 파일하나(여러정보)의 메타데이터를 저장
▶ 헤더
⤷ 20~21 = Offset
⤷ 22~23 =  Flag(0 : 사용x, 1 : 사용 중, 2 : 디렉토리)
▶ 속성
⤷ 속성은 파일에 대한 메타데이터를 저장
⤷ Attribute Header = 타입, 길이, Non-Resident Flag
⤷ Attribute Content = 타입에 따른 정보 저장
⤷ 위 2개가 하나의 속성을 의미

 

20) Resident 와 Non-Resident
▶ MFT Entry에 속성을 저장하는 방식
▶ Resident
⤷ 속성 내용[Attribute Content]이 MFT Entry에 존재
▶ Non-Resident
⤷ 속성 내용이 커서 MFT Entry에 저장 불가
⤷ 별도의 클러스터를 할당받아 저장 후 위치정보만 보유


21) Cluster Runs
▶ Non-Resident방식으로 속성의 내용이 저장된 경우 MFT Entry의 Attribute Content에 Cluster Runs 구조를 통해서 실제 속성 내용의 클러스터 위치 확인
▶ LCN [Logical Cluster Number]
⤷ 볼륨에서의 클러스터 번호[절대]
▶ VCN [Virtual Cluster Number]
⤷ 파일 내에서 클러스터 번호[가상]

 

22) Sparse
▶ 100MB 파일을 만들고 내용을 비우고 실제할당 x
▶ $DATA 속성에서 사용
⤷ $data의 속성 : 실제 파일의 내용 저장
▶ 클러스터의 데이터가 모두 0일 때 해당 클러스터를 실제 할당하지 않음
⤷ 3 시작위치, 4 시작위치x = 실제디스크에 없음
⤷ 총 7개 클러스터

 

23) 파일과 속성 [3가지 구성]

 

24) $DATA 속성
▶ 실제 파일의 내용을 저장하기 위한 속성
⤷ 700Byte이상은 Non-Resident 속성이 됨
▶ 하나의 파일에는 $DATA 속성이 1개나 2개 존재
▶ 추가의 $DATA속성은 $DATA Attribute Name을 가짐
⤷ 이름이 있다면 $DATA가 2개
▶ test.txt 파일에 대한 첫번째 $DATA 속성

 

▶ test.txt 파일의 other.exe 이름을 갖는 두번째 $DATA 속성

⤷ 이 속성에 대한 실제 파일명 test.txt : other.exe
⤷ $DATA Content에 있는 것 실행, ADS

 

'Theory > Forensic' 카테고리의 다른 글

32bit 머신의 주소체계  (0) 2019.04.27
디지털포렌식  (0) 2019.04.27
실시간 대응  (0) 2019.04.27
레지스트리 분석  (0) 2019.01.19
메모리 수집 분석  (0) 2019.01.19

댓글