我将在考虑 RHEL 的情况下写一个答案,但要知道,如果您使用的是 SuSE 或基于 Debian 的发行版,那么我所描述的将会有类似物。
首先,如果您只想验证它是系统更新而不是有人试图对机器进行 rootkit,您可以openssh-clients
像这样“验证”包:
[root@hypervisor scsd]# rpm -V openssh-clients
[root@hypervisor scsd]#
[root@hypervisor scsd]# rpm -V openssh-server
S.5....T. c /etc/pam.d/sshd
S.5....T. c /etc/ssh/sshd_config
[root@hypervisor scsd]#
Run Code Online (Sandbox Code Playgroud)
我也openssh-server
这样做了,这样你就可以看到发生变化时的样子。重要的部分是“5”,它告诉我们文件的 md5sum 与 RPM 数据库中存在的不同。如果检查出来,则可能是由于系统更新。
如果他们使用 yum(很有可能),将会更新该 RPM 的 /var/log/yum.log 条目。这对于获取更新发生的具体时间以供以后使用yum history
.
如果他们rpm
直接使用,您可以做一些queryformat
魔术或rpm -q openssh-clients --last
获取它发生的日期(尽管听起来您已经知道那一点信息)
有一个yum
子命令叫做history
记录调用用户的 auid/loginuid:
[root@hypervisor scsd]# yum history
Loaded plugins: product-id, refresh-packagekit, rhnplugin, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
This system is receiving updates from RHN Classic or RHN Satellite.
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
54 | <jadavis6> | 2013-07-15 09:03 | Install | 2
53 | <jadavis6> | 2013-07-09 17:25 | Update | 23
52 | <jadavis6> | 2013-06-24 10:10 | Install | 3 <
51 | <jadavis6> | 2013-06-14 22:33 | Install | 1 >
50 | <jadavis6> | 2013-06-14 07:47 | E, I, U | 90
49 | root <root> | 2013-06-14 00:58 | Update | 1
48 | <jadavis6> | 2013-06-03 08:28 | Install | 3
47 | <jadavis6> | 2013-05-28 11:57 | Install | 3 <
46 | <jadavis6> | 2013-05-20 18:25 | Install | 1 >
45 | <jadavis6> | 2013-05-20 12:00 | Install | 1
44 | <jadavis6> | 2013-05-19 15:29 | Install | 6
43 | <jadavis6> | 2013-05-18 20:16 | Install | 3
42 | <jadavis6> | 2013-05-16 16:21 | Install | 2 <
41 | <jadavis6> | 2013-05-16 12:48 | Install | 1 >
40 | <jadavis6> | 2013-05-10 09:28 | Install | 1
39 | <jadavis6> | 2013-05-10 09:28 | Install | 1
38 | <jadavis6> | 2013-04-29 19:45 | Install | 2 <
37 | <jadavis6> | 2013-04-29 18:51 | Install | 8 >
36 | <jadavis6> | 2013-04-29 18:35 | Update | 11
35 | <jadavis6> | 2013-04-27 15:44 | E, I, O, U | 429 EE
history list
[root@hypervisor scsd]#
Run Code Online (Sandbox Code Playgroud)
loginuid 是不可伪造的,因为作为 init 的子代,它们以 -1(负值)的 loginuid 开始。当您通过 tty 或sshd
pam_loginuid(还有其他模块也这样做)登录时,将其设置为经过身份验证的用户的 UID。一旦设置为-1
root以外的其他值就无法更改此值(尽管仅在较新的内核中),因为它是非功能性的/仅用于会计的,并且需要考虑到攻击者可能已经获得了 root 权限。所有子级都继承父级的 loginuid,因此即使sudo
生成一个 EUID 为零(或任何用户)的程序,您仍将拥有相同的 loginuid。
您可以通过执行您的 sudo 份额并在cat /proc/self/loginuid
每次您最初登录的用户时执行此操作来测试这一点,无论您此后进行了多少次su
或sudo
调用。尽管我以 root 用户身份完成了所有操作,但上面是yum history
这样知道jadavis6
的yum update
。
如果两个 yum 事务之间存在一些歧义,yum history info <transID>
如果我想了解有关最后一个事务的更多信息,您可以这样做:
[root@hypervisor scsd]# yum history info 35
Loaded plugins: product-id, refresh-packagekit, rhnplugin, security,
: subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
This system is receiving updates from RHN Classic or RHN Satellite.
Transaction ID : 35
Begin time : Sat Apr 27 15:44:57 2013
Begin rpmdb : 959:3d300ae2e8dc239f9f972306ba2406bd22ba29bc
End time : 15:50:39 2013 (5 minutes)
End rpmdb : 972:381cb76592ea2f779ee4521a4e7221196520486a
User : <jadavis6>
Return-Code : Success
Command Line : update -y
Transaction performed with:
Updated rpm-4.8.0-27.el6.x86_64 @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
Updated subscription-manager-0.99.19.4-1.el6_3.x86_64 @rhel-x86_64-server-6
Updated yum-3.2.29-30.el6.noarch @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
Installed yum-metadata-parser-1.1.2-16.el6.x86_64 @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
Packages Altered:
Updated NetworkManager-glib-1:0.8.1-34.el6_3.x86_64 @rhel-x86_64-server-6
Update 1:0.8.1-43.el6.x86_64 @rhel-x86_64-server-6
Updated PackageKit-0.5.8-20.el6.x86_64 @rhel-x86_64-server-6
Update 0.5.8-21.el6.x86_64 @rhel-x86_64-server-6
Updated PackageKit-device-rebind-0.5.8-20.el6.x86_64 @rhel-x86_64-server-6
[...snip...]
Updated yum-3.2.29-30.el6.noarch @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
Update 3.2.29-40.el6.noarch @rhel-x86_64-server-6
Updated yum-rhn-plugin-0.9.1-40.el6.noarch @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
Update 0.9.1-43.el6.noarch @rhel-x86_64-server-6
Scriptlet output:
1 warning: /etc/shadow created as /etc/shadow.rpmnew
2 No input from event server.
3 warning: %postun(wdaemon-0.17-2.el6.x86_64) scriptlet failed, exit status 1
history info
Run Code Online (Sandbox Code Playgroud)
我截断了它,因为它看起来像是一个相当冗长的系统更新。
AFAIK 如果他们通过rpm
直接在配置之外进行更新auditd
以监控对 RPM 数据库文件的更改,则无法对其进行追溯。这样做ausearch
可以让您看到进行更改的 PID 列表和关联的 loginuid(将显示为auid
)。
如果他们在 RPM 之外直接更改它,那么在进行更改之前,您必须监视要监视的每个文件的更改。事实上,您无能为力,但您可能会考虑做一些事情auditd
来监视您认为是 rootkit 目标的文件。做得太多会使系统陷入困境。还值得一提的是,您应该将这些日志发送到服务器之外的某个地方,以防止恶意篡改。
希望有帮助。
编辑:
需要注意的一件事是,如果有的话,root 似乎可以更改 loginuid CAP_SYS_AUDITCONTROL
(如果 loginuid 当前为,则不需要-1
),但您应该能够从系统的边界集中删除该功能,这将要求攻击者重新启动系统以获得这种能力,这是一个嘈杂的地狱操作,会在各处留下可审计的事件,因此他们不太可能这样做。
你检查了吗syslog
?根据man sudo
: sudo 可以将成功和不成功的尝试(以及错误)记录到 syslog(3)、日志文件或两者。默认情况下,sudo 将通过 syslog(3) 进行记录,但这可以在配置时或通过 sudoers 文件进行更改。
我认为,除非他们故意删除日志文件,否则您应该能够在那里获取信息。要缩小时间范围,您可以检查 SSH 实用程序上的修改日期戳。