[发明专利]一种基于ARM指针验证的内核代码指针完整性保护方法有效
| 申请号: | 202010885933.9 | 申请日: | 2020-08-28 |
| 公开(公告)号: | CN112100686B | 公开(公告)日: | 2022-04-08 |
| 发明(设计)人: | 杨昱天;朱凇伯;申文博;周亚金;任奎;王文海 | 申请(专利权)人: | 浙江大学 |
| 主分类号: | G06F21/64 | 分类号: | G06F21/64;G06F21/12 |
| 代理公司: | 杭州求是专利事务所有限公司 33200 | 代理人: | 应孔月 |
| 地址: | 310058 浙江*** | 国省代码: | 浙江;33 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 arm 指针 验证 内核 代码 完整性 保护 方法 | ||
1.一种基于ARM指针验证的内核代码指针完整性保护方法,其特征在于,包括:
标记操作系统代码中所有的函数指针类型为敏感指针类型,得到初始化的敏感指针类型集,其中敏感指针类型集为所有敏感指针类型的集合;
根据初始化的敏感指针类型集和代码中包含的类型信息,计算并确定完整的敏感指针类型集;
根据确定的敏感指针类型集,标记代码结构体中所有敏感指针类型的域为敏感指针域,得到初始化的敏感指针域集,其中敏感指针域集为所有敏感指针域的集合;根据确定的敏感指针类型集,标记代码中所有敏感指针类型的变量为敏感指针变量,得到初始化的敏感指针变量集,其中敏感指针变量集为所有敏感指针变量的集合;
根据代码语义、初始化的敏感指针域集和初始化的敏感指针变量集,计算并确定完整的敏感指针变量集和敏感指针域集;
根据确定的敏感指针变量集,对操作系统内核代码进行如下修改:在敏感指针变量写入内存的代码前插入PAC生成代码StoreGenkey(sensptr),在敏感指针变量从内存中读取的代码后插入PAC验证代码LoadAuthkey(sensptr),其中key表示128bit的PA密钥,sensptr表示敏感指针变量,当操作系统内核运行时,动态执行插入的PAC生成代码生成敏感指针的PAC,动态执行插入的PAC验证代码验证敏感指针的PAC,若PAC验证通过,则代码指针一定完整,反之,则代码指针完整性被破坏;
在操作系统内核启动代码中插入PA密钥初始化代码keyinit(),该代码开启ARM CPU的PA特性并用随机数初始化PA密钥;
根据确定的敏感指针变量集,确定该集合中的全局变量,记为全局敏感指针变量;
根据确定的全局敏感指针变量,在keyinit()之后插入全局敏感指针变量初始化代码sensvar_init(),该代码对所有全局敏感指针变量调用StoreGenkey(gsensptr),其中key表示128bit的PA密钥,gsensptr表示全局敏感指针变量。
2.根据权利要求1所述一种基于ARM指针验证的内核代码指针完整性保护方法,其特征在于,根据初始化的敏感指针类型集和代码中包含的类型信息,计算并确定完整的敏感指针类型集,包括:
根据代码中包含的类型信息,找到所有包含敏感指针类型的结构体类型,将指向这些结构体的指针类型加入敏感指针类型集,重复这一步骤直到敏感指针类型集稳定。
3.根据权利要求1所述一种基于ARM指针验证的内核代码指针完整性保护方法,其特征在于,根据代码语义、初始化的敏感指针域集和初始化的敏感指针变量集,计算并确定完整的敏感指针变量集和敏感指针域集,包括:
所有来自敏感指针域、被敏感指针变量赋值、与敏感指针变量比较大小或者成为间接调用目标的变量都被标记为敏感指针变量,若敏感指针变量来自于结构体的一个域,则同时标记该域为敏感指针域,重复这一步骤直到敏感指针变量集和敏感指针域集稳定。
4.根据权利要求1所述一种基于ARM指针验证的内核代码指针完整性保护方法,其特征在于,在敏感指针变量写入内存的代码前插入PAC生成代码StoreGenkey(sensptr),包括:
若敏感指针变量为代码指针,则以敏感指针变量的内存地址作为修饰符,使用ARM提供的PACIA指令为敏感代码指针写入PAC,其中PA密钥保存在apia寄存器,若敏感指针变量为数据指针,则以敏感指针变量的内存地址作为修饰符,使用ARM提供的PACDA指令为敏感数据指针写入PAC,其中PA密钥保存在apda寄存器。
5.根据权利要求1所述一种基于ARM指针验证的内核代码指针完整性保护方法,其特征在于,在敏感指针变量从内存中读取的代码后插入PAC验证代码LoadAuthkey(sensptr),包括:
若敏感指针变量为代码指针,则以敏感指针变量的内存地址作为修饰符,使用ARM提供的AUTIA指令为敏感代码指针验证PAC,其中PA密钥保存在apia寄存器,若敏感指针变量为数据指针,则以敏感指针变量的内存地址作为修饰符,使用ARM提供的AUTDA指令为敏感数据指针验证PAC,其中PA密钥保存在apda寄存器;如果验证不通过,则表明操作系统内核的代码指针完整性被破坏,终止操作系统内核继续执行或是引发警报。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江大学,未经浙江大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010885933.9/1.html,转载请声明来源钻瓜专利网。





