Verifique se um arquivo foi alterado

0

Eu tenho o seguinte cenário:

Um determinado processo (A) cria arquivos e eu quero escrever um programa que leia esses arquivos para gerar alguns dados estatísticos.

O problema é simples. Eu quero ter certeza de que os arquivos criados por (A) não foram corrompidos / falsificados. Então, o único que tem permissão para alterar / modificar / criar esses arquivos é (A). Se qualquer outro processo alterou alguns dos arquivos ou criou arquivos semelhantes, eu quero detectar isso e marcar esses arquivos como falsificados / corrompidos. Eu preciso ter certeza absoluta de que esses arquivos não foram alterados de forma alguma por outro processo diferente de (A).

O processo (A) está sendo executado apenas no sistema Windows. Mais especificamente, windows xp ou acima.

Isso é possível? É o suficiente para assistir o sistema de arquivos ou eu tenho que injetar de alguma forma (A) para obter os dados de saída antes de serem armazenados em um arquivo?

    
por bakunin 21.08.2013 / 14:44

4 respostas

1

Este é um problema de DRM e não há realmente uma resposta segura. Você precisa usar criptografia para que apenas A possa assinar os dados como autênticos, mas isso requer que A conheça um segredo que possa ser descoberto pelo usuário do computador, assim eles podem falsificar as informações.

Você poderia tentar fazer com que o servidor B, em algum lugar, assinasse os dados para que o dono do sistema A estivesse em execução não o fizesse, mas como B sabe que está realmente falando com um programa legítimo A e não algo o usuário cozinhou. Não há como determinar isso também.

A única maneira real de fazer isso é fazer com que cada ação importante aconteça como resultado de algo no servidor, bem como todos os critérios que precisam ser corretos para garantir uma versão adequada dos dados. É por isso que a lógica do lado do servidor é muito usada em MMOs e em alguns outros jogos online para evitar fraudes. Se você não possui e controla o hardware, não pode confiar nele. O DRM tenta, mas é uma batalha perdida a menos que cheguemos a um ponto em que o usuário que possui o sistema seja apenas um "convidado" de algum terceiro que realmente execute o sistema, e isso é um mundo muito assustador por muitas outras razões.

    
por 21.08.2013 / 15:40
1

Existe um modelo de segurança para isso, chamado de modelo Clark-Wilson. Somente um único aplicativo pode alterar os dados.

O que eu faria seria criar arquivos com assinatura digital neles e algumas verificações de atualização. Dessa forma, seu aplicativo B pode ter certeza de que os arquivos foram escritos por A e não manipulados por nenhum outro processo. Além disso, a verificação de frescura ajuda-o a atenuar os ataques de repetição.

    
por 21.08.2013 / 14:07
0

Eu provavelmente me certificaria de que o aplicativo que gera os arquivos também cria um MD5 hash sum do arquivo. Armazene essa soma de hash em um arquivo separado em algum lugar.

Em um momento posterior, provavelmente quando precisar usar o arquivo, você poderá refazer o arquivo novamente e garantir que a soma MD5 ainda corresponda.

    
por 21.08.2013 / 14:18
0

Microsoft oferece um Verificador de integridade de soma de verificação de arquivo gratuito para esses fins.

Informação copiada do arquivo leia-me:

1.O que é fciv?

Fciv é um utilitário de linha de comando que calcula e verifica os hashes de arquivos.

Calcula um hash criptográfico MD5 ou SHA1 do conteúdo do arquivo. Se o arquivo for modificado, o hash é diferente.

Com fciv , você pode calcular os hashes de todos os seus arquivos confidenciais. Quando você suspeitar que o seu sistema foi comprometido, você pode executar uma verificação para determinar quais arquivos foram modificados. Você também pode agendar verificações regularmente.

2.Características:

    Algoritmo de hash
  • : MD5 , SHA1 ou ambos (padrão MD5 ).
  • Exibir para exibir ou armazenar hash e nome de arquivo em um arquivo xml.
  • Pode procurar um diretório recursivamente (ex fciv.exe c: \ -r).
  • Lista de exceções para especificar arquivos ou diretórios que não devem ser calculados.
  • Listagem do banco de dados.
  • hashes e verificações de assinatura.
  • armazena o nome do arquivo com ou sem caminho completo.

3.Sintaxe:

Usage:  fciv.exe [Commands] <Options>

Commands: ( Default -add )

   -add    <file | dir> : Compute hash and send to output (default screen).

      dir options:
      -r       : recursive.
      -type    : ex: -type *.exe.
      -exc file: list of directories that should not be computed.
      -wp      : Without full path name. ( Default store full path)
      -bp      : base path. The base path is removed from the path name of each entry
   -list   : List entries in the database.

    -v     : Verify hashes.
           : Option: -bp basepath.

    -? -h -help : Extended Help.

Options:
        -md5 | -sha1 | -both    : Specify hashtype, default md5.
        -xml db                 : Specify database format and name.

Para exibir o hash MD5 de um arquivo, digite fciv.exe filename

Habilitar hashes:

fciv.exe c:\mydir\myfile.dll
fciv.exe c:\ -r -exc exceptions.txt -sha1 -xml dbsha.xml
fciv.exe c:\mydir -type *.exe
fciv.exe c:\mydir -wp -both -xml db.xml

Listar hashes armazenados no banco de dados:

fciv.exe -list -sha1 -xml db.xml

Verificações:

fciv.exe -v -sha1 -xml db.xml
fciv.exe -v -bp c:\mydir -sha1 -xml db.xml

4. Formato de armazenamento de banco de dados:

arquivo xml.

O hash é armazenado na base 64.                                          

5.Verificação:

Você pode criar um banco de dados de hash dos seus arquivos confidenciais e verificá-los regularmente ou quando suspeitar que o seu sistema foi comprometida.

Ele verifica cada entrada armazenada no banco de dados e verifica se a soma de verificação não foi modificada.

    
por 21.08.2013 / 15:16