我在我的树莓派上设置了一个 SSH 服务器。我使用 RSA 密钥登录,禁用了 root 登录、密码验证,并使用端口转发从网络外部登录。
我可以从文件 /var/log/auth.log 中看到连接日志,但我注意到它会定期清除(我认为有些日子)并且可以由标准用户修改。
这不是安全问题吗,有人闯入可以清除日志,不留痕迹,我可以阻止吗?
我在我的树莓派上设置了一个 SSH 服务器。我使用 RSA 密钥登录,禁用了 root 登录、密码验证,并使用端口转发从网络外部登录。
我可以从文件 /var/log/auth.log 中看到连接日志,但我注意到它会定期清除(我认为有些日子)并且可以由标准用户修改。
这不是安全问题吗,有人闯入可以清除日志,不留痕迹,我可以阻止吗?
将有一个logrotate
每天以 root 身份运行的 cronjob,您可以在/etc/logrotate.conf
和中检查配置/etc/logrotate.d/*
。如果您进行任何更改,您应该运行/usr/sbin/logrotate -dv /etc/logrotate.conf
以确保新配置中没有错误。
除了auth.log
您还应该轮换并保留wtmp
和btmp
(第二个跟踪失败的登录尝试),大多数系统将只保留一个轮换。
正常的设置是/var/log/
不可写的,其中的日志文件也不可全局写入,有时也不可全局读取(后者用于auth.log
可能不小心包含输入用户名字段的密码的文件,CWE-532)。
您应该检查文件权限是否符合预期,这是logrotate
创建新日志文件并设置正确的所有者/权限的工作(请参阅create
指令)。但是,默认设置是应用当前文件的权限和所有权:如果所有者/权限更改一次,这些将在该日志文件的每个新实例上维护(因此以前的错误可能会再次困扰您)。
即使普通用户无法写入或直接修改这些文件,本地用户也可以通过 syslog间接附加到它们:
logger -p auth.info -it sshd \
"Accepted password for root from host.badguys.com port 31337 ssh2"
(如果您通过网络上的 UDP 接受 syslog 消息,情况会更糟,但在任何合理的配置中通常不会默认启用。)这是CWE-117的一个示例,显示了 syslog 的许多问题之一。
如果攻击者(或不受信任的用户)获得登录信息,则必须使用不同的方法来实际覆盖或删除数据,例如权限提升或创造性地使用 setuid/setgid 程序。
但是,这里存在拒绝服务类型攻击的机会。如果您没有某种形式的速率限制或锁定sshd
,攻击者可能会使用连接日志来淹没您的日志(如果他闯入,可能会用伪造的条目来掩盖他的踪迹)。如果logrotate
使用基于大小的轮换(非默认),他可能能够轮换不存在的迹象条目,而无需额外特权。如果您使用基于时间的轮换,他可能能够轻松地填充您正在登录的文件系统,并防止记录更多事件。
总结一下:
logrotate.conf
/etc/hosts.allow
将您的远程 IP 块列入白名单以进行 sshd 访问,如果可能,这是一种合理的缓解措施限制攻击者对您的日志文件执行的操作的最佳方法之一是通过安全网络将它们记录到不同的系统。其他可能的解决方案包括操作系统强制执行的仅附加文件(请参阅Unix 和 Linux.SE 上的此内容),这是防篡改的。
您还可以在 rsyslog 维护者的博客中阅读有关*nix 日志记录的改进。此处讨论的功能之一是链接时间戳,它是防篡改的。