휴지통(RECYCLE BIN)은 본래 파일을 삭제하기 위해 임시적으로 보관하는 목적을 지니고 있지만, 

보관을 함으로써 우연찮게 실수로 삭제된 파일을 복구할 수 있게 해준다.

 

휴지통

[그림 1] 휴지통 내부 모습

보통 파일을 삭제하는 방법은 일반적으로 Delete키를 이용하거나 휴지통으로 파일을 드래그한 뒤

휴지통 비우기를 이용하여 포렌식 측면에서 안전하게 삭제하는 방법이 있지만,

어떤 이유에서인지 귀찮아서 Shift+Delete 키를 이용하여 영구적으로 삭제해버리는 경우도 많다. 

하지만 이런 경우엔 데이터 복구 프로그램으로 쉽게 복구가 가능하다고 하니 가급적 안전하게 삭제하는 것이 좋다.


OS INFO2 Record Length System Folder File System
Windows 95/98/ME  800 Bytes C:\Recycled FAT32 
Windows NT/2K/XP 800 Bytes C:\Recycler\[UserSID] NTFS
Windows Vista/7 Not used. C:\$Recycle.bin\[UserSID] NTFS

[Windows Recycler]


위 표는 윈도우의 버젼별로 휴지통을 비교한 것이다.

가장 큰 특징으론 윈도우 비스타 이후로는 INFO2를 사용하지 않는 대신 $I~파일을 사용한다는 것이고,
휴지통 폴더 이름 앞에 메타 데이터 파일처럼 $가 붙는다는 것이 존재한다.


[그림 2] FTK에서의 RECYCLER 내부 모습


RECYCLER의 하위 디렉토리로는 하나 또는 그 이상의 User SID가 적혀있는 숨김 파일 폴더가 존재하는데,

이 폴더는 한 번 이상 휴지통을 이용하여 삭제한 적이 없다면 생성되지 않는다.

User SID 하위에는 휴지통을 사용해 삭제된 파일 또는 폴더가 존재하게 된다.

삭제된 파일 또는 폴더의 형식은 다음과 같다.


D(Deleted)[원본 파일이 존재 했던 드라이브 문자][인덱스 번호].[원본 파일 확장자(폴더라면 없음)]


예를 들어서 C드라이브에 존재하는 zip파일을 3번째로 삭제를 했다면 Dc3.zip이 되는거고,
E드라이브에 존재하는 폴더를 5번째로 삭제했다고 가정하면 De5가 되는 것이다.

(참고 - 인덱스 번호는 Windows 2000 이전까지는 0부터 시작했지만, XP 이후로는 1부터 시작한다.)


이렇게 Deleted 파일을 만드는 이유는 첫째, 다른 폴더에 동일한 파일명을 지닌 파일이 삭제되었을 때 구별하기 위함이고,


둘 째로 파일이 삭제된 시간과 삭제된 원본 위치는 MFT entry에 존재하지 않는 정보이기 때문에 그것을 보관하기 위해
별도의 파일을 만들어야 하기 때문이다.


Deleted 파일을 다시 복원하려고 할 때 파일 컨텐츠는 그대로 가지고 있으므로 문제가 되지 않지만,


파일 명이나 원본 경로가 완전히 바뀌어 버렸기 때문에 복구 대상 파일 만으로는 완벽하게 복구할 수는 없다.

하지만 INFO2의 정보를 이용하여 쉽게 복구가 가능한데..

복구하는 방법을 살펴보기 전에 INFO2의 구조부터 파악해보자.


Data Structure Data Size Data Offset Range
 Unknown  12Bytes 0 - 11 (0x001 - 0x00B)
Record Size (0x320)  4Bytes 12 - 15 (0x00C - 0x00F)
[INFO2 Header Structure]

이것은 INFO2 헤더의 구조이다.

헤더 중 제일 앞 12byte 영역은 4byte씩 세 부분으로 나뉘어져 있는 것 같은데, 정확한 의미는 아직 파악되지 않은 것으로 알려져 있다.

그 뒤에 나오는 4바이트 영역이 레코드 크기를 의미하며 이는 항상 0x320으로 고정된 값을 지니고 있다.


Data Structure Data Size Data Offset Range
Unknown  4Bytes 0 - 3 (0x000 - 0x003)
File Record (ASCII) 260Bytes 4 - 263 (0x004 - 0x107)
Record Number 4Bytes 264 - 267 (0x108 - 0x10B)
Drive Letter 4Bytes 268 - 271 (0x10C - 0x10F)
Deleted Time/Date (64bit Windows Time) 8Bytes 272 - 279 (0x110 - 0x117)
Deleted File Original Size 4Bytes 280 - 283 (0x118 - 0x11B)
File Record (UNICODE) 516Bytes 284 - 799 (0x11C - 0x31F)
[INFO2 Record Structure]

앞서 헤더 영역에서와 마찬가지로 첫 4byte가 어디에 사용되는지 정확한 의미는 파악이 되지않고 있다.

파일 레코드 영역은 해당 파일의 전체 경로(드라이브 문자부터 파일의 확장자까지)를 의미한다.


[그림 3] INFO2에서의 test.txt에 대한 파일 레코드



복구 방법은 의외로 간단하다.

복원 할 대상 파일에 대하여 새로운 MFT entry를 할당하는 것 만으로도 사실상 파일 자체의 복원은 끝이난다.
(새로 할당된 MFT Entry는 삭제되었던 오리지널 파일과 완전 동일하다. 단, Access Time은 제외한다.)

파일 자체의 복구가 아닌, 기록까지 완벽히 없애기 위해선 다음과 같은 프로세스를 거쳐야한다.


1.엔트리가 구성되었다면 RECYCLER에 존재하는 복원 대상 파일의 Deleted File을 삭제한다.

2.파일이 삭제됨에 따라, 동시에 INFO2 Record의 존재 또한 필요가 없어졌으니 간단히 Record 영역을 삭제해버리면 된다.

2번 같은 경우, 모든 Record를 삭제해도 되긴하다만, 첫 문자를 예약된 문자로 처리하면 쉽게 무시할 수 있으므로,

해당 Record에 있는 전체 경로의 첫 문자를 0x00으로 변경해버리면 쉽게 작업을 할 수가 있다.

복구에 대한 유틸리티도 상용에 많이 나와있으니 그것을 이용해도 좋을 것 같다. 

'공부 > Forensics' 카테고리의 다른 글

데이터 복구와 파일 카빙의 차이점  (0) 2012.07.05
[PaulTew]Timelord  (0) 2012.07.05
DLL(Dynamic Link Library)  (1) 2012.05.07
Sysinternals  (0) 2012.05.07
Windows Vista/7 Recycle.bin 분석  (1) 2012.01.10
Posted by extr
: