SDelete v2.05

Mark Russinovich 작성

게시일: 2023년 9월 29일

DownloadSDelete 다운로드(304KB)

소개

Windows NT/2000(Win2K) C2 준수 기능 중 하나는 개체 재사용 보호를 구현한다는 것입니다. 이는 애플리케이션이 파일 공간이나 가상 메모리를 할당할 때 Windows NT/2K가 할당한 리소스에 이전에 저장된 데이터를 볼 수 없음을 의미합니다. Windows NT는 메모리를 0으로 채우고 파일이 애플리케이션에 리소스 유형을 제시하기 전에 파일이 있는 디스크의 섹터를 0으로 만듭니다. 그러나 개체 재사용은 파일이 삭제되기 전에 차지하는 공간이 0이 되도록 지시하지 않습니다. 이는 Windows NT/2K가 운영 체제가 시스템 리소스에 대한 액세스를 제어한다는 가정하에 설계되었기 때문입니다. 그러나 운영 체제가 활성화되지 않은 경우 원시 디스크 편집기 및 복구 도구를 사용하여 운영 체제가 할당을 취소한 데이터를 보고 복구할 수 있습니다. Win2K의 파일 시스템 암호화(EFS)로 파일을 암호화하는 경우에도 파일의 암호화되지 않은 새 버전이 생성된 후 파일의 원래 암호화되지 않은 파일 데이터가 디스크에 남아 있습니다.

삭제된 파일과 EFS로 암호화한 파일을 안전하게 복구할 수 있는 유일한 방법은 보안 삭제 애플리케이션을 사용하는 것입니다. 보안 삭제 애플리케이션은 약하게 삭제된 파일을 드러내는 자기 매체의 패턴을 읽을 수 있는 복구 기술을 사용하여 디스크 데이터를 복구할 수 없게 만드는 기술을 사용하여 삭제된 파일의 디스크 데이터를 덮어씁니다. SDelete(보안 삭제)가 그러한 애플리케이션입니다. SDelete를 사용하여 기존 파일을 안전하게 삭제할 뿐만 아니라 디스크의 할당되지 않은 부분에 있는 파일 데이터(이미 삭제하거나 암호화한 파일 포함)를 안전하게 지울 수 있습니다. SDelete는 국방부 삭제 및 삭제 표준 DOD 5220.22-M을 구현하여 SDelete로 삭제하면 파일 데이터가 영원히 사라집니다. SDelete는 파일 데이터를 안전하게 삭제하지만 여유 디스크 공간에 있는 파일 이름은 삭제하지 않습니다.

SDelete 사용

SDelete는 여러 옵션을 사용하는 명령줄 유틸리티입니다. 어떤 용도로든 하나 이상의 파일 및/또는 디렉터리를 삭제하거나 논리 디스크의 여유 공간을 정리할 수 있습니다. SDelete는 디렉토리 또는 파일 지정자의 일부로 와일드 카드 문자를 허용합니다.

사용법:

sdelete [-p passes] [-r] [-s] [-q] [-f] <file or directory [...]>
sdelete [-p passes] [-q] [-z|-c] <drive letter [...]>
sdelete [-p passes] [-q] [-z|-c] <physical disk number [...]>
매개 변수 Description
-c 여유 공간을 정리하세요.
-f 문자만 포함된 인수를 디스크가 아닌 파일/디렉터리로 처리합니다.
인수에 다른 문자(예: 경로 구분 기호 또는 파일 확장자)가 포함된 경우에는 필요하지 않습니다.
-p 덮어쓰기 패스 수를 지정합니다(기본값은 1).
-q 자동 모드입니다.
-r 읽기 전용 속성을 제거합니다.
-s 재귀 하위 디렉토리.
-z 여유 공간이 없습니다(가상 디스크 최적화에 적합).
-노배너 시작 배너 및 저작권 메시지를 표시하지 않습니다.
  • 디스크를 정리하려면 디스크에 볼륨이 없어야 합니다.
  • 드라이브 문자의 경우 :(예: D:)을 포함합니다.

SDelete 작동 방식

특별한 속성이 없는 파일을 안전하게 삭제하는 것은 상대적으로 간단합니다. 보안 삭제 프로그램은 단순히 보안 삭제 패턴으로 파일을 덮어씁니다. 더 까다로운 것은 Windows NT/2K 압축, 암호화 및 스파스 파일을 안전하게 삭제하고 디스크 여유 공간을 안전하게 정리하는 것입니다.

압축, 암호화 및 스파스는 16개 클러스터 블록의 NTFS에서 관리됩니다. 프로그램이 이러한 파일의 기존 부분에 쓰는 경우 NTFS는 새 데이터를 저장하기 위해 디스크에 새 공간을 할당하고 새 데이터가 작성된 후 이전에 파일이 점유한 클러스터의 할당을 취소합니다. NTFS는 데이터 무결성과 관련된 이유로 그리고 압축된 스파스 파일의 경우 새 할당이 기존 할당보다 큰 경우(새로 압축된 데이터가 이전 압축 데이터보다 큼) 이러한 보수적인 접근 방식을 사용합니다. 따라서 이러한 파일을 덮어쓰면 디스크에서 파일 내용이 삭제되지 않습니다.

이러한 유형의 파일을 처리하기 위해 SDelete는 조각 모음 API를 사용합니다. SDelete는 조각 모음 API를 사용하여 압축, 희소 및 암호화 파일에 속하는 데이터가 차지하는 디스크의 클러스터를 정확하게 결정할 수 있습니다. SDelete가 파일 데이터가 포함된 클러스터를 알게 되면 원시 액세스를 위해 디스크를 열고 해당 클러스터를 덮어쓸 수 있습니다.

여유 공간을 정리하는 것은 또 다른 과제입니다. FAT 및 NTFS는 애플리케이션이 여유 공간을 직접 처리할 수 있는 방법을 제공하지 않으므로 SDelete에는 두 가지 옵션 중 하나가 있습니다. 첫 번째는 압축, 희소 및 암호화 파일과 마찬가지로 원시 액세스를 위해 디스크를 열고 여유 공간을 덮어쓸 수 있다는 것입니다. 이 접근 방식에는 큰 문제가 있습니다. SDelete가 NTFS 및 FAT 드라이브의 여유 공간 부분을 완전히 계산할 수 있도록 코딩되더라도(사소하지 않은 일) 활성 드라이브와 충돌할 위험이 있습니다. 시스템에서 발생하는 파일 작업. 예를 들어 SDelete가 클러스터가 비어 있다고 판단하고 바로 그 순간에 파일 시스템 드라이버(FAT, NTFS)가 다른 애플리케이션이 수정 중인 파일에 클러스터를 할당하기로 결정했다고 가정해 보겠습니다. 파일 시스템 드라이버가 새 데이터를 클러스터에 쓴 다음 SDelete가 나타나서 새로 쓴 데이터를 덮어씁니다. 파일의 새 데이터는 사라졌습니다. SDelete가 파일 시스템의 온디스크 구조를 손상시키므로 클러스터가 파일 시스템 메타데이터에 할당된 경우 문제는 더욱 악화됩니다.

두 번째 접근 방식이자 SDelete가 사용하는 방식은 여유 공간을 간접적으로 덮어쓰는 것입니다. 먼저 SDelete는 가능한 가장 큰 파일을 할당합니다. SDelete는 캐시되지 않은 파일 I/O를 사용하여 이를 수행하므로 NT 파일 시스템 캐시의 콘텐츠가 삭제되거나 SDelete의 공간과 관련된 쓸모없는 데이터로 대체되지 않습니다. 호깅 파일. 캐시되지 않은 파일 I/O는 섹터(512바이트)로 정렬되어야 하므로 SDelete가 더 이상 사용할 수 없는 경우에도 SDelete 파일에 할당되지 않은 일부 남은 공간이 있을 수 있습니다. 파일을 늘립니다. 남은 공간을 확보하기 위해 SDelete는 다음으로 가능한 가장 큰 캐시 파일을 할당합니다. 이 두 파일 모두에 대해 SDelete는 보안 덮어쓰기를 수행하여 이전에 사용 가능했던 모든 디스크 공간이 안전하게 정리되도록 합니다.

NTFS 드라이브에서 SDelete의 작업은 두 파일을 할당하고 덮어쓴 후에 반드시 완료되는 것은 아닙니다. SDelete는 또한 NTFS MFT(마스터 파일 테이블)의 기존 여유 부분을 MFT 레코드에 맞는 파일로 채워야 합니다. MFT 레코드는 일반적으로 크기가 1KB이며 디스크의 모든 파일 또는 디렉터리에는 하나 이상의 MFT 레코드가 필요합니다. 작은 파일은 MFT 레코드 내에 완전히 저장되는 반면 레코드에 맞지 않는 파일은 MFT 외부의 클러스터에 할당됩니다. 여유 MFT 공간을 관리하기 위해 SDelete가 해야 할 일은 가능한 가장 큰 파일을 할당하는 것입니다. 파일이 MFT 레코드에서 사용 가능한 모든 공간을 차지할 때 NTFS는 파일이 커지는 것을 방지합니다. 디스크에 남아 있는 여유 클러스터가 없습니다(이전에 할당된 두 파일 SDelete에 보관됨). 그런 다음 SDelete는 프로세스를 반복합니다. SDelete는 더 이상 새 파일을 생성할 수 없을 때 MFT의 모든 이전 무료 레코드가 안전하게 덮어쓴 파일로 완전히 채워졌다는 것을 알게 됩니다.

삭제한 파일의 파일 이름을 덮어쓰기 위해 SDelete는 파일 이름을 26번 변경하며 매번 파일 이름의 각 문자를 연속된 알파벳 문자로 바꿉니다. 예를 들어 "foo.txt"의 첫 번째 이름 변경은 "AAA.AAA"가 됩니다.

디스크 여유 공간을 정리할 때 SDelete가 파일 이름을 안전하게 삭제하지 않는 이유는 파일을 삭제하려면 디렉토리 구조를 직접 조작해야 하기 때문입니다. 디렉토리 구조는 삭제된 파일 이름을 포함하는 여유 공간을 가질 수 있지만 여유 디렉토리 공간은 다른 파일에 할당할 수 없습니다. 따라서 SDelete는 안전하게 덮어쓸 수 있도록 이 여유 공간을 할당할 방법이 없습니다.

DownloadSDelete 다운로드(304KB)

다음에서 실행:

  • 클라이언트: Windows 10 이상.
  • 서버: Windows Server 2012 이상.
  • 나노 서버: 2016 이상.