Ubuntu16.04.4系统本地提权实验

目录

1.介绍:

2.实验:

3.总结:


1.介绍:

1.1:eBPF简介:eBPF(extendedBerkeleyPacketFilter)是内核源自于BPF的一套包过滤机制,BPF可以理解成用户与内核之间的一条通道,有非常强大的功能。一个典型的BPF程序流程为:用户程序调用syscall(__NR_bpf,BPF_MAP_CREATE,&attr,sizeof(attr))申请创建一个map,在attr结构体中指定map的类型、大小、最大容量等属性。用户程序调用syscall(__NR_bpf,BPF_PROG_LOAD,&attr,sizeof(attr))来将我们写的BPF代码加载进内核,attr结构体中包含了指令数量、指令首地址指针、日志级别等属性。在加载之前会利用虚拟执行的方式来做安全性校验,这个校验包括对指定语法的检查、指令数量的检查、指令中的指针和立即数的范围及读写权限检查,禁止将内核中的地址暴露给用户空间,禁止对BPF程序stack之外的内核地址读写。安全校验通过后,程序被成功加载至内核,后续真正执行时,不再重复做检查。用户程序通过调用setsockopt(sockets1,SOL_SOCKET,SO_ATTACH_BPF,&progfd,sizeof(progfd)将我们写的BPF程序绑定到指定的socket上。Progfd为上一步骤的返回值。用户程序通过操作上一步骤中的socket来触发BPF真正执行。eBPF虚拟指令系统属于RISC,拥有10个虚拟寄存器,r0-r10,在实际运行时,虚拟机会把这10个寄存器一一对应于硬件CPU的10个物理寄存器。用户可以用eBPF指令字节码的形式向内核输送代码,并通过事件来触发内核执行用户提供的代码;同时以map(key,value)的形式来和内核共享数据,用户层向map中写数据,内核层从map中取数据,反之亦然。eBPF可用于内核的跟踪和调试,网络事件的过滤和安全性。一般机制是:用户空间将一个特殊的汇编字节码加载到内核中,并附带说明附加程序的位置,内核运行一个"验证器"来确保程序是安全的,内核将字节码转换为本地代码,并将其附加到请求的位置。

1.2:当然,使普通用户能向内核提交可控的指令代码去执行,会带来一些严重的安全问题

1.3:CVE-2017-16995:这个漏洞存在于Linux内核的eBPF模块,是由于eBPF验证模块的计算错误产生的一个内存任意读写漏洞。用户和攻击者可以使用这个漏洞以达到提权的目的。提权原理:攻击者首先在进程用户空间植入提权代码,并且正常情况下内核函数指针指向内核空间的内核代码。利用写任意内存模式内核漏洞,修改函数指针,使得修改后的指针指向用户空间的提权代码,当攻击程序陷入到内核中执行到修改后的函数时,就将内核执行控制流引导至用户空间提权代码,将权限提权。影响范围:LinuxKernelVersion4.14-4.4(影响Ubuntu和Debian发行版)漏洞的触发,还需要2个条件。lKernel编译选项CONFIG_BPF_SYSCALL打开,启用了bpfsyscall;l/proc/sys/kernel/unprivileged_bpf_disabled设置为0,允许非特权用户调用bpfsyscall。修复方案:l设置/proc/sys/kernel/unprivileged_bpf_disabled为1,也是最简单有效的方式,虽然漏洞仍然存在,但会让exp失效;l使用Ubuntu的预发布源,更新Ubuntu4.4的内核版本,因为是非正式版,其稳定性无法确认

2.实验:

  1. 查看linux的版本--通过uname-a因为本次实验的提权漏洞只限于部分Linux内核版本(LinuxKernelVersion4.14-4.4
  2. cat/proc/sys/kernel/unprivileged_bpf_disabled通过这个查看是否存在文件:如果存在则返回0
  3. 切换到用户m同时切换到目录并且查看文件信息

1.sudo gcc -o m upstream44.c

sudo chmod a+x m

编写代码发现用户变为了root

3.总结:

1.Kernel编译选项CONFIG_BPF_SYSCALL打开,启用了bpfsyscall;2.l/proc/sys/kernel/unprivileged_bpf_disabled设置为0,允许非特权用户调用bpfsyscall。

3.修复方案:l设置/proc/sys/kernel/unprivileged_bpf_disabled为1,也是最简单有效的方式,虽然漏洞仍然存在,但会让exp失效;l使用Ubuntu的预发布源,更新Ubuntu4.4的内核版本,因为是非正式版,其稳定性无法确认.

4.了解了漏洞原理

相关推荐
Avan_菜菜5 小时前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB1 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
zzzzzz3103 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
大树886 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz6 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工6 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信