개요


삭제된 파일을 복구하는 것이 포렌식에 있어서 주요 과제로 남는다. 이를 이해하려면 파일시스템 동작을 정확하게 파악하는 것이 도움이 된다. 이런 복잡한 방법을 제외하고도, 윈도우 시스템에서는 휴지통(Recycle Bin)이라는 기능이 있다. (다른 운영체제에도 존재한다만, 이 글은 윈도우 위주로 작성할 예정이다.)

휴지통은 파일이 삭제되기 전 잠깐 머무는 공간이다. 혹시나 지운 것을 후회하거나, 잘못 지웠을 경우를 대비하여 존재하는 것으로 생각하면 편하다. 임시로 존재하는 공간이기 때문에 사용자가 “삭제” 했음에도 아직 지워지지 않았다는 것은 매우 중요한 포인트다.

이번 글에서는 휴지통(Recycle Bin) 아티팩트를 자세히 분석하여 어떤 경우에 삭제된 파일이 저장되며, 언제 완전히 지워지고, 삭제된 데이터는 어떻게 관리되는지, 그리고 아티팩트로써 분석관은 어떻게 휴지통 아티팩트를 통해 데이터를 분석할 수 있는지 알아볼 예정이다.

목차


경로


휴지통은 보통 바탕화면에서 바로 이용하는 경우가 많다. 때문에 바탕화면에 휴지통이 있다고 생각하면 큰 오산이다. 휴지통이라는 기능은 정확히 설명하자면 운영체제 단위에서 지원하는 기능이 아닌, 파일시스템(파티션) 단위에서 지원하는 기능이다.

즉 우리가 바탕화면에서 보는 휴지통이 유일한 휴지통이 아니라는 말이다.

휴지통은 각 파티션의 최상단 디렉토리 상에 위치한다.

[Drive Letter]:\\$Recycle.Bin

<aside> ❓ 최상단 디렉토리에서도 안보이는데요?!

그럴수 있다. $Recycle.Bin 폴더는 시스템 디렉토리로, 일반적으로는 숨김 처리되어 있는 디렉토리다. ”폴더 옵션 >> 보호된 운영체제 파일 숨기기(권장)” 의 체크를 해제하면 정상적으로 확인할 수 있다.

Untitled

</aside>

데이터


어떤 구조로 이루어져 있는지 확인해 보도록 하자. 현재 휴지통의 디렉토리 리스팅을 출력하면 아래와 같이 나온다.

(권한이 부족한 폴더도 존재하니, 권한이 있는 폴더들에 유의해서 보도록 하자)

vared@DESKTOP-DOGN0M5:/mnt/c/$Recycle.Bin$ sudo tree .
.
├── S-1-5-18  [error opening dir]
├── S-1-5-21-1906683221-3410317796-3976351031-1000  [error opening dir]
└── S-1-5-21-1906683221-3410317796-3976351031-1001
    ├── $I2I92ZR.lnk
    ├── $IC23MFN.lnk
    ├── $IH3LLYF.lnk
    ├── $II1S3KK
    ├── $IIAA5KA.lnk
    ├── $IL8JA5P.t
    ├── $R2I92ZR.lnk
    ├── $RC23MFN.lnk
    ├── $RH3LLYF.lnk
    ├── $RI1S3KK
    ├── $RIAA5KA.lnk
    ├── $RL8JA5P.t
    └── desktop.ini

3 directories, 13 files

휴지통 디렉토리 명

하위 디렉토리들은 특이한 ID로 구성되는 것을 확인할 수 있다. 알고 있는 사람들은 UID/SID라는 형태라는 것을 직감할 수 있겠다.

맞다. 휴지통 아티팩트는 우선 파일을 삭제한 사용자에 따라 폴더를 구성하고, 사용자가 삭제한 데이터를 분류하여 임시로 저장하게 된다.

즉 현재 확인한 정보로는 S-1-5-21-1906683221-3410317796-3976351031-1001 사용자가 삭제한 파일들이 그 폴더 하위에 나타나는 것이다. 그렇다면 해당 SID의 사용자는 누구인가? 찾아내는 두가지 방법에서 각각 적용할 수 있는 방법이 있다.

이번 글에서 다루기에는 조금 과한 내용이므로, 자세한 내용은 레지스트리와 관련된 내용을 다룰 때 언급해 보도록 하겠다.

  1. Live 상태에서 보는 경우 (연습중인 경우)

    wmic useraccount get name,sid
    

    Untitled

  2. Dead 상태에서 보는 경우 (Image 형태)

    레지스트리 값을 추출하여 파악할 수 있다. 레지스트리 경로는 다음과 같다.

    Rega와 같은 도구를 이용해 분석하면 편리하다.

    HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList
    

    Untitled

휴지통 파일 구조

휴지통 경로 내의 파일을 보면 알수 없는 이름의 파일들이 다양하다.

눈썰미가 좋은 사람이라면 몇가지 특징을 찾아낼 수 있을 것이다. 예시를 통해 이해해 보자.

  1. 파일 이름의 시작은 $I 혹은 $R 로 고정
  2. $I/R 이후의 문자에 대해서 $I 1개 $R 1개로 쌍을 이룬다는 것
  3. 파일의 확장자가 그대로 남아있는 것

<aside> ✔️ EXAMPLE

  `$I2I92ZR.lnk`       —     `$R2I92ZR.lnk`

$I / 2I92ZR / .lnk$R / 2I92ZR / .lnk

     file inode

</aside>

그렇다면 저 랜덤해 보이는 문자열에 대해서도 궁금할 수 있는데, 저 값은 랜덤한 값이 아니다.

원본 파일의 아이노드 번호를 Hex 값으로 변경한 것이다.

아이노드 번호에 대해 쌍을 이루는 파일의 특성에 대해 각각 알아보도록 하자.

$I 파일

I의 의미는 Info2 이다. 삭제된 파일의 메타데이터를 저장하는데, $I 파일 내 저장되는 메타데이터는 아래와 같다.

(Windows 버전별로 저장되는 데이터의 형태는 상이할 수 있으며 현재 작성된 기준은 Windows 10이다.)

Offset Size Description
0x00 8 Header
0x08 8 File 크기
0x10 8 파일이 삭제된 시각
0x18 520 원본 파일 경로

$R 파일

R의 의미는 Data 이다.

Data인데 왜 R이냐라고 물어본다면 알 길이 없다.

즉 R 파일은 삭제된 파일의 데이터를 담고 있는 것이다. 메타데이터를 제외한다면 원본과 동일한 데이터가 저장된다.

삭제된 파일의 내용이 궁금하다면 $R파일이 필수적으로 있어야 한다.

아티팩트 특징

휴지통은 데이러틀 임시로 저장하는 공간이므로, 무한정 삭제된 데이터를 보관하고 있지는 않는다. 최대 크기가 정해져 있다는 것인데, 이는 휴지통 속성에서 확인해볼 수 있다.

기본 크기는 26.44기가바이트로 설정되어 있었는데 디스크 크기에 따라 다르게 설정되니, 정확한 초기 값은 아니라고 할 수 있다. 사용하는 파티션의 5%~10% 정도를 할당하여 사용한다. 해당 크기를 초과하는 파일이나, 파일들 크기의 합이 최대 크기를 넘어서게 된다면 오래된 파일부터 영구 삭제한다.

Untitled

결론


삭제된 파일을 복구해야 할때는 카빙보다 우선적으로 수행해야 하는 것이 휴지통 아티팩트를 확인해 보는 것이라고 생각된다. 일반적인 사용자들은 파일을 삭제할 때 영구삭제하지 않고 휴지통으로 보내 삭제하는 경우가 대부분이기 때문이다. 다만 복구해야하는 파일이 전체 시스템의 5%~10% 범위보다 크다면 휴지통 크기에 맞지 않아 영구 삭제되었을 가능성 역시 고려할 필요가 있다.

결론적으로 파일을 삭제할 때 아래 프로세스를 따라 파일이 삭제되는 것으로 생각할 수 있겠다. 이를 통해 파일이 삭제되는 로직에 대해 이해할 수 있으며, 삭제된 파일을 원본으로 복구하거나, 누가 파일을 삭제했는지, 언제 파일이 삭제되었는지 확인할 수 있는 중요한 아티팩트다.

Untitled