본문 바로가기

SWUFORCE/Dreamhack

[드림핵 스터디] 2주차 - 디지털 증거

디스크 이미징(Disk Imaging)

  • 디지털 저장매체의 복제본인 디스크 이미지(Disk Image)를 생성하는 과정

 

 

디지털 저장매체

  • 하드디스크(Hard Disk, HDD)나 SSD와 같이 데이터를 저장하는 장치 (C드라이브, D드라이브)
  • 0과 1의 반복으로 구성되는 디지털 데이터 존재

 

 

디스크 이미지

  • 디지털 저장매체에 저장되어 있는 디지털 데이트를 바이트 단위로 복제해서 하나의 파일로 저장한 것
  • 원본 디지털 저장매체와 동일한 데이터 가지지만, 그 형태가 하나의 파일 형태로 존재

 

 

 


 

 

디스크 이미징 실습

FTK Imager 설치

이미 필자의 노트북에 설치돼 있으므로 생략

 

 

 

FTK Imager를 이용한 디스크 이미징

 → 왼쪽 상단바의 Add Evidence Item 버튼을 누르면 증거물의 타입을 선택할 수 있는 창이 나옴

FTK Imager 증거물 타입 선택 화면

 

- 4가지 선택 항목의 의미

메뉴 의미
Physical Drive 물리적인 드라이브(=디스크)를 프로그램에 추가
Logical Drive 논리적인 드라이브(=드라이브)를 프로그램에 추가
Image File 디스크 이미지 파일을 프로그램에 추가
Contents of a Folder 특정 폴더의 파일들을 프로그램에 추가

 

 

 

디스크와(Disk)와 드라이브(Drive)

  • 디스크: 물리적인 형태를 지닌 저장매체 (하드디스크, SSD)
    → FTK Imager에서는 Physical Drive
  • 드라이브: 논리적으로 구분되는 저장공간 (C 드라이브, D 드라이브)

 

 

Physical Drive 선택

USB 혹은 여분의 SSD 기기 있다면 연결

FTK Imager 디스크 선택 화면

  • 항목들을 보면 현재 기기에 연결된 저장장치들이 표시됨
    → 500GB 크기의 SSD 장치, 16GB 용량의 USB 장치
  • \\.\PYSICALDRIVE0 선택

 

 

FTK Imager 에 드라이브 추가하기

  • 위 사진과 같이 \\.\PHYSICALDRIVE0 정상적으로 추가됨
  • 왼쪽 Evidence Tree 탭 통해서 폴더들 더블클릭하여 저장된 파일 확인 가능
  • 같은 방법으로 USB 디스크(\\.\PHYSICALDRIVE1)도 추가

 

 

 

디스크 추출하기

  • USB 디스크(\\.\PHYSICALDRIVE1) 우클릭하여 Export Disk Image 선택
  • Export Disk Image: FTK Imager에 추가된 증거물들을 디스크 이미지로 생성해서 내보냄
    → 시간 오래 걸리므로 가급적 용량 작은 장치 선택

 

 

 

  • 왼쪽 사진은 디스크 이미지 저장 위치를 선택하는 화면임 Add 버튼 누르기
  • 버튼을 누르면 오른쪽 사진이 나오는데, 이 창에서는 4가지의 디스크 타입을 선택할 수 있음 E01 선택

 

디스크 이미지 파일 확장자 설명
Raw (dd) 원본 디지털 저장매체에 저장된 데이터를 어떠한 압축도 없이 원본 그대로 저장하는 파일 확장자. 이러한 원본 데이터를 Raw 데이터라고 부르며, Unix/Linux 운영체제에서 수행하는 dd 명령어를 수행한 결과와 비슷하여 별도로 표기되어 있음.
E01 일반적으로 많이 사용되는 디스크 이미지 파일 확장자. Encase 라는 디지털 포렌식 소프트웨어와 함께 보급됨. 원본 데이터 압축 저장하여 파일 크기 작아지고 CRC 및 MD5 필드를 통해 파일 변조를 검증할 수 있다는 장점이 있음
SMART, AFF 잘 사용되지 않으며, 특수한 경우에만 이용되는 파일 확장자

 

 

 

분석할 사건에 대한 정보를 기록할 수 있음 (안 적고 스킵해도 ㄱㅊ)

 

저장 경로 선택

  • Browse 버튼을 눌러 적당한 경로 선택하고 아래 칸에는 알맞은 파일 이름 작성
  • Image Fragement Size는 0으로 변경한 후 Finish 버튼 누르기

* 이 부분에서 주의할 점:

  • 디스크 이미지를 저장할 경로는 디스크 이미징 대상이 되는 저장위치와 달라야 함 (0번 디스크를 디스크 이미징하려면 0번 디스크 내에는 저장하면 안 됨)
  • 저장할 경로의 크기가 충분한지 확인

 

 

Start 버튼 눌러 디스크 이미징 시작!

 

완료됐다면 오른쪽 해시를 통해 디스크 이미징이 올바르게 수행하는지 점검 (이상 없다면 종료), 목표 경로에 디스크 이미지가 잘 생성됐는지 확인

 

 

 

 


 

 

 

디스크 이미징 vs 디스크 복제 vs 복사

  • 디스크 복제: 원본 저장매체와 동일한 디지털 데이터를 가지는 복사본 저장매체를 만드는 행위
    → 디스크 이미징 - 디스크 이미지 파일 생성, but 디스크 복제 - 복사본 저장매체 생성
  • 복사: 파일이나 폴더 단위의 디지털 데이터를 별개의 저장매체에 복사하는 행위
    디스크 이미징·디스크 복제 - 저장매체 단위, but 복사 - 저장매체 중 일부 데이터만 옮김
    최근 선별압수의 원칙* 적용하면서 압수·수색 현장에서 복사를 통해 증거 수집하는 경우 많아짐

* 선별압수의 원칙: 범죄혐의와 관련된 부분만을 선별하여 압수
→ '디지털 증거의 처리 등에 관한 규칙' 중 제14조(전자정보 압수·수색·검증의 집행) 및 제19조(현장 외 압수절차)에 언급됨

 

 

 

디스크 이미지 마운트

  • 마운트(mount): 디스크 이미지 파일을 컴퓨터가 인식하도록 등록하는 것

  • 왼쪽 사진에서 상단바 Add Evidence Item 선택, Image File 타입선택
  • 오른쪽 사진에서 Browse 버튼 눌러 이미지 파일 찾아 설정하고, Finish 버튼 선택

 

 

  • 파일이 추가되었다면 확장 버튼(+)을 눌러 이미징한 저장 장치의 내용 확인 가능
  • 특정 폴더나 파일 우클릭하여 Export Files 버튼 누르면 파일 추출할 수 있음

 

 

 


 

 

 

메모리 덤프

메모리(RAM)

  • 메모리 - 휘발성 데이터를 담고 있는 휘발성 메모리(RAM) 의미
  • 휘발성 - 전원 공급이 중단되면 기억된 내용이 없어지는 성질

컴퓨터 구조

 

 

  • 메모리: CPU가 빠르게 연산할 수 있도록 데이터를 전달하기 위해 데이터를 임시적으로 저장하는 공간
  • 입력장치: 키보드나 마우스와 같이 컴퓨터 조작하는 장치
  • 출력장치: 모니터나 스피커와 같이 조작의 결과를 확인하기 위한 장치
  • 보조기억장치: 컴퓨터에 저장한 비휘발성 데이터들을 보관하는 장소
  • 프로그램(Program): 하드디스크에 저장되어 있는 실행코드
  • 프로세스(Process): 실행 중인 프로그램. 프로그램과 현재 실행 상태, 할당받은 자원 등을 포함하는 개념

 

* 쉽게 비유해보자면:

- CPU → 요리 재료를 썰어내는 칼
- 메모리 → 요리 재료들을 임시로 올릴 수 있는 도마 (도마의 크기가 한정되어 있어 모든 요리 재료를 한 번에 올릴 수 없듯이, 메모리도 큰 프로그램이나 데이터를 한 번에 메모리에 로드할 수 없음)
- 프로그램/데이터 → 요리 재료

 

 

메모리 덤프

  • 메모리에 저장된 휘발성 데이터를 비휘발성 데이터로 저장한 데이터
    (사건이 발생한 이후 최대한 빨리 수행하는 것이 중요)

 

메모리 포렌식(Memory Forensics)

  • 메모리 덤프 파일에서 사용자 데이터를 찾아내어 분석하는 행위

 

 

 


 

 

 

메모리 덤프 실습

  • Winpmem, HxD 설치
    • HxD(Hex Editor, 헥스 에디터) - 파일의 내용을 16진수 형식으로 직접 보거나 편집할 수 있는 도구

* 막간 HxD 실습

이런 텍스트 파일이 있다고 해보자

 

텍스트 파일을 HxD로 연 모습

 

  • 왼쪽 부분에선 Hex 값과 디코딩된 텍스트를 보여줌, Hex 값 직접 편집 가능
    • 또한 Offset 영역과 디코딩 영역으로 나뉨
      - Offset 영역은 데이터 Hex 형식으로 표시
      - 디코딩 영역은 Hex에 대응하는 ASCII 텍스트 표시
  • 오른쪽 부분(특수 편집기)에서는 데이터를 다양한 형식으로 변환해 줌

 

 

 

메모리 덤프 실습 (계속)

메모리 덤프 실습용 데이터

 

  • 메모장을 하나 띄우고 자유롭게 메모 작성, 메모장에 적힌 내용이 사용자의 중요 정보라고 가정함
  • 실습을 위해 메모리 덤프 전까지 메모장 종료 X

 

 

 

  • 관리자 권한으로 Windows Terminal 실행 (윈도우키 + X)
  • Winpmem이 있는 폴더로 이동,  .\winpmem_mini_x64_rc2.exe mem.raw < 명령어 입력

 

 

메모리 덤프 파일

 

  • 강의용 덤프 파일과 실제 실습한 메모리 덤프 파일 크기가 상의할 수 있음(각자의 컴퓨터 RAM 크기 다르므로)
  • 메모리 덤프 파일 크기와 상관관계를 확인하기 위해 Windows 시스템 정보 확인
    Windows + r 창에서 msinfo32 입력

RAM 16GB 이지만 사용 가능한 메모리는 15.5GB 인걸로 확인

 

 

 

HxD로 메모리 덤프 파일 열기

HxD로 mem.raw 파일 열람

 

메모장에 입력했던 문자열(THis is my test text) 검색

 

  • Ctrl + f 버튼으로 서치 창 띄운 뒤 문자열 검색
  • 텍스트 인코딩을 유니코드로 변경, 검색 방향을 전체로 설정 후 검색
  • 메모리에 내가 메모장에 입력한 문자열이 담겨있는 것을 확인해 볼 수 있음
  • 메모장 프로세스가 동작하면서 임의로 입력한 텍스트를 메모리에 저장했고, 그 메모리를 덤프 해서 파일로 만들었기 때문에 해당 텍스트를 발견할 수 있었음

 

 


 

 

 

해시 함수(Hash Function)

  • 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수
    → 이렇게 출력된 값을 해시 값 또는 해시라고 부름

 

HashCalc 프로그램

  • Data Format 항목에서 입력값을 File(파일), Text string(일반적인 문자열), Hex String(16진수 문자열) 중에 선택 가능
    → 일단 Text String으로 설정
  • 왼쪽 부분 체크 박스를 통해 여러 종류의 해시 함수 계산 여부 결정 가능
  • 상단의 Data 박스에 데이터 입력하고 왼쪽 해시 함수 체크한 뒤, 아래에 Calculate 버튼 눌러주면 됨

왼: HellWorld / 오: HellWorld! (느낌표 추가)

 

해시 함수 데이터 변경 전 데이터 변경 후
MD5 eecdeb ... d12 bb5b96 ... 100
SHA1 f582b6 ... bf1 e47efd ... 6bd
SHA256 48bc02 ... 6df 78df38 ... 27b
  • 단순 느낌표 하나 추가했음에도 해시 값 전체가 무작위로 바뀜
    → 눈사태 효과(Avalanche Effect): 입력 값에 주어진 작은 변화가 출력 값에서는 큰 차이를 만들어내는 현상
  • 해시 함수는 입력 값이 단 1비트만 바뀌어도 그 출력값이 완전히 바뀌어 버림 (데이터의 무결성 확인할 때 활용)

 

해시 함수를 이용한 증거 데이터 무결성 입증

 

 

 


 

 

 

 

해시값 계산

- 다른 형태의 동일한 데이터를 입력값으로 주었을 때 같은 해시값이 나오는지 확인

  • File 입력: HxD로 편집한 데이터
  • Text 입력: 일반적인 텍스트 데이터

 

HxD 파일 새로 만들기 → 임의의 데이터 입력(I love you so much!!) → 파일 저장(tt1)

 

왼: 파일 해시값 계산 / 오: 텍스트 해시값 계산 → 결과 동일!

 

  • 왼: 포맷을 File로 바꾼 후 아까 HxD로 만든 파일 입력
  • 오: 포맷을 Text String으로 변경 후 앞서 입력했던 텍스트만 복붙
  • 형태가 다르더라도 같은 데이터를 입력하면 같은 해시값이 출력됨

 

 

 


 

 

 

Powershell 이용한 해시값 계산

  • HashCalc은 편리하지만 여러 개의 해시 값 동시 계산 불가, 속도 느림 이유로 Powershell 이용
  • 코드 구조: Get-FileHash <FileName> -Algorithm <Algorithm> | Format-List
    → <FileName>과 <Algorithm> 부분 알맞게 채워 넣고 실행, 와일드카드 문자(*) 이용해 파일 취사 계산 가능

Powershell을 이용한 해시값 계산

 

 

 


 

 

 

해시 함수의 종류

MD5

  • 가장 간단하면서도 많이 사용됨
  • 해시 값 짧음 → 안전성 떨어짐, 충돌 저항성이 낮음 → 디지털 포렌식 보고서 작성할 때 사용 X
  • 출력값: 128비트(16 바이트)

* 때로는 16바이트 해시값만 보고 해시 함수를 유추해야 하는 경우가 있으므로 각 해시 함수의 출력 길이 알 필요 있음

 

 

 

SHA(Secure Hash Algorithm)

  • 현재 가장 많이 사용되는 해시 함수 (SHA-2 계열: SHA-224, SHA-256, SHA-384, SHA-512)
    → MD5 이후 SHA-1가 활발하게 사용되었지만 취약점 발견되어 잘 사용 X
  • 특정 해시 함수의 경우, 이름만 보고도 출력값의 길이 알 수 있음 (like SHA-256은 출력값이 256 임)
해시 함수 출력값 길이 특징
MD5 128 비트(16 바이트) 취약
SHA1 160 비트(20 바이트) 취약
SHA256 256 비트(32 바이트) 권장
SHA512 512 비트(64 바이트) 권장