如何跟踪 bash 历史清理?

信息安全 linux 审计 重击 暹粒
2021-09-07 05:36:00

我想在清除 bash 历史记录或删除某些行时捕获事件。是否有任何具有此功能的最佳实践或审计工具?

2个回答

使用 shell 脚本可以轻松监控 Bash 历史记录,但仅检查它是否有意外更改可能不是一种有效的安全措施,反而会使您的日志充满误报。

监视与文件关联的文件系统事件的一种明显方法.bash_history是使用inotify API例如,这会触发文件修改事件:

$ inotifywait -m -e modify ~/.bash_history

然后,您可以每次比较内容以确定更改,或者仅比较行数以检测是否以较小的开销删除了条目。(如果历史记录已达到其最大长度并且旧条目被删除,则仅检查文件大小将不起作用。)

但请注意,攻击者解决这个问题是微不足道的。您必须期望任何熟练的入侵者立即禁用历史记录,而不是事后删除可疑条目。此外,有许多便宜的方法可以完全绕过 Bash 而不会引发日志条目(更改为 Bourne shell、从 vi 中执行等)。

一般来说,我会考虑监控 Bash 历史记录,以发现可能的篡改太不可靠且容易出错,这不是一种有用的安全措施。相反,我首先确保将日志覆盖在更容易识别与安全相关的事件(/var/log/auth.log等)的位置。

我假设您想检测人们何时在他们的 shell 中输入了某种私人信息,现在正试图将其从 bash 历史记录中删除。

从攻击者的角度来看,简单地不断创建 .bash_history 文件的副本并检查是否有被删除的条目是很容易的。

如果您这样做是为了防止意外的数据泄漏,我建议您通过策略解决这个问题,让用户报告此类错误并使信息无效。因此,如果不小心输入了密码,则应更改密码。

如果您真的想继续这样做,则可以使用与安全无关的工具来监视文件的更改。

编辑:我认为对于检测攻击者擦除他们的踪迹,这是一种非常弱的方法,因为它很容易禁用或避免 bash 历史记录。