Linux 5.15安全特性之ARM64 PAC

ARM64 PAC(Pointer Authentication Code)机制是ARM架构中引入的一种安全特性,旨在提供指针的完整性和安全性保护。它通过在指针中插入一段额外的代码进行签名,以验证指针的完整性,从而抵御缓冲区溢出和代码注入等攻击。

PAC机制的主要原理如下:

1. 指针加密

当指针被创建时,其地址会被与密码密钥进行混淆,并生成一个加密签名。这个加密签名就是指针的PAC。

2. 指针验证

每当使用指针时,PAC会被解密并与解密后的地址进行比较。如果PAC验证失败,即指示指针已被篡改,系统将拒绝访问该指针所指向的内存。

PAC机制提供了AKey签名验证方法:

AKey签名

AKey签名机制是一种用于验证指针完整性的签名方法。它通过将地址密钥(AKey)与指针进行混淆并生成签名(PAC),以确保每个线程或进程都有其独特的PAC。

AKey是一个16位的加密密钥,它与线程或进程的特定标识(Thread Identifier, TID)相关联。TID是一个唯一的标识符,用于区分不同的线程或进程。每个线程或进程在运行时都会有一个唯一的TID和AKey。

AKey签名机制的工作原理如下:

1. AKey生成:对于每个线程或进程,系统会生成一个16位的AKey。这个AKey与TID相关联,确保每个线程或进程都有唯一的AKey。

2. 指针加密:在创建指针时,系统会使用该指针的地址与AKey进行异或运算(XOR),得到一个新的加密地址。

3. 签名生成:加密地址与PAC位域进行组合,生成最终的指针签名(PAC)。

4. 指针验证:每当使用指针时,系统会对PAC进行解密,并与相应的标识(如TID)和加密后的地址进行比较。如果PAC验证失败,即指示指针已被篡改,系统将拒绝访问该指针所指向的内存。

通过将AKey与每个线程或进程关联,AKey签名机制确保了指针的完整性和安全性。这种机制不仅可以抵御缓冲区溢出和代码注入等攻击,而且还可以防止指针的意外修改或篡改。同时,由于每个线程或进程具有唯一的AKey,这也增加了指针的随机性和安全性。

需要注意的是,AKey签名机制只是PAC机制中的一种验证方法,ARM64还有其他的签名和验证机制,如BKey签名机制和VA签名。这些机制共同工作,提供了更强的指针完整性保护。

具体实现上,PAC机制涉及到硬件和软件层面的支持:

1. 硬件支持:ARM64架构中引入了一系列新的指令,如指针加密指令(PACIA、PACIB、PACDA、PACDB)和指针验证指令(AUTIA、AUTIA1716、AUTIB、AUTIB1716、AUTDA、AUTDA1716、AUTDB、AUTDB1716),用来处理指针的加密和验证。

2. 软件支持:操作系统和编译器需要对PAC机制进行适当的支持。操作系统需要负责生成、验证和管理AKey和XKey,而编译器需要处理相应的指令插入和优化。

ARM64 PAC机制的引入旨在提高系统的安全性,防止针对指针的缓冲区溢出和代码注入攻击。它在软件和硬件层面提供了一种有效的指针完整性保护机制。

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

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

相关文章

抖音直播间购物小黄车的商品详情数据SKU接口轻松拿下

我们都知道,抖音直播购物车的商品链接只能是抖音小店的,如果没有开通抖音小店,还能添加小店链接吗? 也是可以的。 抖音直播小黄车的链接可以是自己的小店商品,也可以是别人的小店商品。 抖音直播上链接有两种方式&a…

在Redis中设置一个键值对并为其指定过期时间

在Redis中设置一个键值对并为其指定过期时间,可以使用 SET 命令结合 EXPIRE 命令来实现,或者直接使用 SETEX 命令。 以下是使用 SET 和 EXPIRE 命令的例子: SET mykey somevalue EXPIRE mykey 30上面的命令首先使用 SET 命令创建了一个名为…

大数据技术发展

▶1.大数据时代 美国互联网数据中心指出,互联网上的数据每年增长50%,每两年翻一番,目前世界上90%以上的数据是最近几年才产生的。此外,这些数据并非单纯是人们在互联网上发布的信息,85%的数据由传感器和计算机设备自动生成。全世…

centos7防火墙开启端口

1.查看防火墙状态 firewall-cmd --state如果返回的not running,那么需要先开启防火墙 2.开启关闭防火墙 systemctl start firewalld.service systemctl stop firewalld.service systemctl restart firewalld.service3.开放指定端口 firewall-cmd --zonepublic -…

MYSQL8用户权限配置详解

单位的系统性能问题需要把Mysql5升级到Mysql8,需要用到Mysql8的一些特性来提升系统的性能。 配置用户权限过程中发现一些问题,学习并记录一下。 目录 一、环境 二、MySQL8 用户权限 2.1 账号管理权限 2.1.1 连接数据库 2.1.2 账号权限配置 2.2 密码…

Container容器技术简介

本文介绍了容器技术出现背景,docker技术与容器编排技术的简单说明 背景 在传统项目的生产环境中,迁移一个用户态进程往往非常麻烦,因为一个用户态进程背后会附带这非常多例如函数库、中间件等的依赖项,但又没有像apt和yum一样的…

linux 僵尸进程 关闭看不见的进程

多卡训练,如果显存不够,程序会崩溃退出,但是gpu显存会一直占用。 nvidia-smi看不到相关进程,关闭进程方法: 目录 查询进程: 关闭方法 1: 使用 pkill 方法 2: 使用 ps, grep 和 awk 结合 kill 查询进程…

洗地机哪个牌子好用?洗地机希亦、石头、添可、西屋谁的清洁力更强?

洗地机的出现极大地改善了清洁过程,提高了效率,减少了人力投入。但随着市场上洗地机的种类和功能不断增加,人们可能会感到困惑,不知道如何选择适合自己需求的机器。为了帮助消费者更好地了解洗地机的选择,今天我将带大…

java21实战record

java程序员一直以如何让代码写的可维护性跟高,不论是框架还是代码都追求精益求精。 第一阶段:由于面向对象的要求,我们会将成员变量用私有属性修饰,但是,如果面临类中的成员变量比较多的情况下,修改会非常麻…

【python】包(package)与模块(module)、import、__name__与__main__

导入模块一般写在程序最前面,且顺序为:内置模块、第三方模块、自定义模块 一、模块(module)与包(package) 模块(module)可以理解为是一个.py文件,import 模块 相当于执行…

C语言-详解指针

目录 一.内存 1.内存的定义 2.内存的结构图 二.地址 1.什么是地址 2.什么是变量的地址 三.什么是指针 1.指针的定义 四.如何获取数据存储空间的地址 1.&运算符 五.指针变量 1.什么是指针变量(一级指针变量) 2.指针变量的定义 3…

Http中post和get

get产生一个tcp数据包,服务器只响应一次,而post请求服务器会响应两次(第一次发送请求头响应100,再次响应返回200,成功

高性能、低功耗并附带RAM的涓流充电实时时钟电路芯片D1302的描述

D1302是一块高性能、低功耗并附带RAM的涓流充电实时时钟电路。 主要特点: ● 实时时钟可提供秒、 分、小时、星期、日期、月 份和年等计时数据,到2100 年止。一个月小于31天时可自动调整,且具有闰年补偿功能 ● 31X8 位通用暂存RAM ● 采用…

XXL-JOB 日志表和日志文件自动清理

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

【POSTGIS】判定点位是否在范围内

项目上的需求,要判断当前打卡位置是否在项目范围10m内。 先做需求分析: (1)既然有10m的缓冲范围,那么就要用到st_buffer函数; (2)既然以m为单位,就要用到投影坐标系&…

vue中的动画组件使用及如何在vue中使用animate.css

“< Transition >” 是一个内置组件&#xff0c;这意味着它在任意别的组件中都可以被使用&#xff0c;无需注册。它可以将进入和离开动画应用到通过默认插槽传递给它的元素或组件上。进入或离开可以由以下的条件之一触发&#xff1a; 由 v-if 所触发的切换由 v-show 所触…

PHP之curl详细讲解

cURL&#xff08;全称为Client for URLs&#xff09;是一个功能强大的开源库&#xff0c;用于在多种协议上进行数据传输、发送HTTP请求和获取响应。它支持多种协议&#xff0c;包括HTTP、HTTPS、FTP、SMTP等&#xff0c;并且能够与各种服务器进行通信。 cURL库可以通过命令行工…

单机无锁线程安全队列-Disruptor

Disruptor 1、基本介绍 说到队列&#xff0c;除了常见的mq中间件&#xff0c;java中也自带线程安全的BlockingQueue&#xff0c;但是BlockingQueue通过在入队和出队时加锁的方式避免并发操作&#xff0c;性能上会大打折扣。 而Disruptor是一个线程安全、低延迟、吞吐量高的队…

redis整理

1. 数据类型 string , hash, 链表&#xff0c;Set, ZSet. string 底层是sds, sds与普通字符串的区别: a. sds存储了字符串长度&#xff0c;获取长度的时间复杂度为O(1); b. sds操作字符串会预先判断长度是否满足要求, 不会有字符串溢出的情况出现; c. 提前预分配, 惰性回收…

Vue学习计划--Vue2(四)watch、class、style、set

Vue 监听(watch): 监听一个属性的变化 监事属性watch: 当监视的属性变化时&#xff0c;回调函数自动调用&#xff0c;进行相关操作监视的属性必须存在&#xff0c;才能进入监视监视的两种写法&#xff1a; new Vue 时传入watch配置通过 vm.$watch()监视 immediate初始化时让han…