Intel 和 ARM 对ROP/COP/JOP的缓解措施

news2024/11/15 20:03:02

文章目录

  • 前言
  • 一、ROP
    • 1.1 Intel
    • 1.2 ARM
  • 二、COP/JOP
    • 2.1 Intel
    • 2.2 ARM

前言

前向转移(forward):将控制权定向到程序中一个新位置的转移方式, 就叫做前向转移, 比如jmp和call指令。这里我们主要保护的间接跳转,间接跳转是运行时才知道函数地址,而直接跳转在编译阶段就已经确定(攻击者很难利用)。

后向转移(backward):而将控制权返回到先前位置的就叫做后向转移, 最常见的就是ret指令。

现代CPU的增强功能,如非可执行堆栈和非可写代码页,有助于防止传统形式的代码注入。然而,比如在x86架构中,指令解码可以从任意字节开始,这为攻击者提供了一组不同于程序员意图的指令。

攻击者可以扫描代码以寻找有意义的代码片段(称为gadgets),并通过以下技术将它们链接在一起构建恶意载荷:
(1)ROP(Return Oriented Programming):攻击者利用现有的代码序列,通常以返回指令结束,构建一系列指令链来实现恶意目标。通过将这些代码片段链接在一起,攻击者可以操纵控制流程,执行任意操作,而无需注入新代码。
(2)JOP(Jump Oriented Programming):攻击者利用跳转指令(如条件跳转或无条件跳转)构建一系列指令,以改变程序的执行流程来实现其目标。通过控制这些跳转指令的目标地址,攻击者可以将程序的执行流程重定向到特定的代码片段。
(3)COP(Call Oriented Programming):与ROP类似,攻击者利用涉及函数调用的现有代码序列构建一系列指令,用于恶意目的。通过调用这些现有的代码片段,攻击者可以在它们之间交错和操纵执行流程。

这里以ROP为例,ROP(Return Oriented Programming)是攻击者依赖于RET(返回)指令来拼接一个不符合程序员意图的恶意代码流的技术。根据设计,返回指令从堆栈中获取下一条指令的地址(该地址是由之前的CALL指令将其推入堆栈),然后执行该地址处的指令。在基于ROP的攻击中,攻击者会预先或在运行时扫描现有程序代码中的字节序列,通过扫描磁盘或内存中的程序来寻找。图1显示了现有指令流的示例:
在这里插入图片描述
这个例子展示了一个按顺序执行的三条指令(请注意,在这个程序员意图的序列中没有RET指令),下方的蓝色方框显示了程序对应的字节。当以无效的偏移开始解释相同的代码字节时,它也可以表示导致序列以RET结束的另一组指令,如下图所示,红色方框中的字节对应于不同的指令序列,在这个例子中,每条指令后面都是C3,对应于返回指令。这些指令序列被称为“gadgets”(小工具):
在这里插入图片描述
这个例子中的指令序列展示了如何通过重新解释现有的代码字节,构造出具有不同功能的指令序列。攻击者可以扫描程序中的代码,找到这些“gadgets”,并将它们链接在一起,以形成一个恶意的ROP链。这种技术利用了现有代码的片段来绕过执行非预期指令的限制,从而实现攻击者的目的。

通过仔细放置这些备用指令集或“gadgets”的起始地址(这些指令集都以ret指令结束),攻击者可以使用原始程序的可执行字节执行原始程序中未预期的任意攻击代码流。因此,使用ROP攻击,攻击者可以使用现有程序的字节组合执行任意代码,继承程序的所有权限。这使得这些攻击具有高效且难以检测的特点,并有可能允许攻击者升级权限或突破进程沙盒。这类恶意软件针对操作系统(OS)、浏览器、阅读器和许多其他应用程序,为了以最小的性能影响提供更有效的保护,需要与硬件基础深度整合。

接下来描述 Intel 和 ARM 预防前向( call/jmp )和后向( ret )控制流指令劫持的一些技术。

一、ROP

1.1 Intel

(1)软件方面:无(ShadowCallStack在LLVM 9.0中已被移除)

(2)硬件方面:Intel CET (SHADOW-STACK) – Linux 6.6 这个内核版本终于增加了对英特尔影子堆栈硬件功能的支持。

SHADOW STACK: Enhanced protection against ROP attacks

1.2 ARM

(1)软件方面:Clang的Shadow Call Stack – Linux 5.8 这个内核版本在ARM64架构上增加了对Clang的Shadow Call Stack的通用支持(使用平台寄存器x18)。

(2)硬件方面:ARM pointer authentication。ARMv8.3-A新增内容包括指针认证指令。

二、COP/JOP

2.1 Intel

(1)软件方面:Clang Control Flow Integrity,这种检查通常被称为 “forward-edge CFI”,因为它保护了对函数的间接调用。Linux 5.13 这个版本增加了 LLVM control-flow integrity(CFI)机制的支持。

CFI(Control-Flow Integrity)关注的就是间接jmp、间接call、ret这几种指令控制流的完整性。

(2)硬件方面:Intel CET(ENDBRANCH – IBT(indirect branch tracking)) – Linux 5.18 这个内核版本终于增加了对英特尔IBT硬件功能的支持。

ENDBRANCH: Enhanced protection against JOP/COP attacks

2.2 ARM

(1)软件方面:Clang Control Flow Integrity,这种检查通常被称为 “forward-edge CFI”,因为它保护了对函数的间接调用。Linux 5.13 这个版本增加了 LLVM control-flow integrity(CFI)机制的支持。

(2)硬件方面:Branch-Target Identification(BTI)-- Linux 5.8 这个内核版本对用户空间和内核空间提供了ARMv8.5-BTI的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1922507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚幻引擎ue5如何调节物体锚点

当发现锚点不在物体上时,如何调节瞄点在物体上。 步骤1:按住鼠标中键拖动锚点,在透视图中多次调节锚点位置。 步骤2:在物体上点击鼠标右键点击-》锚定--》“设置为枢轴偏移”即可。

百日筑基第十九天-一头扎进消息队列2

百日筑基第十九天-一头扎进消息队列2 消息队列的通讯协议 目前业界的通信协议可以分为公有协议和私有协议两种。公有协议指公开的受到认可的具有规 范的协议,比如 JMS、HTTP、STOMP 等。私有协议是指根据自身的功能和需求设计的协 议,一般不具备通用性&…

AI网络爬虫023:用deepseek批量提取天工AI的智能体数据

文章目录 一、介绍二、输入内容三、输出内容一、介绍 天工AI的智能体首页: F12查看真实网址和响应数据: 翻页规律: https://work.tiangong.cn/agents_api/square/sq_list_by_category?category_id=7&offset=0 https://work.tiangong.cn/agents_api/square/sq_list_b…

MUR2060CTR-ASEMI无人机专用MUR2060CTR

编辑:ll MUR2060CTR-ASEMI无人机专用MUR2060CTR 型号:MUR2060CTR 品牌:ASEMI 封装:TO-220 批号:最新 最大平均正向电流(IF):20A 最大循环峰值反向电压(VRRM&#…

基于R语言的水文、水环境模型优化技术及快速率定方法与多模型案例

在水利、环境、生态、机械以及航天等领域中,数学模型已经成为一种常用的技术手段。同时,为了提高模型的性能,减小模型误用带来的风险;模型的优化技术也被广泛用于模型的使用过程。模型参数的快速优化技术不但涉及到优化本身而且涉…

Python 的 metaclass

文章目录 先说结论1. metaclass 的作用2. 主要的执行过程 1. metaclass.__new__2. metaclass.__call__关于 metaclass.__init__ 3. metaclass.__prepare__4. 自动创建 __slots__ 属性4.1 metaclass 的接口类4.2 metaclass conflict 5. Class metaprogramming 先说结论 1. meta…

【linux】服务器安装及卸载pycharm社区版教程

【linux】服务器安装及卸载pycharm社区版教程 【创作不易,求点赞关注收藏】 文章目录 【linux】服务器安装及卸载pycharm社区版教程1、到官网下载安装包2、通过终端wget下载安装包3、解压4、安装5、设置环境变量6、运行pycharm7、删除pycharm安装包、卸载pycharm …

Arcgis横向图例设置

想把这个图例改成横向的 点击图例的属性,找到样式

基于SpringBoot的校园疫情防控系统

你好,我是专注于计算机科学与技术的研究者。如果你对我的工作感兴趣或有任何问题,欢迎随时联系我。 开发语言:Java 数据库:MySQL 技术:SpringBoot框架,B/S架构 工具:Eclipse,Mav…

13 协程设计原理与汇编实现

协程的问题 为什么要有协程?协程的原语操作?协程的切换?协程的struct如何定义?协程的scheduler(调度)如何定义?调度策略如何实现?协程如何与posix,api兼容?协程多核模式?协程的性能如何测试?为什么要有协程 同步的编程方式,异步的性能。同步编程时,我们需要等待io就…

什么是STM32?嵌入式和STM32简单介绍

1、嵌入式和STM32 1.1.什么是嵌入式 除了桌面PC之外,所有的控制类设备都是嵌入式 嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置”。 嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板,是一种专用的计算机系统。…

iPhone删除所有照片的高效三部曲

苹果手机用久了,系统缓存包括自己使用手机留下的内存肯定会越来越多。其中,相册中的照片数量可能会急剧增加,占据大量的存储空间。当用户们想要对相册进行彻底清理,实现iPhone删除所有照片时,不妨跟随以下详细的三部曲…

k8s核心操作_k8s中的存储抽象_基本概念与NFS搭建_Deployment使用NFS进行挂载---分布式云原生部署架构搭建028

然后我们继续开始看 如果我们使用容器部署,比如我们有三个节点,一个是master,一个node1 一个是node2 那么pod 中我们可以看到,容器中的 /data 等各个目录都映射了出来了,但是 如果比如上面红色的部分,有个pod,原来在node2上,最右边那个,但是这个pod宕机了 那么,k8s会在node…

【数据结构】--- 堆的应用

​ 个人主页:星纭-CSDN博客 系列文章专栏 :数据结构 踏上取经路,比抵达灵山更重要!一起努力一起进步! 一.堆排序 在前一个文章的学习中,我们使用数组的物理结构构造出了逻辑结构上的堆。那么堆到底有什么用呢&…

数据结构——考研笔记(一)绪论

目录 数据结构一、绪论1.1 数据结构的基本概念1.1.1 什么是数据?1.1.2 数据元素——描述一个个体1.1.3 什么是数据对象1.1.4 什么是数据机构 1.2 数据结构的三要素1.2.1 逻辑结构1.2.2 数据的运算1.2.3 物理结构1.2.4 数据类型、抽象数据类型1.2.5 知识回顾与重要考…

【C++】开源:paho-mqtt-cpp库配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍paho-mqtt-cpp库配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#xff…

echarts解决数据差异过大的问题

问题描述 使用echarts折线图和柱状图展示数据时,如果数据差异值较大,会导致显示图形差异过大,图表不美观。 如这一组数据[2000000, 200, 0.1, 20, 0, -10, -3000],渲染出来的效果如下图: 可以看到由于最大值和最小值差…

【经验总结】将markdown文档转换为word(swagger导出word)

工具准备: 任意markdown编辑器,以typora为例pandoc,官方下载地址 思路整理: 从swagger提取离线md文档将md文档转换为word格式 操作步骤: 一、安装pandoc (markdown编辑器安装略) 前往官网…

【学术会议征稿】第三届能源互联网及电力系统国际学术会议(ICEIPS 2024)

第三届能源互联网及电力系统国际学术会议(ICEIPS 2024) 2024 3rd International Conference on Energy Internet and Power Systems 能源互联网是实现新一代电力系统智能互动、开放共享的重要支撑技术之一,也是提升能源调度效率&#xff0…

大模型最新黑书:基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理 PDF

今天给大家推荐一本丹尼斯罗斯曼(Denis Rothman)编写的关于大语言模型&#xff08;LLM&#xff09;权威教程<<大模型应用解决方案> 基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理>&#xff01;Google工程总监Antonio Gulli作序&#xff0c;这含金量不…