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.了解了漏洞原理

相关推荐
HiDev_7 分钟前
【非标自动化】2、认识元器件(运动控制模块)
运维·自动化
一路向北finish23 分钟前
《CentOS 7 搭建 Hadoop 3.3.6 分布式集群:NFS 共享方案完整实操》
linux·运维·hadoop·分布式·centos
xiaoxiangsiyan35 分钟前
全网IPv6规模化改造实战指南
运维·网络·笔记·云原生·自动化
微学AI1 小时前
我把 800 行报错日志压成一张排障卡:用蓝耘元生代做 FastAPI 日志根因分析
网络·oracle·fastapi
IanSkunk1 小时前
眼视光设备全周期台账:从验收入库到使用效果数据化的管理闭环
大数据·网络·人工智能
好评1241 小时前
【Linux】网络基础概念
linux·网络
杨云龙UP1 小时前
Toad for Oracle 调整表空间 Datafile 大小:Usage、Used Pct of Max 与 RESIZE 实战
linux·运维·服务器·数据库·oracle·dba·数据库运维
Zguigo2 小时前
lesson43-44深入理解 TCP 可靠传输与流量控制:从机制到实战
网络·网络协议·tcp/ip
ai产品老杨2 小时前
视频分析网络穿透项目实战记录:内网摄像头远程调试与跨网接入手册
网络·音视频
河北之花2 小时前
计算机三级:路由器选型
网络·计算机网络·智能路由器