作为"绊线-是安全剧场吗?“的后续,我希望更好地了解rootkit是什么。更清楚的是:
意思:什么输入/输出创造的价值,需要环-0访问的根?
如果不清楚的话,我不会去找一个系统的根,或者建议如何去做,但是我感兴趣的是,熟悉rootkits的人会如何定义他们本质的方式和原因。
如果将主题限制在Linux上是有用的,这对我来说没问题。
发布于 2012-01-04 16:56:45
rootkit是一组工具,当您以根级别的权限访问它时,可以在目标机器上运行它。rootkit的目的是将短暂的访问转化为一个始终打开的门。rootkit的一个例子是修改sshd二进制文件,以便它总是接受"8gh347vb45“作为root的密码,而不管根用户的”普通“密码是什么。它允许攻击者稍后返回,而不必再次遍历他首先使用的漏洞的循环。
rootkit的第一项任务是隐藏自己,抵抗升级。如果rootkit只是修改sshd (这是一个例子),openssh包的下一次升级将删除rootkit。一个更有抵抗力的rootkit也会改变包管理器,这样当openssh升级时,新的sshd就会被自动修改,从而使攻击者的额外访问点保持打开。
最强大的rootkit修改内核,这是一个实际管理硬件的软件。当用户访问数据或硬件资源(例如读取或写入文件)时,所有进程(包括root用户)都可以很好地询问内核。安装在内核中的rootkit可以非常有效地隐藏文件,并且可以在每次内核升级时重新安装自己,因为这样的升级将是将包含内核代码的文件替换为另一个--即必须通过内核进行的操作。
内核模块是动态加载到内核中的一段代码。在Linux中,在1.3.x系列的某个时候,是一个单一的单块代码块,它是由引导加载器一次性加载到RAM中的。模块是代码块,可以在以后添加到活动内核;它们最初的目的是允许内核处理数百种硬件,而不必在任何时候都在RAM中包含相应的驱动代码。其思想是,当在机器上检测到一个新的硬件时,相应的代码被加载并链接到内核,就好像它从一开始就在那里一样。
root用户有权要求加载一个模块。因此,对于一些具有root权限的代码来说,这是一种获取插入内核本身的任意代码的方法,并以授予内核的权限运行,即掌握所有硬件和进程(在x86世界中称为“环0”)。这正是内核rootkit所需要的。
编辑:至于第三个问题(你能在菜鸟上补上补丁吗),一般答案是否定的(通过构造,在Unix系统上,root可以在机器上完成所有事情),但具体的答案可以是肯定的。例如,有一些安全框架为大多数根进程所能做的事情添加了约束(例如SELinux),并且可以不允许内核模块加载。这意味着攻击者所设想的临时根访问不是真正的根访问,而是“几乎根”访问。另一个可能的特性是有符号模块 (内核将拒绝未经加密签名的模块,因此rootkit必须在安装自己的模块之前找到并使用私钥,如果该密钥不存储在机器上,这可能是不可能的)(我不确定签名模块支持目前是否集成在Linux内核中)。此外,模块必须与内核代码链接,使它们对内核版本之间的变化非常敏感--因此,即使没有任何实际的对策,rootkit在升级时也很难可靠地重新感染更新的内核。
发布于 2012-01-04 19:57:07
在将Tom的答案应用于其他操作系统时,有几件事情毫无价值:
发布于 2012-01-05 07:12:43
在一开始,"rootkit“一词只与NIX域相关(root不是一个随意的词),但现在它指的是允许您在每个操作系统中获得"root”特权的每一个软件。该软件可以在用户空间或内核空间(因此,在后者,您需要一个内核模块或驱动程序)。通常,rootkit在内核空间中运行,因为隐藏它们和删除它们的跟踪更容易。但是,您可以有一个用户空间应用程序来利用特权应用程序中的缓冲区溢出,该应用程序授予您根权限!
但这是真的:当我们使用rootkit术语时,我们认为内核代码可以获得更高的权限。
在这种情况下,您的下列问题回答得非常广泛。我想你可以找到他们在谷歌上搜索每一个论点。因此,对于内核模块,您必须区分Linux、Windows或Mac。基础上的原则是+/-相同,但你知道魔鬼在细节中!:-)
https://security.stackexchange.com/questions/10369
复制相似问题