System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种Linux ftrace框架的控制流重定向实现方法及其系统技术方案_技高网

一种Linux ftrace框架的控制流重定向实现方法及其系统技术方案

技术编号:40951115 阅读:5 留言:0更新日期:2024-04-18 20:26
本发明专利技术公开一种Linux ftrace框架的控制流重定向实现方法及其系统,涉及网络技术与安全领域。该Linux ftrace框架的控制流重定向实现方法及其系统,包括现场保存模块、指令过滤模块、指令解码模块、上下文恢复模块和现场清理模块,其特征在于,所述现场保存模块和现场清理模块呈对称之势,保证栈帧和寄存器数据的完整性,指令过滤模块、指令解码模块,以及上下文恢复模块负责主要逻辑功能,实现栈帧回退和寄存器恢复。该Linux ftrace框架的控制流重定向实现方法及其系统,通过设置的现场保存模块、指令过滤模块、指令解码模块、上下文恢复模块、现场清理模块5个主要模块,各模块间按照线性序列进行逻辑传递,最终达成了内核控制流重定向的目的。

【技术实现步骤摘要】

本专利技术涉及网络技术与安全,具体为一种linux ftrace框架的控制流重定向实现方法及其系统。


技术介绍

1、linux ftrace机制是一种帮助开发者与调试人员跟踪内核事件、单点函数的可观测性方案,由于该方案非常依赖编译器和芯片架构的支持,鉴于x86/x86-64指令架构商业产品发展悠久,扩展性和兼容性强,以及编译器生态链提供的友好支持,使得ftrace在以上芯片架构的个人电脑或者企业服务器上运行良好,同时具备控制流重定向和函数/事件追踪的能力。

2、但由于gcc/llvm编译器不支持arm64架构的-mfentry选项,同时arm64版本的linux内核不支持dynamic_ftrace_with_regs选项,导致ftrace但无法运行于arm64架构的手机、企业路由器、商务扫码设备等移动终端上,导致诸如内核打热补丁修复致命漏洞、移动设备主动防御等应用场景下缺失安全方案而面临严重挑战。


技术实现思路

1、(一)解决的技术问题

2、针对现有技术的不足,本专利技术提供了一种linux ftrace框架的控制流重定向实现方法及其系统,解决了gcc编译器对于arm64平台的依赖缺失和arm64架构的linux内核缺乏dynamic_ftrace_with_regs支持的问题。

3、(二)技术方案

4、为实现以上目的,本专利技术通过以下技术方案予以实现:一种linux ftrace框架的控制流重定向实现方法,所述方法包括以下步骤:

5、步骤一:ftrace框架层跳转到用户定义的驱动回调之前,先保存上下文信息,包括x0-x30所有寄存器的值、原函数的返回地址、_mcount()调用地址,以及栈帧指针地址;

6、步骤二:执行ftrace调用者通过register_ftrace_function(&hook->ops)注册的回调函数,cpu跳转到驱动代码执行;

7、步骤三:回调函数执行完成后返回至ftrace框架层,取出((struct pt_regs*)->ip)的值,跟步骤一中保存的ip值进行对比,若相等不作任何处理,否则执行后续步骤;

8、步骤四:定位ftrace stub指令序列的范围,起始位置是原函数入口,结束位置是bl_mcount调用点;

9、步骤五:采用capstone解码机器码的方式,过滤出ftrace stub指令序列中分配栈帧和覆盖callee-saved寄存器的指令;

10、步骤六:解码步骤五过滤出的指令,从中还原出指令操作符和操作数,分配栈帧和保存函数参数指令中的操作数;

11、步骤七:采用逆向方式并结合上述操作数,执行回退栈帧以及还原保存函数参数的寄存器的原始值;

12、步骤八:跳转到注册者定义的原函数,并在入口处通过内联汇编方式更换为原函数返回地址;

13、步骤九:原函数执行完毕,返回到原函数call site的下一条指令地址处。

14、一种linux ftrace框架的控制流重定向实现系统,包括现场保存模块、指令过滤模块、指令解码模块、上下文恢复模块和现场清理模块,其特征在于,所述现场保存模块和现场清理模块呈对称之势,保证栈帧和寄存器数据的完整性,指令过滤模块、指令解码模块,以及上下文恢复模块负责主要逻辑功能,实现栈帧回退和寄存器恢复。

15、优选的,所述现场保存模块负责保存原函数call site点的上下文信息,包括所有寄存器值、call site返回地址和栈帧地址、原函数返回地址,并通过分配栈帧的形式进行保存。

16、优选的,所述指令过滤模块负责获取ftrace stub指令序列的地址范围,即原函数的地址和_mcount()调用点地址。

17、优选的,所述获取方法是先获取原函数的调用地址,然后获取4字节的机器码,通过解码机器码还原出函数调用指令中跳转偏移量,然后结合当前指令地址计算出跳转后的函数实际地址,即原函数的首地址。

18、优选的,所述_mcount()调用点地址直接通过x30寄存器获得。

19、优选的,所述指令解码模块负责遍历上一模块所得的地址范围,然后进行逐一解码还原出原始汇编指令,匹配是否为分配栈帧和覆盖callee-saved寄存器这两种指令类型。

20、优选的,所述恢复上下文模块负责从上一步匹配到的结果中还原原始状态和数据。

21、优选的,所述还原原始状态和数据一方面是从分配栈帧指令中获取已分配栈帧的大小,另一方面是从覆盖callee-saved寄存器指令中分别获取到寄存器和原始存放地址相对于sp指针的偏移量,并结合当前实际的栈帧布局情况计算出此原始存放地址,然后从中取出原始值赋予已被覆盖的callee-saved寄存器。

22、优选的,所述现场清理模块负责将现场保存模块申请的栈帧进行销毁,保证堆栈平衡。

23、本专利技术公开了一种linux ftrace框架的控制流重定向实现方法及其系统,其具备的有益效果如下:

24、1、该linux ftrace框架的控制流重定向实现方法及其系统,通过设置的现场保存模块、指令过滤模块、指令解码模块、上下文恢复模块、现场清理模块5个主要模块,各模块间按照线性序列进行逻辑传递,最终达成了内核控制流重定向的目的。流程是首先定位出目标函数的ftrace stub指令序列在内核运行时的地址加载范围,然后借用反编译引擎capstone的解码思想将ftrace stub机器码转换成汇编指令,然后逐一地对汇编指令进行逻辑分析,如果匹配到分配栈帧和覆盖callee-saved寄存器这两类指令,就按照汇编代码的逻辑含义进行逆向操作,从而恢复出栈帧空间和需调用者保存的寄存器(x19-x28)的值,最终在ftrace注册者驱动中恢复出原函数返回地址。

25、2、该linux ftrace框架的控制流重定向实现方法及其系统,区别于现有方案只提供数据追踪功能,本专利技术还增加了控制流重定向的能力,能够有效阻断事中的恶意攻击行为,使得方案可以应用到的业务场景更丰富,比如arm64架构的终端设备/服务器的入侵检测和实时阻断类产品。

26、3、该linux ftrace框架的控制流重定向实现方法及其系统,区别于现有方案同时需要c代码和汇编代码两种语言的形式补进编译器选项和传递芯片平台寄存器,此方案只用汇编代码就实现了同等功效,因此更为简单有效,依赖性更少,落地实施便捷度更高,整个方案只需对内核代码打上单个文件补丁即可。

本文档来自技高网...

【技术保护点】

1.一种Linux ftrace框架的控制流重定向实现方法,其特征在于,所述方法包括以下步骤:

2.根据权利要求1所述的一种Linux ftrace框架的控制流重定向实现系统,包括现场保存模块、指令过滤模块、指令解码模块、上下文恢复模块和现场清理模块,其特征在于,所述现场保存模块和现场清理模块呈对称之势,保证栈帧和寄存器数据的完整性,指令过滤模块、指令解码模块,以及上下文恢复模块负责主要逻辑功能,实现栈帧回退和寄存器恢复。

3.根据权利要求2所述的一种Linux ftrace框架的控制流重定向实现系统,其特征在于,所述现场保存模块负责保存原函数call site点的上下文信息,包括所有寄存器值、callsite返回地址和栈帧地址、原函数返回地址,并通过分配栈帧的形式进行保存。

4.根据权利要求2所述的一种Linux ftrace框架的控制流重定向实现系统,其特征在于,所述指令过滤模块负责获取ftrace stub指令序列的地址范围,即原函数的地址和mcount调用点地址。

5.根据权利要求4所述的一种Linux ftrace框架的控制流重定向实现系统,其特征在于,获取方法是先获取原函数的调用地址,然后获取4字节的机器码,通过解码机器码还原出函数调用指令中跳转偏移量,然后结合当前指令地址计算出跳转后的函数实际地址,即原函数的首地址。

6.根据权利要求4所述的一种Linux ftrace框架的控制流重定向实现系统,其特征在于,所述mcount调用点地址直接通过X30寄存器获得。

7.根据权利要求2所述的一种Linux ftrace框架的控制流重定向实现系统,其特征在于,所述指令解码模块遍历上一模块所得的地址范围,然后进行逐一解码还原出原始汇编指令,匹配并分配栈帧和覆盖callee-saved寄存器这两种指令类型。

8.根据权利要求2所述的一种Linux ftrace框架的控制流重定向实现系统,其特征在于,所述恢复上下文模块负责从上一步匹配到的结果中还原原始状态和数据。

9.根据权利要求8所述的一种Linux ftrace框架的控制流重定向实现系统,其特征在于,所述还原原始状态和数据一方面是从分配栈帧指令中获取已分配栈帧的大小,另一方面是从覆盖callee-saved寄存器指令中分别获取到寄存器和原始存放地址相对于SP指针的偏移量,并结合当前实际的栈帧布局情况计算出此原始存放地址,然后从中取出原始值赋予已被覆盖的callee-saved寄存器。

10.根据权利要求2所述的一种Linux ftrace框架的控制流重定向实现系统,其特征在于,所述现场清理模块将现场保存模块申请的栈帧进行销毁,保证堆栈平衡。

...

【技术特征摘要】

1.一种linux ftrace框架的控制流重定向实现方法,其特征在于,所述方法包括以下步骤:

2.根据权利要求1所述的一种linux ftrace框架的控制流重定向实现系统,包括现场保存模块、指令过滤模块、指令解码模块、上下文恢复模块和现场清理模块,其特征在于,所述现场保存模块和现场清理模块呈对称之势,保证栈帧和寄存器数据的完整性,指令过滤模块、指令解码模块,以及上下文恢复模块负责主要逻辑功能,实现栈帧回退和寄存器恢复。

3.根据权利要求2所述的一种linux ftrace框架的控制流重定向实现系统,其特征在于,所述现场保存模块负责保存原函数call site点的上下文信息,包括所有寄存器值、callsite返回地址和栈帧地址、原函数返回地址,并通过分配栈帧的形式进行保存。

4.根据权利要求2所述的一种linux ftrace框架的控制流重定向实现系统,其特征在于,所述指令过滤模块负责获取ftrace stub指令序列的地址范围,即原函数的地址和mcount调用点地址。

5.根据权利要求4所述的一种linux ftrace框架的控制流重定向实现系统,其特征在于,获取方法是先获取原函数的调用地址,然后获取4字节的机器码,通过解码机器码还原出函数调用指令中跳转偏移量,然后结合当前指令地址计算出跳转后的函数实际...

【专利技术属性】
技术研发人员:张开翔吴嘉炫董润张羽王鑫渊林顺东
申请(专利权)人:天翼云科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1