Por que substituir um arquivo mais de uma vez para excluir com segurança todos os vestígios de um arquivo?

StackOverflow https://stackoverflow.com/questions/59656

  •  09-06-2019
  •  | 
  •  

Pergunta

Programas de apagamento como o Eraser recomendam a substituição de dados talvez 36 vezes.

Pelo que entendi, todos os dados são armazenados em um disco rígido como 1s ou 0s.

Se uma substituição de 1s e 0s aleatórios for realizada uma vez em todo o arquivo, por que isso não é suficiente para remover todos os vestígios do arquivo original?

Foi útil?

Solução

Um bit de disco rígido que costumava ser 0 e depois é alterado para '1' tem um campo magnético ligeiramente mais fraco do que aquele que costumava ser 1 e foi então gravado como 1 novamente.Com equipamento sensível, o conteúdo anterior de cada bit pode ser discernido com um grau razoável de precisão, medindo as pequenas variações de força.O resultado não será exatamente correto e haverá erros, mas boa parte do conteúdo anterior poderá ser recuperada.

Depois de rabiscar os pedaços 35 vezes, é efetivamente impossível discernir o que costumava estar lá.

Editar: Uma análise moderna mostra que um único bit sobrescrito pode ser recuperado com apenas 56% de precisão.Tentar recuperar um byte inteiro tem precisão de apenas 0,97% das vezes.Então, eu estava apenas repetindo uma lenda urbana.A substituição múltipla pode ter sido necessária ao trabalhar com disquetes ou alguma outra mídia, mas os discos rígidos não precisam disso.

Outras dicas

Daniel Feenberg (economista do National Bureau of Economic Research) afirma que as chances de dados sobrescritos serem recuperados de um disco rígido moderno equivalem a uma "lenda urbana":

As agências de inteligência podem ler dados sobrescritos?

Então, teoricamente, substituir o arquivo uma vez por zeros seria suficiente.

Em termos convencionais, quando um um é gravado no disco, a mídia grava um um, e quando um zero é gravado, a mídia grava um zero.No entanto, o efeito real está mais próximo de obter 0,95 quando um zero é substituído por um e 1,05 quando um é substituído por um um.O circuito normal do disco é configurado para que ambos os valores sejam lidos como uns, mas usando circuitos especializados é possível descobrir o que as "camadas" anteriores continham.A recuperação de pelo menos uma ou duas camadas de dados sobrescritos não é muito difícil de realizar lendo o sinal da parte eletrônica do cabeçote analógico com um osciloscópio de amostragem digital de alta qualidade, baixando a forma de onda amostrada para um PC e analisando-a em software para recuperar o sinal gravado anteriormente.O que o software faz é gerar um sinal de leitura “ideal” e subtraí-lo do que realmente foi lido, deixando como diferença o remanescente do sinal anterior.Como o circuito analógico em um disco rígido comercial não chega nem perto da qualidade do circuito do osciloscópio usado para amostrar o sinal, existe a capacidade de recuperar muitas informações extras que não são exploradas pela eletrônica do disco rígido (embora com sistemas mais recentes técnicas de codificação de canal, como PRML (explicado mais adiante), que exigem grandes quantidades de processamento de sinal, o uso de ferramentas simples, como um osciloscópio, para recuperar diretamente os dados não é mais possível)

http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html

Imagine um setor de dados no disco físico.Dentro deste setor existe um padrão magnético (uma faixa) que codifica os bits de dados armazenados no setor.Este padrão é escrito por uma cabeça de gravação que fica mais ou menos estacionária enquanto o disco gira abaixo dela.Agora, para que o seu disco rígido funcione corretamente como um dispositivo de armazenamento de dados, cada vez que uma nova faixa de padrão magnético é gravada em um setor, é necessário redefinir o padrão magnético nesse setor o suficiente para ser legível posteriormente.No entanto, não precisa apagar completamente todas as evidências do padrão magnético anterior, apenas precisa ser bom o suficiente (e com a quantidade de correção de erros usada hoje, boa o suficiente, não precisa ser tão boa assim).Considere que a cabeça de gravação nem sempre seguirá o mesmo caminho da passagem anterior sobre um determinado setor (ela pode estar um pouco inclinada para a esquerda ou para a direita, pode passar sobre o setor com um ligeiro ângulo para um lado ou para outro devido à vibração, etc.)

O que você obtém é uma série de camadas de padrões magnéticos, com o padrão mais forte correspondendo à última gravação de dados.Com a instrumentação correta, pode ser possível ler essas camadas de padrões com detalhes suficientes para determinar alguns dos dados em camadas mais antigas.

Ajuda o fato de os dados serem digitais, porque depois de extrair os dados de uma determinada camada, você pode determinar exatamente o padrão magnético que teria sido usado para gravá-los no disco e subtrair isso das leituras (e então fazer isso na próxima camada). camada e a próxima).

A razão pela qual você quer isso é não discos rígidos, mas SSDs.Eles remapeiam clusters sem informar o sistema operacional ou os drivers do sistema de arquivos.Isso é feito para fins de nivelamento de desgaste.Portanto, as chances são bastante altas de que o bit 0 escrito vá para um local diferente do 1 anterior.Remover o controlador SSD e ler os chips flash brutos está ao alcance até mesmo da espionagem corporativa.Mas com 36 substituições completas de disco, o nivelamento de desgaste provavelmente terá passado por todos os blocos sobressalentes algumas vezes.

"Remanência de dados", há um bom conjunto de referências sobre possíveis ataques e sua viabilidade real em Wikipédia.Existem padrões e recomendações do DoD e NIST citados lá também.Resumindo, é possível, mas está se tornando cada vez mais difícil, recuperar dados sobrescritos de mídia magnética.No entanto, alguns padrões (do governo dos EUA) ainda exigem pelo menos múltiplas substituições.Enquanto isso, os componentes internos do dispositivo continuam a se tornar mais complexos e, mesmo após a substituição, uma unidade ou dispositivo de estado sólido pode ter cópias inesperadas (pense no manuseio incorreto de blocos ou no nivelamento do desgaste do flash (veja Peter Gutmann).Portanto, os verdadeiramente preocupados ainda destroem unidades.

O que estamos vendo aqui é chamado de "Remanência de Dados". De fato, a maioria das tecnologias que substituem repetidamente está (inofensivamente) fazendo mais do que o que é realmente necessário.Houve tentativas de recuperar dados de discos que tiveram dados sobrescritos e, com exceção de alguns casos de laboratório, não há realmente nenhum exemplo de tal técnica sendo bem-sucedida.

Quando falamos sobre métodos de recuperação, principalmente você verá a microscopia de força magnética como a solução mágica para contornar uma substituição casual, mas mesmo isso não tem sucesso registrado e pode ser anulado em qualquer caso, escrevendo um bom padrão de dados binários em toda a região em sua mídia magnética (em oposição aos simples 0000000000s).

Por último, as 36 (na verdade 35) substituições às quais você está se referindo são reconhecidas como desatualizadas e desnecessárias hoje, já que a técnica (conhecida como método Gutmann) foi projetada para acomodar os vários - e geralmente desconhecidos do usuário - métodos de codificação usados ​​em tecnologias como RLL e MFM, que você provavelmente não encontrará.Até mesmo as diretrizes do governo dos EUA afirmam que uma substituição é suficiente para excluir dados, embora para fins administrativos eles não considerem isso aceitável para "higienização".A razão sugerida para esta disparidade é que setores "defeituosos" podem ser marcados como ruins pelo hardware do disco e não serem substituídos adequadamente quando chegar a hora de fazer a substituição, deixando assim em aberto a possibilidade de que a inspeção visual do disco seja capaz de recuperá-los. regiões.

No final das contas - escrever com um padrão 1010101010101010 ou bastante aleatório é suficiente para apagar os dados a ponto de as técnicas conhecidas não conseguirem recuperá-los.

Sempre me perguntei por que não é considerada a possibilidade de o arquivo ter sido armazenado anteriormente em um local físico diferente no disco.

Por exemplo, se uma desfragmentação acabou de ocorrer, pode haver facilmente uma cópia do arquivo que pode ser facilmente recuperada em outro lugar do disco.

Aqui está uma implementação de apagamento de Gutmann que eu montei.Ele usa o gerador criptográfico de números aleatórios para produzir um bloco forte de dados aleatórios.

public static void DeleteGutmann(string fileName)
{
    var fi = new FileInfo(fileName);

    if (!fi.Exists)
    {
        return;
    }

    const int GutmannPasses = 35;
    var gutmanns = new byte[GutmannPasses][];

    for (var i = 0; i < gutmanns.Length; i++)
    {
        if ((i == 14) || (i == 19) || (i == 25) || (i == 26) || (i == 27))
        {
            continue;
        }

        gutmanns[i] = new byte[fi.Length];
    }

    using (var rnd = new RNGCryptoServiceProvider())
    {
        for (var i = 0L; i < 4; i++)
        {
            rnd.GetBytes(gutmanns[i]);
            rnd.GetBytes(gutmanns[31 + i]);
        }
    }

    for (var i = 0L; i < fi.Length;)
    {
        gutmanns[4][i] = 0x55;
        gutmanns[5][i] = 0xAA;
        gutmanns[6][i] = 0x92;
        gutmanns[7][i] = 0x49;
        gutmanns[8][i] = 0x24;
        gutmanns[10][i] = 0x11;
        gutmanns[11][i] = 0x22;
        gutmanns[12][i] = 0x33;
        gutmanns[13][i] = 0x44;
        gutmanns[15][i] = 0x66;
        gutmanns[16][i] = 0x77;
        gutmanns[17][i] = 0x88;
        gutmanns[18][i] = 0x99;
        gutmanns[20][i] = 0xBB;
        gutmanns[21][i] = 0xCC;
        gutmanns[22][i] = 0xDD;
        gutmanns[23][i] = 0xEE;
        gutmanns[24][i] = 0xFF;
        gutmanns[28][i] = 0x6D;
        gutmanns[29][i] = 0xB6;
        gutmanns[30][i++] = 0xDB;
        if (i >= fi.Length)
        {
            continue;
        }

        gutmanns[4][i] = 0x55;
        gutmanns[5][i] = 0xAA;
        gutmanns[6][i] = 0x49;
        gutmanns[7][i] = 0x24;
        gutmanns[8][i] = 0x92;
        gutmanns[10][i] = 0x11;
        gutmanns[11][i] = 0x22;
        gutmanns[12][i] = 0x33;
        gutmanns[13][i] = 0x44;
        gutmanns[15][i] = 0x66;
        gutmanns[16][i] = 0x77;
        gutmanns[17][i] = 0x88;
        gutmanns[18][i] = 0x99;
        gutmanns[20][i] = 0xBB;
        gutmanns[21][i] = 0xCC;
        gutmanns[22][i] = 0xDD;
        gutmanns[23][i] = 0xEE;
        gutmanns[24][i] = 0xFF;
        gutmanns[28][i] = 0xB6;
        gutmanns[29][i] = 0xDB;
        gutmanns[30][i++] = 0x6D;
        if (i >= fi.Length)
        {
            continue;
        }

        gutmanns[4][i] = 0x55;
        gutmanns[5][i] = 0xAA;
        gutmanns[6][i] = 0x24;
        gutmanns[7][i] = 0x92;
        gutmanns[8][i] = 0x49;
        gutmanns[10][i] = 0x11;
        gutmanns[11][i] = 0x22;
        gutmanns[12][i] = 0x33;
        gutmanns[13][i] = 0x44;
        gutmanns[15][i] = 0x66;
        gutmanns[16][i] = 0x77;
        gutmanns[17][i] = 0x88;
        gutmanns[18][i] = 0x99;
        gutmanns[20][i] = 0xBB;
        gutmanns[21][i] = 0xCC;
        gutmanns[22][i] = 0xDD;
        gutmanns[23][i] = 0xEE;
        gutmanns[24][i] = 0xFF;
        gutmanns[28][i] = 0xDB;
        gutmanns[29][i] = 0x6D;
        gutmanns[30][i++] = 0xB6;
    }

    gutmanns[14] = gutmanns[4];
    gutmanns[19] = gutmanns[5];
    gutmanns[25] = gutmanns[6];
    gutmanns[26] = gutmanns[7];
    gutmanns[27] = gutmanns[8];

    Stream s;

    try
    {
        s = new FileStream(
            fi.FullName,
            FileMode.Open,
            FileAccess.Write,
            FileShare.None,
            (int)fi.Length,
            FileOptions.DeleteOnClose | FileOptions.RandomAccess | FileOptions.WriteThrough);
    }
    catch (UnauthorizedAccessException)
    {
        return;
    }
    catch (IOException)
    {
        return;
    }

    using (s)
    {
        if (!s.CanSeek || !s.CanWrite)
        {
            return;
        }

        for (var i = 0L; i < gutmanns.Length; i++)
        {
            s.Seek(0, SeekOrigin.Begin);
            s.Write(gutmanns[i], 0, gutmanns[i].Length);
            s.Flush();
        }
    }
}

Existem aplicativos e serviços do tipo "reparo de disco" que ainda podem ler dados de um disco rígido mesmo depois de formatado; portanto, simplesmente substituir 1s e 0s aleatórios uma vez não é suficiente se você realmente precisar apagar algo com segurança.

Eu diria que para o usuário médio isso é mais que suficiente, mas se você estiver em um ambiente de alta segurança (governo, militar, etc.), precisará de um nível de "exclusão" muito mais alto que possa garantir de forma bastante eficaz que nenhum dado será recuperável da unidade.

Os Estados Unidos estabeleceram requisitos relativos ao apagamento de informações confidenciais (ou seja,Informações extremamente secretas) é destruir a unidade.Basicamente, as unidades foram colocadas em uma máquina com um ímã enorme e também destruiriam fisicamente a unidade para descarte.Isso porque existe a possibilidade de leitura de informações de um drive, podendo até ser sobrescrito diversas vezes.

Veja isso: Artigo de Guttman

Basta inverter os bits para que 1s sejam escritos em todos os 0s e 0s sejam escritos em todos os 1s e, em seguida, zere tudo, o que deve eliminar qualquer variável no campo magnético e leva apenas 2 passagens.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top