rootkit 是您在目标机器上运行的一组工具,当您以某种方式以 root 级权限访问它时。rootkit 的重点是将这种短暂的访问转变为一扇永远敞开的门。rootkit 的一个示例是对sshd
二进制文件的修改,以便它始终接受“ 8gh347vb45
”作为 的密码root
,而不管 root 的“正常”密码是什么。它允许攻击者稍后再回来,而不必再次经历他首先使用的漏洞。
rootkit 的首要任务是隐藏自己,并抵制升级。如果rootkit 只是修改sshd
(这是一个例子),openssh
包的下一次升级将删除rootkit。更具抵抗力的 rootkit 也会改变包管理器,因此在openssh
升级时,新的sshd
会自动修改,以便攻击者的额外访问点保持打开状态。
最强大的 rootkit 会修改内核,这是实际管理硬件的软件。所有进程(对于所有用户,包括root),当他们访问数据或硬件资源(例如读取或写入文件)时,通过很好地询问内核来做到这一点。安装在内核中的 rootkit 可以非常有效地隐藏文件,并且可以在每次内核升级时重新安装自己,因为这样的升级将包含内核代码的文件替换为另一个文件 - 即必须经过的操作内核。
内核模块是一段动态加载到内核中的代码。在 Linux 中,直到 1.3.x 系列中的某个时间点,它是由引导加载程序一次性加载到 RAM 中的单个整体代码块。模块是可以在以后添加到实时内核的代码块;他们最初的目的是允许内核潜在地处理数百种硬件,而不必始终在 RAM 中包含相应的驱动程序代码。这个想法是,当在机器上检测到新硬件时,会加载相应的代码并将其链接到内核,就好像它从一开始就在那里一样。
root
用户有权要求加载模块。因此,这是一些具有root
特权的代码将一些任意代码插入内核本身并以授予内核的权力运行的一种方式,即掌握所有硬件和进程(x86 世界中所谓的“ring 0”) )。这正是内核 rootkit 所需要的。
编辑:至于第三个问题(你能对 rookits 打补丁吗),一般答案是否定的(通过构造,在 Unix 系统上,root 可以在机器上做任何事情),但具体答案可以是yes。例如,有一些安全框架会限制大多数根进程可以执行的操作(例如SELinux),并且可以禁止内核模块加载。这意味着攻击者设想的临时 root 访问不是真正的root 访问,只是“几乎是 root”。另一个可能的功能是签名模块(内核会拒绝没有经过加密签名的模块,因此 rootkit 必须在安装自己的模块之前找到并使用私钥,如果该密钥没有存储在机器本身上,这可能是不可能的)(我我不确定 Linux 内核中当前是否集成了签名模块支持)。此外,模块必须与内核代码链接,这使得它们对内核版本之间的变化非常敏感——因此即使没有任何实际对策,rootkit 也很难在升级时可靠地重新感染新内核。