我有以下情况:
某个进程(A)创建了文件,我想编写一个程序读取这些文件来生成一些统计数据。
问题很简单。我想确保 (A) 创建的文件没有被破坏/伪造。因此,唯一被允许更改/修改/创建这些文件的人是 (A)。如果任何其他进程更改了某些文件或创建了类似的文件,我希望检测到这一点并将这些文件标记为伪造/损坏。我需要绝对确定这些文件没有被 (A) 以外的其他进程以任何方式更改。
进程 (A) 仅在 Windows 系统上运行。更具体地说,Windows XP 或更高版本。
这有可能吗?监视文件系统就足够了吗,还是我必须以某种方式注入(A)才能在将输出数据存储到文件之前获取它?
答案1
这是一个 DRM 问题,实际上没有一个安全的答案。您需要使用加密,以便只有 A 可以将数据签名为真实的,但这需要 A 知道计算机用户可以发现的秘密,因此他们可以伪造信息。
您可以尝试让服务器 B 在某处对数据进行签名,这样运行系统 A 的所有者就无法这样做,但 B 如何知道它实际上是在与合法程序 A 对话,而不是用户编造的东西。也没有办法确定这一点。
唯一真正可行的方法是让每个重要操作都作为服务器上某些东西的结果,以及所有需要正确的标准来确保数据的正确版本。这就是为什么 MMO 和其他一些在线游戏中大量使用服务器端逻辑来防止作弊的原因。如果你不拥有和控制硬件,你就不能信任它。DRM 试图做到这一点,但除非我们达到拥有系统的用户只是真正运行系统的第三方的“客人”的地步,否则这将是一场失败的战斗,而由于许多其他原因,这是一个非常可怕的世界。
答案2
有一个安全模型,称为 Clark-Wilson 模型。只允许单个应用程序更改数据。
我会创建带有数字签名的文件,并进行一些新鲜度检查。这样,您的应用程序 B 就可以确定文件是由 A 编写的,而不是由任何其他进程操纵的。此外,检查新鲜度有助于您缓解重放攻击。
答案3
我可能会确保生成文件的应用程序也会创建一个MD5 哈希值文件的哈希值。将该哈希值存储到某个单独的文件中。
稍后,可能需要使用该文件时,您可以重新散列该文件并确保 MD5 总和仍然匹配。
答案4
Microsoft
提供免费文件校验和完整性验证器用于此类目的。
从自述文件复制的信息:
1.什么是fciv?
Fciv 是一个命令行实用程序,用于计算和验证文件的哈希值。
它计算文件内容的加密哈希值。如果文件被修改,哈希值会有所不同MD5
。SHA1
使用fciv
,您可以计算所有敏感文件的哈希值。当您怀疑系统已被入侵时,您可以运行验证来确定哪些文件已被修改。您还可以定期安排验证。
2.特点:
- 哈希算法:
MD5
,SHA1
或两者(默认MD5
)。 - 显示到屏幕上或将哈希值和文件名存储在 xml 文件中。
- 可以递归浏览目录(例如 fciv.exe c:\ -r )。
- 例外列表,指定不应计算的文件或目录。
- 数据库列表。
- 哈希和签名验证。
- 存储带有或不带有完整路径的文件名。
3.语法:
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.
要显示文件的 MD5 哈希值,请键入 fciv.exe 文件名
计算哈希值:
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
列出数据库中存储的哈希值:
fciv.exe -list -sha1 -xml db.xml
验证:
fciv.exe -v -sha1 -xml db.xml
fciv.exe -v -bp c:\mydir -sha1 -xml db.xml
4.数据库存储格式:
您可以使用 xml 文件来配置此配置。
哈希值以 64 为基数存储。
5.验证:
您可以建立敏感文件的哈希数据库,并定期验证它们,或者在您怀疑系统已被入侵时进行验证。
它检查存储在数据库中的每个条目并验证校验和未被修改。