Page 328 - 《软件学报》2021年第10期
P. 328

3300                                 Journal of Software  软件学报 Vol.32, No.10, October 2021














                                    Fig.5    Relationship between kernel stack and process descriptor
                                               图 5   内核栈与进程描述符的关系
                 2.2.2    获取目标虚拟机内存内容
                    为了让虚拟机使用一段隔离的、从 0 开始且连续的内存空间,内存虚拟化机制引入了一层新的地址空间,
                 即虚拟机物理地址空间.如图 6 所示,虚拟机内存地址访问时存在两次地址转换:虚拟机页表完成虚拟机虚拟地
                 址 GVA(guest virtual  address)到虚拟机物理地址 GPA(guest physical address)的转换,该转换过程中得到的虚拟
                 机各级页目录项地址及最终的 GPA 均不能直接发送到真实物理机的系统总线,需通过 VMM 的扩展页表 EPT
                 (extended page table)将其转换为宿主机物理地址 HPA(host physical address).因此,VMOffset 通过在 VMM 中实
                 现上述地址转换流程,完成对 TVM 中指定 GVA 的内存访问,获取其对应的内容.
                                                                 PTE
                                                           PMD
                                                     PUD
                                              PGD
                                          GVA
                                                                       GPA

                                         CR3                                虚拟机
                                                                             VMM
                                                  EPT MMU
                                                           HPA            LV1
                                                                    LV2
                                                              LV3
                                                       LV4



                                                 EPTP
                                         Fig.6    Virtual machine address translation process
                                                 图 6   虚拟机地址转换流程
                 2.2.3    基于成员属性的约束条件制定
                    VMOffset 基于结构体成员自身属性制定相关约束条件,并依据约束条件对各个成员的偏移量候选项进行
                 筛选.具体地,如公式(4)所示:定义 XF candi 为成员 X 所有偏移量候选项的集合,xf 为集合中的每个候选偏移量,
                 Addr ts 为 TVM 发生 VM-EXIT 时当前进程 task_struct 结构体的起始地址,Con(Addrts+xf)为其 xf 偏移处的内存
                 内容,ConditionSet 为成员 X 的约束条件.VMOffset 基于第 2.2 节所述迭代方法,依据 ConditionSet 逐步缩小
                 XF candi 集合的成员数目得到成员 X 的最终 xf:
                                           XF candi ={xf|Con(Addr ts +xf)ConditionSet}               (4)
                    基于公式(4),针对不同的成员,具体化约束条件与筛选方法如下.
                    1)  成员 tasks.
                    tasks 成员为进程链表节点,在未遭受内核 Rootkit 攻击的情况下,tasks 所在链表的成员数目应与虚拟机中
   323   324   325   326   327   328   329   330   331   332   333