테마 선택

📚 지식 노트

AI·하드웨어·주변기기·게임·컴퓨터 시스템·이론 컴퓨터 과학·수학·개발과 운영·보안·응용 분야에 대해 알아 두면 좋은 내용을 정리한 노트다. 위에서 분야를 고르고 아래에서 노트를 고른다.

디지털 포렌식과 복원

지운 파일은 어디로 가고, 어떻게 되살리며, 정말로 없애려면 무엇을 해야 하는가. '이미지'라는 말의 여러 뜻에서 시작해 증거를 다루는 원칙, 디스크 이미징과 해시 검증, 파일 시스템과 삭제의 원리, 파일 카빙, SSD와 암호화 디스크, 메모리 포렌식, 디가우징을 포함한 완전 삭제까지 조사·복구·폐기의 눈으로 정리한다.

목차 (13)
  1. "이미지"라는 말의 여러 뜻
  2. 포렌식의 원칙
  3. 디스크 이미징
  4. 저장 장치와 파일 시스템 기초
  5. 삭제는 어떻게 일어나나
  6. 파일 시스템 기반 복원
  7. 파일 카빙
  8. SSD·플래시에서 복원이 어려운 이유
  9. 메모리 포렌식 개요
  10. 완전 삭제와 폐기
  11. 사진 등 그림 파일 복원의 특이점
  12. 법과 윤리
  13. 핵심 자료

이 노트는 내 기기에서 잃어버린 자료를 되찾는 일, 권한을 위임받은 조직의 사고 조사, 다 쓴 저장 매체의 올바른 폐기를 다룬다. 남의 기기나 계정을 몰래 들여다보는 방법, 조사를 피하려고 흔적을 지우는 방법은 싣지 않는다. 저장 장치의 종류와 동작은 저장장치 › 종류 노트에, 파일 시스템이 운영체제 안에서 하는 일은 운영체제 노트에, 디스크 암호화의 바탕은 암호학 노트에, 실행 파일 분석은 리버스 엔지니어링 노트에 있다.

"이미지"라는 말의 여러 뜻

복원 이야기를 하다 보면 '이미지'가 한 문장에 두세 번, 서로 다른 뜻으로 나온다. "디스크 이미지를 떠서 그 안에서 지워진 이미지를 찾았다"처럼. 영어 image는 원래 '본뜬 모습'이라는 뜻이라, 무엇을 본떴느냐에 따라 가리키는 대상이 달라진다.

이미지라는 말의 여섯 가지 뜻을 카드로 나란히 놓은 그림: 픽셀 격자인 그림 이미지, 섹터를 그대로 복제한 디스크 이미지, RAM을 통째로 뜬 메모리 이미지, 레이어를 쌓은 컨테이너 이미지, 메모리에 올라간 실행 이미지, 가상 머신 디스크와 백업 이미지그림 이미지(x, y) → 색픽셀 격자(래스터)JPEG·PNG·RAW디스크 이미지.E01섹터를 비트 그대로raw·E01·AFF4메모리 이미지실행 중 RAM을 통째로프로세스·키·연결컨테이너 이미지읽기 전용 레이어 묶음OCI 매니페스트실행 이미지코드데이터힙스택로더가 메모리에 올린프로그램(PE의 image)가상 디스크·백업가상 머신.vmdk파일 시스템이 든 파일VMDK·VHDX·qcow2포렌식에서 '이미지를 뜬다'는 색칠한 둘째 뜻이다. 사진을 복원하는 이야기에서는'디스크 이미지 안에서 그림 이미지를 찾는다'처럼 두 뜻이 한 문장에 함께 나온다.
이미지의 여섯 가지 뜻. 공통점은 '무엇을 그대로 본뜬 것'이라는 점이다. 그림은 장면을, 디스크 이미지는 저장 장치를, 메모리 이미지는 RAM을, 컨테이너와 가상 디스크 이미지는 실행 환경을, 실행 이미지는 메모리에 올라간 프로그램을 본뜬다.
  • 그림 이미지: 화면이나 사진을 픽셀 격자로 적은 것(래스터)이다. 포렌식에서는 복원 대상인 경우가 많다. 픽셀과 압축의 원리는 그래픽 기초 노트에 있다.
  • 디스크 이미지: 저장 장치의 섹터를 처음부터 끝까지 비트 하나 다르지 않게 복제한 파일이다. 파일뿐 아니라 비할당 영역, 파일 끝 여유 공간, 파티션 표까지 담기 때문에 지운 파일을 찾을 수 있다. 같은 '디스크 이미지'라도 ISO처럼 파일들을 모아 새로 만든 배포용 이미지는 원래 매체의 사본이 아니므로 지운 흔적이 없다.
  • 메모리 이미지: 켜져 있는 컴퓨터의 RAM 내용을 통째로 뜬 것이다. 전원을 끄면 사라지는 정보가 들어 있다.
  • 컨테이너 이미지: 프로그램과 그 실행 환경을 읽기 전용 레이어로 묶은 것이다(OCI 이미지 명세). 자세한 구조는 컨테이너 노트에 있다. 사고 조사에서는 실행 중 컨테이너가 이미지에서 무엇이 달라졌는지 비교하는 데 쓴다.
  • 실행 이미지: 운영체제의 로더가 실행 파일을 메모리에 올린 모습이다. 윈도 문서는 실행 파일 자체를 image file이라 부르고, 적재될 기준 주소를 ImageBase라 한다(PE 형식).
  • 가상 디스크·백업 이미지: 가상 머신의 디스크(VMDK, VHDX, qcow2)나 시스템 백업처럼 파일 시스템이 든 큰 파일이다. 빈 곳을 저장하지 않거나 스냅숏을 겹쳐 두는 형식이 많아, 증거로 쓸 때는 그 형식을 이해하는 도구로 열어야 한다.

게임의 "ROM 파일"(롬 덤프)도 같은 뜻의 이미지다. 카트리지 안 ROM 칩의 내용을 바이트 그대로 떠낸 것이다(기억장치의 종류 노트).

뜻무엇을 담나대표 형식더 볼 곳
그림 이미지픽셀 격자(래스터)나 도형 정보JPEG, PNG, HEIC, RAW이 노트 끝의 사진 복원 절
디스크 이미지저장 장치의 섹터를 처음부터 끝까지 비트 그대로raw(dd), E01(EWF), AFF4디스크 이미징 절
배포용 디스크 이미지파일들로 새로 만든 파일 시스템 하나ISO(광디스크), DMG, IMG포렌식 사본이 아니다
메모리 이미지실행 중 RAM의 내용 전체raw, lime, crash dump메모리 포렌식 절
컨테이너 이미지읽기 전용 파일 시스템 레이어와 설정OCI 이미지(매니페스트+레이어)컨테이너 노트
실행 이미지로더가 메모리에 올린 프로그램의 모습PE의 image file, ImageBase리버스 엔지니어링 노트
가상 디스크·백업 이미지파일 시스템이 든 큰 파일, 빈 곳은 생략하기도VMDK, VHDX, qcow2, 시스템 백업디스크 이미징 절

포렌식의 원칙

디지털 포렌식은 저장 장치와 메모리에서 사실을 찾아 다른 사람이 믿을 수 있게 보여 주는 일이다. 그래서 '무엇을 찾았나' 못지않게 '찾는 과정에서 아무것도 바꾸지 않았음'을 증명하는 것이 중요하다. 디지털 증거는 복사해도 원본과 구별되지 않고, 반대로 파일 하나를 여는 것만으로도 접근 시각 같은 메타데이터가 바뀔 수 있기 때문이다.

  • 증거 보존: 원본에는 되도록 손대지 않는다. 켜진 시스템을 함부로 끄거나 재부팅하지 않고, 저장 장치는 쓰기 방지 장치를 거쳐 읽는다.
  • 무결성: 수집할 때 해시를 계산해 기록하고, 분석 뒤 다시 계산해 같음을 보인다.
  • 연계 보관(chain of custody): 증거가 누구 손에서 누구에게, 언제, 왜 넘어갔는지 끊김 없이 적는다.
  • 휘발성 순서: 빨리 사라지는 것부터 수집한다. RFC 3227은 레지스터와 캐시, 메모리, 임시 파일 시스템, 디스크, 원격 로그, 물리 구성, 보관 매체의 순서를 예로 든다.
  • 사본으로 분석: 분석은 검증한 사본으로 한다. 실수로 사본을 망가뜨려도 원본에서 다시 뜨면 된다.
왼쪽은 RFC 3227의 휘발성 순서로 레지스터와 캐시, 메모리, 임시 파일 시스템, 디스크, 원격 로그, 물리 구성, 보관 매체 순으로 위에서 아래로 덜 휘발적이다. 오른쪽은 연계 보관의 다섯 단계로 수집, 봉인과 해시, 이송과 보관, 사본 분석, 보고가 화살표로 이어진다휘발성 순서(RFC 3227)1. 레지스터, CPU 캐시2. 라우팅·ARP·프로세스 표, 메모리3. 임시 파일 시스템4. 디스크5. 원격 로그·모니터링 자료6. 물리 구성, 네트워크 구성도7. 보관 매체(백업 테이프 등)위일수록 빨리 사라진다 → 먼저 수집연계 보관(chain of custody)수집누가·언제·어디서·무엇을봉인·해시증거 번호, 해시 값 기록이송·보관넘길 때마다 서명, 잠금 보관분석검증한 사본으로만 작업보고재현할 수 있게 절차 기록기록이 끊기면 증거의 신뢰가 흔들린다
왼쪽은 무엇을 먼저 수집하나(휘발성 순서), 오른쪽은 수집한 것을 어떻게 지키나(연계 보관)다. 같은 RFC는 '시스템의 프로그램을 믿지 말고 준비한 도구를 쓰라', '수집을 마치기 전에 끄지 말라'고도 적는다.

조직의 사고 대응 안에서 포렌식을 어떻게 굴리는지는 NIST SP 800-86이 수집·검사·분석·보고의 네 단계로 정리한다. 도구가 정말 원본을 바꾸지 않는지, 이미지를 정확히 뜨는지는 NIST CFTT가 시험해 결과를 공개한다. 사고 대응 전반은 보안 › 사람과 운영 노트에 있다.

디스크 이미징

디스크 이미징은 저장 장치를 섹터 0부터 마지막 섹터까지 읽어 파일 하나(또는 여러 조각 파일)로 옮기는 일이다. 파일을 복사하는 것과 달리 비할당 영역과 파일 끝 여유 공간, 파티션 표, 숨은 영역까지 그대로 담는다.

원본 디스크에서 쓰기 방지 장치와 이미징 도구를 거쳐 이미지 파일을 만드는 흐름. 아래에는 원본과 이미지의 SHA-256이 일치하고, 한 비트만 바뀐 사본은 해시가 크게 달라지는 예가 있다원본 디스크(증거물)쓰기 방지 장치읽기 명령만 통과이미징 도구섹터 0부터 끝까지이미지 파일+ 해시·수집 기록원본 쪽 쓰기는 막는다예시 디스크 64섹터(32,768바이트)의 해시원본 SHA-2562e184eb518b80642…2ab84489이미지 SHA-2562e184eb518b80642…2ab84489일치1비트 바뀐 사본4e58463f15c9daed…c97c8ce9불일치(112/256비트 다름)MD5도 같은 방식으로 함께 적는 일이 많다. 해시가 같으면 사본으로 분석한 결과를원본에 대한 결과로 내세울 수 있고, 분석 뒤 다시 계산해 아무것도 바뀌지 않았음도 보인다.
쓰기 방지 장치는 컴퓨터와 원본 사이에서 읽기 명령만 통과시킨다. 이미지를 뜬 뒤 원본과 이미지의 해시가 같으면 둘은 같은 내용이다. 한 비트만 달라도 SHA-256의 256비트 중 112비트가 바뀌었다.
  • 쓰기 방지 장치(write blocker): 원본 디스크를 그냥 연결하면 운영체제가 자동으로 마운트하면서 기록을 남길 수 있다. 하드웨어 장치는 디스크와 컴퓨터 사이에서 쓰기 명령을 막고, 소프트웨어 방식은 운영체제 수준에서 막는다.
  • 물리 이미지와 논리 이미지: 물리 이미지는 장치 전체를 섹터 단위로 뜨고, 논리 이미지는 파티션 하나나 고른 파일만 뜬다. 지운 파일을 찾으려면 물리 이미지가 필요하다. 반대로 서버처럼 끌 수 없거나 너무 큰 시스템은 필요한 부분만 논리적으로 수집하기도 한다.
  • 해시 검증: 수집할 때 원본의 해시(관행상 MD5와 SHA-256을 함께)를 기록하고, 이미지의 해시와 맞춰 본다. 예시 디스크(32,768바이트)의 SHA-256은 원본과 이미지가 2e184eb518b8…로 같고, 한 비트를 바꾼 사본은 4e58463f15c9…로 완전히 달라진다. 해시 함수의 성질은 암호학 노트에 있다.
  • 이미지 형식: raw(dd) 형식은 섹터를 그대로 이어 붙인 파일이라 어느 도구로도 열리지만, 해시와 수집 정보는 따로 보관해야 한다. E01(EWF)은 데이터를 조각마다 압축하고 사건 정보와 원본 해시를 함께 담는다(libewf). AFF4는 여러 증거와 메타데이터를 한 컨테이너에 담는 열린 형식이다.
  • 희소·압축 이미지: 한 번도 쓰지 않은 영역은 0으로 차 있어 잘 압축된다. 앞 1/4만 데이터인 예시 디스크 32,768바이트는 deflate로 8,342바이트가 되었다. 다만 압축은 공간을 줄일 뿐 이미지에 담긴 정보는 그대로다.
  • 시간: 이미징은 장치 전체를 읽으므로 크기에 비례한다. 1 TB를 초당 150 MB로 읽으면 약 1.9시간이 걸린다.

망가져 가는 디스크는 다르게 다룬다. 읽기 오류가 난 곳을 오래 붙잡고 재시도하면 헤드와 표면이 더 상해 성한 곳까지 잃을 수 있다. 그래서 GNU ddrescue 같은 도구는 성한 곳부터 빠르게 건지고, 건너뛴 곳을 나중에 채우고, 마지막에 오류 섹터만 다시 시도한다. 어느 섹터를 읽었는지는 지도 파일에 적어 두어 중간에 멈춰도 이어서 할 수 있다.

섹터 48개짜리 디스크를 세 번에 나눠 읽는 그림. 1차는 오류가 난 섹터 뒤 세 섹터를 건너뛰어 36개를 읽고, 2차는 건너뛴 곳을 채워 43개, 3차는 오류 섹터를 재시도해 45개를 읽는다. 20번부터 22번 섹터 세 개는 끝내 읽지 못한다1차: 빠르게 훑기36/48 읽음2차: 건너뛴 곳 채우기43/48 읽음3차: 오류 섹터 재시도45/48 읽음읽음건너뜀오류(나중에 재시도)끝내 못 읽음망가진 곳을 처음부터 붙잡고 있으면 다른 곳까지 상할 수 있어, 성한 곳부터 건진다.
섹터 48개 중 3개가 망가지고 2개가 약한 디스크. 1차에서 36개, 2차에서 43개, 3차에서 45개를 읽었다. 실제 디스크는 소리가 나거나 인식이 오락가락하면 전원을 넣을수록 나빠지므로, 중요한 자료라면 직접 시도하기 전에 복구 전문 업체에 맡기는 편이 낫다.

저장 장치와 파일 시스템 기초

저장 장치는 고정 크기의 섹터(전통적으로 512바이트, 요즘 디스크는 물리적으로 4096바이트도 많다)를 번호(LBA)로 읽고 쓴다. 맨 앞의 파티션 표가 디스크를 나눈다. 옛 MBR 방식은 섹터 0의 446번째 바이트부터 16바이트짜리 칸 4개에 파티션을 적고 끝에 55 AA 서명을 둔다. 섹터 번호가 32비트라 512바이트 섹터에서는 2 TiB까지만 다룬다. 지금 주로 쓰는 GPT는 LBA 1에 헤더를, 그 뒤에 보통 128칸짜리 파티션 표를 두고, 디스크 맨 끝에 백업 사본을 둔다. 앞쪽 표가 지워져도 뒤쪽 사본으로 파티션을 되살릴 수 있는 까닭이다.

GPT 디스크의 배치: 맨 앞 보호 MBR과 GPT 헤더, 파티션 두 개, 맨 끝 백업 GPT. 첫 파티션을 확대하면 부트 영역, 메타데이터 영역, 클러스터로 나뉜 데이터 영역이 있고, 클러스터 일부만 파일에 할당되어 있으며 나머지는 비할당 영역이다. 아래에 FAT, NTFS, ext4가 메타데이터를 두는 방식이 적혀 있다디스크 전체(GPT)LBA 0보호 MBRLBA 1~GPT 헤더·표파티션 1파일 시스템파티션 2끝백업 GPT부트 영역크기·위치메타데이터이름·크기·위치·시각데이터 영역: 색칠한 칸은 파일에 할당, 빈 칸은 비할당메타데이터를 두는 방식FAT32·exFAT디렉터리 항목 32바이트 + FAT(클러스터 다음 번호 사슬)NTFS$MFT 레코드(보통 1 KiB) + 런 리스트, $Bitmapext4inode(크기·시각·extent) + 디렉터리 항목, 블록 비트맵비할당 영역은 '아무것도 없는 곳'이 아니라 '지금 어느 파일도 주인이 아닌 곳'이다.
디스크 → 파티션 → 파일 시스템. 파일 시스템은 데이터 영역을 클러스터(블록) 단위로 나눠 쓰고, 어떤 파일이 어느 클러스터를 쓰는지는 메타데이터 영역에 적는다. 복원은 결국 이 메타데이터가 얼마나 남았느냐의 싸움이다.

파일 시스템은 섹터 여러 개를 묶은 클러스터(ext4에서는 블록, 흔히 4 KiB)를 할당 단위로 쓴다. 메타데이터를 두는 방식은 파일 시스템마다 다르다.

  • FAT32·exFAT: 디렉터리 항목에 이름, 크기, 첫 클러스터를 적고, FAT라는 표가 '이 클러스터 다음은 몇 번'을 사슬로 잇는다. 메모리 카드와 USB 메모리가 주로 쓴다.
  • NTFS: 모든 파일이 MFT(Master File Table)에 레코드(보통 1 KiB) 하나씩을 가진다. 레코드에 이름, 시각, 크기와 함께 데이터가 놓인 구간 목록(런 리스트)이 있고, 아주 작은 파일은 내용까지 레코드 안에 들어간다(resident).
  • ext4: 파일마다 inode가 크기, 시각, 블록 위치(extent)를 갖고, 이름은 디렉터리 항목이 inode 번호와 잇는다.

클러스터 단위로 할당하므로 파일 끝에는 남는 공간이 생긴다. 이것이 slack(파일 끝 여유 공간)이다. 요즘 운영체제는 마지막 섹터의 남은 부분을 0으로 채우지만, 클러스터 안에서 아예 쓰지 않은 섹터는 손대지 않아 예전에 그 자리에 있던 파일의 조각이 남는다. 어느 파일에도 할당되지 않은 클러스터 전체는 비할당 영역이고, 지운 파일 대부분이 여기에 있다.

10,000바이트 파일이 4 KiB 클러스터 세 개를 차지하는 그림. 섹터 19개 반이 파일 내용이고, 20번째 섹터의 남은 240바이트는 0으로 채워지며, 나머지 4개 섹터 2,048바이트에는 예전 데이터가 남는다. 남는 공간은 모두 2,288바이트다10,000바이트 파일 · 클러스터 4,096바이트 · 섹터 512바이트클러스터 1클러스터 2클러스터 3파일 내용 10,000바이트(섹터 20개에 걸침)섹터 끝 240바이트: 0으로 채움쓰지 않은 섹터 4개(2,048바이트): 예전 데이터남는 공간 합계 2,288바이트 = 240 + 2,048
10,000바이트 파일은 4 KiB 클러스터 3개(12,288바이트)를 차지하고 2,288바이트가 남는다. 그중 쓰지 않은 섹터 4개(2,048바이트)에는 이 자리를 먼저 쓴 파일의 내용이 남아 있을 수 있다.

삭제는 어떻게 일어나나

파일을 지울 때 운영체제는 내용을 지우지 않는다. 내용을 모두 덮어쓰면 큰 파일 하나 지우는 데 몇 분이 걸릴 것이다. 대신 메타데이터에 '이 자리는 이제 비었다'고만 적는다.

파일 삭제의 세 단계. 저장되었을 때는 메타데이터가 클러스터 2부터 4를 가리키고 비트맵이 1이다. 삭제 직후에는 사용 중 표시와 비트맵만 0이 되고 클러스터 내용은 그대로 남는다. 새 파일이 클러스터 2와 3을 덮어쓰면 그 부분은 사라지고 클러스터 4만 옛 내용의 조각으로 남는다1. 저장됨photo.jpg사용 중: 예클러스터 2~4할당 비트맵11111000클러스터 0~7메타데이터가 위치를가리키고 비트맵이 12. 삭제 직후photo.jpg사용 중: 아니오클러스터 2~4할당 비트맵11000000클러스터 0~7표시와 비트맵만 바뀜내용은 그대로 → 복원 가능3. 새 파일이 덮어씀memo.txt사용 중: 예클러스터 2~3할당 비트맵11110000클러스터 0~7덮인 부분은 사라짐클러스터 4만 조각으로 남음옛 파일 내용새 파일 내용삭제는 '지우기'보다 '빈자리로 표시하기'에 가깝다
삭제 직후에는 내용이 그대로라 복원할 수 있다. 시간이 지나 새 파일이 그 클러스터를 쓰면 덮인 부분은 돌아오지 않는다. 그래서 실수로 지웠다면 그 저장 장치에 아무것도 쓰지 않는 것이 첫 번째 할 일이다.
  • FAT: 디렉터리 항목 이름의 첫 바이트를 0xE5로 바꾸고, FAT에서 그 파일의 클러스터 사슬을 0(빈칸)으로 지운다. 첫 클러스터와 크기는 남는다.
  • NTFS: MFT 레코드의 '사용 중' 표시를 끄고, 클러스터 할당 비트맵($Bitmap)에서 해당 비트를 0으로 바꾼다. 레코드 자체는 새 파일이 재사용할 때까지 남는다.
  • ext4: inode를 비할당으로 돌리면서 블록 위치 정보까지 지우는 편이라 메타데이터로 되살리기 어렵다. 저널에 옛 inode 사본이 남아 있으면 단서가 된다.
  • 휴지통: 탐색기나 Finder에서 '삭제'는 사실 휴지통 폴더로의 이동이다. 윈도는 $Recycle.Bin 아래에 내용 파일과 원래 경로·삭제 시각을 적은 작은 파일을 함께 둔다. 휴지통을 비워야 위의 진짜 삭제가 일어난다.
  • 빠른 포맷과 전체 포맷: 빠른 포맷은 새 파일 시스템의 메타데이터만 새로 쓰므로 데이터 영역은 그대로이고, 카빙으로 상당 부분을 되찾을 수 있다. 윈도 비스타 이후의 전체 포맷은 볼륨 전체에 0을 쓰므로 HDD에서는 사실상 복원이 안 된다. SSD에서는 포맷이 TRIM을 함께 보내는 경우가 많아 빠른 포맷이라도 복원이 어렵다.

파일 시스템 기반 복원

메타데이터가 아직 남아 있다면 복원은 간단하다. 지운 표시가 된 레코드를 찾아 이름, 크기, 위치를 읽고, 그 자리의 데이터가 다른 파일에 덮이지 않았는지(할당 비트맵에서 지금 비어 있는지) 확인한 뒤 꺼내면 된다. 이름과 폴더 구조, 시각까지 돌아오므로 가장 좋은 결과다. The Sleuth Kit은 이미지에서 지운 항목까지 포함해 파일 목록을 보여 주고, 그 위의 Autopsy는 이를 화면으로 묶는다. 잃어버린 파티션 자체를 찾을 때는 TestDisk가 디스크를 훑어 파일 시스템의 부트 영역 같은 흔적으로 파티션을 찾아 표를 다시 쓴다.

조각난 파일 하나를 두 파일 시스템에서 복원하는 그림. NTFS는 지운 파일의 MFT 레코드에 런 리스트가 남아 있어 클러스터 10부터 12와 20부터 21을 정확히 이어 붙인다. FAT는 시작 클러스터 10과 크기만 남아 10부터 14까지 이어져 있다고 가정하므로, 13과 14에 다른 파일의 내용이 섞인다NTFS: 지운 파일의 MFT 레코드가 남아 있을 때report.docx · 사용 중 아님 · 런 리스트 (10부터 3개) (20부터 2개)05101520BBBB런 리스트를 따라 두 조각을 순서대로 이어 붙이면 그대로 복원된다FAT: 삭제 때 클러스터 사슬(FAT)이 지워졌을 때디렉터리 항목 · 첫 바이트 0xE5 · 시작 클러스터 10 · 크기 5클러스터05101520BBBB사슬이 없으니 이어져 있다고 가정한다 → 13·14는 다른 파일의 내용B는 다른 파일이 쓰는 클러스터다. ext4는 삭제 때 inode의 위치 정보까지 지우는 편이라 더 어렵다.
파일이 두 조각으로 나뉘어 저장된 경우. NTFS는 지운 레코드에 조각 위치가 남아 정확히 되살린다. FAT는 사슬이 지워져 시작 위치와 크기만 알기에 '이어져 있다'고 가정할 수밖에 없고, 그 가정은 조각난 파일에서 틀린다.

조각화(fragmentation)는 파일이 연속된 클러스터에 들어가지 못하고 여러 곳에 나뉘어 저장되는 것이다. 디스크가 거의 찼거나, 파일이 조금씩 자라거나(로그, 메일함), 여러 파일을 동시에 쓰면 생긴다. 메타데이터가 위치를 알려 주면 조각화는 문제가 아니지만, 메타데이터가 없으면 다음 절의 카빙이 이 문제와 정면으로 부딪힌다.

파일 카빙

메타데이터가 사라졌거나(덮였거나 포맷했거나 파일 시스템이 망가졌을 때) 아예 읽을 수 없으면, 남은 것은 바이트뿐이다. 파일 카빙(file carving)은 파일 시스템 정보 없이 바이트의 내용만 보고 파일을 '깎아 내는' 기법이다(Forensics Wiki). 많은 파일 형식은 맨 앞에 정해진 바이트, 곧 시그니처(매직 넘버)를 두고, 일부는 끝을 알리는 꼬리말도 둔다.

형식머리말꼬리말참고
JPEGff d8 ffff d9SOI 표식 뒤 다음 표식의 ff, 끝은 EOI 표식
PNG89 50 4e 47 0d 0a 1a 0a49 45 4e 44 ae 42 60 82끝은 IEND 덩어리 이름과 그 CRC
PDF25 50 44 46 2d ("%PDF-")25 25 45 4f 46 ("%%EOF")고쳐 저장하면 %%EOF가 여러 번 나온다
ZIP50 4b 03 0450 4b 05 06끝 표식(EOCD) 뒤에 18바이트와 주석이 더 온다

가장 단순한 방법은 머리말을 찾아 꼬리말까지 잘라 내는 것이다. 꼬리말이 없는 형식은 최대 크기까지 자르거나, 형식 안에 적힌 길이 정보를 읽어 끝을 정한다. 잘라 낸 결과는 반드시 검증한다. JPEG라면 디코더가 끝까지 풀어내는지, PNG라면 덩어리마다 붙은 CRC가 맞는지, ZIP이라면 중앙 디렉터리가 맞는지 본다. 아래 그림은 이 과정을 작은 장난감 이미지로 보인다.

16바이트 블록 10개짜리 이미지에서 파일을 카빙하는 단계 그림. b1에서 JPEG 머리말을 찾아 b3의 꼬리말까지 잘라 검증에 통과하고, b4의 PDF를 되찾는다. b5의 JPEG는 b8까지 그대로 자르면 b7의 다른 파일 조각이 섞여 검증에 실패하고, b6을 빼 본 뒤 b7을 빼자 검증을 통과한다비할당 영역 160바이트 = 16바이트 블록 10개b000 00b1ff d8b24a 3eb346 41b425 50b5ff d8b650 7cb76f 74b842 61b900 00블록마다 맨 앞 바이트를 시그니처 표와 맞춰 본다(블록 16바이트)시그니처: JPEG ff d8 ff … ff d9, PDF %PDF- … %%EOFb1: ff d8 ff e0 75 6a 2a 20 2c 68 32 5d 23 4e 76 64JPEG 머리말 발견 → 앞으로 읽으며 꼬리말 찾기b3: 46 41 2e 22 38 6a 65 77 58 81 ff d9 00 00 00 00JPEG 후보 b1·b2·b3 → 검증 통과b4: 25 50 44 46 2d 31 2e 37 20 78 0a 25 25 45 4f 46PDF 후보 b4 → 검증 통과b5: ff d8 ff e0 73 70 67 38 3a 74 69 59 2d 75 67 5dJPEG 머리말 발견 → 앞으로 읽으며 꼬리말 찾기b8: 42 61 6f 58 62 29 29 4e 78 4d 41 9c ff d9 00 00JPEG 후보 b5·b6·b7·b8 → 검증 실패b6: 50 7c 31 3e 73 61 6d 76 5d 59 47 51 7a 4f 60 69틈 b6 제외, b5·b7·b8 이어 붙임 → 검증 실패b7: 6f 74 68 65 72 20 66 69 6c 65 20 74 65 78 74 2e틈 b7 제외, b5·b6·b8 이어 붙임 → 검증 통과블록마다 맨 앞 바이트를 시그니처 표와 맞춰 본다(블록 16바이트)조각난 파일까지 세 파일을 모두 되찾았다되찾은 파일1. JPEG · 블록 b1·b2·b3 · 이어진 파일2. PDF · 블록 b4 · 이어진 파일3. JPEG · 블록 b5·b6·b8 · 조각 2개를 이어 붙임
1 / 9

블록 10개(160바이트). 파일 시스템 정보 없이 블록 머리마다 시그니처를 찾는다.

파일 카빙의 원리. 파일 시스템 정보 없이 바이트만 보고 시그니처(머리말)에서 꼬리말까지 잘라 낸 뒤 형식에 맞는지 검증한다. 중간에 다른 파일의 블록이 끼어든 조각난 파일은 그대로 자르면 깨지므로, 사이의 블록을 빼 보며 검증을 통과하는 조합을 찾는다. 바이트는 실제 형식을 흉내 낸 장난감이다.

문제는 조각화다. 대부분의 카빙 도구는 파일이 연속돼 있다고 가정하므로, 중간에 다른 파일의 블록이 끼면 깨진 파일이 나온다. Garfinkel의 조사에서는 중고 디스크의 JPEG 중 약 17%, 워드 문서 약 16%, 아웃룩 메일 파일은 최대 58%가 조각나 있었다(Forensics Wiki 정리). 그가 제안한 두 조각 틈 카빙(bifragment gap carving)은 파일이 두 조각으로 나뉘었다고 보고, 머리말과 꼬리말 사이에서 빠져야 할 블록 구간(틈)의 위치와 길이를 바꿔 가며 검증을 통과하는 조합을 찾는다(Garfinkel 2007). 그림에서는 시도 두 번 만에 b5·b6·b8 조합을 찾았다. 조각이 셋 이상이면 조합이 폭발적으로 늘어 블록마다 어느 파일에 속할지 통계로 추정하는 방법이 연구된다.

  • 도구: PhotoRec은 파일 시스템을 무시하고 수백 가지 형식의 시그니처로 카빙하며, 장치를 읽기 전용으로 다룬다. Scalpel과 foremost는 머리말·꼬리말 규칙 파일로 동작한다. bulk_extractor는 파일 대신 이메일 주소, URL, 압축된 조각 같은 '특징'을 모든 바이트에서 뽑는다. Autopsy도 카빙 모듈을 품고 있다.
  • 한계: 카빙으로 되찾은 파일에는 원래 이름, 폴더, 시각이 없다. 같은 사진이 썸네일, 캐시, 이전 저장본으로 여러 번 나오기도 하고, 무관한 바이트가 우연히 시그니처와 맞아 쓰레기 파일도 나온다. 그래서 결과는 해시로 중복을 지우고 검증으로 걸러 낸다.
  • 원본이 아니라 이미지에서: 카빙은 디스크 전체를 여러 번 읽으므로 반드시 이미지에서 하고, 되찾은 파일은 복원하려는 그 장치가 아닌 다른 곳에 저장한다. 같은 장치에 쓰면 아직 못 찾은 파일을 덮는다.

SSD·플래시에서 복원이 어려운 이유

HDD는 운영체제가 정한 주소의 자리에 그대로 덮어쓴다. 플래시 메모리는 그렇게 못 한다. 쓰기는 페이지(수 KiB) 단위, 지우기는 수백 페이지를 묶은 블록 단위로만 되고, 지우지 않은 페이지에는 다시 쓸 수 없다. 그래서 SSD 안의 FTL(flash translation layer)은 쓸 때마다 빈 페이지를 골라 쓰고 '주소 7은 이제 이 페이지'라고 표를 고친다.

플래시 블록 하나의 페이지 여덟 칸이 바뀌는 세 단계. 덮어쓰기는 빈 페이지에 새로 쓰고 옛 페이지를 무효로 남긴다. TRIM은 삭제한 파일의 주소를 무효로 만든다. 가비지 컬렉션은 유효한 페이지를 다른 블록으로 옮기고 블록 전체를 지워 지운 파일의 내용이 사라진다1. 덮어쓰기블록 1개7 옛257 새LBA 7을 고치면 빈 페이지에새로 쓰고, 옛 페이지는 무효2. TRIM블록 1개7 옛257파일을 지우면 운영체제가LBA 7은 안 쓴다고 알림3. 가비지 컬렉션블록 1개2·5를 다른 블록에 옮기고이 블록을 통째로 지움유효무효(내용은 아직 남음)지워진 빈 페이지. 숫자는 운영체제가 보는 주소(LBA)주소와 실제 셀을 잇는 표(FTL)는 SSD 안에만 있어서, 운영체제가 같은 주소를 덮어써도옛 내용이 다른 셀에 남을 수 있다. 반대로 TRIM 뒤에는 복원할 내용이 금방 사라진다.
SSD는 운영체제 몰래 데이터를 옮기고 지운다. TRIM과 가비지 컬렉션이 돌고 나면 지운 파일의 내용이 실제로 사라지므로, 같은 상황의 HDD보다 복원 가능성이 훨씬 낮다.
  • TRIM: 파일을 지우면 운영체제가 SSD에 '이 주소들은 이제 안 쓴다'고 알린다(SATA의 TRIM, NVMe의 Deallocate). 많은 SSD는 TRIM된 주소를 읽으면 원래 내용 대신 0을 돌려준다.
  • 가비지 컬렉션: 무효 페이지가 쌓인 블록에서 아직 유효한 페이지만 다른 곳으로 옮기고 블록을 통째로 지운다. 컴퓨터가 쉬는 동안에도 SSD 스스로 한다.
  • 웨어 레벨링: 셀마다 쓸 수 있는 횟수가 정해져 있어, 쓰기를 고르게 나누려고 데이터를 계속 옮긴다. 그래서 반대로 옛 사본이 운영체제가 닿지 않는 예비 영역에 남을 수도 있다. 이것이 SSD를 '덮어쓰기'로 확실히 지울 수 없는 이유이기도 하다.

SSD 복원은 TRIM이 꺼져 있었거나(일부 외장 케이스, 오래된 운영체제), 지운 직후 바로 전원을 끊은 경우에나 기대할 수 있다. 칩을 떼어 직접 읽는 방법도 있지만 컨트롤러의 데이터 배치와 암호화를 풀어야 해서 전문 기관의 영역이다.

암호화된 디스크는 이야기가 또 다르다. BitLocker나 FileVault로 암호화한 볼륨의 이미지는 키 없이는 고르게 퍼진 의미 없는 바이트일 뿐이라 카빙도 통하지 않는다. 내 디스크를 복원하려면 복구 키를 먼저 챙겨야 하는 이유다. 복구 키를 계정이나 안전한 곳에 보관해 두지 않았다면, 디스크가 멀쩡해도 자료를 되찾을 길이 없다. 암호가 왜 그렇게 단단한지는 암호학 노트에 있다.

메모리 포렌식 개요

디스크에는 남지 않는 것이 많다. 지금 돌고 있는 프로세스, 열린 네트워크 연결, 실행할 때 넘긴 명령줄, 풀린 상태의 암호 키, 파일로 저장되지 않고 메모리에만 주입된 악성 코드가 그렇다. 그래서 사고 대응에서는 켜져 있는 시스템이라면 끄기 전에 메모리 이미지를 먼저 뜬다. 휘발성 순서에서 메모리가 디스크보다 앞에 있는 이유다.

물리 메모리 이미지를 커널, 프로세스, 파일 캐시, 네트워크 버퍼, 빈 곳으로 나눈 띠. 아래에 메모리 이미지에서 찾을 수 있는 다섯 가지가 있다: 프로세스와 스레드, 네트워크 연결, 명령줄과 환경 변수, 암호 키와 풀린 데이터, 메모리에만 있는 코드물리 메모리 이미지(전원이 꺼지면 사라짐)커널프로세스 A프로세스 B파일 캐시네트워크 버퍼빈 곳분석 도구는 커널의 자료 구조(프로세스 목록 등)를 찾아 아래 목록을 다시 세운다프로세스·스레드숨긴 프로세스도 커널 목록과 비교해 찾는다네트워크 연결어느 프로세스가 어디와 통신했나명령줄·환경 변수실행할 때 넘긴 인자암호 키·풀린 데이터디스크 암호화 키가 메모리에 있을 수 있다메모리에만 있는 코드파일 없이 주입된 악성 코드수집 도구도 메모리를 조금 쓰므로, 무엇을 언제 실행했는지 기록해 둔다.
메모리 이미지는 물리 메모리 전체를 뜬 바이트 덩어리다. 분석 도구는 그 안에서 운영체제 커널의 자료 구조를 찾아 프로세스 목록, 연결, 열린 파일을 다시 세운다.

메모리 분석의 대표 도구는 오픈 소스 Volatility 3다. 운영체제별 기호 정보를 이용해 메모리 이미지에서 프로세스 목록(windows.pslist), 네트워크 연결(windows.netscan), 명령줄(windows.cmdline) 같은 것을 플러그인으로 뽑는다. 메모리를 뜨는 도구도 실행되는 순간 메모리를 조금 바꾸므로, 무엇을 언제 실행했는지 기록해 두는 것이 원칙이다. 프로세스와 가상 메모리의 기초는 운영체제 노트에, 수상한 코드를 분석하는 흐름은 리버스 엔지니어링 노트에 있다. 기업의 침해 사고 대응에서는 메모리 이미지와 함께 EDR이 평소 남겨 둔 프로세스 실행·네트워크 연결 기록이 시간 순서를 되짚는 주된 재료가 된다(보안 관제).

완전 삭제와 폐기

복원의 반대편은 폐기다. 회사 노트북을 반납하거나 중고로 팔거나 고장 난 디스크를 버릴 때, 앞에서 본 복원 기법이 남의 손에서 내 자료를 되살리지 못하게 해야 한다. 미국 표준기술연구소의 NIST SP 800-88이 이 분야의 기준 문서로, 목표 수준을 세 단계로 나눈다.

매체 완전 삭제의 세 단계. Clear는 일반 복원 도구를 막고 덮어쓰기와 초기화를 쓴다. Purge는 실험실 수준의 복원을 막고 장치의 Sanitize 명령, 암호화 삭제, 자기 매체의 디가우징을 쓴다. Destroy는 매체를 파쇄하거나 분쇄해 다시 쓸 수 없게 한다Clear지우기막는 것일반 복원 도구방법 예· 읽기·쓰기 명령으로 덮어쓰기· 공장 초기화(기기마다 다름)다시 씀Purge제거막는 것실험실 수준의 복원방법 예· 장치의 Sanitize 명령· 암호화 삭제(키 폐기)· 디가우징(자기 매체)대개 다시 씀Destroy파괴막는 것실험실 수준 + 재사용 불가방법 예· 파쇄·분쇄·소각· 조각 크기를 매체에 맞춰다시 못 씀어느 단계가 필요한지는 데이터의 민감도와 매체가 어디로 가는지(재사용·기증·폐기)로정하고, 같은 방법도 매체마다 효과가 다르다. 끝나면 확인하고 기록을 남긴다.
Clear·Purge·Destroy. 높은 단계일수록 강한 공격자를 막지만 비용이 크고, Destroy는 매체를 다시 쓸 수 없다. 2025년 개정판(Rev. 2)은 매체별 구체 기법을 IEEE 2883 같은 최신 표준에서 확인하라고 한다.
  • 덮어쓰기: 일반 쓰기 명령으로 모든 주소에 0이나 난수를 쓴다. 2014년 판(Rev. 1)은 자기 매체에서 고정 패턴으로 한 번 덮어쓰면 최신 실험실 기법으로도 대개 복원할 수 없다고 적고, Clear는 '최소 한 번'이면 된다고 했다. 흔히 듣는 '35번 덮어쓰기'는 1996년 Gutmann 논문에서 왔는데, 저자 스스로 맺음말에서 그것은 여러 옛 기록 방식을 한꺼번에 겨냥한 목록이라 어떤 드라이브에든 35번 모두는 의미가 없고, 요즘 드라이브는 난수로 한두 번 덮는 것이 할 수 있는 최선이라고 바로잡았다. 덮어쓰기의 진짜 약점은 횟수가 아니라 닿지 않는 곳이다. HDD가 재배치한 불량 섹터, SSD의 예비 영역은 일반 쓰기로 닿지 않는다.
  • 장치 내장 명령: ATA Secure Erase와 Sanitize, NVMe의 Format(보안 삭제 설정)과 Sanitize는 드라이브 펌웨어가 사용자가 닿지 않는 영역까지 지우게 한다. SSD는 블록 삭제나 암호화 삭제로 동작한다. 제조사 도구나 표준 명령을 쓰고, 끝나면 일부를 읽어 확인한다.
  • 암호화 삭제(cryptographic erase): 자체 암호화 드라이브(SED)나 기본 암호화된 스마트폰은 모든 데이터를 내부 키로 암호화해 저장한다. 그 키만 안전하게 폐기하고 새로 만들면 남은 데이터는 해독할 수 없는 바이트가 된다. 몇 초면 끝나지만, 암호화가 처음부터 제대로 켜져 있었고 키가 다른 곳에 남지 않았다는 믿음에 기대는 방법이다.
  • 디가우징(degaussing): 자기 매체(HDD, 테이프)를 강한 자기장에 노출해 자화 방향을 흩뜨린다. 데이터와 함께 헤드가 위치를 찾는 데 쓰는 서보 정보까지 지워지므로 HDD는 다시 쓸 수 없게 된다. 전하로 저장하는 SSD·USB 메모리·SD 카드에는 효과가 없다. Rev. 2는 디가우저의 세기가 매체의 보자력에 못 미치면 드라이브는 망가져도 데이터는 남을 수 있다고 경고하고, 디가우징을 승인된 Destroy 기법으로 보지 않는다.
  • 물리 파괴: 파쇄, 분쇄, 소각, 용해. 플래시 칩은 작아서 조각 하나에도 많은 데이터가 들어가므로 HDD보다 더 잘게 부숴야 한다. 직접 망치로 부수기보다 인증된 파쇄 업체에 맡기고 파기 증명서를 받는 것이 일반적이다.
디가우징 전후와 플래시 비교. 디가우징 전 하드 디스크 트랙은 자화 방향이 비트에 따라 좌우로 정렬되어 있고 서보 표시가 있다. 디가우징 뒤에는 방향이 뒤죽박죽이 되고 서보 표시도 사라져 드라이브가 트랙을 찾지 못한다. 플래시 셀은 전하로 저장해 자기장에 영향을 받지 않는다디가우징 전(HDD)디가우징 뒤(HDD)플래시(SSD·USB)트랙 한 줄의 자화 방향방향이 곧 비트(0·1)색칠한 칸은 서보 정보:헤드가 트랙 위치를 찾는 표시강한 교류 자기장을 쬔 뒤방향이 흩어져 비트가 사라짐서보 정보도 지워져 드라이브는다시 쓸 수 없게 된다셀마다 갇힌 전하가 비트자기장과 무관해서디가우저를 거쳐도 그대로다→ Sanitize·암호화 삭제·파쇄디가우저의 세기가 매체의 보자력(자화를 버티는 힘)보다 약하면 드라이브는 망가져도데이터는 남을 수 있다. 그래서 매체에 맞게 인증된 장비를 쓰고, 플래시가 섞인하이브리드 드라이브나 SSD에는 디가우징을 쓰지 않는다.
디가우징의 원리. 자기 매체의 비트는 작은 영역의 자화 방향이다. 강한 교류 자기장이 방향을 흩뜨리면 데이터와 서보 정보가 함께 사라진다. 플래시는 셀에 갇힌 전하로 저장하므로 자기장과 상관이 없다.

아래 표는 Rev. 1의 매체별 표를 줄여 옮기고 Rev. 2의 경고를 더한 것이다. 실제 작업에서는 최신 판과 제조사 안내를 따른다.

매체ClearPurgeDestroy주의
HDD(자기 디스크)전체 덮어쓰기 1회Sanitize 덮어쓰기, 암호화 삭제, 인증된 디가우저파쇄·분쇄·소각재배치된 불량 섹터는 일반 쓰기로 닿지 않는다
SATA·NVMe SSD전체 덮어쓰기(일부 셀은 남을 수 있음)Sanitize 블록 삭제, 암호화 삭제작은 조각으로 분쇄디가우징은 효과 없음
USB 메모리·SD 카드전체 덮어쓰기대개 표준 명령이 없음분쇄·소각민감한 자료였다면 파괴가 현실적
스마트폰공장 초기화기본 암호화된 기기의 초기화(키 폐기)분쇄제조사 안내대로, 계정 연결부터 해제
자기 테이프덮어쓰기인증된 디가우저소각·분쇄보자력에 맞는 장비가 필요
광디스크(CD·DVD·BD)해당 없음해당 없음전용 파쇄기·분쇄Rev. 1 표는 Clear·Purge를 두지 않는다

어느 방법이든 마지막은 확인과 기록이다. NIST는 매체 종류와 일련번호, 쓴 방법과 도구, 확인 방법, 담당자를 남기라고 한다. 조직이라면 이것이 감사와 개인정보 보호 의무를 지켰다는 증거가 된다. 그리고 이 모든 것은 다 쓴 매체를 내보낼 때의 이야기다. 수사나 소송이 예상되는 상황에서 자료를 지우는 것은 폐기가 아니라 증거 인멸이 될 수 있다.

사진 등 그림 파일 복원의 특이점

복원 요청에서 가장 흔한 것이 사진이다. 다행히 사진은 카빙에 유리한 편이다. 카메라와 휴대폰 메모리 카드는 보통 FAT32나 exFAT이고 파일을 차례로 쓰므로 조각화가 적으며, JPEG는 머리말과 꼬리말이 분명하다. 대신 몇 가지 특이점이 있다.

JPEG 파일의 구간: 시작 표식, 촬영 정보와 썸네일이 든 APP1 Exif, 양자화와 허프만 표, 크기를 적은 SOF, 압축 데이터, 끝 표식. 압축 데이터 중간이 깨지면 복원한 그림은 그 줄부터 아래가 회색이 되거나 옆으로 밀리고, Exif 안의 썸네일은 온전히 남을 수 있다SOIff d8APP1 Exif촬영 정보·썸네일DQT·DHT양자화·허프만 표SOF크기SOS + 압축 데이터8×8 블록 묶음이 차례로EOIff d9여기서 깨짐Exif 썸네일따로 압축돼온전히 남기도본 그림을 풀면위쪽: 정상손상 줄부터: 색이 밀리거나회색으로 채워짐재시작 표식(RST)이 있으면그다음 구간부터 다시 맞는다
JPEG의 구간. 앞쪽 Exif 안에 작은 썸네일이 별도의 JPEG로 들어 있다. 압축 데이터는 앞에서부터 차례로 풀리므로, 중간이 깨지면 그 지점부터 아래가 어긋나거나 회색으로 채워진다.
  • Exif 메타데이터: 촬영 시각, 카메라 기종, 설정, 때로는 GPS 위치가 APP1 구간에 들어 있다(CIPA Exif 표준). 카빙으로 이름과 시각을 잃은 사진도 Exif로 언제 찍었는지 알 수 있다. 반대로 사진을 공유할 때는 위치 정보가 따라가지 않게 지우는 습관이 필요하다.
  • 썸네일 잔존: Exif 안의 썸네일은 본 그림과 따로 압축돼 있어, 본 그림이 덮여도 썸네일만 온전히 남거나, 편집 프로그램에 따라 본 그림을 잘라 냈는데 썸네일은 옛 모습으로 남는 일이 있다. 운영체제와 갤러리 앱의 썸네일 캐시도 원본이 지워진 뒤 그림의 흔적을 오래 품는다.
  • 부분 손상: JPEG의 압축 데이터는 앞 블록에 기대어 풀리므로(ITU-T T.81), 중간 한 블록이 깨지거나 다른 파일 조각이 섞이면 그 아래가 통째로 어긋난다. 재시작 표식(RST)이 있는 파일은 다음 구간부터 다시 맞춰진다. 위쪽 절반만 살아난 사진은 조각화를 의심하고 틈 카빙을 시도해 볼 만하다.
  • RAW·HEIC·동영상: 카메라 RAW는 대개 TIFF 구조라 머리말이 형식마다 다르고, HEIC와 MP4는 길이가 적힌 상자(box)를 이어 붙인 구조라 꼬리말 대신 길이로 끝을 찾는다. 큰 동영상은 조각나기 쉬워 카빙 성공률이 낮다.

실수로 지운 사진을 되찾는 순서를 정리하면 이렇다. 그 카드나 휴대폰에 아무것도 더 쓰지 않는다. 카드라면 리더기로 연결해 이미지부터 뜬다. 이미지에서 PhotoRec 같은 도구로 카빙하고, 결과는 다른 디스크에 저장한다. 휴대폰 내부 저장소는 기본 암호화와 TRIM 때문에 직접 복원이 거의 안 되므로, 클라우드 백업과 '최근 삭제' 앨범을 먼저 확인한다.

법과 윤리

복원 기술은 그 자체로 중립이지만, 다루는 것이 다른 사람의 사생활일 때가 많다. 내 기기, 또는 소유자에게 정식으로 위임받은 조사에서만 쓴다. 가족이나 동료의 휴대폰이라도 허락 없이 들여다보면 법적 문제가 될 수 있고, 남의 기기나 계정에 권한 없이 접근하는 일은 정보통신망법 같은 법으로 처벌된다. 조사 중 되찾은 자료에 제3자의 개인정보가 섞여 있다면 개인정보 보호법에 따라 목적 밖으로 쓰거나 퍼뜨리지 않는다.

복원이나 조사를 시작하기 전에 확인할 다섯 칸: 내 기기이거나 위임받은 조사인지, 필요한 범위만 보는지, 남의 개인정보가 섞였는지, 절차와 해시를 기록하는지, 법적 다툼이면 전문 기관에 맡기는지1. 권한내 기기이거나위임받은 조사인가2. 범위필요한 자료만보기로 정했나3. 개인정보남의 정보가섞여 있지 않나4. 기록절차·해시를남기고 있나5. 전문가법적 다툼이면전문 기관에하나라도 확실하지 않으면 멈추고 묻는다. 회사 장비는 회사 정책과 보안 담당이 먼저이고,법정에 낼 증거라면 처음부터 자격 있는 기관이 다뤄야 한다. 이 그림은 법률 조언이 아니다.
시작하기 전에 확인할 다섯 가지. 수사기관에 제출하거나 소송에 쓸 증거라면 수집 단계부터 절차가 증거 능력을 좌우하므로, 혼자 손대기 전에 자격 있는 포렌식 기관과 법률 전문가에게 맡긴다.

나라와 상황마다 규정이 다르고 자주 바뀌므로 이 절은 방향만 잡는 개요이고 법률 조언이 아니다. 복원 업체에 저장 장치를 맡길 때도 업체가 자료를 어떻게 다루고 언제 지우는지 확인한다.

핵심 자료

표준 문서와 도구, 이 분야의 출발점이 된 논문을 모았다. 요지는 직접 정리한 한 줄이다.

자료종류한 줄 요지
NIST SP 800-88 Rev. 2완전 삭제 지침2025년 개정판. Clear·Purge·Destroy 구분과 삭제 프로그램 운영, 검증과 기록을 다룬다.
RFC 3227증거 수집 지침휘발성 순서, 피해야 할 일, 연계 보관을 정리한 2002년 지침이다.
NIST SP 800-86사고 대응 지침수집·검사·분석·보고의 네 단계로 포렌식을 사고 대응에 넣는 방법이다.
NIST CFTT도구 시험쓰기 방지 장치, 이미징·카빙 도구가 명세대로 동작하는지 시험한 결과를 공개한다.
The Sleuth Kit분석 도구디스크 이미지의 파티션과 파일 시스템을 읽는 오픈 소스 라이브러리와 명령줄 도구다.
Autopsy분석 도구The Sleuth Kit 위에 만든 그래픽 분석 환경이다. 타임라인, 키워드 검색, 카빙을 묶었다.
PhotoRec · TestDisk복원 도구PhotoRec은 파일 시스템을 무시하고 시그니처로 카빙하고, TestDisk는 잃어버린 파티션을 찾는다.
Scalpel카빙 도구머리말·꼬리말 규칙 파일로 카빙하는 오픈 소스 도구다.
bulk_extractor카빙 도구파일 시스템을 읽지 않고 모든 바이트에서 이메일·URL·압축된 조각 같은 특징을 뽑는다.
Volatility 3메모리 분석메모리 이미지에서 프로세스·연결·모듈 목록을 다시 세우는 오픈 소스 프레임워크다.
libewf이미지 형식E01(EWF) 이미지를 읽고 쓰는 라이브러리와 형식 문서다.
AFF4 Standard이미지 형식여러 증거와 메타데이터를 한 컨테이너에 담는 열린 이미지 형식의 명세다.
Forensics Wiki — File carving개념 정리카빙의 분류(머리말·꼬리말, 검증, 조각 복원)와 조각화 문제를 정리한 위키 문서다.
Garfinkel (2007)논문Carving contiguous and fragmented files with fast object validation. 두 조각 틈 카빙을 제안했다.
Gutmann (1996)논문Secure Deletion of Data from Magnetic and Solid-State Memory. 35회 덮어쓰기의 출처이자, 맺음말에서 그 오해를 바로잡는다.
File Signatures (SEARCH)시그니처 표파일 형식별 머리말·꼬리말 바이트를 모은 표다. 원래 Gary Kessler가 관리했다.