ubuntu exploit技术细节
小樊
48
2025-11-14 13:42:11
Ubuntu 利用技术要点与防护
一 用户态常见利用路径
栈溢出到代码复用:在64位 Ubuntu 上,经典思路是绕过NX(不可执行位)与 ASLR(地址空间布局随机化) ,通过ret2libc 或ROP 复用已有代码。关键差异在于x86-64 使用寄存器传参(前六个整型参数通过RDI、RSI、RDX、RCX、R8、R9 ),因此需要在ROP链中布置寄存器控制;当ASLR 开启时,常借助PLT/GOT 泄露或泄漏libc基址后再构造system(“/bin/sh”) 。示例环境与实践可参考针对Ubuntu 16.04 amd64 的栈溢出+ret2libc/ROP演练。
信息泄露与两阶段利用:通过格式化字符串、越界读或GOT覆盖等手段先泄露libc地址 ,再二次发送payload完成system 调用或任意写,这是CTF与实战中常见的两阶段范式。
二 内核态本地提权路径
内核UAF到任意写:在Ubuntu 24.04.2 的6.8.0-60-generic 上,af_unix子系统的引用计数失衡 引发释放后重用(UAF) 。问题源自Ubuntu对上游补丁的选择性回溯:仅修改af_unix.c 而遗漏garbage.c ,导致oob_skb 引用计数少增一次、却在关闭时多减一次,最终对256字节 struct sk_buff 对象产生UAF。利用时通过提升unix_tot_inflight 触发立即GC,配合FUSE mmap 制造时间差,再经环回接口+数据包套接字 进行跨缓存喷射回收页面,覆盖已释放对象以劫持控制流(如RIP/RDI ),最终以ROP 覆盖modprobe_path 并通过usermodehelper 获取root。官方在2025-09-18 发布6.8.0-61 合并修复,建议立即升级。
用户命名空间与内核攻击面:Ubuntu默认允许非特权用户命名空间 (通过kernel.unprivileged_userns_clone ),显著扩大了如nftables 与io_uring 等子系统的攻击面。实战研究在Pwn2Own Vancouver 2023 展示了通过用户命名空间访问nftables 虚拟机,利用对象解析/对齐/信息泄露 等弱点实现LPE,提示复杂内核子系统的解析与对齐逻辑是常见突破口。
eBPF验证器缺陷:早期CVE-2017-16995 影响Ubuntu 16.04及以下 ,恶意eBPF程序可绕过验证器导致任意内存读写 与本地提权。缓解上可限制非特权BPF:设置kernel.unprivileged_bpf_disabled=1 ,并及时打补丁。
三 命名空间与沙箱的纵深防御绕过
AppArmor限制绕过:在Ubuntu 23.10 与24.04 LTS 上,研究者披露三组绕过非特权用户命名空间限制 的方法(如通过aa-exec 切换到宽松AppArmor 配置、Busybox 默认策略、LD_PRELOAD 注入受信进程),本身不直接获取完整控制权,但与需要CAP_SYS_ADMIN/CAP_NET_ADMIN 的内核漏洞组合可形成提权链。建议启用kernel.apparmor_restrict_unprivileged_unconfined=1 、禁用高风险配置(如aa-disable /usr/bin/busybox /usr/bin/nautilus )并收紧bwrap 策略,降低命名空间滥用风险。
四 防护与检测清单
及时更新与内核加固:对生产环境执行apt update && apt upgrade 并重启;关注如linux-generic 等内核包更新。针对UAF类问题,确保升级至6.8.0-61 或更高版本;对eBPF风险,按需设置kernel.unprivileged_bpf_disabled=1 。
缩小攻击面:在不需要的场景下关闭非特权用户命名空间 (如将kernel.unprivileged_userns_clone 设为0),并审计AppArmor配置(aa-status ),限制aa-exec/Busybox/Nautilus 等潜在滥用入口。
运行时监测:关注内核日志(如dmesg )中的use-after-free、slab corruption、garbage collection 异常;部署eBPF/BCC 工具对unix域套接字、nftables、io_uring 等热点子系统进行异常行为监测;对关键系统启用完整性校验 与最小权限 策略。
免责声明
本内容仅用于授权的安全研究、教学与防护 目的,严禁用于未授权的渗透、破坏或获取他人系统权限。对生产系统进行测试前请取得明确书面授权 ,并自行承担相应风险与合规责任。