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

文章目录

  • 前言
  • 一、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.rhkb.cn/news/375667.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数据分析-Excel和 Text 文件的读写操作

1.Excel和 Text 文件的读写操作 1. Text 文件读写包 import sys print(sys.argv[0]) print(__file__) print(sys.path[0]) qopen(sys.path[0] "\out.txt","w",encodingutf-8) q.write(这个是测试一下) q.close() print(done)open 语句可以打开的创建text…

Androidstudio安卓开发,SharedPreferences实现登录注册

1. 项目涉及到的技术点 SharedPreferences的使用 2. 效果图 3. 实现过程 注册布局文件&#xff1a;activity_register.xml <?xml version"1.0" encoding"utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat xmlns:android"http:…

【密码学】消息认证

你发送给朋友一条消息&#xff08;内容&#xff1a;明天下午来我家吃饭&#xff09;&#xff0c;这一过程中你不想让除你朋友以外的人看到消息的内容&#xff0c;这就叫做消息的机密性&#xff0c;用来保护消息机密性的方式被叫做加密机制。 现在站在朋友的视角&#xff0c;某一…

css预编译器--sass

Sass Sass 提供了 变量&#xff08;variables&#xff09;、嵌套规则&#xff08;nested rules&#xff09;、 混合&#xff08;mixins&#xff09;、 函数&#xff08;functions&#xff09;&#xff0c;目前我使用最多的还是变量和嵌套规则&#xff0c;貌似目前css也支持嵌套…

华为HCIP Datacom H12-821 卷38

1.多选题 下面关于 BGP中的公认属性的描述&#xff0c;正确的是 A、公认必遵属性是所有BGP路由器都识别&#xff0c;且必须存在于Updata消息中心 B、BGP必须识别所有公认属性 C、公认属性分为公认必遵和可选过渡两种 D、公认任意属性是所有BGP造由器都可以识别&#xff0c…

第100+15步 ChatGPT学习:R实现Ababoost分类

基于R 4.2.2版本演示 一、写在前面 有不少大佬问做机器学习分类能不能用R语言&#xff0c;不想学Python咯。 答曰&#xff1a;可&#xff01;用GPT或者Kimi转一下就得了呗。 加上最近也没啥内容写了&#xff0c;就帮各位搬运一下吧。 二、R代码实现Ababoost分类 &#xff…

mybatis动态传入参数 pgsql 日期 Interval ,day,minute

mybatis动态传入参数 pgsql 日期 Interval 在navicat中&#xff0c;标准写法 SELECT * FROM test WHERE time > (NOW() - INTERVAL 5 day)在mybatis中&#xff0c;错误写法 SELECT * FROM test WHERE time > (NOW() - INTERVAL#{numbers,jdbcTypeINTEGER} day)报错内…

根据脚手架archetype快速构建spring boot/cloud项目

1、找到archetype&#xff0c;并从私仓下载添加archetype到本地 点击IDEA的file&#xff0c;选择new project 选择maven项目&#xff0c;勾选create from archetype 填写archetype信息&#xff0c;&#xff08;repository填写私仓地址&#xff09; 2、选择自定义的脚手架arche…

C++进阶:继承和多态

文章目录 ❤️继承&#x1fa77;继承与友元&#x1f9e1;继承和静态成员&#x1f49b;菱形继承及菱形虚拟继承&#x1f49a;继承和组合 ❤️多态&#x1fa77;什么是多态&#xff1f;&#x1f9e1;多态的定义以及实现&#x1f49b;虚函数&#x1f49a;虚函数的重写&#x1f499…

海外媒体发稿-全媒体百科

全球知名媒体机构 在全球范围内&#xff0c;有许多知名的新闻机构负责报道世界各地的新闻事件。以下是一些国外常见的媒体机构&#xff1a; AP&#xff08;美联社&#xff09;合众国际社&#xff08;UPI&#xff09;AFP(法新社)EFE&#xff08;埃菲通讯社&#xff09;Europa …

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

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

【Redis】哨兵(sentinel)

文章目录 一、哨兵是什么&#xff1f;二、 哨兵sentinel文件参数三、 模仿主机redis宕机四、哨兵运行流程和选举原理SDOWN主观下线ODOWN客观下线 五、 使用建议 以下是本篇文章正文内容 一、哨兵是什么&#xff1f; 哨兵巡查监控后台master主机是否故障&#xff0c;如果故障了…

Elasticsearch 更新指定字段

Elasticsearch 更新指定字段 准备条件查询数据更新指定字段更新子级字段 准备条件 以下查询操作都基于索引crm_clue来操作&#xff0c;索引已经建过了&#xff0c;本文主要讲Elasticsearch更新指定字段语句&#xff0c;下面开始写更新语句执行更新啦&#xff01; 查询数据 查…

Linux(Ubuntu)/Windows-C++云备份实现

目录 项目介绍&#xff1a;概要设计&#xff1a;技术调研 详细设计&#xff1a;目录监控模块样例编写&#xff08;c17的filesystem中的文件遍历功能&#xff09; 数据管理模块样例编写&#xff08;unordered_map格式存储&#xff09; 文件压缩与解压缩模块bundle数据压缩库使用…

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

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

【qt】客户端连接到服务器

获取到IP地址和端口号. 通过connectToHost() 来进行连接. 对于客户端来讲,只需要socket即可. 客户端连接服务端只需要使用套接字(Socket)来进行通信。客户端通过创建一个套接字来连接服务端&#xff0c;然后可以通过套接字发送和接收数据。套接字提供了一种简单而灵活的方式来…

pycharm 占满磁盘

磁盘里没装什么大文件&#xff0c;发现磁盘被占的越来越满&#xff0c;使用工具查看到底是哪个文件如此之大。 发现罪魁祸首是pycharm&#xff01;&#xff01;&#xff01; 根据工具的提示找到对应的路径文件&#xff1a;E:\pycharm\PyCharmCE2022.3\python_packages 发现pa…

海外短剧开源系统UNIAPP源码(支持多语言/海外支付/快捷登录)

给大家推荐一款非常好的海外短剧系统源码&#xff0c;这款源码案例应该最多的。 他们的开源地址&#xff1a;https://gitee.com/qiao-yonggang/haiwaiduanju 这套系统的优势&#xff1a; 支持世界的所有语言&#xff0c;可后台自定义设置支持paypal stripe pix等多种海外支付…

Redis的配置优化、数据类型、消息队列

文章目录 一、Redis的配置优化redis主要配置项CONFIG 动态修改配置慢查询持久化RDB模式AOF模式 Redis多实例Redis命令相关 二、Redis数据类型字符串string列表list集合 set有序集合sorted set哈希hash 三、消息队列生产者消费者模式发布者订阅者模式 一、Redis的配置优化 redi…

easyExcel 不规则模板导入数据

文章目录 前言一、需求和效果二、难点和思路三、全部代码踩坑 前言 之前分享的 EasyExcel 批量导入并校验数据&#xff0c;仅支持规则excel&#xff0c;即首行表头&#xff0c;下面对应数据&#xff0c;无合并单元格情况。 本篇主要解决问题&#xff1a; 模板excel 表头不在首…