难度:高级
应用程序:很多
在一个入侵过程中,一个入侵者将会很可能在很多系统日志中留下能反映他行为的迹象:一个有价值的审计追踪应该被保护。没有可靠的日志,就很难发现攻 击者是如何侵入,或者是从哪里来的攻击。这个信息在分析事件、联系相关方面并给予反馈上,是很关键的。但是,如果入侵成功,什么才能阻止他来移除他的这些 错误行为的痕迹呢?
这就是文件属性能发挥作用、挽回败局的地方(或者至少使事情没那么糟)。Linux和BSD都有给文件和目录分配额外的属性这个功能。这不同于标准的Unix权限方案中,系统为所有的用户提供的普遍的属性设置,而且它们比文件权限或者ACL都要更深层次影响文件访问。
在Linux中,你可以看到并且通过lsattr和chattr命令分别修改一个给出文件的设置。在写这篇文章时,Linux的文件属性只能在你使 用ext2和ext3时获得。这还有些XFS和ReiserFS的关于获得属性支持的内核补丁。一个保护日志文件的有用的属性是append-only。 当这个属性被设置后,文件不能被删除,而且写操作只能被允许在文件的最后追加。
在Linux下要设置append-only标志,运行这条命令:
看看+a属性是如何工作的:创建一个文件然后设置它的append-only属性:
1
2
3
4
5
|
touch /var/log/logfile
echo "append-only not set" > /var/log/logfile
chattr +a /var/log/logfile
echo "append-only set" > /var/log/logfile
bash : /var/log/logfile : Operation not permitted
|
企图第二次写文件失败,因为它将覆盖这个文件。然而,在文件的末尾追加仍然是被允许的:
1
2
3
4
|
echo "appending to file" >> /var/log/logfile
cat /var/log/logfile
append-only not set
appending to file
|
显而易见,一个获得root特权的侵入者能意识到使用了文件属性,并且可以通过运行chattr -a来移除append-only标志。为了防止这种情况,我们需要禁用移除append-only属性的性能,在Linux下使用功能机制完成这个。
Linux功能模型分割特权给全能的root账户,并且允许你有选择的禁用它们。为了防止一个用户移除一个文件的append-only属性,我们 需要移除CAP_LINUX_IMMUTABLE功能。当体现在当前运行系统中时,这个功能允许append-only属性被修改。为了当前系统中获得修 改这个功能的设置,我们将简单有效地调用lcap(http://packetstormsecurity.org/linux/admin/lcap-0.0.3.tar.bz2).
为了解压和编译这个工具,运行这条命令:
1
|
tar xvfj lcap-0.0.3. tar .bz2 && cd lcap-0.0.3 && make
|
然后,不允许修改append-only标志,运行:
1
2
|
. /lcap CAP_LINUX_IMMUTABLE
. /lcap CAP_SYS_RAWIO
|
第一条命令移除了改变append-only标志的功能,然后第二条移除了原始I/O的功能。这是很有必要的,因为这样就能保护文件不被访问块设备 时驻留在其上的东西修改。这阻止了访问/dev/mem和/dev/kmem,有可能给入侵者提供恢复CAP_LINUX_IMMUTABLE功能的漏 洞。为了在boot上移除这项功能,添加之前的两条命令到你的系统启动脚本中(例如/etc/rc.local)。你应该确保这个功能在boot命令中被 移除了,防止其他启动脚本出问题。一旦lcap移除了内核功能,就只能通过重启系统来恢复了。
在做这些之前,你应该明白,给你的日志文件添加append-only标志,将会造成日志循环脚本失败。然而,做这件事将会极大的提升你的审计追踪的安全性。安全性的提升在突发事件中会被证明是很有用的。