加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

Linux下的Rootkit驻留技术分析

发布时间:2019-01-05 19:52:04 所属栏目:业界 来源:疯猫网络
导读:媒介 Linux作为处事器和IoT装备行使的首要操纵体系,针对它的恶意软件也层出不穷。针对Linux装备的恶意软件(以下称为rootkit)凡是必要恒久驻留于方针操纵体系以到达赢利目标,以是怎样实现驻留也是Linux rootkit作者的重点思量内容之一,对此,尝试室举办了

假如我们的方针主机是git或svn处事器,有机遇打仗到项目源码的话,也可以通过修改方针的源码植入恶意代码,可能把编译情形下手脚,在项目构建时插入恶意代码,好比在configure剧本里可能Makefile里插入代码,既可以在本机运行,又有也许在编译之后在更多主机(取决于项目用途)上运行,进一步扩大传染范畴。这个思绪也是昔时中国xcode变乱黑客的思绪。

1.5 动态链接库挟制

替代动态链接库

libc会被险些全部的ELF挪用,而特定的lib则会被特定的ELF挪用,只要某个ELF的执行概率够高,我们同样可以用我们从头编译的恶意so替代掉它所链接的某个so文件,到达执行恶意代码的结果。

虽然,以这种思绪来看,替代掉整个libc也是未尝不行的。

下面以sshd的动态链接库为例,sshd行使的so文件如下:

Linux下的Rootkit驻留技能说明

libz.so.1看上去像是zlib的文件,可以验证一下:

Linux下的Rootkit驻留技能说明

那么我们可以去下载zlib源码,在也许会被挪用的函数里加上我们的黑货。

颠末grep搜刮openssh portable 7.9的源码,可以看到packet.c行使了zlib的函数:

Linux下的Rootkit驻留技能说明

确定了我们必要注入代码的函数,就可以去修改zlib源码了,在inflate.c的inflate函数里插手简朴的system挪用,来执行我们的evil措施:

Linux下的Rootkit驻留技能说明

完成修改之后我们make构建项目,然后用我们的恶意libz.so替代本来的文件。

此处修改的zlib,凡是只会在ssh客户端指定了行使压缩时,才会被行使。以是我们必要行使ssh -C呼吁去测试。

Linux下的Rootkit驻留技能说明

提示一点,作为动态链接库,它们的函数也许被频仍挪用,我们在操作的时辰要停止造成不须要的负载。其它,,因为大部门措施都是动态链接库文件,我们也必要分外警惕,停止插手的代码挪用的措施最终往回挪用我们修改的库文件自己(尤其是在修改libc的时辰),造成死轮回,导致体系遏制相应。

  1. ld.so.preload 

最常见的实现是在/etc/ld.so.preload中写入我们必要让libc执行的so文件,可能配置LD_PRELOAD情形变量,这样,任何依靠体系libc的user space措施,城市在运行之前执行我们的so文件,从而实现了有用的rootkit驻留(鉴于险些全部方针主 机都是动态编译的,险些全部措施都要行使体系libc)。

下面我们编写一个简朴的恶意so(shared object)作为声名:

这里的恶意so将编译为libevil.so。凡是的lib都是为主措施提供库函数的,只有被挪用的代码才会被执行,于是我们必要 办理的第一个题目是让我们的代码在lib被加载时直接自动运行。相同于Windows下的DllMain,gcc提供了function attributes,我们可以用形如__attribute__((constructor))的attribute来到达目标。对应的,__attribute__((destructor)) 则会在lib被unload的时辰执行。

详细表明见官方文档:

Linux下的Rootkit驻留技能说明

我们行使如下代码构建libevil,这里有一个坑,execl函数只有堕落时才返回,假如行使它执行了外部措施,那么在外部程 序执行完之后,libevil将会退出当前历程(也就是我们原来要执行的历程),使任何ELF都无法正常执行。办理要领是行使 fork 函数建设子历程,在子历程里执行execl启动外部措施。

Linux下的Rootkit驻留技能说明

行使如下呼吁构建我们的 libevil.so:

Linux下的Rootkit驻留技能说明

配置LD_PRELOAD情形变量,使我们的libevil在ld执行任何ELF之前被执行。

Linux下的Rootkit驻留技能说明

必要留意的是,我们的libevil会在每个动态ELF执行之前被执行,假如在个中挪用了外部的动态ELF,谁人ELF执行时会再次挪用libevil,就会造成死轮回,使体系处于不行用状态。

我们也可以在libevil里实现rootkit的全部成果。

2. 内核态的驻留

传统的rootkit就是指这类恶意软件,对付Linux rootkit来说,最有用的要领就是把本身作为kernel module加载,由于大大都Linux方针都是应承动态加载kernel module的。

在kernel space里运行恶意代码的甜头显而易见,因为大部门审计器材都在user space运行,打点员凡是很难发明恶意软件的存在,这就带来了上面的要领所不能到达的潜伏性。

2.1 LKM – 可加载内核模块

今朝有一些开源的LKM (Loadable Kernel Modules) 木马demo,较量有代表性的是Reptile,它行使本身的kernel module实现了潜匿和驻留。

下面我们行使这个思绪来实现一个简朴的内核恶意代码执行:

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读