【51CTO.com原创稿件】最近研究Linux rootkit检查,发现很多文章都推荐使用Chkrootkit,但是Chkrootkit0.49以及以下版本均存在本地提权漏洞,只要提权上传一个文件到tmp目录,管理员再次运行Chkrootkit后,即可获取root权限,本文就chrootkit本地提权漏洞进行分析和再现,最后给出了防范方法,希望对系统管理员有所帮助。
一、漏洞分析
Thomas Stangner在chkrootkit包中发现了一个严重的漏洞,允许本地攻击者在某些情况下获得对根框的访问权限配置(/ tmp不挂载noexec),漏洞位于函数slapper()中:
如果$ file_port为空,因为变量赋值缺少引号,'file_port = $ file_port $ i'行将执行其中指定的所有文件,$ SLAPPER_FILES作为用户(通常是root)chkrootkit正在运行,因此获取root权限。使用notepad打开chkrootkit文件,其代码位于第93~120行,如图1所示。
图1存在漏洞代码处
二、漏洞利用条件
1.在/ tmp中放入一个名为'update'的非root所有者的可执行文件
2.以Root身份运行chkrootkit
Chkrootkit 版本小于0.49,其文件/ tmp /update将以root身份执行。
如果攻击者知道管理员是定期运行chkrootkit(通过查看cron.daily获知),并且对/ tmp(没有挂载noexec)有写访问权限,就可以利用该漏洞获取root权限。
漏洞可利用代码update.c:
三、实际测试
1、编译update.c
将update.c文件放在tmp目录,执行gcc –o update update.c进行编译,编译后通过ls –al update进行查看,如图2所示。
图2编译update程序
2、执行chkrootkit
上传一个chkrootkit版本为0.49的程序,解压缩后,使用make sense进行编译,尽管编译会出错,不用管它,使用命令执行:./chkrootkit,如图3所示,顺利执行chkrootkit程序。执行完毕后到tmp目录查看update,明显程序已经被设置了root权限,如图4所示。
图3执行rootkit程序
图4检查update程序权限
3、执行提权
以普通用户登录,到tmp目录执行./update可以直接获取root权限,如图5所示,分别执行id和cat /etc/shadow | grep ‘root’命令来获取当前用户权限和shadow值。
图5获取root权限
4、扩展漏洞利用
◆搜索漏洞chkrootkit
在exploit-database中对漏洞chkrootkit进行搜索,执行命令:“searchsploit chkrootkit”查看目前所有能够利用的漏洞,如图6所示,只有两个,exploit-db网站给出了相关的利用方法和文章:
https://www.exploit-db.com/exploits/38775/
https://www.exploit-db.com/exploits/33899/
图6搜索exploit-database漏洞库
◆使用msf查看可利用漏洞
在kali Linux中打开msf漏洞利用平台,如图7所示,执行“search chkrootkit”,其结果仅一项,使用“use exploit/unix/local/chkrootkit”、“show options”命令使用和查看漏洞模块的相关情况,该漏洞为本地利用型,即查看/usr/sbin/目录是否存在chkrootkit程序,如果存在则可以利用。
图7查看msf平台中的chkrootkit漏洞
四、利用与防范方法探讨
1.查看系统是否存在chkrookit
在centos下查看是否存在chkrootkit:
updated
locate chkrootkit
ls –al /usr/sbin/chkrootkit
2.查找高权限用户命令
查找具备高权限执行文件命令“find / -perm +4000 –ls>20170309.txt”,将会找出目前具备root权限的可执行文件,如图8所示,明显tmp目录下的update比较可疑。
图8查找高权限用程序
3.设置tmp目录无执行权限
4.使用最新版0.51版本
官方最新版本下载地址:http://www.chkrootkit.org/download/
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】