代码编织梦想

目录

一、JOP

二、BTI

三、启用BTI

四、BTI是怎么实现的


一、JOP

JOP(Jump-oriented programming)类似于ROP(Return-Oriented Programming)。在 ROP 攻击中,会扫描出useful gadgets(易被攻击的一段代码),并将其串在一起(一般通过修改指令的跳转地址)。ROP 的useful gadgets一般为以函数返回 (RET) 结尾的序列。JOP 的useful gadgets则一般以间接跳转结尾,如函数指针或 case 语句。如下所示:

JOP 

攻击者利用 BLR 或 BR 指令可以针对任何可执行地址,而不仅仅是编译器或开发人员定义的入口点地址。

二、BTI

为了防止 JOP 攻击,Armv 8.5 引入了BTI(branch target indentificating)指令 。BTI(也称为 landing pads)可以配置处理器,以便 BR 和 BLR指令只能允许目标BTI指令。如果BR 和 BLR指令的目标不是BTI,则会生成跳转目标异常,如下所示:

BTI

BTI的使用大大减少了BR 和 BLR指令的可能目标数量,并使攻击变得更加困难。

三、启用BTI

使用转换表中的bit位(guarded page,GP 位)为每个页表启用BTI,此时GP=1。每页控件允许文件系统包含受登陆板保护的代码和旧代码的混合,如下所示:

BTI

BTI 指令的编码(如指针身份验证指令)在 NOP 空间内分配。受 BTI 保护的代码在不支持 BTI 的旧处理器上运行时,或者当 GP=0 时仍然可以运行,尽管没有额外的保护。

四、BTI是怎么实现的

PSTATE 新增字段 BTYPE记录跳转指令类型的。在执行间接跳转指令时,间接跳转的类型记录在 PSTATE.BTYPE中。以下列表显示了 BTYPE 对不同跳转指令采用的值:

BTYPE=11: BR, BRAA, BRAB, BRAAZ, BRABZ 与 X16 或 X17 以外的任何寄存器
BTYPE=10: BLR, BLRAA, BLRAB, BLRAAZ, BLRABZ
BTYPE=01: BR, BRAA, BRAB, BRAAZ, BRABZ 与 X16 或 X17

执行任何其他类型的指令(包括直接跳转)会导致 BTYPE 设置为 b00。

为什么要存储两个位?这样可以记录间接跳转是否正在进行中。但是,记录间接跳转的类型进一步限制了查找小工具的可能性。BTI 指令的语法包含一个参数,用于指定它可以由哪些类型的间接跳转作为目标:

Argument

Accepted PSTATE.BTYPE

Use case

BTI c

0b10 and 0b01

函数调用

BTI j

0b11 and 0b01

非函数调用分支,如case语句

BTI jc

All

All

当 BTYPE!=00 时,处理器会检查目标指令是否为登陆指令。如果它不是登陆,或者它是错误类型的间接跳转,则会生成异常。 

参考资料:Learn the architecture - Providing protection for complex software (arm.com)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xcxhzjl/article/details/128780444

LWN: arm64架构上最新的安全机制!-爱代码爱编程

点击上方蓝色“Linux News搬运工”关注我们~ Some near-term arm64 hardening patches By Jonathan CorbetNovember 18, 2019 原文来自:https://lwn.net/Articles/804982/ arm64架构是非常多的(可能是绝大多数)移动设备(mo

arm ubuntu 安装java,arm linux 安装 JRE-爱代码爱编程

arm linux 安装 JRE arm linux (非发行版)安装JDK和ubuntu上安装还是挺不一样的。现在ubuntu好像也可以在arm上运行,如果用ubuntu还是很方便的,但是好像ubuntu的arm版不太稳定,而且主要是现在用的板子系统不是ubuntu,而且这个板子的linux还加了自己做的驱动,不想再换成ubuntu做一遍驱动 -_

[armv9]-PAC:Pointer authentication和BTI:Branch target instructions介绍-爱代码爱编程

文章目录 1、Stack smashing and execution permissions2、Return-oriented programming(ROP)3、Jump-oriented programming 1、Stack smashing and execution permissions 最传统的一种攻击方式是栈溢出(stack

[专栏目录]-ARM学习笔记目录-爱代码爱编程

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 文章目录 armv9referenceARM coreARM异常architectureTrustzonemmu/cachegicATFassemblyregisterhypervisor其它思考 & 实验 & 答疑 armv9 [armv9]-

14-Providing protection for complex software-爱代码爱编程

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈相关链接: (专题:《learn-the-architecture系列》) 01-Introducing the Arm architecture02-Armv8-A Instruction Set Architecture03_Introduction_to_AMBA_AXI04-Tr

[ARM异常]-异常进入和异常退出时的arm core的硬件自动的行为-爱代码爱编程

引流关键词: IRQ,FIQ,Serror, 中断,同步异常,异步异常,TF-A,TF-M,ATF,TrustedFirmware,trustzone,TEE,optee,trusty,tlk,lk,armv8,armv9,arm,secureboot,BL31,BL32,BL1,BL2,hypervisor,终端安全,secureboot,secu

[ATF] ARM Trusted firmware 构建选项-爱代码爱编程

TF-A 构建系统支持以下构建选项。除非另有说明,这些选项应在构建命令行中指定,并且不会在任何组件生成文件中修改。请注意,构建系统不会跟踪构建选项的依赖性。因此,如果任何构建选项从先前的构建中发生更改,则必须执行干净的构建。 5.1. 常见的构建选项 AARCH32_INSTRUCTION_SET: 选择编译器应该使用的 AArch32 指令集。

ARM-translation table walk-爱代码爱编程

目录 ARM-translation table walkqcom sm8350平台的相关配置qcom sm8350 page levels and translation gurad sizeVMSAv8-64 translation table format descriptorstrace32解析的qcom 8350的一个 translati

arm64异常之异常入口和异常返回_田园诗人之园的博客-爱代码爱编程

ARM64异常之异常入口和异常返回 The AArch64 System Level Programmers’ Model - Exception entry and Exception return1 ARM64异

0-爱代码爱编程

deprecated !弃用! 请查看最新文章《[目录]-博客笔记导读目录(全部)》 置顶推荐: 1、ARMV8-aarch64的通用寄存器和系统寄存器介绍 2、ARM trustzone学习和总结-一篇就够了 3、

arm64内联汇编_aarch64内联汇编 内嵌汇编-爱代码爱编程

文章目录 前言1 Registers in AArch64 state2 内联汇编2.1 dmeo2.2 内联汇编格式 总结参考资料 前言 由于在内核代码中经常看到内联汇编代码,便总结下来

armv8.1-爱代码爱编程

简单阐述下ARMv8.1-M的一些特性,更多的特性及其详细信息,请查看Armv8-M Architecture Reference Manual-DDI0553B_m。 1. MVE(M-Profile Vector Ex

arm安全指令_arm execute-爱代码爱编程

pac, bti, mte Providing protection for complex software UXN & PXN UXN: User (EL0) Execute-never PXN: Privileged Execute-never 例如, application code应该在EL0用户空间执行(UXN=0),但不应

基础篇. arm架构和处理器(3)_realm management extension-爱代码爱编程

ARMv8\ARMv9架构部分特性总结 todo... 1.Armv9-A 架构 Armv9-A 架构建立在 Armv8-A 架构的基础上并向前兼容。 Armv9-A 架构构成了 Arm 基础系统架构的基础——该规