Proneer | Security is a people problem...
얼마 전에 휴지통과 관련된 글을 하나 포스팅하였다. 2009/10/07 - [Data Foreniscs] - 휴지통 아이콘 제거/복구
이번에는 휴지통과 관련된 일반적인 내용과 INFO2 파일에 대해서 이야기 하려고 한다.
다들 알다시피 Windows에서 Shift 키를 사용하지 않고 일반적인 삭제를 하는 경우 파일이 실제 삭제되는 것이 아니라 미리 정의된 휴지통 폴더로 이동한다. 이러한 휴지통 폴더는 Windows 버전 별로 다소 차이를 보인다.
다음은 Windows XP SP3에서 휴지통 폴더의 내용을 살펴본 것이다. 위에서 언급한 바와 같이 사용자의 SID(Security Identifier)별로 폴더가 생성되어 있음을 알 수 있다. 계정이 많아 지면 해당 계정마다 각각의 폴더가 새로 생성된다. 따라서, 다중 사용자 시스템에서 휴지통 또한 서로 공유되지 않고 독립적으로 사용된다는 것을 알 수 있다.

관리자의 권한이 아닌 일반 유저의 권한에서 다른 사용자의 휴지통 폴더로 이동하려고 할 경우 접근이 제한된다. 그렇다면 사용자의 SID는 어디서 확인할 수 있을까? 손쉽게 다음 레지스트리 키를 찾아가면 현재 시스템에 등록된 사용자의 SID 목록을 볼 수 있다.

각 SID의 "ProfileImagePath" 값의 데이터를 확인하면 해당 사용자명을 파악할 수 있을 것이다.
각 파티션별로 휴지통 폴더가 생기는 이유는?
앞서 살펴본 휴지통 폴더는 운영체제에 의해 보호되어 있다. 폴더 옵션에서 "보호된 운영체제 파일 숨기기" 항목을 체크 해제하면 탐색기를 통해 해당 폴더의 내용을 확인할 수 있다. 유심히 살펴본 사용자라면 각 드라이브마다 각각 휴지통 폴더가 존재하는 것을 알 수 있다. 이렇게 각 파티션마다 휴지통 폴더가 생기는 이유는 무엇인가?
서로 다른 파티션은 논리적으로 독립된 공간이다. 따라서 같은 파티션 내에서 파일을 이동 시키면 해당 파일 데이터는 그대로 둔 채 경로만 변경한다. 하지만 파티션 간에 데이터를 이동할 경우에는 원본 파티션에서 데이터를 읽어 목적지 파티션에서 해당 데이터를 써야만 한다. 여기서 각 파티션은 하나의 볼륨 내에 존재하는 것을 의미한다.
결국, C:\ 파티션에 운영체제를 설치한 후 D:\ 파티션에서 어떤 파일을 지웠다면 이 파일은 C:\의 휴지통 폴더로 이동하는 것이 아니라 D:\의 휴지통 폴더로 이동한다. 이렇게 구성한 이유는 앞서 설명했듯이 만약 D:\ 파티션에서 파일을 지울 때마다 C:\로 이동시켜야 하는 번거로움이 없어진다. 이렇지 않다면 큰 파일이나 많은 양의 파일을 한번에 지울 경우 파일을 지우는 시간이 무척 많이 걸릴 것이다.
하지만 이렇게 독립적인 폴더에 파일을 지웠더라도 바탕화면의 휴지통을 클릭했을 때 C:\ 파티션 뿐만아니라 D:\ 파티션에서 삭제된 파일도 보이는 이유는 볼륨 내에 존재하는 모든 파티션의 휴지통 폴더에서 같은 휴지통 이름을 가지는 폴더를 링크 시켜 놓아 함께 보여줄 수 있도록 만들었기 때문이다. 휴지통 이름은 각 사용자별 고유한 SID를 가지므로 사용자별로 삭제한 파일을 관리할 수 있게 된다.
휴지통 폴더의 삭제된 파일 이름
휴지통을 열어보면 삭제된 파일의 이름이 지우기 이전의 파일 이름과 동일한 것을 확인할 수 있을 것이다.
하지만 이것은 실제 삭제된 파일의 이름이 아니다. 다음에서 설명할 INFO2 파일의 정보를 기반으로 원래 파일이름으로 표시해주는 트릭이다. 명령어 창을 통해서 해당 폴더의 내용을 확인하면 다른점을 확인할 수 있다.

위와 같이 삭제된 파일 이름은 다음의 형식을 가진다.
D는 삭제(deleted) 되었다는 것을 의미하고, D문자 다음에는 드라이브(파티션) 문자(original drive letter of file)가 온다. C 드라이브라 Dc, D 드라이브라면 Dd 가 될 것이다. 이어서 정수형 숫자(index number)가 오는데 이 숫자는 삭제된 파일이 늘어날 수록 값이 증가한다. 그리고 확장자(original file extension)은 원본 파일과 동일하게 유지된다.
하지만 이러한 형식은 Windows NT/2K/XP 에서의 형식이고 Vista 에서는 조금 변경되었다. Vista의 경우에는 파일을 삭제하면 "$R[random string]" 형식으로 파일 이름이 변경된다. 그리고 이때 이 파일과 대응되는 "$I[random string]" 파일이 추가적으로 생성된다. $I 파일은 이후에 이전 버전에서 유지되던 "INFO2" 파일의 역할을 수행한다. 그리고 삭제된 파일의 확장자는 원본 파일의 확장자를 유지한다.
INFO2 파일과 $I 파일 형식
먼저 INFO2 파일은 Vista 이전 버전에서 휴지통의 삭제된 파일들의 정보를 관리하기 위한 목적의 파일이다. 기본적으로 INFO2 파일은 다음의 내용을 포함한다.
다음은 각 내용의 포맷을 보여준다. INFO2 파일은 파일 하나에 모든 삭제된 파일들 정보를 유지하므로 파일 헤더 이후에 구조는 반복해서 위치한다.
다음은 Vista에서 휴지통의 삭제된 파일 정보를 관리하기 위한 목적의 $I 파일에 대해 살펴보자. $I 파일은 다음의 내용을 포함한다.
다음은 각 내용의 포맷을 보여준다. $I 파일은 삭제된 파일마다 하나씩 생성되므로 항상 고정된 544 Bytes 크기를 가진다.
휴지통 파일 분석 도구
$I은 아직 보지 못했지만 INFO2 파일에 대해서는 분석해주는 도구가 있다. 도구라고 해봐야 위의 포맷을 해석해서 보여주는 것이다. 프로그래밍을 조금만 할줄 안다면 쉽게 INFO2 파일을 분석해주는 도구를 만들 수 있을 것이다.
INFO2 파일 분석 도구 rifiuti2 : http://code.google.com/p/rifiuti2/
Windows Recycle Bin Analysis
얼마 전에 휴지통과 관련된 글을 하나 포스팅하였다. 2009/10/07 - [Data Foreniscs] - 휴지통 아이콘 제거/복구
이번에는 휴지통과 관련된 일반적인 내용과 INFO2 파일에 대해서 이야기 하려고 한다.
다들 알다시피 Windows에서 Shift 키를 사용하지 않고 일반적인 삭제를 하는 경우 파일이 실제 삭제되는 것이 아니라 미리 정의된 휴지통 폴더로 이동한다. 이러한 휴지통 폴더는 Windows 버전 별로 다소 차이를 보인다.
| Operating System | Common File System | Recycle Bin system folder |
| Windows 95/98/ME | FAT32 | C:\Recycled\ |
| Windows NT/2K/XP | NTFS | C:\Recycler\<USER SID>\ |
| Windows Vista | NTFS | C:\$Recycle.Bin\<USER SID>\ |
다음은 Windows XP SP3에서 휴지통 폴더의 내용을 살펴본 것이다. 위에서 언급한 바와 같이 사용자의 SID(Security Identifier)별로 폴더가 생성되어 있음을 알 수 있다. 계정이 많아 지면 해당 계정마다 각각의 폴더가 새로 생성된다. 따라서, 다중 사용자 시스템에서 휴지통 또한 서로 공유되지 않고 독립적으로 사용된다는 것을 알 수 있다.
관리자의 권한이 아닌 일반 유저의 권한에서 다른 사용자의 휴지통 폴더로 이동하려고 할 경우 접근이 제한된다. 그렇다면 사용자의 SID는 어디서 확인할 수 있을까? 손쉽게 다음 레지스트리 키를 찾아가면 현재 시스템에 등록된 사용자의 SID 목록을 볼 수 있다.
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
각 SID의 "ProfileImagePath" 값의 데이터를 확인하면 해당 사용자명을 파악할 수 있을 것이다.
각 파티션별로 휴지통 폴더가 생기는 이유는?
앞서 살펴본 휴지통 폴더는 운영체제에 의해 보호되어 있다. 폴더 옵션에서 "보호된 운영체제 파일 숨기기" 항목을 체크 해제하면 탐색기를 통해 해당 폴더의 내용을 확인할 수 있다. 유심히 살펴본 사용자라면 각 드라이브마다 각각 휴지통 폴더가 존재하는 것을 알 수 있다. 이렇게 각 파티션마다 휴지통 폴더가 생기는 이유는 무엇인가?
서로 다른 파티션은 논리적으로 독립된 공간이다. 따라서 같은 파티션 내에서 파일을 이동 시키면 해당 파일 데이터는 그대로 둔 채 경로만 변경한다. 하지만 파티션 간에 데이터를 이동할 경우에는 원본 파티션에서 데이터를 읽어 목적지 파티션에서 해당 데이터를 써야만 한다. 여기서 각 파티션은 하나의 볼륨 내에 존재하는 것을 의미한다.
결국, C:\ 파티션에 운영체제를 설치한 후 D:\ 파티션에서 어떤 파일을 지웠다면 이 파일은 C:\의 휴지통 폴더로 이동하는 것이 아니라 D:\의 휴지통 폴더로 이동한다. 이렇게 구성한 이유는 앞서 설명했듯이 만약 D:\ 파티션에서 파일을 지울 때마다 C:\로 이동시켜야 하는 번거로움이 없어진다. 이렇지 않다면 큰 파일이나 많은 양의 파일을 한번에 지울 경우 파일을 지우는 시간이 무척 많이 걸릴 것이다.
하지만 이렇게 독립적인 폴더에 파일을 지웠더라도 바탕화면의 휴지통을 클릭했을 때 C:\ 파티션 뿐만아니라 D:\ 파티션에서 삭제된 파일도 보이는 이유는 볼륨 내에 존재하는 모든 파티션의 휴지통 폴더에서 같은 휴지통 이름을 가지는 폴더를 링크 시켜 놓아 함께 보여줄 수 있도록 만들었기 때문이다. 휴지통 이름은 각 사용자별 고유한 SID를 가지므로 사용자별로 삭제한 파일을 관리할 수 있게 된다.
휴지통 폴더의 삭제된 파일 이름
휴지통을 열어보면 삭제된 파일의 이름이 지우기 이전의 파일 이름과 동일한 것을 확인할 수 있을 것이다.
하지만 이것은 실제 삭제된 파일의 이름이 아니다. 다음에서 설명할 INFO2 파일의 정보를 기반으로 원래 파일이름으로 표시해주는 트릭이다. 명령어 창을 통해서 해당 폴더의 내용을 확인하면 다른점을 확인할 수 있다.
위와 같이 삭제된 파일 이름은 다음의 형식을 가진다.
- D [original drive letter of file] [index number] . [original file extension]
D는 삭제(deleted) 되었다는 것을 의미하고, D문자 다음에는 드라이브(파티션) 문자(original drive letter of file)가 온다. C 드라이브라 Dc, D 드라이브라면 Dd 가 될 것이다. 이어서 정수형 숫자(index number)가 오는데 이 숫자는 삭제된 파일이 늘어날 수록 값이 증가한다. 그리고 확장자(original file extension)은 원본 파일과 동일하게 유지된다.
하지만 이러한 형식은 Windows NT/2K/XP 에서의 형식이고 Vista 에서는 조금 변경되었다. Vista의 경우에는 파일을 삭제하면 "$R[random string]" 형식으로 파일 이름이 변경된다. 그리고 이때 이 파일과 대응되는 "$I[random string]" 파일이 추가적으로 생성된다. $I 파일은 이후에 이전 버전에서 유지되던 "INFO2" 파일의 역할을 수행한다. 그리고 삭제된 파일의 확장자는 원본 파일의 확장자를 유지한다.
INFO2 파일과 $I 파일 형식
먼저 INFO2 파일은 Vista 이전 버전에서 휴지통의 삭제된 파일들의 정보를 관리하기 위한 목적의 파일이다. 기본적으로 INFO2 파일은 다음의 내용을 포함한다.
- 원본 파일 경로 및 이름 (File Record)
- 휴지통 내의 파일 식별자 (Record Number)
- 원본 파일이 위치하고 있었던 드라이브의 번호 (Drive Designator)
- 파일이 삭제된 날짜 및 시간 (File Deleted Date/Time)
- 원본 파일 크기 (Deleted File Physical Size)
다음은 각 내용의 포맷을 보여준다. INFO2 파일은 파일 하나에 모든 삭제된 파일들 정보를 유지하므로 파일 헤더 이후에 구조는 반복해서 위치한다.
| Data Structure | Length in Bytes | Offset Range |
| File Header | 16 Bytes | 0 - 15 (0x0000 - 0x000F) |
| ~ | ~ | ~ |
| File Record (ASCII) | 264 Bytes | 0 - 263 (0x0000 - 0x0107) |
| Record Number | 4 Bytes | 264 - 267 (0x0108 - 0x010B) |
| Drive Designator | 4 Bytes | 268 - 271 (0x010C - 0x010F) |
| File Deleted Date/Time | 8 Bytes | 272 - 279 (0x0110 - 0x0117) |
| Deleted File Physical Size | 4 Bytes | 280 - 283 (0x0118 - 0x011B) |
| File Record (UNICODE) | 516 Bytes | 284 - 799 (0x011C - 0x031F) |
다음은 Vista에서 휴지통의 삭제된 파일 정보를 관리하기 위한 목적의 $I 파일에 대해 살펴보자. $I 파일은 다음의 내용을 포함한다.
- 원본 파일 크기 (File Size)
- 파일이 삭제된 날짜 및 시간 (File Delete Date/Time)
- 원본 파일 경로 및 이름 (File Record)
다음은 각 내용의 포맷을 보여준다. $I 파일은 삭제된 파일마다 하나씩 생성되므로 항상 고정된 544 Bytes 크기를 가진다.
| Data Structure | Length in Bytes | Offset Range |
| File Header | 8 Bytes | 0 - 7 (0x0000 - 0x0007) |
| File Size | 8 Bytes | 8 - 15 (0x0008 - 0x000F) |
| File Deleted Date/Time | 8 Bytes | 16 - 23 (0x0010 - 0x0017) |
| File Record | 520 Bytes | 24 - 543 (0x0018 - 0x021F) |
휴지통 파일 분석 도구
$I은 아직 보지 못했지만 INFO2 파일에 대해서는 분석해주는 도구가 있다. 도구라고 해봐야 위의 포맷을 해석해서 보여주는 것이다. 프로그래밍을 조금만 할줄 안다면 쉽게 INFO2 파일을 분석해주는 도구를 만들 수 있을 것이다.
INFO2 파일 분석 도구 rifiuti2 : http://code.google.com/p/rifiuti2/
'Data Foreniscs' 카테고리의 다른 글
| INFO2 File Analysis (0) | 2009/10/23 |
|---|---|
| 어플리케이션 바인딩 (Application Binding) (0) | 2009/10/17 |
| Windows Recycle Bin Analysis (0) | 2009/10/16 |
| 휴지통 아이콘 제거/복구 (3) | 2009/10/07 |
| Flash Cookie Forensics (4) | 2009/09/28 |
| Index.dat 분석 (2) | 2009/09/04 |
댓글을 달아 주세요