[Forensic Carving Tools] Scalpel on Kali Linux

Posted by DarkSoul.Story
2013.08.14 12:57 Open Source/Kali Linux



개요


파일들은 각각 고유한 포맷을 가지고 있으며, 포맷에서 기본이 되는 내용을 파일 시그니처(File Signature)라 부른다. 파일 시그니처는 파일의 가장 처음에 위치하는 특정 바이트로 파일 포맷을 구분하기 위해 사용된다. 파일 시그니처는 파일 포맷에 따라 처음에만 존재하는 경우도 있지만, 마지막에도 존재하는 경우도 있다. 파일의 처음에 존재하는 시그니처는 보통 헤더(Header) 시그니처라 부르며, 파일의 마지막에 존재하는 시그니처는 푸터(Footer or Tailer)시그니처라고 부른다. 파일 시그니처는 파일 포맷 분석, 악성코드 분석, 파일 복구등에 중요하게 사용된다.


Scalpel은 앞서 설명한 파일 시그니처를 기반으로 삭제 된 데이터를 복구하기위한 오픈 소스 도구이다. 


테스트 환경 

 운영 체제 (OS) : Kali Linux 1.0.3

 테스트에 사용된 도구 버전 : v1.60


 

상세 분석


아래는 -h 옵션을 적용하여, Scalpel에서 사용 가능한 옵션 정보를 확인하였다. 




[옵션은 이후 추가 작성 예정!!]


scalpel을 사용하기 위해서는 설정 파일을 변경하거나 추가 시켜줘야한다. scalpel 설정 파일은 /etc/scalpel/ scalpel.conf 파일로 존재한다. scalpel.conf 파일은 각 파일 포맷의 시그니처들을 정의해 놓은 파일로, vi 에디터로 열어 보면 아래와 같이 파일 포맷의 시그니처들을 확인할 수 있다. 파일 포맷 시그니처는 다음과 같은 형식으로 작성되어 있다. 


파일 포맷

y

max carve size

헤더 시그니처

푸더 시그니처

 


여기서는 디스크 이미지 파일에서 삭제된 JPG 파일을 복구한다는 조건하에 진행하겠다. scalpel.conf 파일에서 아래와 같이 jpg 앞에 존재하는 주석 (#)을 삭제한 후 jpg 파일 시그니처를 입력한다. 주석을 삭제하면, scalpel을 이용하여 삭제된 파일을 복구시 삭제된 데이터 중 해당 시그니처가 존재할 경우 파일을 복구시킨다. 



아래의 그림은 hexeditor를 이용하여, jpg 파일을 확인한 결과이다. scalpel.conf 파일에서 jpg의 헤더 시그니처와 푸더 시그니처가 동일한 것을 확인 할 수 있다.

[JPG 파일의 헤더 시그니처]


[JPG 파일의 푸더 시그니처] 


앞에서 언급한 scalpel.conf 파일에서 jpg 파일 헤더 시그니처가 1가지가 아닌것에 대해 의문이 생길것이다. jpg 파일 헤더 시그니처를 자세히 살펴 보면, 파일 헤더 시그니처에서 앞의 3개 16진수(xff xd8 xff)는 동일하지만, 마지막 4번째 16진수는 모두 다른것을 확인 할 수 있다. 마지막 4번째 16진수의 의미는 JPEG 콘텐츠를 나타내며, 그 내용은 아래와 같다.



FF-D8-FF-DB

삼성전자 SGH-D807 JPEG 파일 (GSM)

FF-D8-FF-E0

표준 JPEG/JFIF 파일

FF-D8-FF-E1

표준 JPEG/JFIF 파일

FF-D8-FF-E2

Canon EOS-1D JPEG 파일

FF-D8-FF-E3

삼성전자 SGH-D500 JPEG 파일 (GSM)

FF-D8-FF-E8

Still Picture Interchange File Format (SPIFF)


scalpel.conf 파일을 수정하였다면, 본격적으로 scalpel을 이용하여 삭제된 jpg 파일을 복구하여보자. 필자는 현재 사용하고 있는 Kali Linux의 부트 파티션을 이용하였다. 



scalpel 사용법은 아래와 같다.


root@DarkSoul:~# scalpel [옵션] [디스크 파티션]



필자는 기본적으로 scalpel.conf 파일과 파일 복구가 완료되면 결과를 저장할 위치, 파티션만 지정하여 삭제된 jpg 파일을 복구 하였다. 위 그림을 살펴 보면, 앞서 scalpel.conf 파일에서 설정한 jpg 파일 시그니처와 일치하는 파일들을 복구하였다. 복구된 jpg 파일은 총 9795개 이며, 해당 내용들은 -o 옵션을 적용한 위치에 저장이 된다.

audit.txt 파일은 scalpel 로그파일로, audit.txt 파일의 내용은 아래와 같다


복구된 이미지 파일은 각 폴더를 생성하여 저장하는데. 각 폴더 마다 1000개의 파일을 저장한다. 참고로 복구된 파일 및 로그 파일이 저장되는 output 디렉터리를 동일하게 지정한 후 scalpel를 실행 시키면 아래와 같이 에러 메시지를 출력한다.



해당 에러 메시지는 output 디렉터리가 비어 있지 않아 발생하는 에러이다. 같은 output 디렉터리를 사용 하고 싶다면,  output 디렉터리안에 있는 로그 파일 및 복구된 파일을 삭제 또는 다른곳으로 옮겨 두면된다. 되도록이면 output 디렉터리를 새로 생성해서 복구하는게 가장 좋다.

참고 URL 및 도서


http://www.filesignatures.net/

- http://www.garykessler.net/library/file_sigs.html

- http://www.garykessler.net/library/file_sigs.html#acks

- http://www.faqs.org/faqs/jpeg-faq/part1/section-15.html

- http://en.wikipedia.org/wiki/JPEG



이 댓글을 비밀 댓글로