2011-10-13 34 views
5

Secure File Xóa trong CSecure File Xóa trong C

tôi cần phải xoá bỏ một cách an toàn một tập tin trong C, đây là những gì tôi làm:

  1. sử dụng fopen để có được một tay cầm của tập tin
  2. tính toán kích thước bằng lseek/ftell
  3. có được hạt giống ngẫu nhiên tùy thuộc vào thời điểm hiện tại/hoặc kích thước tập tin
  4. ghi (size) byte để các tập tin từ một wit loop h 256 byte bằng văn bản mỗi lần lặp
  5. fflush/fclose các tập tin xử lý
  6. mở lại tập tin và làm lại các bước 3-6 cho 10 ~ 15 lần
  7. đổi tên tập tin sau đó xóa nó

Is làm thế nào nó được thực hiện? Bởi vì tôi đọc cái tên "Gutmann 25 pass" trong Eraser, vì vậy tôi đoán 25 là số lần tập tin bị ghi đè và 'Gutmann' là thuật toán ngẫu nhiên?

+0

Lưu ý rằng, ít nhất, bạn phải mở tệp để cập nhật. Nhưng ngay cả sau đó bạn không có đảm bảo rằng các lĩnh vực cập nhật được viết trở lại cùng một vị trí. (Trong thực tế, gần như chắc chắn không phải là trên SSD.) –

Trả lời

8

Bạn không thể thực hiện điều này một cách an toàn nếu không có sự hợp tác của hệ điều hành - và thường không phải lúc đó.

Khi bạn mở một tệp và ghi vào đó, không có gì đảm bảo rằng hệ điều hành sẽ đặt tệp mới trên cùng một bit rỉ sét như cũ. Ngay cả khi nó không bạn biết nếu viết mới sẽ sử dụng cùng một chuỗi các cụm như nó đã làm trước đây.

Thậm chí khi đó bạn không chắc chắn rằng ổ đĩa đã không vạch ra khối đĩa vì một số lỗi - để lại kế hoạch thống trị thế giới trên một khối được đánh dấu là xấu nhưng vẫn có thể đọc được.

ps - ghi đè 25x không còn cần thiết nữa, nó cần thiết trên các ổ đĩa MFM mật độ thấp cũ có theo dõi đầu kém. Trên ổ đĩa GMR hiện đại ghi đè lên một lần là rất nhiều.

+0

mà đã giết chết trí tưởng tượng của tôi về cách thức hoạt động của đĩa cứng: S, hoàn toàn !, vậy bạn nghĩ giải pháp sẽ là gì, nếu có? – killercode

+0

@killercode cho phần phụ thuộc hệ điều hành mà khối đĩa được sử dụng bởi một tệp - sau đó bạn có thể thực hiện việc này bằng chức năng OS cho bạn biết khối đĩa nào được sử dụng và có thể ghi đè lên chúng. Đối với bản đồ khối trên đĩa xấu, và đặc biệt là trên một SSD với mức độ hao mòn, thì việc xóa an toàn duy nhất là một cái búa rất lớn! –

+0

@kiếm trí tưởng tượng của tôi về cách thức hoạt động của đĩa cứng - đó là chính xác trong điều kiện đơn giản nhưng các hệ thống tệp và đĩa có thể thực hiện rất nhiều tối ưu hóa đằng sau hậu trường. –

1

Vâng, Trong thực tế nó được ghi đè n mẫu khác nhau vào một tập tin

Nó nên bằng cách viết một loạt 35 mẫu trong khu vực được xoá hoàn toàn.

Việc lựa chọn mẫu giả định rằng người dùng không biết cơ chế mã hóa được sử dụng bởi ổ đĩa, và bao gồm các mẫu được thiết kế riêng cho ba loại ổ đĩa khác nhau. Người dùng biết loại mã hóa nào sử dụng ổ đĩa có thể chỉ chọn những mẫu dành cho ổ đĩa của họ. Một ổ đĩa có mã hóa khác nhau là cơ chế sẽ cần các mẫu khác nhau.

Thông tin khác là here.

1

@Martin Beckett là chính xác; có những điều như vậy là "xóa an toàn" trừ khi bạn biết mọi thứ về phần cứng đang làm tất cả các cách xuống ổ đĩa. (Và thậm chí sau đó, tôi sẽ không thực hiện bất kỳ cược nào về những gì một kẻ tấn công đủ tài chính có thể phục hồi được quyền truy cập vào các phương tiện vật lý.)

Nhưng giả sử hệ điều hành và đĩa sẽ tái sử dụng cùng các khối, lược đồ của bạn không hoạt động vì một lý do cơ bản hơn: fflush thường không ghi bất kỳ thứ gì vào đĩa.

Trên hầu hết các hệ điều hành đa tác vụ (bao gồm Windows, Linux và OS X), fflush chỉ buộc dữ liệu từ bộ đệm không gian người dùng vào hạt nhân. Sau đó hạt nhân sẽ tự đệm, chỉ ghi vào đĩa khi nó cảm thấy như vậy.

Trên Linux, ví dụ: bạn cần gọi fsync(fileno(handle)). (Hoặc chỉ cần sử dụng các bộ mô tả tập tin ở nơi đầu tiên.) OS X tương tự. Windows có FlushFileBuffers.

Dòng dưới cùng: Vòng lặp bạn mô tả rất có khả năng chỉ ghi đè bộ đệm hạt nhân 10-15 lần thay vì tệp trên đĩa. Không có cách di động trong C hoặc C++ để buộc dữ liệu vào đĩa. Để làm được điều đó, bạn cần sử dụng giao diện phụ thuộc vào nền tảng.

0

Phương pháp Gutmann hoạt động tốt đối với các sơ đồ mã hóa công nghệ đĩa cũ hơn và lược đồ lau qua 35 phương pháp Gutmann không còn được yêu cầu nữa mà ngay cả Gutmann cũng thừa nhận. Xem: phương pháp Gutmann tại: https://en.wikipedia.org/wiki/Gutmann_method trong phần Phê bình, nơi Gutmann thảo luận về sự khác biệt.

Thường là đủ để thực hiện tối đa một vài lần chuyển ngẫu nhiên để xóa an toàn một tệp (có thể có thêm đường chuyền zeroing).

Gói bảo mật xóa khỏi thc.org chứa lệnh sfill để xóa an toàn đĩa và không gian inode trên ổ đĩa cứng.

+0

"Hiện không có công ty khôi phục dữ liệu cá nhân nào tuyên bố rằng công ty có thể tái tạo lại dữ liệu bị ghi đè hoàn toàn". - Tôi đã làm việc tại một công ty phục hồi dữ liệu và trong khi chúng tôi không bao giờ nói rằng chúng tôi có thể phục hồi một tệp cho đến khi nó được phục hồi có những lúc chúng tôi có thể phục hồi một phần tệp và đôi khi toàn bộ tệp. Quá trình này tốn thời gian nhưng chúng tôi có các chương trình hỗ trợ một số hoán vị xác suất cao của tệp. Tôi thừa nhận chúng tôi không thể phục hồi bất cứ điều gì sử dụng có lẽ 90% thời gian nếu nó được ghi đè hoặc khi có tham nhũng từ tai nạn đầu. – Chad

0

MFT (File Table thạc sĩ) tương tự như FAT (File bảng phân bổ), MFT giữ hồ sơ: file offsets trên đĩa, tên file, ngày/giờ, id, kích thước tập tin, và thậm chí nộp dữ liệu nếu tập tin dữ liệu phù hợp với không gian trống bên trong của bản ghi đó là khoảng 512 byte, 1 kích thước bản ghi là 1KB.

Lưu ý: Dữ liệu HDD mới thiết lập để 0x00 (chỉ cho bạn biết)

Hãy nói rằng bạn muốn ghi đè lên file1.txt OS MFT tìm thấy tập tin này bù đắp bên kỷ lục.. bạn bắt đầu ghi đè tệp1.txt với nhị phân (00000000) ở chế độ nhị phân.

Bạn sẽ ghi đè dữ liệu tệp trên đĩa 100% đây là lý do tại sao MFT có bù đắp tệp trên đĩa. sau khi bạn đổi tên và xóa.

LƯU Ý: MFT sẽ đánh dấu tệp là đã xóa, nhưng bạn vẫn có thể lấy một số dữ liệu về tệp này tức là ngày/giờ: được tạo, sửa đổi, truy cập. tập tin bù đắp, thuộc tính, cờ.

1- create folder in c:\ and move file and in same time rename in to folder(use rename function) rename file to 0000000000 or any another without extention 

2- overwrite file with 0x00 and check if file was overwrited 

3- change date/time 

4- make without attributes 

5- leave file size untouched OS faster reuse empty space. 

6- delete file 

7- repeat all files (1-6) 

8- delete folder 

or 

(1, 2, 6, 7, 8) 

9- find files in MFT remove records of these files. 
Các vấn đề liên quan