我想验证我的客户网站上运行的程序创建的文本日志文件是否已被篡改。你怎么建议我这样做?我在这里搜索了一堆谷歌,但找不到我的答案。谢谢!
编辑:看完所有建议到目前为止,这是我的想法。我想保持简单,因为客户不是那种电脑,我认为将盐嵌入二进制文件是安全的。我将继续使用关键字“salt checksum hash”等搜索一个简单的解决方案,并在找到一个后回发到这里。
答案 0 :(得分:5)
强制性序言:这里涉及多少利益?你必须假设篡改是可能的,但如果你花了足够的时间和金钱,你可能会非常困难。所以:你觉得多少钱?
那说:
由于这是您编写文件的代码,因此您可以将其写入加密。如果您需要它是人类可读的,您可以保留第二个加密副本,或仅包含散列的第二个文件,或为每个条目写入散列值。 (当然,哈希必须包含“秘密”密钥。)如果这样做太冒险,请考虑将哈希或校验和或日志本身发送到其他服务器。等等。
答案 1 :(得分:1)
这是一件非常困难的事情,除非你能以某种方式保护用于签署数据的密钥对。对数据进行签名需要私钥,如果该密钥在计算机上,则人们可以简单地更改数据或创建新数据,并使用该私钥对数据进行签名。您可以将私钥保存在“安全”计算机上,但是如何确保数据在离开原始计算机之前未被篡改?
当然,如果你只保护运动中的数据,事情会变得容易多了。
如果您可以保护私钥,则可以轻松签名数据。
一旦你制定了确保安全性的更高级别理论,请查看GPGME进行签名。
答案 2 :(得分:1)
您可以使用adler-32等算法将校验和作为每个文件行的前缀。 如果您不想在日志文件中放入二进制代码,请使用encode64方法将校验和转换为非二进制数据。因此,您可以只丢弃已被篡改的行。
答案 3 :(得分:1)
这实际上取决于你想要达到的目标,赌注是什么以及约束是什么。
从根本上说:你所要求的只是完全不可能(孤立地)。
现在,这是一个让尝试修改文件的人的生活变得复杂的问题,因此修改它会比修改它们所获得的成本更高。当然,这意味着黑客的唯一目标是破解你的保护措施,但这并不会阻止那么多......
假设它应该在独立的计算机上运行(没有网络),正如我所说,它是不可能的。无论你使用什么过程,无论密钥/算法如何,这最终都嵌入到二进制文件中,而二进制文件会受到潜在黑客的审查。可以对其进行反汇编,可以使用十六进制读取器对其进行检查,可以使用不同的输入进行探测,插入调试器等等......因此,您唯一的选择就是通过分解逻辑来使调试/检查成为一种痛苦,使用调试检测来改变路径,如果你非常善于使用自修改代码。这并不意味着它不可能被篡改过程,它几乎意味着它应该变得难以让任何攻击者放弃。
如果您拥有可供使用的网络,则可以在远程(在您的控制下)驱动器上存储哈希值,然后比较哈希值。这里有两个困难:
当然,在这两种情况下,要小心处于中间身份的男人......
最后一点建议:如果你需要安全性,你需要咨询一位真正的专家,不要依赖一些在论坛上谈话的陌生人(比如我自己)。我们是业余爱好者。
答案 4 :(得分:0)
这是您的文件和您的程序,允许修改它。在这种情况下,有一个简单的解决方案。 (如果您能够将日志文件放入单独的文件夹中)
注意:的 您可以将所有日志文件放入单独的文件夹中。例如,在我的应用程序中,我们有很多DLL,每个都有自己的日志文件,而且应用程序有自己的。
因此,在后台运行一个单独的进程,并监视该文件夹是否有任何更改通知,如
根据此通知,您可以证明文件是否已更改! (正如你和其他人可能猜测的那样,即使你的进程和dll也会更改这些文件,这些文件也会导致通知。你需要聪明地同步这个动作。就是这样)
用于监控文件夹的窗口API,如下所示:
HANDLE FindFirstChangeNotification(
LPCTSTR lpPathName,
BOOL bWatchSubtree,
DWORD dwNotifyFilter
);
lpPathName:
Path to the log directory.
bWatchSubtree:
Watch subfolder or not (0 or 1)
dwNotifyFilter:
Filter conditions that satisfy a change notification wait. This parameter can be one or more of the following values.
FILE_NOTIFY_CHANGE_FILE_NAME
FILE_NOTIFY_CHANGE_DIR_NAME
FILE_NOTIFY_CHANGE_SIZE
FILE_NOTIFY_CHANGE_SECURITY
etc...
(Check MSDN)
如何使其有效?
怀疑A :我们的流程
怀疑X :其他流程或用户
Inspector :我们为监控文件夹而创建的过程。
Inpector 会看到文件夹中的更改。查询可疑A 是否对其进行了任何更改。
如果是的话,
change is taken as VALID.
如果不是
clear indication that change is done by *Suspect X*. So NOT VALID!
File is certified to be TAMPERED.
除此之外,以下是可能(或可能不):)帮助您的一些技术!
每当应用程序关闭文件时都会存储时间戳以及文件大小。 下次打开文件时,请检查上次修改时间及其大小。如果两者相同,则表示文件未被篡改。
将日志写入其中后,将文件权限更改为只读。在某些程序中或有人想要篡改它时,它们会尝试更改只读属性。此操作会更改为文件修改的日期/时间。
仅向您的日志文件写入加密数据。如果有人篡改它,当我们解密数据时,我们可能会发现一些文本未正确解密。
使用压缩和解压缩机制(压缩可以帮助您使用密码保护文件)
每种方式都有自己的优点和缺点。根据您的需要强化逻辑。您甚至可以尝试所提议技术的组合。