Periksa apakah file telah diubah

0

Saya memiliki skenario berikut:

Proses tertentu (A) membuat file dan saya ingin menulis sebuah program yang membaca file-file ini untuk menghasilkan beberapa data statistik.

Masalahnya sederhana. Saya ingin memastikan bahwa file yang dibuat oleh (A) belum rusak / dipalsukan. Jadi satu-satunya yang diizinkan untuk mengubah / memodifikasi / membuat file-file itu adalah (A). Jika ada proses lain yang mengubah beberapa file atau membuat file serupa saya ingin mendeteksi ini dan menandai file ini sebagai dipalsukan / rusak. Saya harus benar-benar yakin bahwa file-file ini belum diubah dengan cara apa pun oleh proses lain selain (A).

Proses (A) hanya berjalan di sistem windows. Lebih khusus windows xp atau lebih tinggi.

Apakah ini mungkin? Apakah cukup untuk menonton filesystem atau haruskah saya menyuntikkan (A) untuk mendapatkan data output sebelum disimpan dalam file?

bakunin
sumber
Jika Anda bukan administrator, Anda tidak dapat melakukan ini dengan benar. Awal yang baik adalah membuat pengguna terpisah, mengatur izin pada file target / direktori sehingga hanya pengguna ini yang dapat mengaksesnya, jalankan proses A sebagai pengguna itu.
1
Siapa musuhmu? Mengapa orang harus mencampuri file Anda?
Siapa pun yang ingin memalsukan statistik
bakunin, mengapa Anda mengizinkannya mendekati server / workstation Anda?
Katakanlah proses A adalah permainan. Dan saya ingin menghasilkan data statistik. Gim ini dapat dipasang di mana saja - jadi saya tidak memiliki akses ke komputer ini. TETAPI program saya ingin menghasilkan data statistik dari file log yang dihasilkan game di komputer mereka. Jadi game dan program saya berjalan pada saat yang sama di komputer yang sama. Tentu saja klien / gamer menggunakan program saya karena dia ingin melihat statistik (yang dapat dibagikan di situs web). Tetapi beberapa dari gamer itu mungkin hanya memalsukan file log dan karenanya memalsukan data statistik.

Jawaban:

1

Ini adalah masalah DRM dan sebenarnya tidak ada jawaban yang aman. Anda perlu menggunakan enkripsi sehingga hanya A yang dapat menandatangani data sebagai otentik, tetapi yang membutuhkan A untuk mengetahui rahasia yang dapat ditemukan oleh pengguna komputer, sehingga mereka dapat memalsukan informasi.

Anda dapat mencoba untuk memiliki server B di suatu tempat menandatangani data sehingga pemilik sistem A sedang berjalan tidak dapat melakukannya, tetapi kemudian bagaimana B tahu bahwa itu sebenarnya berbicara dengan program yang sah A dan bukan sesuatu yang dimasak oleh pengguna naik. Tidak ada cara untuk menentukan ini juga.

Satu-satunya cara nyata untuk melakukannya adalah membuat setiap tindakan penting terjadi sebagai hasil dari sesuatu di server serta semua kriteria yang perlu benar untuk memastikan versi data yang tepat. Inilah sebabnya mengapa logika sisi server banyak digunakan dalam MMO dan beberapa game online lainnya untuk mencegah kecurangan. Jika Anda tidak memiliki dan mengontrol perangkat keras, Anda tidak dapat mempercayainya. DRM mencoba, tetapi ini adalah pertempuran yang hilang kecuali kita sampai pada titik di mana pengguna yang memiliki sistem hanyalah "tamu" dari beberapa pihak ketiga yang benar-benar menjalankan sistem, dan itu adalah dunia yang sangat menakutkan karena banyak alasan lain.

AJ Henderson
sumber
1

Ada model keamanan untuk itu disebut model Clark-Wilson. Hanya satu aplikasi yang diizinkan untuk mengubah data.

Apa yang akan saya lakukan adalah membuat file dengan tanda tangan digital, dan memeriksa kesegarannya. Dengan begitu aplikasi Anda B dapat memastikan bahwa file ditulis oleh A dan tidak dimanipulasi oleh proses lain. Plus memeriksa kesegaran membantu Anda mengurangi serangan replay.

damiankolasa
sumber
Itu menarik .. bisakah Anda memberikan detail lebih lanjut? Apakah saya benar, bahwa Anda akan membuat hash untuk setiap file? Masalahnya adalah, file tersebut dapat diubah oleh proses A pada suatu waktu (menambahkan data). Jadi nilai hash akan berubah setiap saat. Jadi saya harus memastikan, bahwa (seperti yang Anda katakan) hanya proses A yang dapat mengubah / membuat file. Tetapi saya sebenarnya tidak tahu bagaimana melakukannya. Saat bekerja dengan sistem yang tepat, pengguna juga dapat mengubah haknya.
Jadi jangan menandatangani file, hanya masuk data dalam file, yaitu. gunakan xml dan tandatangani setiap bagian xml yang berisi beberapa data atom. Dengan begitu A Anda hanya perlu hash dan menandatangani data yang ditambahkan.
damiankolasa
Saya tidak memiliki akses ke kode A, ini bukan aplikasi saya.
Jika tidak, maka Anda harus menggunakan kontrol akses tingkat sistem operasi agar hanya perangkat lunak yang dapat memodifikasi dan membaca file-file itu.
damiankolasa
0

Saya mungkin akan memastikan bahwa aplikasi yang menghasilkan file juga membuat file Jumlah hash MD5 dari file. Simpan hash sum ke file terpisah di suatu tempat.

Pada titik berikutnya, mungkin ketika Anda perlu menggunakan file, Anda dapat mengulangi file dan memastikan jumlah MD5 masih cocok.

PaulG
sumber
Saya tidak memiliki akses ke kode proses A. Kalau tidak, bagaimanapun juga akan mudah, bukan?
Ah, begitu. Dalam hal ini naluri saya adalah sepertinya tidak mungkin untuk menentukan apakah suatu file itu dibuat oleh 'proses A' atau 'proses X', dan sama sulitnya untuk menentukan apakah telah dimodifikasi oleh proses yang diotorisasi.
PaulG
Saya akan mencobanya. Suara tidak mungkin sangat tidak memuaskan ...
0

Microsoft menawarkan gratis Verifikasi Integritas Checksum File untuk tujuan tersebut.

Informasi yang disalin dari file readme:

1. Apa itu fciv?

Fciv adalah utilitas baris perintah yang menghitung dan memverifikasi hash file.

Itu menghitung a MD5 atau SHA1 hash kriptografi dari isi file. Jika file diubah, hash berbeda.

Dengan fciv, Anda dapat menghitung hash dari semua file sensitif Anda. Ketika Anda mencurigai bahwa sistem Anda telah disusupi, Anda dapat menjalankan verifikasi untuk menentukan file mana yang telah dimodifikasi. Anda juga dapat menjadwalkan verifikasi secara teratur.

2. Fitur:

  • Algoritma hash: MD5 , SHA1 atau keduanya (default MD5 ).
  • Tampilan untuk menyaring atau menyimpan hash dan nama file dalam file xml.
  • Dapat menelusuri direktori secara rekursif (ex fciv.exe c: \ -r).
  • Daftar pengecualian untuk menentukan file atau direktori yang tidak boleh dihitung.
  • Daftar basis data.
  • verifikasi hash dan tanda tangan.
  • simpan nama file dengan atau tanpa path lengkap.

3. Sintaks:

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.

Untuk menampilkan hash MD5 file, ketik nama file fciv.exe

Hitung hash:

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

Daftar hash disimpan dalam database:

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

Verifikasi:

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

4. Format penyimpanan database:

file xml.

Hash disimpan di basis 64.

5. Verifikasi:

Anda dapat membangun basis data hash dari file sensitif Anda dan memverifikasinya secara teratur atau ketika Anda mencurigai bahwa sistem Anda telah dikompromikan.

Ia memeriksa setiap entri yang disimpan dalam db dan memverifikasi bahwa checksum itu tidak dimodifikasi.

Axel Kemper
sumber
Saya tidak melihat bagaimana ini bisa membantu saya. Saya perlu memastikan bahwa (A) membuat / memodifikasi file. Juga (A) menambahkan data ke file log. Jadi saya kira, nilai hash bukan solusi?
bakunin