ARM BTI指令介绍

目录

一、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)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

趣多多代言人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值