当前位置: 首页 > article >正文

从glibc 2.34移除csu函数谈起:ret2csu技巧的过去、现在与替代方案

从glibc 2.34移除csu函数看ROP技术的演进与替代方案在二进制安全领域ROPReturn-Oriented Programming技术一直是攻击者绕过现代防护机制的重要手段。其中ret2csu作为一种经典的ROP技巧因其通用性和高效性备受安全研究人员关注。然而随着glibc 2.34版本的发布这一技术的基础——__libc_csu_init和__libc_csu_fini函数被彻底移除标志着ROP攻防进入了一个新的阶段。1. csu函数的起源与设计初衷__libc_csu_init和__libc_csu_fini这两个函数原本是glibc中负责程序初始化和清理的核心组件。它们的出现源于C/C程序启动和终止时的复杂需求。在传统的程序执行流程中__libc_start_main会依次调用__libc_csu_init- 执行全局构造函数和.init_array中的函数main- 程序主逻辑__libc_csu_fini- 执行全局析构函数和.fini_array中的函数这种设计有几个关键优势模块化初始化允许库开发者在main执行前注册初始化函数跨平台一致性为不同架构提供统一的初始化机制资源管理确保程序退出时正确释放资源从实现上看__libc_csu_init的核心逻辑是遍历.init_array段中的函数指针并依次调用。典型的实现包含以下关键步骤lea r12, __frame_dummy_init_array_entry ; 加载.init_array地址 lea rbp, __do_global_dtors_aux_fini_array_entry ; 计算数组长度 sub rbp, r12 sar rbp, 3 ; 计算元素数量这种设计无意中创造了一个ROP攻击者的宝藏——一系列精心编排的寄存器操作和函数调用指令。2. ret2csu技术的原理与实战应用ret2csu技术的核心在于利用__libc_csu_init函数中的两段特殊指令序列安全研究人员通常称之为gadget1和gadget2。2.1 关键gadget分析gadget1 (位于0x4006A6)add rsp, 8 pop rbx pop rbp pop r12 pop r13 pop r14 pop r15 retngadget2 (位于0x400690)mov rdx, r13 mov rsi, r14 mov edi, r15d call qword ptr [r12rbx*8] add rbx, 1 cmp rbx, rbp jnz short loc_400690这两个gadget组合起来可以实现控制rdi、rsi、rdx三个关键参数寄存器调用任意函数通过r12和rbx控制维持栈平衡通过rbp和rbx的循环控制2.2 典型利用场景在x86_64架构下函数调用遵循System V AMD64 ABI规范前六个参数通过寄存器传递rdi - 第一个参数rsi - 第二个参数rdx - 第三个参数rcx - 第四个参数r8 - 第五个参数r9 - 第六个参数ret2csu特别适合构造如下的函数调用链# 典型利用代码结构 payload padding payload p64(gadget1_addr) # 设置寄存器值 payload p64(0) # add rsp,8的补偿 payload p64(0) # rbx payload p64(1) # rbp (避免循环) payload p64(func_ptr) # r12 - 要调用的函数 payload p64(arg3) # r13 - rdx payload p64(arg2) # r14 - rsi payload p64(arg1) # r15 - edi payload p64(gadget2_addr) # 实际执行调用 payload p64(0)*7 # gadget2返回后的栈平衡这种技术在CTF题目和实际漏洞利用中极为常见特别是在需要构造复杂函数调用如write泄露地址但缺乏合适gadget的情况下。3. glibc 2.34的变革与安全考量glibc 2.342021年发布对程序启动机制进行了重大重构移除了传统的__libc_csu_init和__libc_csu_fini函数。这一变化背后有几个关键原因3.1 技术演进的需求现代程序对启动速度和内存占用有了更高要求。新的初始化机制将相关功能整合到__libc_start_main内部减少了不必要的间接调用。3.2 安全加固的必然选择csu函数的存在本质上违反了最小权限原则。作为通用初始化代码它们包含了过多本不必要的功能问题类型具体表现安全风险过度权限可调用任意函数任意代码执行信息泄露可控制多个寄存器绕过ASLR逻辑缺陷循环控制不严谨可利用性高3.3 对现有利用技术的影响这一变更直接导致ret2csu技术在glibc 2.34的环境中失效ROP链构造难度显著增加需要寻找新的通用gadget来源4. 后csu时代的ROP技术演进随着csu函数的移除安全研究人员开始探索新的ROP技术路径。以下是几种有前景的方向4.1 替代gadget来源libc中的新候选_dl_fini函数中的复杂逻辑文件操作相关函数中的寄存器操作异常处理路径中的有用指令序列非libc来源程序自身的gadget特别是大型应用其他动态链接库中的有用片段编译器生成的意外有用指令4.2 新型利用技术面向数据的编程DOP通过控制数据流而非代码流实现攻击对现有防护机制更具规避性部分控制流劫持结合内存破坏和逻辑漏洞实现有限条件下的利用4.3 防御措施的演进现代防护系统也在持续进化主要方向包括防护技术原理对抗ROP的效果CET (Control-flow Enforcement Technology)硬件级控制流验证阻断非直接跳转PAC (Pointer Authentication Codes)指针完整性校验防止指针篡改BTI (Branch Target Identification)分支目标标记限制有效跳转目标5. 实战从传统到现代的ROP构造让我们通过一个实际案例对比csu时代和现代环境下的ROP利用差异。5.1 传统ret2csu利用以经典的泄露libc地址为例传统方法可能这样构造# 传统ret2csu利用代码 def leak_address(): payload bA*offset payload p64(gadget1) payload p64(0) # add rsp,8 payload p64(0) # rbx payload p64(1) # rbp payload p64(write_got) # r12 payload p64(8) # r13 - rdx (length) payload p64(read_got) # r14 - rsi (buf) payload p64(1) # r15 - edi (fd) payload p64(gadget2) payload p64(0)*7 # cleanup payload p64(main_addr) # 恢复执行 return payload5.2 现代环境下的替代方案在glibc 2.34环境中可能需要采用更复杂的组合# 现代ROP链构造示例 def modern_leak(): payload bA*offset # 使用多个小gadget组合 payload p64(pop_rdi) p64(1) payload p64(pop_rsi_r15) p64(read_got) p64(0) payload p64(pop_rdx_rcx_r8) p64(8) p64(0) p64(0) payload p64(write_plt) payload p64(main_addr) return payload这种方案的关键在于使用多个专用小gadget替代单一通用gadget接受更长的ROP链和更高的利用复杂度依赖程序自身的gadget而非libc的通用实现6. 对安全研究的启示glibc 2.34移除csu函数不仅是技术实现的变化更反映了安全领域的几个重要趋势攻击面缩减开发者越来越注重减少非必要的复杂代码结构深度防御通过多层次防护增加漏洞利用难度攻防博弈升级简单通用的利用技术逐渐失效催生更高级的攻击方法对于安全研究人员这意味着需要更深入地理解底层机制开发更精细化的利用技术关注硬件级安全特性带来的影响在实际漏洞研究中曾经依赖ret2csu的场景现在需要更创新的解决方案。例如在一次针对某大型开源软件的漏洞利用开发中我们发现通过组合以下技术成功替代了传统的ret2csu利用程序自身的异常处理路径中的指令序列结合部分写原语构造有限控制通过间接调用链实现最终利用这种转变也促使防御方开发更全面的缓解措施。微软的网络安全专家Mark Russinovich曾指出现代安全防护必须假设攻击者能够找到意想不到的利用路径因此需要构建覆盖整个攻击面的防护体系。

相关文章:

从glibc 2.34移除csu函数谈起:ret2csu技巧的过去、现在与替代方案

从glibc 2.34移除csu函数看ROP技术的演进与替代方案 在二进制安全领域,ROP(Return-Oriented Programming)技术一直是攻击者绕过现代防护机制的重要手段。其中,ret2csu作为一种经典的ROP技巧,因其通用性和高效性备受安…...

Phi-3.5-mini-instruct实战案例:Gradio ChatInterface多模态扩展预留接口

Phi-3.5-mini-instruct实战案例:Gradio ChatInterface多模态扩展预留接口 1. 项目概述 Phi-3.5-mini-instruct是微软推出的轻量级开源指令微调大模型,在长上下文代码理解(RepoQA)、多语言MMLU等基准测试中表现优异,显…...

Agent工作流卡住了?试试AFlow:用蒙特卡洛树搜索自动帮你重构工作流拓扑

Agent工作流优化新范式:AFlow如何用蒙特卡洛树搜索重构智能体协作拓扑 当你的多智能体系统陷入性能瓶颈时,最棘手的往往不是单个组件的缺陷,而是隐藏在复杂交互中的结构性问题。传统调试方法如同在迷宫中摸索,而AFlow算法带来的蒙…...

3分钟解锁《经济研究》论文排版超能力

3分钟解锁《经济研究》论文排版超能力 【免费下载链接】Chinese-ERJ 《经济研究》杂志 LaTeX 论文模板 - LaTeX Template for Economic Research Journal 项目地址: https://gitcode.com/gh_mirrors/ch/Chinese-ERJ 还记得那次深夜赶论文的崩溃吗?李同学为了…...

Apple-Mobile-Drivers-Installer:Windows苹果设备驱动“三分钟连接术“

Apple-Mobile-Drivers-Installer:Windows苹果设备驱动"三分钟连接术" 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: ht…...

软考架构师通关秘籍:从CISC/RISC到CPS,这些底层知识点你真的懂了吗?

软考架构师通关秘籍:从CISC/RISC到CPS的底层知识全景解析 当计算机体系结构的演进遇上现代分布式系统设计,软考高级系统架构师考试中的那些看似孤立的概念——从CISC/RISC的指令集之争到信息物理系统(CPS)的虚实融合——实则暗藏着一条贯穿计算机发展史的…...

SAP批次管理不止于追溯:如何用批次分割、双单位玩转库存与销售分析

SAP批次管理高阶实战:从基础配置到业务赋能的深度解析 引言:重新定义批次管理的价值边界 在化工行业的一次季度复盘会上,某跨国企业的供应链总监指着报表上一组数据问道:"为什么同一批原料在不同包装规格下的周转率差异达到3…...

Element UI导航栏折叠时,如何优雅解决图标和文字错位问题?

Element UI导航栏折叠时的UI优化实战指南 最近在重构后台管理系统时,发现Element UI的导航栏折叠功能虽然开箱即用,但在实际项目中总会遇到各种UI细节问题。特别是当导航栏处于折叠状态时,图标错位、文字溢出、动画生硬等问题频频出现&#x…...

CILQR:自动驾驶约束优化的突破性算法实现指南 [特殊字符]

CILQR:自动驾驶约束优化的突破性算法实现指南 🚗 【免费下载链接】Constrained_ILQR 项目地址: https://gitcode.com/gh_mirrors/co/Constrained_ILQR 在自动驾驶技术快速发展的今天,约束迭代线性二次调节器(Constrained …...

Wi-Fi 6和5G快如闪电的秘密:图解OFDM中的保护间隔与虚拟载波到底在防什么?

Wi-Fi 6和5G快如闪电的秘密:图解OFDM中的保护间隔与虚拟载波到底在防什么? 当你的手机在拥挤的商场里依然能流畅播放4K视频,或是会议室里20台设备同时在线会议也不卡顿时,背后是Wi-Fi 6和5G采用的OFDM(正交频分复用&am…...

从CVE-2021-4034到CVE-2021-3156:手把手复现Linux两大本地提权漏洞(附修复方案)

从CVE-2021-4034到CVE-2021-3156:Linux本地提权漏洞深度实战指南 凌晨三点,安全团队的告警系统突然亮起红灯——又一台服务器被标记存在高危漏洞。作为运维负责人,你必须在最短时间内判断风险等级、验证漏洞真实性并制定修复方案。本文将带你…...

重新定义效率革命:baidupankey技术突破与数字资源获取范式转移

重新定义效率革命:baidupankey技术突破与数字资源获取范式转移 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 在数字资源分发的生态系统中,信息获取效率已成为制约知识流动的关键瓶颈。传统云存储服务…...

如何用 UnrealPakViewer 快速分析虚幻引擎资源包:完整教程指南

如何用 UnrealPakViewer 快速分析虚幻引擎资源包:完整教程指南 【免费下载链接】UnrealPakViewer 查看 UE4 Pak 文件的图形化工具,支持 UE4 pak/ucas 文件 项目地址: https://gitcode.com/gh_mirrors/un/UnrealPakViewer UnrealPakViewer 是一款功…...

你的密码字典真的够强吗?用Hydra搭配Seclists定制专属攻击字典

密码字典的终极进化:从通用词库到精准爆破的艺术 在渗透测试的世界里,密码爆破就像一场精心策划的狩猎——而你的字典质量直接决定了是满载而归还是空手而回。太多安全从业者沉迷于工具的使用技巧,却忽视了最基础也最关键的环节:字…...

不止于计数:用MCNP的FS卡玩转空间分辨,给你的模拟结果加个‘高德地图’

不止于计数:用MCNP的FS卡玩转空间分辨,给你的模拟结果加个‘高德地图’ 在蒙特卡罗模拟的世界里,我们常常满足于一个总数值——反应堆堆芯的总功率、肿瘤靶区的总剂量、屏蔽体的总泄漏量。但真正的物理洞察往往藏在细节里:堆芯哪个…...

BitNet b1.58-2B-4T实战指南:WebUI离线使用与本地模型缓存策略

BitNet b1.58-2B-4T实战指南:WebUI离线使用与本地模型缓存策略 1. 项目概述 BitNet b1.58-2B-4T是一款革命性的1.58-bit量化开源大模型,采用独特的-1、0、1三值权重设计(平均1.58 bit),配合8-bit整数激活&#xff0c…...

八大网盘直链解析神器:一键获取真实下载地址的完整解决方案

八大网盘直链解析神器:一键获取真实下载地址的完整解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…...

KMS_VL_ALL_AIO终极指南:5分钟快速搞定Windows和Office永久激活

KMS_VL_ALL_AIO终极指南:5分钟快速搞定Windows和Office永久激活 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统未激活而烦恼吗?是否因为Office办公软件…...

别再死记硬背了!用SV中的Semaphore(旗语)解决多线程资源争抢,保姆级代码示例带你搞懂get/put

别再死记硬背了!用SV中的Semaphore(旗语)解决多线程资源争抢,保姆级代码示例带你搞懂get/put 想象一下你正在管理一个只有三把钥匙的会议室,十位同事需要轮流使用。如果放任大家随意进出,必然会出现混乱和冲…...

Qwen3.5-9B-GGUF基础教程:llama-cpp-python callback函数实现流式进度

Qwen3.5-9B-GGUF基础教程:llama-cpp-python callback函数实现流式进度 1. 项目概述与模型介绍 Qwen3.5-9B-GGUF是阿里云开源的Qwen3.5-9B模型经过GGUF格式量化后的版本。这个90亿参数的稠密模型采用了创新的Gated Delta Networks架构和混合注意力机制(…...

LabVIEW颜色识别实战:用IMAQ ColorMatch函数5分钟搞定产品颜色分拣

LabVIEW工业级颜色分拣系统实战:从参数调优到产线部署全解析 在一条高速运转的自动化生产线上,不同颜色的零件正以每秒3个的速度通过传送带。传统人工分拣不仅效率低下,误差率更是高达15%。而借助LabVIEW的IMAQ视觉工具包,我们仅用…...

ESP32 RMT实战:手把手教你用ESP-IDF驱动WS2812灯带(附完整代码)

ESP32 RMT实战:手把手教你用ESP-IDF驱动WS2812灯带(附完整代码) 在智能家居和物联网项目中,可编程RGB灯带因其丰富的色彩表现和灵活的编程能力而广受欢迎。WS2812作为其中最具代表性的产品之一,仅需单线控制即可实现全…...

HarmonyOS 6.0 HDS 深度实战:悬浮页签与沉浸光感架构解析(API 23+)

随着 HarmonyOS 6.0(API 23)的正式发布,HDS(HarmonyOS Design System)设计系统迎来了质的飞跃。悬浮页签(Floating Tabs)与沉浸光感(Material Component)作为构建“空间化…...

进度管理软件选购参考:8款各有侧重的工具

进度猫:以甘特图为核心的轻量级可视化利器 进度猫是一款以甘特图为向导的轻量级项目管理软件,主打“让项目管理一目了然”。它基于甘特图进行任务拆分和进度管理,系统会自动更新任务进度并用颜色标识不同状态,帮助项目经理及时识别…...

保姆级教程:在Ubuntu 18.04上为ORB-SLAM2添加彩色点云地图(含PCL库避坑指南)

在Ubuntu 18.04上实现ORB-SLAM2彩色点云地图的全流程指南 当第一次看到ORB-SLAM2生成的稀疏特征点时,我意识到视觉SLAM的潜力远不止于此。直到成功运行彩色点云建图版本,那种从二维图像到三维稠密重建的震撼感,才真正让我理解了SLAM技术的魅力…...

HTTrack跨平台部署实战:从Windows配置到Linux编译的完整指南

HTTrack跨平台部署实战:从Windows配置到Linux编译的完整指南 【免费下载链接】httrack HTTrack Website Copier, copy websites to your computer (Official repository) 项目地址: https://gitcode.com/gh_mirrors/ht/httrack HTTrack Website Copier 是一款…...

如何快速掌握Figma中文界面:3分钟完成安装的完整指南

如何快速掌握Figma中文界面:3分钟完成安装的完整指南 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 你是否曾经面对全英文的Figma界面感到无从下手?作为设计师&…...

IIR滤波器设计实战:从Butterworth到参数调优的完整指南

IIR滤波器设计实战:从Butterworth到参数调优的完整指南 在数字信号处理领域,IIR(无限冲激响应)滤波器因其高效的频率选择特性而广受欢迎。与FIR滤波器相比,IIR滤波器能够在相同性能要求下使用更少的计算资源&#xff…...

5 款 AI 写论文哪个好?2026 实测:真文献 + 实图表,虎贲等考 AI 成毕业论文首选

毕业季选 AI 写论文工具,最纠结的莫过于 “5 款 AI 写论文哪个好”—— 通用 AI 文献造假、轻量工具功能残缺、专项平台适配不足,能同时满足真实文献、可溯源数据、学术规范图表、全流程写作的工具少之又少。经过对 5 款主流 AI 论文工具的深度实测&…...

国产ZYNQ四核ARM实战:手把手教你用SGI中断实现CPU0与CPU1的核间通信

国产ZYNQ四核ARM实战:SGI中断实现CPU核间通信全解析 在嵌入式系统开发中,多核处理器间的协同工作一直是提升性能的关键。国产ZYNQ平台搭载的四核ARM Cortex-A9处理器,为高性能嵌入式应用提供了强大支持。本文将深入探讨如何利用SGI&#xff0…...