新闻快讯
< >

可隐藏在PHP模块中的Rootkit,只有80行代码[附PoC]

E安全6月20日讯 荷兰Web开发人员卢克·帕里斯创建了一款Rootkit,其隐藏在PHP模块中,能通过Apache模块接管Web服务器。

可隐藏在PHP模块中的Rootkit,只有80行代码[附PoC]-E安全

什么是Rootkit?

Rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit一般都和木马、后门等其他恶意程序结合使用。一个典型Rootkit包括:

  • 以太网嗅探器程程序,用于获得网络上传输的用户名和密码等信息;

  • 特洛伊木马程序,例如:inetd或者login,为攻击者提供后门;

  • 隐藏攻击者的目录和进程的程序,例如:ps、netstat、rshd和ls等;

  • 可能还包括一些日志清理工具,例如:zap、zap2或者z2,攻击者使用这些清理工具删除wtmp、utmp和lastlog等日志文件中有关自己行踪的条目;

  • 一些复杂的rootkit还可以向攻击者提供telnet、shell和finger等服务;

  • 还包括一些用来清理/var/log和/var/adm目录中其它文件的一些脚本。

从传统定义来看,Rootkit可以通过操作系统最底层运行的一段代码,拦截内核操作,并注入恶意活动。许多Rootkit在操作系统内核附近运行,其要求攻击者具有较高的水准,以便在不破坏受害者电脑的情况下使其运作。

帕里斯根据高级C和C++编程技能,设法创建了与PHP解释器(Interpreter)交互的Rootkit,而非操作系统内核。

帕里斯解释称,学习如何使用Zend引擎(构建整个PHP语言的框架)比学习如何编写内核模块简单得多。原因是代码库本身较小,且经过较好的文档化处理,复杂程度较低,即使不具备良好的文档或教程引导,帕里斯仍设法在一天时间内学习了编写PHP模块的基础知识。

帕里斯担心的是,既然他能做到,恶意攻击者绝对也能做到。

PHP Rootkit具有众多优点

帕里斯表示,使用PHP模块隐藏Rootkit其实是一个极其取巧的想法,其优点如下:

  • 由于编程蹩脚,PHP Rootkit不会破坏操作系统,只会导致分段错误,从而中断当前服务器请求,在不被发现的情况下长期进行感染。

  • 很少有开发人员会检查PHP模块的哈希值,这意味着要诱骗开发人员下载被感染的PHP模块,或替换被入侵服务器上的PHP模块容易得多。

  • PHP Rootkit只需深入到系统进程中,而内核Rootkit必须深入至每个内部调用中,以削弱机器性能。

  • PHP Rootkit是跨平台的Rootkit,因为PHP是跨平台项目,PHP模块能在不同平台进行交叉编译。

可在GitHub获取PoC代码

帕里斯创建了PHP Rootkit PoC,并在GitHub开放了源代码。他创建的测试版Rootkit深入到PHP服务器的“哈希”和“Sha1”函数之中。整个Rootkit有80行代码,攻击者可能轻易将其隐藏在合法模块中。

可隐藏在PHP模块中的Rootkit,只有80行代码[附PoC]-E安全

为了防止攻击者轻易将该代码武器化,帕里斯打乱了其中某些部分,从而使得缺乏PHP模块专业知识的人很难编译。

尽管如此,帕里斯的测试版PHP Rootkit表明,服务器管理员需考虑可能的攻击媒介。为了防止此类攻击,帕里斯向服务器所有者提供了一系列建议,例如:检测模块是否为恶意模块,其最简单的方式是在安装PHP之后保留模块哈希列表。一旦保留了哈希值列表,可以添加一个定时任务(Cron Job),试图将扩展目录的所有文件哈希,并与当前的哈希进行对比。

为了减轻工作量,帕里斯甚至发布了Python脚本,用以检查用户PHP模块的SHA1哈希值。

通过扫描Apache模块文件哈希值缓解攻击

Paragon Initiative Enterprise公司的首席开发官斯科特·阿奇恰斯基表示,这是一个有趣的研究项目。

阿奇恰斯称,他之前在被感染系统中看到过基于.htaccess的恶意软件,可能是PHP模块或Apache模块。阿奇恰斯提出的攻击缓解措施是,用SHA256哈希值替代SHA1。

可隐藏在PHP模块中的Rootkit,只有80行代码[附PoC]-E安全

今年早些时候,Google研究人员破解了SHA1哈希函数,使用相同的SHA1哈希创建了两个文件,从而允许攻击者添加PHP  Rootkit,之后通过相同的哈希创建Apache模块(至少从理论上讲是这样,目前尚未这样实施过)。此后,阿奇恰斯提出了此建议。

PHP Rootkit为攻击者提供持久性

在遭遇攻击的服务器上,大多数事件响应者不会考虑寻找PHP模块内部的恶意代码,毕竟这不是隐藏恶意软件的常见位置,恶意软件通常存在于存储在公共网站、.htaccess文件或Web服务器目录中其它文件的源代码中。

帕里斯的PHP Rootkit是许多攻击者一直寻求的持久性工具,允许其在不被检测的情况下隐藏在最底层。

由于持久性增强,阿奇恰斯建议,当怀疑服务器被恶意软件感染时,应采取强有力的措施,因为大多数服务器管理员对即将来临的新攻击媒介不甚了解。

如果试图清理被感染的系统,当取证调查结束后,阿奇恰斯通常会建议构建干净的新环境,并将数据从受信任的备份中迁移出来。

帕里斯并非首个提出在Apache模块中隐藏恶意代码的人。2015年,伦敦开发人员克里斯汀·帕帕坦纳苏就创建了隐藏在Apache模块中的类似Rootkit。

GitHub PoC获取地址:

http://t.cn/RoyD36F

开发人员发布的Python脚本地址:

http://t.cn/Royk7sm

E安全注:本文系E安全独家编译报道,转载请联系授权,并保留出处与链接,不得删减内容。联系方式:① 微信号zhu-geliang ②邮箱eapp@easyaq.com
@E安全,最专业的前沿网络安全媒体和产业服务平台,每日提供优质全球网络安全资讯与深度思考,欢迎关注微信公众号「E安全」(EAQapp),或登E安全门户网站www.easyaq.com , 查看更多精彩内容。