我不希望任何人创建文件然后将创建日期更改为向后日期(例如使用触摸或系统调用)。
在我的 Ubuntu 托管帐户中,我收到了许多被黑客入侵的 php 代码。
禁止他们在文件落地时更改文件时间将帮助我轻松找到新文件。
有什么方法可以实现呢?我在任何地方都找不到答案!
答案1
据我所知,没有办法限制用户更改文件的修改时间。更改修改时间是一项正常功能,例如从存档中提取文件或从另一台计算机复制文件时使用。
不要查看修改时间,而是查看 inode 更改时间(ctime)。传递选项-c
以ls
列出 ctime 而不是 mtime。
列出 ctime 可让您检测最近修改或移动了哪些文件。当然,它可能会出现误报。如果攻击者拥有 root 访问权限,则所有赌注都会失败。
这对于取证比修复更有用。只有最基本的攻击可以通过简单的修复来应对,例如删除明显受感染的文件:通常有比您能找到的更多的东西。如果您检测到攻击:
- 使系统脱机。复印一份。
- 重新安装整个系统从已知的良好来源。不要重复使用受感染系统中的任何内容:你不能信任它。确保安装所有软件的最新版本,没有已知的安全漏洞。
- 从以下位置恢复您的数据已知良好的备份。同样,您不能信任受感染系统生成的数据。
- 研究受感染系统的副本,找出攻击者是如何进入的。请注意,攻击者进入的方式(漏洞)与攻击者后来所做的(有效负载)有很大不同。您需要找出根本原因,而不是症状。这部分可能需要专业人员。
- 一旦确定根本原因不再存在(错误配置或安全错误已修复),即可使新系统上线。
答案2
您可以通过使用配置文件中的选项mtime
禁用这些 PHP 函数(例如touch
),防止黑客使用 PHP 代码更改 Web 服务器可写文件的修改时间 ( )。[disable_functions][1]
php.ini
然而,跟踪修改时间并不是正确的方法,因为文件的修改时间在上传到您的服务器时不会改变(即这个时间可能比您的系统被破坏的时间早得多)。更好的方法是跟踪ctime
inode 文件的状态更改时间 ( )。为了证明我的意思:
$ touch test.txt
$ stat test.txt
File: ‘test.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
...
Access: 2014-10-28 05:51:10.329081380 +0000
Modify: 2014-10-28 05:51:10.329081380 +0000
Change: 2014-10-28 05:51:10.329081380 +0000
$ touch -t 10011234 test.txt
$ stat test.txt
File: ‘test.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
...
Access: 2014-10-01 12:34:00.000000000 +0000
Modify: 2014-10-01 12:34:00.000000000 +0000
Change: 2014-10-28 05:52:57.669657564 +0000 <= unadulterated by touch
如果没有root权限,我认为修改是完全不可能的ctime
。