如果非根恶意软件试图破解用户的密码,它必须访问哪些密码文件甚至内存部分?如何监控并判断密码文件是否被恶意软件访问?
答案1
大多数发行版将用户登录密码存储在 中/etc/shadow
,该文件由所有者拥有root
并设置0600
为权限,即只能root
读取或写入该文件。
话虽这么说,一些发行版提供“密钥环”供用户/程序使用。密钥环本质上是一个秘密存储数据库或文件,例如KDE提供了KWallet,Chromium等程序使用KWallet来存储密码等。
这些密钥环通常按用户进行管理,并以 0600 权限存储,因此只有拥有密钥环的用户才能真正读取它。因此,如果您担心非 root 恶意软件,只要它不以您的用户身份运行,那么在这方面您就相当安全。
不幸的是,我无法为您提供要监视的文件的详尽列表,因为每个发行版都使用自己的秘密管理解决方案(例如 GNOME3 使用 Seahorse 而不是 KWallet)。但我通常会监视以下方面的变化:
~/.ssh/authorized keys # List of keys accepted during SSH logins
~/.profile # File sourced by your login shell
~/.bash_profile # File sourced by your login shell
~/.bashrc # File sourced by your login shell
关于监控,也许最简单的设置方法是通过auditctl
.
例如,这将监视对 bob 的 KWallet 数据库文件的所有访问:(临时规则,重新启动时清除,除非添加到/etc/audit/audit.rules
)
sudo auditctl -w /home/bob/.local/share/kwalletd/kdewallet.kwl -p rwxa
并用于审查访问:
sudo less /var/log/audit/audit.log
这里一些文档可以帮助您创建自己的规则
答案2
如果非 root 软件尝试更改用户,您可以使用以下lastb
命令进行检查:
$ sudo lastb -a | more
user pts/2 Mon Aug 10 08:17 - 08:17 (00:00)
root ssh:notty Mon Aug 10 08:17 - 08:17 (00:00) 46.148.201.206
root ssh:notty Mon Aug 10 08:17 - 08:17 (00:00) 161.35.32.43
root ssh:notty Mon Aug 10 08:16 - 08:16 (00:00) 13.68.137.194
root ssh:notty Mon Aug 10 08:16 - 08:16 (00:00) 115.196.179.138
user
在这种情况下,我使用失败的密码登录su
。您可以在日志中看到这一点。您还可以看到随机 IP 不断尝试通过 ssh 猜测我的 root 密码。
如果您想设置 inotify 或 systemd 路径来监视文件访问,则要监视的文件是/var/log/btmp
.lastb
使用该文件。
如果您想检查是否成功登录,请使用last
.这监控/var/log/wtmp
:
$ last -a
usera pts/5 Fri Jul 31 03:00 - 03:17 (00:16) 54.36.10.77
usera pts/5 Thu Jul 30 21:36 - 21:37 (00:01) 54.36.10.77
usera pts/5 Wed Jul 29 08:54 - 08:54 (00:00) 127.0.0.1
userb tty7 Tue Jul 21 11:29 still logged in :0
userb tty7 Tue Jul 21 10:59 - 11:29 (00:30) :0
userb tty7 Tue Jul 21 07:27 - 10:58 (03:31) :0
reboot system boot Tue Jul 21 09:27 still running 5.7.0-1-amd64
...
答案3
在 Linux 上,您可以使用 inotify 框架和相关的命令行工具来观察另一个进程进行的某些文件访问。
以下是供参考的手册页
如果你想要更复杂的行为,这个框架可以绑定大多数脚本语言(python、lua 等......)