Linux命令日志记录?

信息安全 操作系统 linux 日志记录
2021-09-01 07:02:47

最近有人以非 root 用户身份闯入我们的一台 linux 服务器。

.bash_history 的摘录:

[...]
perl
perl
set +o history
set +o history
set +o history
passwd
sdfsdf
passwd
exit

我假设将set +o history命令日志记录切换到 .bash_history

有没有办法让它不能禁用历史记录?

如果禁用历史记录,有没有办法找出发生了什么?

4个回答

在通常情况下,Bash 历史不会帮助您对抗半胜任的攻击者。

还有一个替代方案:审计子系统。安装auditd并对其进行配置,以便记录例如程序执行和您配置的其他内容。基本上记录了根据您创建的过滤器进行的系统调用。

现在,如果你真的想依赖 bash 历史记录,你可以让它更安全:最近的 bash 版本可以登录到 syslog 而不是本地用户文件。然后,如果这对您很重要,可以将 syslog 重定向到远程 syslog 服务器。

如果您允许从 shell 执行非 shell 命令,这将无济于事。例如 - 您可以通过运行 perl(或其他一些脚本语言)来省略 bash 并从那里调用命令 - 它会避开 bash 日志记录。

真正想要隐藏他的踪迹的攻击者只会手动编辑历史文件。

您可以让非 root 用户更难隐藏她已经在 bash 中键入的命令。但这仅要求攻击者具有中等能力。

  • 如果您将HISTFILE变量$HISTFILESIZE设为只读,则 bash 将在退出时将最后的命令保存到该文件中。您也可以将HISTFILESIZE(and HISTSIZE) 设为只读并将它们设置为较大的值。但是,这很容易被击败,例如通过使用history内置在退出之前清理历史记录。而且由于 bash 在退出时而不是在每个命令之后写入历史条目,因此只需退出 bashkill -9 $$并且不会保存历史记录。可以告诉 Zsh 在每个命令之后保存历史记录,但不是以任何攻击者无法轻易撤消的方式。
  • 在 Linux 下,您可以使用chattr +a ~user/.bash_history. 只有 root 可以从文件中删除 append-only 属性。如上所示,这只意味着如果攻击者犯了错误,她将无法擦除她的痕迹。

即使您设法记录了来自特定 shell 的所有命令,这对安全性也没有用处。攻击者可以只从另一个应用程序发出命令,这种方式不会引发任何危险信号并且可以合理地否认。( zsh, fish: 好的,所以他更喜欢那个 shell。emacs, vi: 所以他编辑了一个文本文件。ssh: 大概他只是想连接到另一台机器。~/bin/foo: 这只是一个无辜的脚本,但谁知道两个小时前是什么?)

Linux(像大多数 unice 一样)有一个简单的命令审计系统,称为进程记帐,通常默认启用:每个执行命令的可执行名称、时间和执行用户都存储在其中/var/log/account(确切位置可能因发行版而异)。您可以使用lastcomm.查看该日志文件这可能对您当前的取证工作有所帮助,但它可以被具有中等能力的攻击者击败(例如,通过将每个可执行文件硬链接到/var/tmp/$name/ls)——您可靠地知道该用户在特定时间有活动。

有更彻底的审计包,特别是john建议的审计子系统搜索以找到一些如何设置的示例。这通常不会默认打开,因为它会带来性能损失(我不知道这在实践中有多糟糕)。auditctl

另一个(至少部分)默认启用的简单工具是文件时间。如果一个文件的 ctime 来自入侵之前,那么攻击者没有修改它。如果您启用了文件访问时间(默认情况下曾经是这种情况,但现在经常为了性能而禁用;请检查*atime挂载选项),.

所有这一切都假设攻击者没有获得根,否则所有的赌注都没有了。考虑到攻击者甚至可能故意留下痕迹,使她看起来没有通过巧妙地仅擦除更妥协的痕迹来升级她的访问权限。如果您完全担心,请从干净的备份中重新安装该系统(以及攻击者在初始入侵后可能到达的其他系统)。

将所有用户 shell 设置为bash 受限 shell/etc/passwd将 shell 设置为/bin/rbash它应该是 /bin/bash 的 simlink),或者/bin/bash -r

Bash 受限 shell 可防止用户更改命令历史记录等 shell 选项。