jailhouse.bin随机化加载的方法技术

技术编号:38053126 阅读:8 留言:0更新日期:2023-06-30 11:19
一种jailhouse.bin随机化加载的方法,包括准备阶段和加载运行阶段,在准备阶段修改现有的jailhouse.bin编译框架并解析和保存jailhouse.o重定位节内容,在加载运行阶段,依据所保存的jailhouse.o重定位节内容,得到jailhouse.bin的可重定位信息,按照实际加载的基地址,进行可重定位修正,使得内存中的jailhouse.bin的代码能够访问到正确的数据。本发明专利技术通过产生jailhouse.bin的可重定位节信息,实现了对内存中的jailhouse.bin代码及数据的可重定位修正,使得随机化后的jailhouse.bin仍然功能正常。jailhouse.bin仍然功能正常。jailhouse.bin仍然功能正常。

【技术实现步骤摘要】
jailhouse.bin随机化加载的方法


[0001]本专利技术涉及虚拟化驱动优化
,具体涉及jailhouse.bin随机化加载的方法。

技术介绍

[0002]jailhouse是一款基于静态分区的虚拟化方案,不支持任何设备模拟。通过root cell中的jailhouse.ko驱动,将jailhouse.bin加载到系统预留的物理内存区域,此后,jailhouse.bin即成为jailhouse hypervisor代码,为jailhouse提供分区虚拟化功能。当前jailhouse.ko必须将jailhouse.bin加载到固定的一个内核虚拟地址,否则将无法正常运行。
[0003]jailhouse现有方案,必须要求jailhouse.bin加载到固定root cell内核虚拟地址,这带来两个缺点:
[0004]1)如果这个内核地址被其他模块占用,则jailhouse将加载异常;
[0005]2)地址固定,代码容易被破坏者攻击,如进行控制流劫持攻击等。

技术实现思路

[0006]为解决已有技术存在的不足,本专利技术提供了一种jailhouse.bin随机化加载的方法,包括准备阶段和加载运行阶段,在准备阶段修改现有的jailhouse.bin编译框架并解析和保存jailhouse.o重定位节内容,在加载运行阶段,依据所保存的jailhouse.o重定位节内容,得到jailhouse.bin的可重定位信息,按照实际加载的基地址,进行可重定位修正,使得内存中的jailhouse.bin的代码能够访问到正确的数据。
[0007]其中,所述准备阶段包括如下步骤:
[0008]步骤S1:修改现有直接使用JAILHOUSE_BASE作为常数的代码,将其使用全局变量替换;
[0009]步骤S2:修改现有jailhouse.bin的编译框架,找到jailhouse hypervisor的Makefile,在原有

T链接命令之前,加入

q选项;
[0010]步骤S3:解析jailhouse.o重定位节内容,输出重定位条目及重定位条目对应的符号值和相对偏移;
[0011]步骤S4:按照一定格式记录步骤S3输出的重定位条目及重定位条目对应的符号值和相对偏移,并将其硬编码到代码中,为重定位修正做准备。
[0012]其中,所述步骤S3中,解析的重定位节内容包括代码段或者数据段中需要重定位的位置,重定位类型以及需要重定位修正的目标值。
[0013]其中,所述加载运行阶段包括如下步骤:
[0014]步骤Sa:通过jailhouse用户态工具,执行jailhouse enable cmd;
[0015]步骤Sb:jailhouse用户态工具,通过ioctl,将命令下发到jailhouse.ko注册的对应处理函数;
[0016]步骤Sc:jailhouse.ko读取硬盘上的jailhouse.bin固件内容;
[0017]步骤Sd:将系统预留的专用于jailhouse hypervisor的一片物理内存,映射到随机的虚拟地址;
[0018]步骤Se:依据硬编码的符号及偏移值,以及当前实际加载的基地址,更新符号的实际地址;
[0019]步骤Sf:依据保存的hypervisor.o的重定位节信息,修正当前需要进行重定位修正的jailhouse.bin的代码段及数据段。
[0020]其中,所述步骤Sf中,依据保存的hypervisor.o的重定位节信息,按照ELF重定位表项格式指示的标准流程,修正当前需要进行重定位修正的jailhouse.bin的代码段及数据段。
[0021]本专利技术提供的jailhouse.bin随机化加载的方法,通过产生jailhouse.bin的可重定位节信息,实现了对内存中的jailhouse.bin代码及数据的可重定位修正,使得随机化后的jailhouse.bin仍然功能正常。
附图说明
[0022]图1:本专利技术的jailhouse.bin随机化加载的方法的实现流程图。
具体实施方式
[0023]为了对本专利技术的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本专利技术的技术方案及其产生的有益效果。
[0024]本专利技术基于现有的jailhouse.bin必须加载到固定地址的缺点,提出了一种jailhouse.bin随机化加载的方法,破除必须加载到固定地址的限制,增加恶意攻击者攻击系统的难度,提升jailhouse的代码安全性。
[0025]本专利技术在jailhouse.ko加载jailhouse.bin的代码到随机的虚拟地址空间后,依据jailhouse.bin的可重定位信息,按照实际加载的基地址(即当前要写入的虚拟地址空间),进行可重定位修正,使得内存中的jailhouse.bin的代码能够访问到正确的数据,仍然是可执行的代码,从而保证加载到随机的基地址后,jailhouse.bin功能依旧正常。
[0026]在具体实施中,采用官方的jailhouse master版本,一台ARM Linux物理机,gcc 11(ld需要包含

q选项)分为两个阶段,准备阶段以及加载运行阶段。
[0027]一、准备阶段
[0028]1、修改现有直接使用JAILHOUSE_BASE作为常数的代码,将其使用全局变量替换。
[0029]2、修改现有jailhouse.bin的编译框架,找到jailhouse hypervisor的Makefile,在原有

T链接命令之前,加入

q选项,这样就可以在生成的no

pie/no

pic的jailhouse.o中,额外的生成重定位节信息,并且不影响修改前后的jailhouse.bin代码(jailhouse.bin前后hash值一样)。
[0030]3、解析jailhouse.o重定位节内容,包括代码段或者数据段中需要重定位的位置,重定位类型以及需要重定位修正的目标值,输出重定位类型为ABS类型的重定位条目以及该条目对应的符号值和相对偏移(基地址JAILHOUSE_BASE)。这些重定位条目,都是需要在jailhouse.bin随机化加载后,需要实际修正的位置(包括代码段和数据段)。
[0031]4、将第3步需要修正的信息,按照一定的记录格式,硬编码到代码中,为后续做重定位修正做准备。
[0032]二、加载运行阶段
[0033]1、用户通过jailhouse用户态工具,执行jailhouse enable cmd。
[0034]2、jailhouse用户态工具,通过ioctl,将命令下发到jailhouse.ko注册的对应处理函数。
[0035]3、jailhouse.ko读取硬盘上的jailhouse.bin固件内容本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种jailhouse.bin随机化加载的方法,包括准备阶段和加载运行阶段,在准备阶段修改现有的jailhouse.bin编译框架并解析和保存jailhouse.o重定位节内容,在加载运行阶段,依据所保存的jailhouse.o重定位节内容,得到jailhouse.bin的可重定位信息,按照实际加载的基地址,进行可重定位修正,使得内存中的jailhouse.bin的代码能够访问到正确的数据。2.如权利要求1所述的jailhouse.bin随机化加载的方法,其特征在于,所述准备阶段包括如下步骤:步骤S1:修改现有直接使用JAILHOUSE_BASE作为常数的代码,将其使用全局变量替换;步骤S2:修改现有jailhouse.bin的编译框架,找到jailhouse hypervisor的Makefile,在原有

T链接命令之前,加入

q选项;步骤S3:解析jailhouse.o重定位节内容,输出重定位条目及重定位条目对应的符号值和相对偏移;步骤S4:按照一定格式记录步骤S3输出的重定位条目及重定位条目对应的符号值和相对偏移,并将其硬编码到代码中,为重定位修正做准备。3.如权利要求2所述的jailhouse.bin随机化加载的方法,其...

【专利技术属性】
技术研发人员:陶术松马玉昆郭皓吴春光战茅
申请(专利权)人:麒麟软件有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1