File Recovery

Kail-KM
|2015. 9. 12. 20:04

파일의 삭제


컴퓨터를 사용하다가 파일을 복구하고자 할 때가 존재한다. 본인도 그러한 경험으로 인해 컴맹일때에도 파일을 복구시켜주는 프로그램을 찾아보곤 했었다. 보통 파일을 복구하는 원리에 대해서는 관심이 없고 단지 복구가 되냐 안되느냐에만 관심이 있었지만 현재에는 어떻게 진행이 되는 것인지 궁금하므로 공부해보았다. 이제 이에 대하여 알아보자.

아래의 그림은 파일 시스템의 추상적인 구조를 나타낸다. 여기서 크게 메타영역과 데이터 영역이 존재하는데, 어떠한 파일이 하나 존재할 경우 두 영역에 모두 존재하게 된다. 프로그램을 실행시킬 경우 PC에선 메타영역에서 해당하는 파일에 대한 정보를 참고한 후 가리키는 데이터 영역으로 가서 프로그램을 실행하게 한다.

아래와 같이 두개의 파일이 데이터 영역과 메타영역에 존재하는 것을 확인할 수가 있다. 이러한 상태에서 b.txt라는 파일을 삭제한다면 b.txt의 데이터영역과 메타영역은 비할당 영역을 표시가 된다. 하지만 데이터가 삭제되는 것은 아니다. 단지 나타나있지 않아 우리가 사용을 할 수 없을 뿐이다.

이러한 상태에서 파일을 복구하는 방법으로는 크게 2가지로 나눌 수가 있다. 하나는 메타 데이터를 이용하여 파일을 복구하는 방법(데이터 복구)이고, 다른 하나는 파일 카빙을 통하여 복구를 하는 것이다. 이에 대하여 알아보자.



데이터 복구


데이터 복구란 메타 데이터를 이용하여 파일을 복구하는 것으로 메타데이터에 대해 알아보자면,속성정보라고도 하며 대량의 정보 가운데서 찾고 있는 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 콘텐츠에 대하여 부여되는 데이터이다. 여기에는 콘텐츠의 위치와 내용, 작성자에 관한 정보, 권리조건, 이용조건, 이용내력등이 기록되어 있다.

아래의 그림과 같이 파일을 삭제 되었지만 메타 영역과 데이터 영역에 있는 데이터가 덮어씌워지거나 변질되지 않는한 메타영역은 올바른 데이터 영역을 가리키고 있다. 따라서 이러한 메타 영역의 데이터가 잘 보존되어있다면 파일의 복구는 별도의 전문지식이 필요없이 메타데이터가 가리키는 곳을 따라가 데이터를 복구하면 되기에 비교적 비전문적이라 할 수 있다.

하지만 만약 메타 영역의 데이터가 변질되거나 삭제되었을 경우 이러한 방법은 사용을 할 수가 없게 된다. 그러므로 파일을 올바르게 복구하기 위해서는 두 영역에 있는 데이터들 모두에게 손실이 없어야 한다.



파일 카빙


메타영역에 있는 데이터가 손실되었을때 우리는 위의 방법을 통해서는 복구를 할 수가 없다. 더이상 메타영역이 올바른 데이터 영역을 가리키고 있지 않기 때문이다. 이럴때 사용하는 방법이 바로 카빙이다. 카빙은 하나의 시그니처나 문자열 등 파일의 내부 구조를 통하여 파일을 복구하는 방법이다.

카빙을 통하여 데이터를 복구하려면 파일의 구조에 대해 알아야 한다. 하지만 각 파일마다 구조가 상이하며 그 종류 또한 매우 다양하게 존재한다. 파일의 각 시그니처에 대해서는 여기를 참고하자. http://kali-km.tistory.com/entry/File-Signature 

파일 카빙에는 연속적으로 데이터가 저장된 형태와 비연속적인 형태가 있는데 비연속적인 형태의 경우 더 많은 지식을 필요로 하기에 다루지 않을 것이며 연속적으로 저장된 파일의 카빙에 있어서도 4가지 방법 중 2가지 방법에 대하여 알아볼 것이다.


헤더/푸터 카빙

헤더와 푸터를 통한 카빙의 경우 데이터가 연속적으로 저장되어있을 경우 손쉽게 찾아 복구가 가능하다. 여기서 헤더란 파일의 시작점을 알리는 값이며 푸터란 파일의 종료지점을 가리키는 값이다. 아래의 그림을 보면 연속적으로 저장되어 있는 두개의 헤더들과 푸터들을 볼 수가 있다.

이 방식을 사용할 수 있는 대표적인 구조에는 JPEG가 있다. JPEG의 경우 FFD8로 시작하여 FFD9로 끝나는 값을 가지고 있기에 카빙 툴을 직접 만들려고 한다면 이에 해당하는 값에서 데이터를 복구하도록 하면 된다.


파일 크기 카빙 방식

데이터에 헤더는 존재하지만 푸터가 존재하지 않을 경우, 위의 방식을 통하여 사용할 수가 없다. 하지만 헤더에 파일의 크기를 나타내어 준다면 우리는 어디까지가 이 프로그램에 해당하는지를 확인할 수가 있다. 이러한 방법을 통하여 복구하는 것이 파일 크기를 이용하는 방식이다.

PE 구조의 경우 MZ를 통하여 파일의 시작점을 확인할 수가 있으며, 0x38에 존재하는 값을 통하여 PE 시그니처를 확인한 후 헤더의 크기와 섹션헤더들을 참고하여 전체적인 파일의 크기를 구할 수가 있다.


카빙의 제한

이러한 카빙 또한 제한이 되는 경우가 존재하는데 바로 데이터 영역이 손실되었을 경우이다. 이러한 경우에는 이미 기존의 데이터가 사라지거나 손실되었기에 당연히 복구가 불가능하다.

또 다른 경우는 바로 분할되어 있는 경우이다. 분할 저장되어있는 경우에는 포렌식에 입문 한지 얼마 안된 나에게는 복구가 불가능하다는 문서가 많이 보이긴 하지만 딱 하나의 문서에서는 복잡하게나마 복구를 할 수 있다고 나와 있다. 이는 초보 확실히 초보자의 영역이 아니기에 제한적이라고 표시하였다.


Foremost


카빙을 실습해보기 위하여 선택한 툴로는 foremost이다. 직접 카빙툴을 만들어보는 것도 매우 좋지만, 해당 파일의 구조에 따라 다른 방법을 사용하여야 하기에 모든 것을 구현하기는 번거로울 것같다. 실습을 위해서 자주 사용하는 USB를 FTK Imager를 통하여 이미징을 하였고 분할된 파일 중에서 하나를 Test_data.005라 명명하였다. 이제 이 파일과 foremost를 가지고 실습을 진행해보자.

jpg 

gif 

png 

bmp 

avi 

exe 

mpg 

wav 

riff 

all

wmv

pdf 

ole 

doc 

zip 

rar 

htm 

cpp 

mov 

 

Foremost는 아래의 사진에서 왼쪽의 콘솔창과 같은 파일 구조의 복구를 지원하며 이 툴은 http://foremost.sourceforge.net/ 에서 다운로드 하거나 Kali Linux의 경우에는 기본적으로 내장되어 있으니 활용하면 된다.복구할 파일의 타입을 이 중에서 선택하면 된다.



사용 방법은 비교적 간단하다. foremost 와 함께 인자로 복구할 타입을 설정해주며 input 파일과 output 경로를 설정해주면 된다. 해당 과정을 보고 싶다면 -v를 추가로 인자로 넘겨주면 진행과정을 아래와 같이 지켜볼 수가 있다. 오른쪽의 2장의 사진은 복구를 한 결과이다. 



결론


이러한 데이터 복구는 일반 사용자들에게도 좋은 기능을 하지만, 포렌식적 관점에서 또한 중요하다고 생각한다. 어떠한 대상자의 디스크를 이미징하여 조사를 할때 삭제된 파일 중에서 범법행위를 증명할 만한 자료들이 충분히 발견될 수 있기 때문이다. 하나의 파일이 전체적인 분석의 실마리를 제공하기도 하는 만큼 카빙을 통해 파일을 복구하고 분석하는 것은 포렌식에 있어 매우 중요하다. 특히 최근 자주 등장하는 공격이후 자기 자신을 삭제하는 악성코드를 카빙을 이용해 복구할 수도 있으므로 카빙을 이용해 분석하는 것을 강력히 추천한다.

위와 같은 방법들을 통해 파일 시스템에서 이미지 파일을 카빙한다면 삭제되거나 현재 존재하는 이미지 파일을 복구할 수 있다. 이때 복구된 파일이 사진이라면 사진이 찍힌 위치나 시간, 카메라 기종에 대한 정보를 확인해 사건을 검증하는 자료로 활용할 수도 있다. 데이터 유출 사고라면 스테가노그라피 기법을 이용해 데이터를 점검할 수 있다.

특히 카빙을 수행하면 더미 파일에서 패턴에 맞는 내용을 무작위로 추출하게 되는데 이때 '내보내기'된 파일의 내용도 확인할 수 있어 보유하고 있던 불법적인 데이터의 수를 파악할 수 있다. 또한 아이콘이나 기타 이미지로 설치된 어플리케이션이나 장치 사용자의 프로필 정보 등의 로그도 확인할 수가 있다. 이외에도 이미지 파일은 대표적인 악성코드 유포의 수단이자 악의적인 데이터 유출의 수단으로 이용될 수 있다는 점에서 카빙은 포렌식에 있어 상당히 중요한 가치를 가진다.



문제 풀어보기


실습#1

1.시스템드라이브에서상주(Resident) 파일하나삭제후복구

2.시스템드라이브에서비상주(Non-Resident) 파일하나삭제후복구

3.시스템드라이브에서비상주(Non-Resident) 파일여러개삭제후복구

4.데이터드라이브에서비상주(Non-Resident) 파일하나삭제후복구

5.외부저장장치에서비상주(Non-Resident) 파일하나삭제후복구


실습#2

1.코드게이트2010 예선–#1, #4(http://forensic-proof.com/archives/418)

•#1–MCDF 파일에서카빙(헤더/푸터를이용한시그니처카빙)

•#2–비할당영역에서카빙(헤더/푸터를이용한시그니처카빙)

2.코드게이트2011 YUT Quals–Forensics 200 (http://forensic-proof.com/archives/1597)

•F200–비할당영역에서비연속적인JPEG 카빙(연속된데이터, 엔트로피, 시그니처기법)

3.코드게이트2011 YUT Challenge –500

•Y500 –조각난압축파일카빙(엔트로피, 압축블록검증)



참고


http://www.ahnlab.com/kr/site/securityinfo/secunews/secuNewsView.do?menu_dist=2&seq=21213

http://g0n4k00.tistory.com/entry/PE%EC%9D%98-%EC%A4%91%EC%9A%94%ED%95%9C-%EC%A0%95%EB%B3%B4

http://blog.naver.com/happymaru11/220332240719

http://forensic-proof.com/wp-content/uploads/2013/07/FP-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B3%B5%EA%B5%AC%EC%9D%98-%EA%B1%B0%EC%9D%98-%EB%AA%A8%EB%93%A0-%EA%B2%83.pdf


'Forensic > Theory' 카테고리의 다른 글

Icon Forensic ( ICON 분석)  (2) 2015.09.13
Thumbnail Forensics (썸네일 분석)  (0) 2015.09.13
File Signature  (0) 2015.09.12
Live Forensic 점검 항목  (0) 2015.09.11
Prefetch Format  (0) 2015.09.11