阅读:5,116
近日见到了Ubuntu本地加壳漏洞CVE-2017-16995,所以自己在本地搭建了环境剖析了一下,如今将该漏洞的动因、复现、修复方案进行简单的介绍。
漏洞描述
Ubuntu是一个以桌面应用为主的开源GNU/Linux操作系统,基于DebianGNU/Linux。近日有白围巾曝出ubuntu的最新版本(Ubuntu16.04)存在本地加壳漏洞,漏洞编号为CVE-2017-16995。该漏洞存在于调用eBPFbpf(2)的Linux内核系统中linux操作系统论文,当用户提供恶意BPF程序使eBPF验证器模块形成估算错误,造成任意显存读写问题,低权限用户可使用此漏洞获得管理权限。
该漏洞似乎在老版本中早已得到了修补,并且在最新版本中依然可以被借助,官方已发布补丁!
漏洞环境搭建
目标主机:Ubuntu192.168.11.158
功击主机:在本次漏洞复现过程中功击主机只是起到一个上传exploit到目标主机以及实现远程操作的功能,这儿为了便捷就不再使用其他主机作为功击机了,直接在Ubuntu中操作,假如读者想要体验一下可以使用一台Kali主机,然后使用SFTP或SSH进行上传文件,然后再继续下边的操作。
UbuntuIP地址:
Ubuntu当前系统版本、当前用户权限、当前内核版本
这儿的内核版本是4.13.0-36-generic,该Ubuntu16.04是从官方网站下载的纯净版,无其他任何安装程序ubuntu 修改内核配置,而且这儿的内核版本不再影响范围内,所以为了演示我们须要更改以下内核版本,更改形式如下:
搜索内核版本信息:
下载在漏洞影响范围之内的内核版本,这儿选择4.4.0-92版本(读者可以自己选择内核版本进行复现)
更改内核配置信息
更改前信息
更改后的版本信息
保存然后重启一下(reboot命令即可):
再度确认当前内核版本信息
漏洞复现
上传Exploit到Ubuntu中
编译exploit
运行exploit程序
查看当前用户权限
成功加壳!
漏洞修补方案
方式一:目前暂未有明晰的补丁升级方案提出,并且建议用户通过更改内核参数限制普通用户使用bpf(2)系统调用来减缓:
设置参数“kernel.unprivileged_bpf_disabled=1”通过限制对bpf(2)调用了访问来避免这些特权升级
然后再度以一个普通用户权限执行exploit时:
可以看见未能完成加壳了!
方式二:升级LinuxKernel版本,须要重启服务器以后生效:
说到这一步,我之前使用纯净的Ubuntu16.04版本当时的内核是4.13.0-36-generic,但是在进行这一项操作的时侯直接显示“error:notpermited”,当时我还以为是权限问题,而且赋于了“rwx”权限以后运行exploit的时侯也不行。经过笔者亲自验证发觉更改内核版本是一个十分不错的修补方法,其实也可以升级LinuxKernel版本linux下socket编程,使其不再漏洞影响范围之内就好。
方式三:使用官方补丁进行修补
代码补丁:
总结
一个内核漏洞可能会对用户、企业等引起巨大损失,所以建议存在该漏洞的用户或企业须要尽早的完成修补ubuntu 修改内核配置,防止形成始料未及的损失。同时在修补时也最好采用可以从根本上解决问题的方式为好!