2016년 11월 22일 화요일

무료 SW로 포렌식에 도전 해볼까


[Case Study] 무료 SW로 포렌식에 도전 해볼까



  • 안철수연구소


  • 2011-07-29

< 오픈 소스를 이용한 파일 복구 방법 >

 

이번 호에서는 포렌식 과정 중에서 용의자 PC의 디스크 이미지에서 파일을 복구(내보내기)하는 방법을 알아보자. 일반적으로 수사권이 있는 포렌식을 진행할 경우, 용의자 PC의 디스크에서 이미지 생성 작업을 진행하게 된다. 여기서 이미지 생성 작업이란 PC에 설치되어 있는 물리 디스크를 PC로부터 떼어내어 같은 크기나 그보다 큰 디스크로 사본을 제작하거나 이미지 파일로 저장하는 것을 말한다. 그리고 분석가들은 이 이미지 파일로 포렌식을 수행하는 것이다. 이때 분석가는 디스크 분석을 위해 많은 도구를 사용하게 된다. 그 중 가장 두드러지게 사용하는 도구가 이미지 마운트 도구들이다. 이 마운트 도구들은 생성된 디스크/볼륨 이미지에서 디렉터리 구조를 그래픽 또는 텍스트 구문으로 보여준다. 또, 일반적으로 사용자가 접근하지 못하는 시스템 파일들에 접근할 수 있는 기능을 가지고 있다. 따라서 분석가가 원하는 검색과 삭제된 데이터를 복구할 수 있도록 지원하여, 분석 시간을 효율적으로 사용할 수 있도록 도와준다.

 

 

이 글은 테스트 목적으로 분석할 수 있는 작은 파일 시스템 파일을 만드는 방법을 소개하며, 만들어진 파일 시스템을 마운트할 수 있는 포렌식 도구를 설명하고자 한다. 또한 상용 소프트웨어가 아닌 오픈 소스를 사용하여 파일을 복구(내보내기)할 수 있는 방법을 함께 알아본다.

※ 본 문서에서는 삭제된 파일의 복구가 아닌 이미지에서 파일을 ‘복구(내보내기)’하는 기능을 살펴본다.



지금부터 본격적으로 이미지 제작과 이미지 마운트, 파일 복구(내보내기)에 대한 것을 알아보자.

(1) 가상 볼륨 제작

A. 실습 목적으로 볼륨을 제작하여 임의적으로 파일을 넣어서 가상의 테스트 볼륨을 제작하는 방법을 설명한다.

B. 테스트 환경

i. 우분투(Ubuntu) 11.04

C. 사용된 애플리케이션

i. DD

ii. mkfs.ntfs (sudo apt-get install ntfsprogs)

iii. losetup

iv. mount / umount

v. sleuth kit(sudo apt-get install sleuth kit)

vi. find



(2) 이미지 마운트

A. 제작된 가상 볼륨을 마운트가 가능한 포렌식 도구를 사용하여 마운트 해보며, 어떠한 도구들이 존재하는지 확인한다.

 

B. 테스트 환경

i. 우분투(Ubuntu) 11.04

ii. 윈도우(Windows) 7

C. 사용된 애플리케이션

i. Encase

ii. X-way forensics

iii. Winhex

iv. FTK(Forensic Tool kit)

v. Autopsy (Linux 용)

vi. Mount Image Pro



(3) 마운트된 볼륨에서 오픈 소스로 파일 복구하기

A. 값비싼 포렌식 도구가 아닌 오픈 소스로 제공되는 도구들을 살펴보며, 파일 내보내기(export) 기능을 자동화 방식과 수동 방식으로 알아본다.

 

B. 테스트 환경

i. 우분투(Ubuntu) 11.04

C. 사용된 애플리케이션

i. Autopsy

ii. DD / Sleuth kit



I. 가상 볼륨(volume) 제작



 

이 단계에서는 크기가 작은 파일시스템 파일을 제작한다. 제작된 파일 시스템은 작은 크기로 제작되므로 마운트하거나 분석할 때 지연되는 시간을 최소화할 수 있다. 또한 테스트를 진행할 수 있다.



아래 내용을 차례대로 진행하여 크기가 작은 파일시스템 파일을 제작해보자.

(※ 제작과정은 전부 우분투 환경에서 진행되었다.)



1. '0'으로 채워진 파일 만들기

데이터를 0으로 채울 수 있도록 우분투(Ubuntu)에서는 /dev/zero라는 가상파일을 제공한다. 해당 가상 파일과 dd 명령어를 사용하면, 작은 사이즈의 데이터 파일을 생성할 수 있다. 참고로, 실제 디스크 이미지는 크기가 매우 커서 테스트 목적으로 진행하기에는 무리가 있다는 점을 밝혀둔다.



파일은 꼭 0으로 채워야 하는 것은 아니다. 다만 사용되는 0명령어를 사용할 경우, 빠르게 제작이 가능하다. 또한 데이터를 확인할 때 가독성이 좋은 편이다.

작은 사이즈의 볼륨 파일을 만들기 위해서 우분투(Ubuntu) OS를 사용하였으며, dd 명령어와 제로(zero)라는 가상 파일을 이용하여 0으로 채워진 10MB파일을 생성한다. 사용된 명령어 내용은 아래와 같다.



명령어 : dd if=/dev/zero of=OUTPUT bs="byte per sector" count="bs 개수"

 



[그림 1] 가상의 10MB 파일 생성



2. NTFS 파일 시스템 파일 만들기
NTFS 파일 시스템 파일을 만들기 위해서는 dd 명령어로 만든 파일을 디바이스로 인식시켜야 한다. 해당 파일을 디바이스로 인식하기 위해서는 루프백 디바이스를 사용하며, 사용하는 방법은 아래와 같다.

 



[그림 2] dd 명령어 매뉴얼 정보



① 루프백(loop back) 디바이스 확인

루프백 디바이스를 확인하기 위해 losetup을 사용하며, -a 옵션을 이용하여 현재 사용되고 있는 루프백 디바이스 정보를 확인한다. [그림 3]에서 사용된 명령어 결과, 디바이스가 확인되지 않는 이유는 아직 마운트되어 있는 루프백 디바이스가 존재하지 않기 때문이다. 사용된 명령어는 아래와 같다.



명령어: losetup –a (-a 옵션은 사용 중인 디바이스 내역을 모두 보여주는 옵션이다.)

 



[그림 3] 현재의 루프백 디바이스(loopback device) 정보



② 사용 가능한 루프백 디바이스 확인

루프백 디바이스를 사용할 수 있는 디바이스 명과 경로를 확인하기 위해, losetup 명령어와 -f을 사용한다. 해당 명령어의 결과를 확인한 후, 사용할 디바이스를 지정할 수 있다.



명령어: losetup –f (-f 옵션은 사용 중이지 않은 디바이스 내역을 찾아주는 옵션이다.)

 



[그림 4] 사용 가능한 루프백 디바이스(loopback device) 정보



이때, 사용 가능한(비어 있는) 루프백 디바이스는 /dev/loop0이다.



③ 0으로 채워진 파일 디바이스로 인식 시키기

실습에서 사용할 파일시스템은 NTFS이다. 파일이 NTFS 파일 시스템으로 포맷(Format)되기 위해 ①에서 생성한 파일을 디바이스로 인식시켜야 한다. 이때 인식시키기 위해서는 ②에서 확인한 루프백 디바이스(사용 가능한 루프백 디바이스)를 사용한다.



파일을 디바이스로 인식시키는 명령어는 아래와 같다.



명령어: losetup 사용 가능한_디바이스 파일

 



[그림 5] 파일을 디바이스(device)로 인식시키기



①에서 만든 파일이 루프백 디바이스로 인식되어 있는지 확인하기 위해 ①에서 사용한 명령어를 사용하여 루프백 디바이스를 확인한다.

 



[그림 6] 현재의 루프백 디바이스(loopback device) 정보



이때, NTFS_file.dd는 임의로 생성한 볼륨(volume)이라는 폴더에 존재한다.

④ 루프백 디바이스를 NTFS로 포맷(Format)

루프백 디바이스를 포맷하기 위해 mkfs.ntfs를 사용했다. 명령어는 다음과 같다.



명령어 : mkfs.ntfs 디바이스

 



[그림 7] 우분투에서 루프백 디바이스(loopback device)를 NTFS로 포맷



단, mkfs.ntfs 명령어가 없을 경우, “sudo apt-get install ntfsprogs”를 사용하면 된다.



포맷된 파일 정보를 확인하면 NTFS로 이루어진 파일인 것을 확인 할 수 있다.

 



[그림 8] NTFS로 포맷된 파일 정보



3. 루프백 디바이스 마운트(Mount)

지금까지 선행된 작업으로 만들어진 루프백 디바이스를 -t 옵션을 사용하여, NTFS로 마운트하고, df 명령어로 마운트된 정보를 확인한다.

 



[그림 9] 루프백 디바이스 마운트



디바이스 정보를 자세하게 보기 위해 fsstat명령어를 사용한다. 해당 명령어로 확인되는 정보는 시스템 파일에 대한 것이나 클러스터의 크기 등이 있다.

 



[그림 10] fsstat 명령어로 마운트 정보 확인



이때 fsstat 명령어가 없을 경우, sleuthkit을 설치하여 사용하면 된다. (sudo apt-get install sleuth kit)



4. 테스트 이미지 만들기

마운트 된 경로에 2개의 폴더, 1개의 jpg파일, 1개의 실행파일(exe파일)을 만들거나 복사한다. 해당 파일들은 추후 복구(내보내기)에 사용되므로 같은 파일이 아니라도 실습에 사용할 파일을 구성하도록 한다. 이에 따라 구성된 파일 리스트는 다음과 같다.

 



[그림 11] 실습을 위하여 이미지에 파일 생성하기



① Raw 이미지 파일 만들기

NTFS RAW 이미지를 만들기 위해, 위에서 생성한 loop0 디바이스를 이미징한다. 명령어 결과로 처음에 제작했던 10M 크기의 파일이 만들어진다. 명령어 내용은 다음과 같다.



명령어: dd if="루프백 디바이스" of=OUTPUT

 



[그림 12] Raw image 만들기



이미징된 파일을 file 명령어로 확인하면 NTFS 파일시스템인 것을 확인할 수 있다.

 



[그림 13] 만들어진 이미지 파일 정보 확인



이렇게 만들어진 파일을 cat으로 읽어 들여 hex값으로 확인하면, NTFS라는 구문과 offset 00001fc에서 0x55aa는 값이 존재하는 것을 알 수 있다. 이 값을 통해 해당 파일이 NTFS파일 시스템이라는 것을 한번 더 확인할 수 있게 된다.

 



[그림 14] NTFS 파일 정보



이때 hex값이 실제 0부터 시작하여 0x1ff는 0x200의 값이라고 볼 수 있다. 0x200은 10진수로 512라는 값이며, 해당 값은 하나의 섹터(Sector) 값과 일치한다. 

 



II. 이미지 마운트(Mount)



‘가상볼륨제작’에서 살펴본 바와 같이 이미지 파일은 루프백 디바이스를 사용해서 파일들을 리스팅(listing)하거나, 확인할 수 있다. 하지만 전문적인 포렌식 도구를 사용하면 시스템 파일 등을 함께 확인할 수 있으며, 분석에 도움을 주는 여러 기능을 사용할 수 있다.



이번 섹션에서는 Raw 이미지 파일을 마운트하여 분석할 수 있는 소프트웨어를 알아보자.



Raw 이미지를 마운트할 때, 사용된 소프트웨어 목록은 다음과 같다.

 



[표 1] 실습에서 사용되는 포렌식(Forensic) 도구 소개



위의 소프트웨어는 ‘가상볼륨제작’에서 만든 NTFS 파일을 실제로 마운트하여 실습을 진행했다. 참고로, 이 가운데 Autopsy를 제외한 나머지 도구는 모두 윈도우에서 동작한다.

 

1. 엔케이스(Encase)

엔케이스는 가디언스 소프트웨어(Guidance software)에서 제공하는 포렌식 도구이다. 이 도구는 디지털 미디어를 분석하는데 사용되며, 법정에서 디지털 증거를 증명하기 위해 사용되기도 한다. 엔케이스는 윈도우/맥OS/리눅스 등의 각종 파일 시스템을 지원하여, 디지털 미디어를 분석할 때 사용하기 편하도록 지원한다.



아래 [그림 15]는 ‘가상볼륨제작’에서 만든 Raw 이미지를 확인한 것이다.

 



[그림 15] 엔케이스로 이미지 마운트



2. X-way forensics

X-웨이 포렌식(X-way forensics)은 윈도우에서 동작하는 포렌식 도구이다. 이 도구는 각종 파일 시스템을 지원한다. X-웨이 포렌식도 역시 다른 이미지 분석 도구와 마찬가지로 삭제된 내역을 확인하거나 복구하는 기능을 포함하고 있다. 특히, 헥스 에디트(Hex edit) 기능이 뛰어나다. 

[그림 16]은 분석으로 사용된 이미지이다. (제작된 이미지로 확인한 이미지가 아니다.)

 



[그림 16] X-way-Forensics으로 이미지 마운트



3. 윈헥스(WinHex)

윈헥스는 X-웨이 소프트웨어 테크놀로지(X-Ways Software Technology)에서 제공하는 16진법의 에디터(hexadecimal editor)이다. 이 도구는 컴퓨터 포렌식과 데이터 복구 등에 사용되며, 다양한 파일 시스템을 지원한다. 또 프로세스 및 동적 라이브러리 등을 확인할 때도 사용되며, 악성코드 분석과 파일 포맷 분석에도 자주 사용된다.

[그림 17]은 ‘가상볼륨제작’에서 만든 Raw 이미지를 확인한 것이다.

 



[그림17] 윈헥스(Winhex)로 이미지 마운트



4. FTK

FTK(Forensic Tool Kit)은 액세스 데이터(Access data)에서 제공하는 포렌식 도구이다. 이 도구는 다양한 파일 시스템을 지원하며, 오라클 DB를 사용한다. 오라클 DB를 사용함으로써, 빠른 인덱싱을 지원하게 된다. 인덱싱이 끝난 후에는 빠른 검색 결과를 분석가에게 제공한다. 또한 패스워드 크랙이나 암호를 복호화하는 기능이 포함되어 있으며, 디스크에 존재하는 문자열을 바탕으로 패스워드 사전을 제공하기도 한다. 이러한 기능은 분석가가 분석을 진행할 때, 패스워드나 복호화 과정을 어려움 없이 극복할 수 있도록 도와준다.

[그림 18은]은 ‘가상볼륨제작’에서 만든 RAW 이미지를 확인한 것이다.

 



[그림 18] FTK로 이미지 마운트



5. 오텁시(Autopsy)
오텁시(Autopsy)는 슬루쓰 킷(Sleuth Kit)에 있는 도구로 웹 브라우저를 통해, 파일시스템을 볼 수 있게 도와준다. 이 도구는 오픈 소스이며, 누구나 사용이 가능하다. 현재 윈도우용과 유닉스 계열에서 지원하고 있다. 지원하는 파일 시스템은 NTFA, FAT, UFS1/2, Ext2/3 등이다.

[그림 19]는 ‘가상볼륨제작’에서 만든 Raw 이미지를 확인한 것이다.

 



[그림 19] Autopsy로 이미지 마운트



6. 마운트 이미지 프로(Mount Image Pro)

마운트 이미지 프로는 겟 데이터(Get Data)에서 제공하고 있으며, 다양한 파일 시스템을 지원한다. 해당 도구는 유료이지만, 테스트할 수 있는 기간을 14일 정도 제공하고 있다. 이 도구는 MD5 해쉬 값으로 무결성을 입증한다. 

일반 포렌식 도구들은 디스크 이미지를 열면, 해당 소프트웨어에서만 디스크를 확인할 수 있다. 하지만 마운트 이미지 프로는 실제 윈도우에 마운트되어 실제 볼륨/디스크로 인식된다. 따라서 분석가는 인식된 볼륨/디스크를 검색하거나 증거를 찾을 수 있다.

[그림 20]은 ‘가상볼륨제작’에서 만든 RAW 이미지를 확인한 것이다.

 



[그림 20] 마운트 이미지 프로(Mount Image Pro)로 이미지 마운트

 

 



[그림 21] 마운트 이미지 프로(Mount Image Pro)로

이미지 마운트된 디스크 확인

 

 

III. Mount된 volume에서 오픈 소스로 파일 복구하기




포렌식 도구들을 구매할 경우, 비교적 다른 소프트웨어보다 비용이 많이 발생한다. 이러한 부분을 해소하기 위해, 이 글에서는 오픈 소스로 파일을 복구하는 방법을 소개한다. 여기서 사용하게 될 도구는 앞서 살펴본 오텁시(Autopsy)와 DD라는 도구이다.



1. 오텁시(Autopsy)

‘가상 볼륨 제작’에서 만든 로우 이미지(Raw Image)를 바탕으로 데이터를 복구하기 위해 오텁시를 사용했다. 먼저 Case명과 그 외 분석가 이름을 기입한다. 이후 이미지를 열면 [그림 22]와 같이 NTFS 파일시스템을 확인할 수 있다. 이번에 데이터를 복구할 파일이 /A_First/라는 폴더에 존재하므로 A_First라는 폴더로 이동한다.

 



[그림 22] Aotopsy로 마운트한 이미지 확인



만약 오텁시(autopsy) 명령어가 없을 경우에는 오텁시를 설치하여 사용하면 된다. (sudo apt-get install autopsy)

이 도구를 다운로드 받을 수 있는 url은 다음과 같다.

오텁시 다운로드: http://www.sleuthkit.org/autopsy/download.php



A_First라는 폴더로 이동하면, “../, ./, FISRT.JPG, nc.exe” 라는 파일(Objects)을 확인할 수 있다. 

 



[그림 23] Aotopsy로 마운트한 이미지 확인에서 디렉터리 리스팅



해당 파일들 중에서 FIRST.jpg를 볼륨 이미지에서 내보내는 작업을 진행한다. 해당 작업을 진행하기 전, 보고서(Report) 기능으로 해당 데이터의 내용을 웹 브라우저로 확인이 가능하다. 또한 ‘Export Contents’ 기능을 사용하여 선택된 데이터를 내보낼 수 있다.

그 결과, ‘A FIRST’라는 문구의 그림 파일인 것을 확인할 수 있다.

 



[그림 24] Aotopsy로 마운트한 이미지에서 파일 내보내기



2. DD & Sleuth kit

위 ‘오텁시(Autopsy)’에서 사용한 로우(Raw) 이미지를 스루쓰 킷(Sleuth kit)을 사용하여 파일 내보내기를 진행한다. 스루쓰 킷은 커맨드 라인(Command line)을 제공하는 포렌식 분석 도구이다. 해당 킷에서는 다양한 실행 파일이 존재하며, 기능도 다양하다. 

여기서는 스루쓰 킷을 사용하여, 볼륨 이미지에서 파일을 내보내는 작업에 대해 알아보자. 먼저 fls명령어를 사용하여 파일 시스템을 디렉터리 구조로 확인해 본다.

명령어 결과, 칼럼(column)값이 d/d인 것은 디렉터리라는 것을 확인할 수 있었다. 각 디렉터리를 확인한 후에 ahn.jpg파일이 존재한다는 것을 알 수 있었다.

 

명령어 : fls –f ntfs –p 볼륨_이미지 metadata(inode)

 



[그림 25] fls 명령어로 디렉터리 리스팅



ahn.jpg파일이 어떤 파일인지 확인하기 위해 icat을 사용하여, hex코드와 문자열을 동시에 확인했다. 해당 파일은 jpg 시그니처를 이루고 있는 것을 알 수 있었다.



jpg 시그니처: 시작 값이ffd8이고 마지막 값이 ffd9



명령어: icat test_NTFS.dd metadata(inode) | xxd

 



[그림 26] JPG 시그너처 확인



jpg 시그니처 확인 후 해당 데이터의 정보를 확인한다. 이때 데이터 정보를 확인하기 위해 istat 명령어가 사용되었다. 명령어 결과에서 $DATA는 데이터의 사이즈 정보와 저장된 클러스터(cluster) 개수를 표시해준다. 이 정보는 볼륨 이미지에서 데이터를 내보내기 할 때 사용된다.

 



[그림 27] istat 명령어로 JPG파일 정보 확인



$DATA의 내용을 확인한 결과 해당 데이터는 425, 426, 427 총 3개의 클러스터를 사용하는 것을 확인했다. 볼륨 이미지에서 425까지 이동한 후에 3개의 클러스터를 자르면, 해당 파일을 확인할 수 있다. 위 내용을 바탕으로 아래의 명령어를 수행했다.

 



[그림 28] dd 명령어 정보



아래 명령어에서는 b를 클러스터 크기만큼 입력하고 카운트(count)를 3개(425, 426, 427 이렇게 3개이므로)로 입력했다.

 



[그림 29] dd 명령어로 JPG파일 내보내기



위 명령어 결과, 아래와 같이 “Ahn안철수연구소”라는 문구가 있는 그림 파일을 얻을 수 있었다.@

 



[그림 30] dd 명령어로 내보내진 파일 확인

 










  • 안철수연구소 로고



  • 안철수연구소 분석2팀 소재현 연구원

보안정보의 저작권은 저자 및 ㈜AhnLab에 있으므로 무단 도용 및 배포를 금합니다.





이 정보에 대한 저작권은 AhnLab에 있으며 무단 사용 및 도용을 금합니다.

단, 개인이 비상업적인 목적으로 일부 내용을 사용하는 것은 허용하고 있으나, 이 경우 반드시 출처가 AhnLab임을 밝혀야 합니다.

기업이 이 정보를 사용할 때에는 반드시 AhnLab 의 허가를 받아야 하며, 허가 없이 정보를 이용할 경우 저작권 침해로 간주되어 법적인 제재를 받을 수 있습니다. 자세한 내용은 컨텐츠 이용약관을 참고하시기 바랍니다.

정보 이용 문의 : contents@ahnlab.com


댓글 없음:

댓글 쓰기