[FS] 파일 복구 툴 조사
🫧 파일 복구 툴 4개 조사
✨ 0. 기본 지식
- header
- 파일의 헤더 부분에 존재하는 메타 데이터
- 파일의 유형을 식별할 수 있는 정보를 포함
- footer
- 파일에 끝 부분에 존재하며, 파일이 정상적으로 종료되었음을 나타내는 메타데이터 포함
-
파일 시그니처
File Type Header Signature (Hex) Footer Signature (Hex) jpeg FF D8 FF E0 FF D8 FF E8 FF D9 gif 47 49 46 38 37 61 47 49 46 38 39 61 00 3B png 89 50 4E 47 0D 0A 1A 0A 49 45 4E 44 AE 42 60 82 pdf 25 50 44 46 2D 31 2E 25 25 45 4F 46 zip 50 4B 03 04 50 4B 05 06 alx 41 4C 5A 01 43 4C 5A 02 rar 52 61 72 21 1A 07 3D 7B 00 40 07 00
✨ 0-1. 툴 정리
특징/툴 | foremost | scalpel | testdisk | extundelete | |
---|---|---|---|---|---|
정의 | 헤더, 푸터 및 내부 데이터 구조를 기반으로 손실된 파일을 복구하기 위한 카빙 툴 | 파일 시스템에서 데이터 조각들을 검색하여 하나로 모아 파일을 카빙 | 파티션 복구 및 파일 시스템 복구를 위한 툴 | ext3 또는 ext4 파티션에서 삭제된 파일을 복구할 수 있는 유틸리티 | |
기반 | 파일 시그니처 기반 | 파일 시그니처 기반 | 메타데이터 기반 | 메타데이터 기반 | |
사용 데이터 | 헤더, 푸터, 디스크 hex 데이터 | 헤더, 푸터, 디스크 hex 데이터 | 디스크 파티션, 파일 시스템 | ext3/ext4 파일 시스템 | |
사용 | 알 수 없는 파일 혹은 여러 개의 파일들이 합쳐져 있어 보이는 파일을 분리할 때 주로 사용 | 다양한 파일 형식의 복구가 필요한 환경에서 사용 | 손상된 파티션 및 파티션 테이블 복구, 부팅 불가 디스크 복구 | ext3/ext4 파일 시스템에서 삭제된 파일 복구 | |
사용 인터페이스 | CLI | CLI | CLI (인터렉티브 모드) | CLI | |
지원 OS | 리눅스, macOs, Windows 등 | FAT, NTFS, ext2/3, HFS+ 등 지원 | 리눅스, macOs, Windows 등 | ext3, ext4 | |
특징 | CLI 기반, 헤더/푸터 분석, 다양한 파일 형식 복구, 복구된 파일 목록과 로그 생성, 법적 증거에 적합 | dd, safeback, Encase 기반 | foremost와 복구 방식에 큰 차이는 없음 | 파티션 복구, 부팅 불가 디스크 복구, 다양한 파일 시스템 지원, CLI 기반, 복구된 파티션의 복원 | 저널링 기법 사용, 언마운트 된 상태에서 사용 가능 |
✨ 1. foremost
헤더, 푸터 및 내부 데이터 구조를 기반으로 손실된 파일을 복구하기 위한 카빙 툴
- 포렌식 분야에서 알 수 없는 파일 혹은 여러 개의 파일들이 합쳐져 있어 보이는 파일을 분리할 때 주로 사용
☁️ 겹친 파일이란?
아래 그림과 같이, Solution Key를 찾아내야 하는데, 자에 의해 가려져 보이지 않는 상황에 처해 있다고 가정한다.
- 파일을 다운 받는다.
- 파일의 사이즈가 1.5MB로, 다른 jpg 파일에 비해 사이즈가 비정상적으로 크다는 것을 알 수 있다.
⇒ 사진이 한 장이 아니라 여러 장의 사진이 한 장의 사진 파일에 겹쳐져 있는 것!
따라 foremost 툴을 사용해 파일을 분리하는 작업을 거칠 수 있다.
- CLI 기반 도구
- 디스크 hex 데이터에서 파일의 헤더, 푸터, 데이터 구조 등을 이용해 개별 파일 복구
☁️ Hex 데이터란?
: 디스크 상의 데이터가 16진수 형태로 나타난 것
- 디스크에 저장된 모든 데이터는 기본적으로 바이너리 형식이므로, 이를 사람이 이해할 수 있도록 16진수로 표현할 때 Hex Dump 형태로 표현한다고 함.
// Hex Dump 형태의 파일 예
// 50 4B 03 04 14는 ZIP 파일의 헤더를 나타냄
00000000 50 4B 03 04 14 00 00 00 08 00 45 00 00 00 00 00 | PK........E......|
☁️ 다운로드
- sudo apt install foremost
☁️ 코드
- https://foremost.sourceforge.net/
☁️ 옵션
옵션 | 설명 |
---|---|
-h | 도움말 표시 |
-t |
뽑아낼 파일 형식 지정 (jpeg, pdf, exe) |
-o |
출력 디렉터리 지정 (output) |
-i |
입력 파일 지정 (기본은 표준입력) |
☁️ 예시
설명 | 명령어 |
---|---|
test.jpg 파일에서 exe, dll 파일만 추출 | foremost -t exe, dll test.jpg |
/tmp/test 파일에서 모든 파일 추출 | foremost -t all -i /tmp/test |
/tmp/test 파일에서 office 문서와 jpeg 파일 추출 + 화면에 출력 | foremost -v -t ole, jpeg -i /tmp/test |
test.pcap 캡쳐 파일들을 추출하고 화면에 출력 | foremost -i test.pcap -v |
✨ 2. scalpel
파일 시스템에서 데이터 조각들을 검색하여 하나로 모아 파일을 카빙
- FAT, NTFS, ext2/3, HFS+ 를 지원
- foremost와 비슷하게, 파일 시스템의 일부 이미지에서 파일을 추출하는 프로그램
- foremost와 복구 방식에 큰 차이는 없음
☁️ 다운로드
- sudo apt install scalpel
☁️ 코드
- https://github.com/sleuthkit/scalpel
☁️ 옵션
옵션 | 설명 |
---|---|
-o | 복구된 파일을 저장할 디렉터리 경로 지정 |
-t | 뽑아낼 파일 형식 지정 (jpeg, pdf, exe) |
-c | 복구 파일 크기 제한 설정 |
☁️ 예시
설명 | 명령어 |
---|---|
디스크 이미지에서 jpeg와 pdf 파일 복구 | scalpel /path/disk_img.img -o /output_dir -t jpeg, pdf |
특정 디스크에서 png와 txt 파일 복구 | scalpel /dev/sda -o /output_dir -t png, txt |
모든 파일 형식 복구 | scalpel /path/disk_img.img -o /output_dir -t all |
1024 KB 크기 이하의 JPEG 파일만 복구 | scalpel /path/disk_img.img -o /output_dir -t jpeg -c 1024 |
✨ 3. testdisk
파티션 복구 및 파일 시스템 복구를 위한 툴
- 파티션 테이블 수정, ext2, ext3, ext4 슈퍼블록 찾기 등의 기능 존재
- 복구하고자 하는 디스크 드라이브를 선택하여 복구 실행 가능
☁️ 다운로드
- sudo apt install testdisk
☁️ 코드
- https://github.com/cgsecurity/testdisk
☁️ 옵션
옵션 | 설명 |
---|---|
-h | 도움말 표시 |
-t |
뽑아낼 파일 형식 지정 (jpeg, pdf, exe) |
-o |
출력 디렉터리 지정 (output) |
-i |
입력 파일 지정 (기본은 표준입력) |
✨ 4. extundelete
ext3 또는 ext4 파티션에서 삭제된 파일을 복구할 수 있는 유틸리티
- 파티션 저널에 저장된 정보를 사용하여 파티션에서 삭제된 파일을 복구하려고 시도
- 4GB 이상의 파일은 지원하지 않음
- 파일 시스템이 마운트되지 않은 상태에서만 실행 가능
- ext3와 ext4만 지원
☁️ 다운로드
- sudo apt install extundelete
☁️ 코드
- https://foremost.sourceforge.net/
☁️ 사용 방법
- 복구할 데이터 파티션 찾기
- fdisk -l
- 읽기 모드로 복구할 파티션 리마운트
- mount -o remount, ro /dev/sdb1
- 파티션 복구
- extundelete /dev/sdb1 —restore-all
- 복구된 파일 확인
- tree RECOVERED_FILES
☁️ 옵션
옵션 | 설명 |
---|---|
—restore-file <파일 경로="">파일> | 특정 파일 복구 |
—restore-directory <디렉터리 경로="">디렉터리> | 특정 디렉터리 내 파일 복구 |
—restore-all | 삭제된 모든 파일 복구 |
—output-dir <디렉터리>디렉터리> | 복구된 파일을 저장할 출력 디렉터리 지정 |
—inodes | 삭제된 파일들의 inode 번호를 기반으로 복구 가능 |
☁️ 예시
설명 | 명령어 |
---|---|
모든 삭제된 파일 복구 | extundelete /dev/sda1 –restore-all –output-dir /path/to/output |
/tmp/test 파일에서 모든 파일 추출 | extundelete /dev/sda1 –restore-file /path/to/deleted/file –output-dir /path/to/output |
특정 디렉터리 내 파일 복구 | extundelete /dev/sda1 –restore-directory /path/to/deleted/directory –output-dir /path/to/output |
파일의 inode 번호로 복구 | extundelete /dev/sda1 –restore-inode |