지금까지 FAT 파일시스템에 대해 기본적인 내용을 살펴보았다. 이번에는 파일 앞서 배운 정보를 기반으로 파일 삭제시 어떠한 변화가 발생하는지 알아보자. 우선 파일이 할당되었을 때 상태를 보자. 

다음은 클러스터 크기가 4KB의 경우 "C:Downloadsproneer.txt" 에 위치한 13KB의 파일이 할당 되었을 경우의 상태를 나타낸 것이다. 파일 크기가 13KB 이므로 총 4개의 클러스터를 사용한다.

 

특정 파일 찾아가기 (C:Downloadsproneer.txt)

  1. 먼저, 루트 디렉터리(C:)로 이동한다. 루트 디렉터리는 일반적으로 FAT 영역 다음에 오며, FAT32의 경우에는 BPB를 확인할 필요가 있다.
  2. 루트 디렉터리 내부의 디렉터리 엔트리 중 이름이 "Downloads"인 디렉터리 엔트리를 찾은 후 시작 클러스터 위치 값을 얻는다.
  3. 시작 클러스터 위치 값을 통해 "Downloads" 디렉터리 정보를 가진 클러스터로 이동한 후 "proneer.txt" 이름을 가진 디렉터리 엔트리를 찾는다.
  4. 찾은 "proneer.txt" 파일의 디렉터리 엔트리의 시작 클러스터 위치를 얻어 FAT 영역의 파일 할당 상태를 확인한다.
  5. FAT 영역 확인 결과 해당 파일은 클러스터 301, 304, 306, 307 번을 사용하므로, 해당 클러스터를 연속적으로 얻어온다.
  6. 얻어온 클러스터에서 디렉터리 엔트리의 파일 크기만큼만 획득하면 논리적인 파일이 된다.

다음은 이러한 상황에서 해당 파일을 삭제한 경우 어떠한 변화가 나타날까? 다음은 파일 삭제시 나타나는 변화이다. 보기에는 큰 변화가 없어보인다.

 

특정 파일 삭제하기 (C:Downloadsproneer.txt)

  1. 먼저 삭제할 파일을 찾기 위해 루트 디렉터리부터 탐색한다.
  2. 하위 디렉터리 이름을 가진 디렉터리 엔트리를 찾은 후, 해당 디렉터리가 위치한 클러스터로 이동한다.
  3. 디렉터리 내부에서 "proneer.txt"라는 이름을 가진 파일의 디렉터리 엔트리를 찾는다.
  4. 디렉터리 엔트리를 찾았다면, 해당 디렉터리 엔트리의 첫 바이트를 "0xE5" 값으로 변경하고, 시작 클러스터 위치를 얻는다.
  5. FAT 영역에서 시작 클러스터부터 탐색하면서 해당 파일이 할당하고 있던 FAT 엔트리를 모두 0으로 초기화한다.

파일을 삭제할 경우 위와 같은 동작을 수행한다. 디렉터리 삭제도 마찬가지 일 것이다. 크게 삭제하고자 하는 파일의 첫 바이트를 "0xE5"로 수정한 후 FAT 영역에서 해당 파일이 할당하고 있는 FAT 엔트리를 0×00으로 초기화한다. 0×00으로 초기화된 FAT 영역은 후에 다른 파일을 위해 사용될 수 있다.

결과적으로 실제 데이터 영역에 저장된 파일의 실제 데이터는 아무런 수정을 하지 않는다. 따라서 만약 "0xE5" 수정된 디렉터리 엔트리가 남아 있다면 해당 디렉터리 엔트리의 파일 사이즈를 통해 시작 클러스터부터 파일 크기만큼 데이터를 획득할 수 있을 것이다. 다만, FAT 영역 정보가 없기 때문에 파일 클러스터가 조각나 있는 경우에는 파일의 완전한 데이터를 가져오기 어렵다. 결과적으로 저장매체를 여유롭게 사용하며, 파일 크기가 작은 파일을 복구하고자 하는 경우는 큰 무리 없이 삭제된 파일도 복구할 수 있다.

하지만 "0xE5"로 표시된 디렉터리 엔트리와 "0×00"으로 초기화된 FAT 영역은 삭제되었으므로 다른 파일에 의해 사용될 수 있다. 다른 파일에 의해 삭제된 경우에는 디렉터리 엔트리 정보를 통해 파일을 복구하기는 어렵다. 즉, 파일의 이름, 확장자, 시간 정보 등도 복구 할 수 없다.

다만, FAT 영역이 새로운 파일로 쓰인다면 실제 해당 클러스터도 새로운 파일 데이터로 써지기 때문에 파일을 복구하기는 어렵지만, 디렉터리 엔트리만 새로운 파일 정보로 쓰인 경우에는 데이터 영역에 아직도 삭제된 파일 데이터가 남아 있을 수 있기 때문에 이러한 경우에는 파일 카빙 기법을 통해 파일을 복구 할 수 있다.

파일 카빙은 파일시스템 정보 없이 순수히 파일의 특성만을 가지고 파일을 복구하는 기법이다. 파일 카빙에 대해서는 추후에 자세히 알아보도록 하자.

이번 장에서는 파일 삭제시 변화에 대해서 살펴보았다. 삭제된 파일 복구의 경우에는 원본 파일의 클러스터가 조각나 있었냐? 연속적이었냐에 따라 복구률이 많은 차이가 있을 것이다. 하지만 조각난 경우에도 헤더부터 유효한 데이터만 해석할 수도 있을 것이다(JPEG 같은 경우). 이론적인 연구는 클러스터의 엔트로피, 바이트 분포 등을 통해 클러스터를 연결하려는 시도가 있지만 아직까지 뚜렷한 방안은 나오지 않고 있다. 디지털 포렌식관점에서 좀 더 많은 이야기를 할 수 있겠지만 이러한 내용도 추후에 자세히 알아보도록 하자.

Tagged with:
 
  • Taktak

    안녕하세요 질문이 있어서 글 남깁니다. 윈도우에서 파일 삭제 시 디렉토리 엔트리 부분의 클러스터 정보가 가끔 변경되는 경우(삭제되기 전 같은 파일의 첫 번째 클러스터 위치정보와 삭제 후 첫 번째 클러스터 위치정보가 일치하지 않음)가 생기던데 어떠한 이유때문에 그런지 알고 싶습니다.

    • proneer

      제가 분석한 내용에서는 그런 경우가 없었는데 한번 확인해보겠습니다.