发明名称 一种响应TOCTOU攻击的轻量级方法
摘要 本发明涉及一种响应TOCTOU攻击的轻量级方法,该方法在保证安全前提下充分考虑系统性能。方法中,特权域与虚拟机监控器之间额外定义了1个hypercall和数个虚拟中断(vIRQ),用于虚拟机监控器与特权域之间传递与本发明相关的信息。响应方法的组件包括在特权域的虚拟可信设备(vTPM)后端驱动中实现的四个模快和在虚拟机监控器中实现的攻击管理模块。实施了本发明提供的响应方法的系统比实施其他响应方法能抗击更多情形下的TOCTOU攻击;而且该响应方法实用性强,在没有收到攻击信号的情况下,系统不因为实施了该发明提供的响应方法而发生性能降低;此外该方法对原有系统修改少,可扩展性强;适用于多个可信客户虚拟域并行的环境。
申请公布号 CN101599115B 申请公布日期 2011.02.16
申请号 CN200910088133.8 申请日期 2009.07.03
申请人 北京交通大学 发明人 常晓林;韩臻;刘吉强;邢彬
分类号 G06F21/00(2006.01)I;G06F9/455(2006.01)I 主分类号 G06F21/00(2006.01)I
代理机构 北京正理专利代理有限公司 11257 代理人 张占榜
主权项 一种响应TOCTOU攻击的轻量级方法,其特征在于:实现所述方法的组件包括在特权域虚拟可信平台模块vTPM后端驱动中实现的四个模块和在虚拟机监控器中实现的攻击管理模块VMMmon;其中vTPM后端驱动实现的四个模块分别是初始化模块InitM、AgentM模块、FpakM模块和MpakM模块,响应方法的具体步骤如下:步骤1,在特权域与虚拟机监控器之间定义1个hypercall,用于特权域向虚拟机监控器传递信息;定义数个虚拟中断T_vIRQ,用于虚拟机监控器向特权域传递关于某个可信虚拟域的信息,每个虚拟中断对应一个运行的可信客户虚拟域;步骤2,在vTPM后端驱动的backend_change函数中实现初始化模块InitM,InitM模块通过解析backend_change函数中的dev结构中的nodename获得vTPM设备惟一标识号vID,所对应的虚拟域惟一标识号DomID,然后在步骤1所定义的虚拟中断中选取一个未被分配的T_vIRQ,将该选取的未被分配的T_vIRQ、vID和DomID绑定并记录下来,同时将绑定信息通过hypercall发送给VMMmon;步骤3,VMMmon接到hypercall发送来的绑定信息,首先判断是否已经有未被分配的T_vIRQ的信息,如果有,则用新的绑定关系替代以前的,然后保存;如果没有,则直接保存;每当虚拟机监控器监测到TOCTOU攻击,立即通知VMMmon,VMMmon首先获得被攻击的虚拟域的DomID,然后根据DomID获得相应的T_vIRQ,最后将攻击信号通过该获得的相应的T_vIRQ发送给特权域;步骤4,在vTPM后端驱动中实现AgentM模块,该AgentM模块对VMMmon发送的攻击信号进行预处理;每个T_vIRQ在特权域内核都有一个对应函数,特权域内核收到攻击信号后,调用T_vIRQ对应的处理函数,然后处理函数将T_vIRQ对应的vID作为参数,调用AgentM模块;步骤5,在vTPM后端驱动的vtpm_op_read函数中的异常处理部分实现FpakM模块;步骤6,在vTPM后端驱动的vtpm_op_write函数中的异常处理部分实现MpakM模块,MpakM配合AgentM和FpakM处理更多情况下的攻击;所述的步骤4的AgentM模块的具体过程为:步骤4.1,将vID放入一个名为attack_vID_list队列中;步骤4.2,如果aborted等于0,则设置aborted=2;步骤4.3,如果current_pak队列不为空,则对current_pak队列中所有vTPM前端驱动的信息,用FEpak表示一个vTPM前端驱动的信息;FEpak做如下工作,如果FEpak.vID存在于attack_vID_list队列中,则将该FEpak放入一个名tmp_pak队列中;否则放入一个名为attack_pak队列中;所述的步骤5的FpakM模块的具体过程为:步骤5.1,如果aborted不为零,执行步骤5.2,否则执行步骤5.9;步骤5.2,如果aborted为2,执行步骤5.3,否则执行步骤5.6;步骤5.3,如果copied_so_far不为零,执行步骤5.4,否则步骤5.5;步骤5.4,首先从pending_pak取出一个包,将数据发送给vTPM设备管理工具,然后判断如果该包对应的vID存在于attack_vID_list队列中,则将该FEpak放入attack_pak队列中,否则将该FEpak放入tmp_pak队列中,结束;步骤5.5,从attack_vID_list队列中取出一个vID并从该队列中删除该vID,然后伪造TPM_Extend指令,保存并将前14个字节以及vID发送给vTPM设备管理工具,然后置aborted=3和copied_so_far=0,结束;步骤5.6,如果aborted为3,执行步骤5.7,否则执行步骤5.8;步骤5.7,将步骤5.5保存的伪造TPM指令包的后24个字节内容传递给vTPM设备管理工具,如果attack_vID_list为空,则将aborted的值设置成0,否则将aborted的值设置成2,结束;步骤5.8,执行系统原有错误处理代码,结束;步骤5.9,执行原有系统发送数据包给vTPM设备管理工具的流程。所述的步骤6的MpakM模块的具体过程为:步骤6.1,用vID搜索tpm_pak队列,如果搜索到,则执行步骤6.3,否则执行步骤6.2;步骤6.2,用vID搜索attack_pak队列,如果搜索到,则执行步骤6.4,否则结束;步骤6.3,执行原有系统接收数据包并发给vTPM前端驱动的流程;步骤6.4,先把vTPM设备管理工具的数据包接收,如果长度大于14个字节,则将14字节之后的数据用随机数做XOR计算,然后再发给vTPM前端驱动。
地址 100044 北京市海淀区上园村3号