CN116991543B - 宿主机、虚拟化实例自省方法及存储介质 - Google Patents

宿主机、虚拟化实例自省方法及存储介质 Download PDF

Info

Publication number
CN116991543B
CN116991543B CN202311249724.5A CN202311249724A CN116991543B CN 116991543 B CN116991543 B CN 116991543B CN 202311249724 A CN202311249724 A CN 202311249724A CN 116991543 B CN116991543 B CN 116991543B
Authority
CN
China
Prior art keywords
target
security detection
virtualized instance
address space
kernel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311249724.5A
Other languages
English (en)
Other versions
CN116991543A (zh
Inventor
郭蔚
朱延海
徐权
曾嘉豪
徐誉畅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Cloud Computing Ltd
Original Assignee
Alibaba Cloud Computing Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Cloud Computing Ltd filed Critical Alibaba Cloud Computing Ltd
Priority to CN202311249724.5A priority Critical patent/CN116991543B/zh
Publication of CN116991543A publication Critical patent/CN116991543A/zh
Application granted granted Critical
Publication of CN116991543B publication Critical patent/CN116991543B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45587Isolation or security of virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本申请实施例提供一种宿主机、虚拟化实例自省方法及存储介质。其中,通过将虚拟化实例的内核地址空间映射到宿主机的用户态地址空间,实现宿主机的用户态地址空间对虚拟化实例对应的内核数据和内核函数的存储。虚拟化管理器在响应安全检测请求时,可基于虚拟化实例的内核地址空间与宿主机的用户态地址空间之间的内存映射关系,从宿主机的用户态地址空间中获取安全检测请求关联的内核数据,并提供给部署于虚拟化实例的外部的宿主机上的安全检测程序,使得安全检测程序可获取虚拟化实例的内核数据,即获取虚拟化实例的操作系统层面的语义,跨越了虚拟机与虚拟化实例之间的语义鸿沟,实现了跨越语义鸿沟的虚拟化实例自省。

Description

宿主机、虚拟化实例自省方法及存储介质
技术领域
本申请涉及云计算技术领域,尤其涉及一种宿主机、虚拟化实例自省方法及存储介质。
背景技术
近年来,云计算、虚拟化技术的广泛应用,在一台主机上可部署多台虚拟机,提供针对不同用户的多种服务。随之而来的各种安全问题逐步暴露,相对于传统的物理主机,对虚拟机安全威胁的影响范围相对增加,虚拟机的安全问题更应得到重视。
虚拟机自省(Virtual Machine Introspection,VMI)是一种应用于虚拟化环境,从虚拟机外部增强虚拟机安全的一种方法。该技术通过直接扫描虚拟机运行时的内存、磁盘、监测网络行为等操作,可进行杀毒、网络防火墙等安全操作。
其中,安全检测软件运行在虚拟机外部的宿主机上,相比运行在虚拟机内部的传统检测方案,安全检测软件的安全性不再受虚拟机环境的影响,即使虚拟机受到入侵,基于宿主机和虚拟机之间的隔离性,安全检测软件也能正常执行。然而,宿主机与虚拟机的隔离性,也增加了虚拟机自省技术的实现难度,为应用虚拟机自省技术增强虚拟机安全的应用带来了很大的挑战。
发明内容
本申请的多个方面提供一种宿主机、虚拟化实例自省方法及存储介质,用以实现跨越语义鸿沟的虚拟化实例自省。
第一方面,本申请实施例提供一种宿主机,所述宿主机上部署有虚拟化管理器、被所述虚拟化管理器管理的虚拟化实例,以及位于所述虚拟化实例外部的安全检测程序;所述虚拟化管理器面向所述安全检测程序提供安全检测服务接口,以与所述安全检测程序进行交互;
所述虚拟化管理器,用于将所述虚拟化实例的内核地址空间映射到所述宿主机的用户态地址空间中的目标地址空间,所述目标地址空间中存储有所述虚拟化实例对应的内核数据和内核函数;以及
接收所述安全检测程序发送的安全检测请求,基于所述虚拟化实例的内核地址空间与所述宿主机的用户态地址空间之间的内存映射关系,从所述目标地址空间中获取所述安全检测请求关联的目标数据对象,所述目标数据对象包括所述虚拟化实例的至少部分内核数据,并将所述目标数据对象提供给所述安全检测程序,以供所述安全检测程序基于所述目标数据对象对所述虚拟化实例进行安全检测。
第二方面,本申请实施例还提供一种虚拟化实例自省方法,应用于宿主机上部署的虚拟化管理器,所述宿主机上还部署有所述虚拟化管理器对应的虚拟化实例以及安全检测程序,且所述虚拟化实例的内核地址空间被映射到所述宿主机的用户态地址空间中的目标地址空间;所述方法包括:
接收所述安全检测程序发送的安全检测请求;
基于所述虚拟化实例的内核地址空间与所述宿主机的用户态地址空间之间的内存映射关系,从所述目标地址空间中获取安全检测请求关联的目标数据对象,所述目标数据对象包括所述虚拟化实例的至少部分内核数据;
将所述目标数据对象提供给所述安全检测程序,以供所述安全检测程序基于所述目标数据对象对所述虚拟化实例进行安全检测。
第三方面,本申请实施例还提供一种虚拟化实例自省方法,应用于宿主机上部署的安全检测程序,所述宿主机上还部署有虚拟化管理器和虚拟化实例,且所述虚拟化实例的内核地址空间被映射到所述宿主机的用户态地址空间中的目标地址空间;所述方法包括:
根据对所述虚拟化实例进行安全检测的安全检测需求,从多种虚拟化实例自省模式中,选择目标虚拟化实例自省模式;
根据所述目标虚拟化实例自省模式的标识,生成安全检测请求;
将所述安全检测请求发送给所述虚拟化管理器,以供所述虚拟化管理器基于所述虚拟化实例的内核地址空间与所述宿主机的用户态地址空间之间的内存映射关系和所述目标虚拟化实例自省模式的标识,从所述目标地址空间中获取所述安全检测请求关联的目标数据对象,所述目标数据对象包括所述虚拟化实例的至少部分内核数据;
接收所述虚拟化管理器返回的所述目标数据对象,并根据所述目标数据对象对所述虚拟化实例进行安全检测。
第四方面,本申请实施例还提供一种电子设备,所述电子设备能够作为宿主机实现,所述宿主机上部署有虚拟化管理器、被所述虚拟化管理器管理的虚拟化实例,以及位于所述虚拟化实例外部的安全检测程序;所述虚拟化管理器面向所述安全检测程序提供安全检测服务接口,以与所述安全检测程序进行交互;
所述电子设备还包括:存储器和处理器;所述存储器中存储有所述虚拟化管理器对应的程序代码和所述安全检测程序;其中,所述处理器与所述存储器耦合,用于执行所述虚拟化管理器对应的程序代码,以用于实现本申请第二方面提供的宿主机自省方法中的步骤;以及用于执行所述安全检测程序,以用于实现本申请第三方面提供的宿主机自省方法中的步骤。
第五方面,本申请实施例还提供一种存储有计算机指令的计算机可读存储介质,当所述计算机指令被一个或多个处理器执行时,致使所述一个或多个处理器执行上述虚拟化实例自省方法中的步骤。
在本申请实施例中,通过将虚拟化实例的内核地址空间映射到宿主机的用户态地址空间,实现宿主机的用户态地址空间对虚拟化实例对应的内核数据和内核函数的存储。虚拟化管理器在响应安全检测请求时,可基于虚拟化实例的内核地址空间与宿主机的用户态地址空间之间的内存映射关系,从宿主机的用户态地址空间中获取安全检测请求关联的内核数据,并提供给部署于虚拟化实例的外部的宿主机上的安全检测程序,使得安全检测程序可获取虚拟化实例的内核数据,即获取虚拟化实例的操作系统层面的语义,跨越了虚拟机与虚拟化实例之间的语义鸿沟,实现了跨越语义鸿沟的虚拟化实例自省。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例提供的宿主机的内部系统结构示意图;
图2-图4为本申请实施例提供的虚拟化实例自省过程示意图;
图5为本申请实施例提供的虚拟化实例自省方法的流程示意图;
图6为本申请实施例提供的电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了实现虚拟化实例自省,在本申请一些实施例中,通过将虚拟化实例的内核地址空间映射到宿主机的用户态地址空间,实现宿主机的用户态地址空间对虚拟化实例对应的内核数据和内核函数的存储。虚拟化管理器在响应安全检测请求时,可基于虚拟化实例的内核地址空间与宿主机的用户态地址空间之间的内存映射关系,从宿主机的用户态地址空间中获取安全检测请求关联的内核数据,并提供给部署于虚拟化实例的外部的宿主机上的安全检测程序,使得安全检测程序可获取虚拟化实例的内核数据,即获取虚拟化实例的操作系统层面的语义,跨越了虚拟机与虚拟化实例之间的语义鸿沟,实现了跨越语义鸿沟的虚拟化实例自省。
以下结合附图,详细说明本申请各实施例提供的技术方案。
应注意到:相同的标号在下面的附图以及实施例中表示同一物体,因此,一旦某一物体在一个附图或实施例中被定义,则在随后的附图和实施例中不需要对其进行进一步讨论。
图1为本申请实施例提供的宿主机的内部系统结构示意图。宿主机S10可实现为任何具有计算、存储等功能的计算机设备,如服务器或终端设备等。终端设备可为电脑、工作站或手机等。如图1所示,宿主机S10上部署有虚拟化管理器10、被虚拟化管理器10管理的虚拟化实例20,以及,位于虚拟化实例外部的安全检测程序30。
在本实施例中,虚拟化实例20是指利用虚拟机技术,在一台宿主机上部署的多台虚拟服务器,可提供不同的服务。虚拟化实例20可为虚拟机(Virtual Machine,VM)、容器或容器组(如Pod等)。虚拟化实例20也可称为客户端(Guest)。宿主机操作系统负责在多个虚拟化实例20之间分配硬件资源,让多个虚拟化实例20彼此独立。
如图1所示,宿主机S10划分为用户态和内核态。虚拟化实例20和虚拟化管理器10部署于宿主机S10的用户态。其中,内核态和用户态为操作系统的两种不同的运行状态。在内核态下,可运行操作系统程序,操作硬件;而在用户态下只能运行应用程序。
虚拟化实例20又可划分为用户态和内核态。虚拟化实例20的用户态地址空间,用于存储虚拟化实例20的用户态数据。虚拟化实例20的内核态地址空间,用于存储虚拟化实例20对应的内核态数据,如内核数据及内核函数等。
虚拟化管理器10是指对虚拟化实例20进行管理的计算机程序,可实现为软件功能模块或插件等。虚拟化实例20的操作系统可虚拟化管理器10与硬件进行通信。虚拟化实例20的实现形式不同,虚拟化管理器10不同。
例如,在虚拟化实例20为容器或容器组的实施例中,可使用操作系统虚拟化架构将宿主机S10单个的操作系统划分为多个容器,使用容器管理器进行管理。多个是指2个或2个以上。宿主机操作系统负责在多个容器之间分配硬件资源,让多个容器彼此独立。相应地,虚拟化管理器10实现为容器管理器。
又例如,在虚拟化实例20为虚拟机的实施例中,不再对底层的硬件资源进行划分,而是在宿主机的操作系统上加装了虚拟机管理器(Virtual Machine Monitor,VMM),虚拟层作为应用级别的软件而存在,不涉及操作系统内核。虚拟层会给每个虚拟机模拟一套独立的硬件设备,包含处理器、内存、主板、显卡、网卡等硬件资源,在其上安装客户端操作系统。相应地,虚拟化管理器实现为VMM。
在本实施例中,安全检测程序30是指对虚拟化实例20进行安全检测的计算机程序,部署于虚拟化实例20外部的宿主机的用户态,实现虚拟化实例自省。在本实施例中,虚拟化实例自省是一种应用于虚拟化环境,从虚拟化实例外部增强虚拟化实例安全的一种方法。这样,安全检测程序30的安全性不再受虚拟化环境的影响,即便虚拟化实例20受到入侵,基于宿主机和虚拟化实例20之间的隔离性,入侵程序也无法干扰安全检测程序30,使得安全检测程序30能够正常运行,可提高安全检测程序的安全性。
然而,宿主机与虚拟化实例之间的隔离性,也带来了语义鸿沟(Semantic Gap)问题,即宿主机中的安全检测程序30无法获知虚拟化实例的内部语义,给利用虚拟化实例自省技术增强虚拟化实例安全的应用带来了困难。换句话说,宿主机与虚拟化实例之间的界面是虚拟化技术相关的寄存器等,没有安全检测程序30希望得到的虚拟化实例的操作系统层面上的语义,导致安全检测程序30无法获知虚拟化实例的操作系统层面上的语义,即为语义鸿沟。
在本实施例中,为了解决上述技术问题,实现跨越语义鸿沟的虚拟化实例自省,虚拟化管理器10将虚拟化实例的内核地址空间映射到宿主机S10的用户态地址空间中的目标地址空间。具体地,虚拟化管理器10可在虚拟化实例创建过程中,从宿主机S10的用户态地址空间中的空闲地址空间中,为虚拟化实例分配目标地址空间;并建立虚拟化实例的内核地址空间与目标地址空间之间的内存映射关系,实现虚拟化实例20的内核态地址空间,与宿主机S10的用户态地址空间中的目标地址空间之间的内存映射。
其中,虚拟化实例20的内核态地址空间与宿主机S10的用户态地址空间中的目标地址空间之间的映射,实质为虚拟化实例20的内核态地址空间存储的数据的映射,即将虚拟化实例20的内核态地址空间与宿主机S10的用户态地址空间中的目标地址空间,可将虚拟化实例20的内核态地址空间存储的数据(如虚拟化实例对应的内核数据及内核函数),存储至宿主机S10的用户态地址空间中的目标地址空间。这样,宿主机S10的用户态地址空间中的目标地址空间,存储有虚拟化实例20对应的内核数据及内核函数等。
由于宿主机S10的用户态地址空间中的目标地址空间,存储有虚拟化实例20对应的内核数据及内核函数,因此,部署于宿主机S10的用户态的虚拟化管理器10可从目标地址空间获取虚拟化实例20的操作系统层面的语义,即获取虚拟化实例20对应的内核数据,消除虚拟化实例20与宿主机S10之间的语义鸿沟。
具体地,安全检测程序30可根据安全检测需求,向虚拟化管理器10发送安全检测请求。该安全检测请求用于请求对虚拟化实例20进行安全监测。虚拟化管理器10可接收该安全检测请求(对应图1步骤1)。为了实现虚拟化管理器10和安全检测程序30之间的交互,可在虚拟化管理器10上设置面向安全检测程序30的安全检测服务接口101,以与安全检测程序30交互。
在本实施例中,不限定安全检测服务接口101的具体实现形式。如安全检测服务接口101可实现为远程过程调用(Remote Procedure Call,RPC)接口、套接字(Socket)接口或应用编程接口(Application Programming Interface,API)等。
在一些实施例中,安全检测服务接口101实现为RPC接口,则安全检测程序30可通过RPC方式调用安全检测服务接口101,并通过安全检测服务接口101向虚拟化管理器10发送安全检测请求。相应地,虚拟化管理器10可通过安全检测服务接口101获取安全检测请求。
进一步,虚拟化管理器10可响应于安全检测请求,基于上述虚拟化实例的内核地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间中获取安全检测请求关联的目标数据对象。该目标数据对象包括虚拟化实例20的至少部分内核数据。目标数据对象包括的内核数据,可包括从目标地址空间直接读取的内核数据,也可包括响应安全检测请求的过程中由虚拟化实例20中的内核函数产生的内核数据等。
其中,安全检测请求请求监测的目标对象不同,获取的目标数据对象也就不同。目标对象和目标数据对象是从不同角度进行的定义,从安全检测程序的角度来看,将其需要检测的对象称为目标对象;对目标对象进行监测得到的相关数据称为目标数据对象。在一些应用场景中,如果请求对一些内核数据进行监测,那么内核数据既有目标对象也是目标数据对象;当然,如果在一些应用场景中,请求对一些内核函数、进程或线程等进行监测,那么这些内核函数、进程或线程为目标对象,进程或线程产生的相关数据为目标数据对象。也就是说,目标对象与目标数据对象可能相同,也可能不相同。下面对目标对象和目标数据对象进行简单的示例性说明。例如,安全检测请求请求监测某些内核数据,则目标数据对象可实现为被监测的内核数据等。又例如,安全检测请求请求监测某内核函数,则目标数据对象可实现为被监测的内核函数运行过程中产生的内核数据等。安全检测请求请求监测的目标对象不同,从目标地址空间获取目标数据对象的实施方式也有所差异。这部分内容将在下文实施例中进行详细描述,在此暂不赘述。
进一步,虚拟化管理器10可将目标数据对象提供给安全检测程序30。具体地,虚拟化管理器10可通过安全检测服务接口101,将目标数据对象提供给安全检测程序30。
在一些实施例中,虚拟化管理器10可将目标数据对象转换为安全检测服务接口101支持的目标协议格式;并通过安全检测服务接口101,将具有目标协议格式的目标数据对象提供给安全检测程序30。
例如,安全检测服务接口为RPC接口,则安全检测服务接口101支持的目标协议格式为RPC协议格式。虚拟化管理器10可将目标数据对象转换为RPC协议格式;并通过安全检测服务接口,将具有RPC协议格式的目标数据对象提供给安全检测程序30。又例如,安全检测服务接口为Socket接口,安全检测服务接口支持的目标协议格式为Socket协议格式。虚拟化管理器10可将目标数据对象转换为Socket协议格式;并通过安全检测服务接口101,将具有Socket协议格式的目标数据对象提供给安全检测程序30等。
相应地,安全检测程序30可基于目标数据对象,对虚拟化实例20进行安全检测。其中,安全检测请求请求监测的目标对象不同,对虚拟化实例20进行安全检测的具体实施方式也不同,这部分内容将在下文实施例中进行详述,在此暂不赘述。
在本实施例中,通过将虚拟化实例的内核地址空间映射到宿主机的用户态地址空间中的目标地址空间,实现宿主机的用户态地址空间对虚拟化实例对应的内核数据和内核函数的存储。这样,虚拟化管理器在响应安全检测请求时,可基于虚拟化实例的内核地址空间与宿主机的用户态地址空间之间的内存映射关系,从宿主机的用户态地址空间中获取安全检测请求关联的内核数据,并将安全检测请求关联的内核数据提供给部署于虚拟化实例的外部的宿主机上的安全检测程序,使得安全检测程序可获取虚拟化实例的内核数据,即虚拟化实例的操作系统层面的语义,跨越了虚拟机与虚拟化实例之间的语义鸿沟,实现了跨越语义鸿沟的虚拟化实例自省。
下面结合安全检测请求请求监测的目标对象,对上述虚拟化管理器在从宿主机的用户态地址空间中的目标地址空间中获取安全检测请求关联的目标数据对象的具体实施方式进行示例性说明。
如图2所示,在一些实施例中,安全检测请求请求监测的目标对象为特定的内核数据(定义为目标内核数据),则目标数据对象可实现为目标内核数据。例如,目标数据对象可为执行查询进程命令所需的用于描述进程的结构体及特定属性等。其中,用于描述进程的结构体被装载到内存里并且包含进程的信息,包括:进程号(PID)、进程名(Comm)、进程的状态(State)、进程运行的时间及进程内存管理信息等。在找到任何一个进程的情况下,就可以通过当前进程的任务(task)成员变量中next指针值得到下一进程的用于描述进程的结构体地址,如此,依次遍历即可找到所有的进程的用于描述进程的结构体。例如,在Linux系统中,查询进程命令可为PS命令,用于描述进程的结构体为task_struct。
在该实施例中,如图2所示,安全检测程序30可根据实际检测需求,确定待监测的目标内核数据;并将目标内核数据的标识封装至安全检测请求。之后,可将安全检测请求发送给虚拟化管理器10(对应图2步骤1)。虚拟化管理器10可响应于安全检测请求,创建线程模块102,该线程模块102用于获取安全检测请求请求监测的内核数据。进一步,虚拟化管理器10可将安全检测请求提供给线程模块102(对应图2步骤2)。线程模块102可基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间中获取安全检测请求请求监测的目标内核数据,作为目标数据对象(对应图2步骤3)。
具体地,线程模块102可从安全检测请求中,获取待监测的内核数据的标识;并基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间中获取待监测的内核数据的标识对应的内核数据,作为安全检测请求请求监测的目标内核数据,即作为目标数据对象。
在本实施例中,线程模块102可基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,访问目标地址空间;并从目标地址空间,直接获取安全检测请求请求监测的目标内核数据,作为目标数据对象。
当然,线程模块102也可执行虚拟化实例对应的用于数据提取的内核函数(可记为第一内核函数);并基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,控制用于数据提取的内核函数从目标地址空间,获取安全检测请求请求监测的目标内核数据,作为目标数据对象。
进一步,线程模块102可将安全检测请求请求监测的目标内核数据提供给安全检测程序30(对应图2步骤4和5)。具体地,线程模块102可将安全检测请求请求监测的目标内核数据,转换为安全检测服务接口101支持的目标协议格式;并通过安全检测服务接口101将具有目标协议格式的目标内核数据提供给安全检测程序30(对应图2步骤4和5)。安全检测程序30可获取具有目标协议格式的目标内核数据;并对具有目标协议格式的目标内核数据进行解析,以得到安全检测请求请求监测的目标内核数据。进一步,安全检测程序30可基于安全检测请求请求监测的目标内核数据,对虚拟化实例30进行安全检测(对应图2步骤6)。
可选地,安全检测程序30可对安全检测请求请求监测的目标内核数据进行完整性及准确度校验;若安全检测请求请求监测的目标内核数据通过完整性及准确度校验,则虚拟化实例30中的安全检测请求请求监测的目标内核数据通过安全检测。反之,虚拟化实例30中的安全检测请求请求监测的目标内核数据未通过安全检测,说明虚拟化实例30未通过安全检测,存在被入侵的可能性。例如,如图2所示,虚拟化实例20被恶意应用程序B入侵等。
上述实施例示出的虚拟化实例自省模式,可定义为第一虚拟化实例自省模式。对于第一虚拟化实例自省模式:安全检测程序主动扫描虚拟化实例的内核态内存,即虚拟化实例的内核不会主动报告目标数据对象。对于虚拟化实例来说,为被动型虚拟化实例自省。这种虚拟化实例自省模式对虚拟化实例的服务性能影响较小,适用于虚拟化实例对服务性能要求较高,即虚拟化实例对服务性能较为敏感的情况。
下面以安全检测请求请求监测的内核数据为查询进程命令(如PS命令)所需的内核数据为例,对上述第一虚拟化实例自省模式进行示例性说明。
对于查询进程命令(如PS命令),所需的内核数据可包括:用于描述进程的结构体(如task_struct列表)及特定属性等。相应地,安全检测请求可包括:查询进程命令(如PS命令)所需的内核数据的标识。
线程模块102可从安全检测请求中,获取查询进程命令(如PS命令)所需的内核数据的标识;并基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间获取描述进程的结构体(如task_struct列表),并基于该描述进程的结构体(如task_struct列表),在目标地址空间遍历所有进程的描述进程的结构体(如task_struct列表),从目标地址空间获取虚拟化实例中所有进程的用于描述进程的结构体及所有进程的特定属性。
进一步,线程模块102可将所有进程的用于描述进程的结构体及所有进程的定属性,提供给安全检测程序30。安全检测程序30可基于所有进程的用于描述进程的结构体及所有进程的特定属性,对虚拟化实例进行安全检测。
上述实施例示出的第一虚拟化实例自省模式仅为示例性说明,并不构成限定。为了提高发现虚拟化实例被入侵的及时性,本申请实施例还提供另一种虚拟化实例自省模式,定义为第二虚拟化实例自省模式。第二虚拟化实例自省模式为主动型虚拟化实例自省模式,即虚拟化实例可通过虚拟化管理器及时向安全检测程序报告虚拟化实例的相关行为及数据。安全检测程序可根据虚拟化实例通过虚拟化管理器主动报告的相关内容,对虚拟化实例进行安全检测。下面对第二虚拟化实例自省模式进行详细说明。
如图3所示,安全检测程序30可根据安全检测需求,请求检测特定的内核函数(定义为目标内核函数)。例如,特定的内核函数可为进程管理函数,如创建新进程的内核函数、在父进程中创建子进程的内核函数等。在Linux系统中,创建新进程的内核函数可为do_fork()函数;在父进程里创建子进程的内核函数可为execve()函数等。相应地,安全检测程序30可将请求监测的目标内核函数的标识,封装在安全检测请求中;并将安全检测请求发送给虚拟化管理器10(对应图3步骤1)。关于安全检测程序30将安全检测请求发送给虚拟化管理器10的实施方式,可参见上述实施例的相关内容,在此不再赘述。
虚拟化管理器10可响应于安全检测请求,创建另一线程模块103(对应图3步骤2)。在本申请实施例中,为了便于描述和区分,将上述第一虚拟化实例自省模式中创建的线程模块102,定义为第一线程模块;将本实施例中创建的线程模块103定义为第二线程模块。
进一步,第二线程模块103可在安全检测请求请求监测的目标内核函数上挂载钩子(Hook)函数(对应图3步骤3)。钩子函数可在目标内核函数运行过程中感知一些事件并通知第二线程模块103,例如可以感知目标内核被执行的事件并通知第二线程模块103该目标内核函数被执行,或者也可以感知目标内核函数执行完成的事件并通知第二线程模块103,或者也可以感知目标内核函数在运行过程中调用了某个函数或者访问了目标地址空间或者创建了某个线程等事件并通知第二线程模块103。其中,钩子函数需要感知的事件可根据应用需求灵活设置,对此不做限定。
在本实施例中,钩子函数可为第二线程模块103实时挂载的,也可为第二线程模块103在其它安全检测请求执行过程中预先挂载的。
对于上述安全检测程序30,可根据实际安全检测需求,确定请求监测的目标内核函数的标识、目标内核函数中用于挂载钩子(Hook)函数的跟踪点(tracepoint)的标识及钩子函数的标识。进一步,安全检测程序30可将目标内核函数的标识、目标内核函数中用于挂载钩子函数的跟踪点的标识及钩子函数的标识,封装至安全检测请求中;并将安全检测请求发送至虚拟化管理器10。
相应地,虚拟化管理器10创建的第二线程模块103,可从安全检测请求中,获取目标内核函数的标识、目标内核函数中的跟踪点的标识及所述钩子函数的标识;并基于钩子函数的标识,获取钩子函数的代码。可选地,第二线程模块103可基于钩子函数的标识,从代码库中下载钩子函数的代码。
进一步,第二线程模块103可基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系及目标内核函数的标识,从目标地址空间确定内核函数的代码;并根据跟踪点的标识,在目标内核函数的代码中确定跟踪点;之后,可在目标地址空间,利用钩子函数的代码在跟踪点修改目标内核函数的代码,从而在目标内核函数的跟踪点上挂载上述钩子函数。
钩子函数可在目标内核函数运行过程中可以感知设定的事件,并通知第二线程模块103。相应地,第二线程模块103可在钩子函数在目标内核函数运行过程中发出通知的情况下,基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间获取目标内核函数在运行过程中产生的内核数据,作为目标数据对象(对应图3步骤4)。
具体地,目标内核函数在运行过程中,可将产生的内核数据存储于虚拟化实例的内核态地址空间;虚拟化管理器10可将虚拟化实例的内核态地址空间中的目标内核函数在运行过程中产生的内核数据,映射到宿主机的用户态地址空间中的目标地址空间。因此,目标地址空间存储有目标内核函数在运行过程中产生的内核数据。基于此,运行于宿主机的用户态的第二线程模块103,可基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间获取目标内核函数在运行过程中产生的内核数据,作为目标数据对象。
在一些实施例中,目标内核函数为进程管理函数,则钩子函数可在进程管理函数运行过程中,通知第二线程模块103进行管理函数被执行。第二线程模块103可响应于钩子函数发出的通知,基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间获取在进程管理函数运行过程中所管理的目标进程的内核数据,作为目标数据对象。其中,目标进程的内核数据包括但不局限于:进程号(PID)、进程名、进程的状态(State)、进程运行的时间、进程内存管理信息及上下文数据等。上下文数据是指进程执行时处理器的寄存器中的数据。
例如,进程管理函数为创建新进程的内核函数,如do_fork()函数等。钩子函数可在虚拟化实例中的创建新进程的内核函数运行过程中,通知第二线程模块103创建新进程的内核函数被执行。第二线程模块103可响应于钩子函数的通知,获取创建新进程的内核函数运行过程中创建的新进程的内核数据,作为目标数据对象。
进一步,第二线程模块103可将目标内核函数在运行过程中产生的内核数据,提供给安全检测程序30(对应图3步骤5和6)。关于将目标内核函数在运行过程中产生的内核数据提供给安全检测程序30的具体实施方式,可参见上述实施例的相关内容,在此不再赘述。相应地,安全检测程序30可基于目标内核函数在运行过程中产生的内核数据,对虚拟化实例进行安全检测(对应图3步骤7)。
可选地,安全检测程序30可对目标内核函数在运行过程中产生的内核数据进行特征提取,以得到内核数据特征;利用预先训练完成的恶意程序检测模型对内核数据特征进行安全检测,以识别虚拟化实例是否被恶意程序入侵。其中,恶意程序检测模型是以虚拟化实例被恶意程序入侵后,虚拟化实例的内核函数在运行过程中产生的内核数据为训练样本训练完成的。
上述实施例提供的第二虚拟化实例自省模式,虚拟化管理器可通过在监测的虚拟化实例的目标内核函数上挂载钩子函数,并利用钩子函数主动通知目标内核函数被运行。这样,虚拟化管理器中的第二线程模块可及时获取目标内核函数运行过程中产生的内核数据,并及时反馈给安全检测程序进行安全检测,有助于提高对虚拟化实例安全检测的及时性。因此,上述第二虚拟化实例自省模式,适用于对虚拟化实例安全检测的及时性要求较高的情况,即对虚拟化实例安全检测的及时性敏感的情况。
上述实施例提供的第一虚拟化实例自省模式及第二虚拟化实例自省模式中的安全检测程序的安全检测逻辑,运行在虚拟化管理器10的外部,在对虚拟化实例进行安全检测过程中,需要虚拟化管理器10与安全检测程序30之间通过安全检测服务接口101进行交互。对于安全检测逻辑比较复杂的实施例来说,则虚拟化管理器10与安全检测程序30之间的交互也较为复杂,影响安全检测速度。
为了提高虚拟化实例的安全检测速度,本申请实施例还提供另一虚拟化实例自省模式,定义为第三虚拟化实例自省模式。在第三虚拟化实例自省模式中,将传统方案中运行在虚拟机里的安全检测逻辑“下沉”到宿主机的虚拟化管理器10上,而结果就像安全检测逻辑运行在虚拟化实例里一样。下面进行具体说明。
如图4所示,安全检测程序30可根据实际安全检测需求,确定预先与虚拟化管理器10约定的安全检测逻辑。安全检测逻辑在虚拟化管理器10中以线程形式运行在虚拟化管理器10中。相应地,安全检测程序30可根据实际安全检测需求,确定待监测的目标安全检测线程;并将目标安全检测线程的标识封装至安全检测请求中。进一步,安全检测程序30可将安全检测请求发送给虚拟化管理器10(对应图4中的步骤1)。
虚拟化管理器10响应于安全检测请求,可创建另一线程模块104(定义为第三线程模块)(对应图4中的步骤2)。第三线程模块104可创建安全检测请求请求监测的目标安全检测线程105(对应图4中的步骤3)。其中,目标安全检测线程105可基于预先封装好的虚拟化实例的系统调用接口作为用户态程序,运行在虚拟化实例20的操作系统之上(对应图4中的步骤4)。这样,目标安全检测线程105在其它虚拟化实例的用户态看起来,就像运行在虚拟化实例的用户态的线程,即就像图4中运行在虚拟化实例的用户态的目标安全检测线程代理。预先封装好的虚拟化实例的系统调用接口可为syscall接口,如创建新进程fork()接口、在父进程中创建子进程execv()接口等。
由于目标安全检测线程105可基于预先封装好的虚拟化实例的系统调用接口作为用户态程序,运行在虚拟化实例20的操作系统之上,因此,目标安全检测线程105可访问操作系统的用户态地址空间。因此,目标安全检测线程可基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间中获取目标安全检测线程关注的内核数据。
其中,目标安全检测线程105关注的内核数据由该线程自身的安全检测逻辑决定。例如,目标安全检测线程105用于监测虚拟化实例的特定的内核数据,则可基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间中获取目标安全检测线程监测的内核数据,作为目标安全检测线程105关注的内核数据。又例如,目标安全检测线程105用于监测虚拟化实例对应的特定的内核函数,则目标安全检测线程105可基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间获取被监测的内核函数运行过程中产生的内核数据,作为目标安全检测线程105关注的内核数据。
例如,在一些实施例中,目标安全检测线程的安全检测逻辑,为运行周期性监测(Watch)程序。Watch程序是周期性地执行某个命令并显示执行结果的命令。例如监测虚拟化实例的处理器,如中央处理器(Central Processing Unit,CPU)的动态负载,则可根据指定的时间间隔刷新CPU的负载信息。则目标安全检测线程关注的内核数据,为虚拟化实例的CPU的负载信息。
进一步,目标安全检测线程105可将获取的关注的内核数据输出。相应地,第三线程模块104可获取目标安全检测线程105输出的数据,作为目标数据对象(对应图4中的步骤5)。目标安全检测线程105输出的数据,即为目标安全检测线程105关注的内核数据。
进一步,第三线程模块104可将目标安全检测线程105关注的内核数据,提供给安全检测程序30(对应图4中的步骤6和7)。安全检测程序30可基于目标安全检测线程105关注的内核数据,对虚拟化实例20进行安全检测(对应图4中的步骤8)。
在目标安全检测线程105关注的内核数据为虚拟化实例的特定的内核数据的情况下,可基于虚拟化实例的特定的内核数据,对虚拟化实例20进行安全检测,其具体安全检测方式可参见上述第一虚拟化实例自省模式的相关内容,在此不再赘述。在目标安全检测线程105关注的内核数据为虚拟化实例的特定的内核函数在运行过程中产生的内核数据的情况下,可基于特定的内核函数在运行过程中产生的内核数据,对虚拟化实例20进行安全检测,其具体安全检测方式可参见上述第二虚拟化实例自省模式的相关内容,在此不再赘述。
根据上述三种虚拟化实例自省模式,可知三种虚拟化实例自省模式各有优劣。在实际使用过程中,可采用三种虚拟化实例自省模式中的一种进行实施,当然,也可结合三种虚拟化实例自省模式中的多种进行实施。例如,可结合三种虚拟化实例自省模式中的任意2种进行实施,当然也可结合三种进行实施。在多种虚拟化实例自省模式结合进行实施时,多种虚拟化实例自省模式可优劣互补,取长补短,提高虚拟化实例安全检测的性能。
在结合三种虚拟化实例自省模式中的多种进行实施的示例中,可由安全检测程序30确定在线安全检测时采用哪种虚拟化实例自省模式。具体地,安全检测程序30可根据对虚拟化实例20进行安全检测的安全检测需求,从多种虚拟化实例自省模式中,确定目标虚拟化实例自省模式;根据目标虚拟化实例自省模式的标识,生成安全检测请求并发送给虚拟化管理器。
其中,对虚拟化实例20进行安全检测的安全检测需求可由用户决定,也可由安全检测程序30的安全检测逻辑决定。对虚拟化实例20进行安全检测的安全检测需求可包括:全检测过程中虚拟化实例的服务性能需求、安全检测的及时性需求、及对虚拟化实例进行安全检测的安全检测线程的逻辑复杂程度中的至少一种。
基于上述三种虚拟化实例自省模式的特点,可知上述第一虚拟化实例自省模式对虚拟化实例的侵入性较低,对虚拟化实例的服务性能影响较小,因此,第一虚拟化实例自省模式适用于虚拟化实例对服务性能较为敏感的情况。相应地,安全检测程序30可在安全检测需求指示虚拟化实例对服务性能较为敏感的情况下,确定目标虚拟化实例自省模式为第一虚拟化实例自省模式。
由于上述第二虚拟化实例自省模式的安全检测的及时性较高,因此,安全检测程序30可在安全检测需求指示虚拟化实例对安全检测及时性比较敏感的情况下,确定目标虚拟化实例自省模式为第二虚拟化实例自省模式。
由于上述第三虚拟化实例自省模式适用于安全检测逻辑较为复杂的实施例,因此,安全检测程序30可在安全检测需求指示对虚拟化实例进行安全检测的逻辑复杂程度为设定的逻辑复杂程度的情况下,确定目标虚拟化实例自省模式为第三虚拟化实例自省模式。进一步,在该情况下,可以确定目标对象的类型为对虚拟化实例进行安全检测的安全检测线程。本申请实施例并不限定“设定的逻辑复杂程度”的具体复杂度,可以根据应用需求灵活设定。
进一步,安全检测需求中还可以包含目标对象的描述信息及目标对象的类型,在该情况下,安全检测程序30还可以根据安全检测需求包含的目标对象的描述信息及目标对象的类型,确定目标对象的标识;并根据目标对象的标识及目标虚拟化实例自省模式的标识,生成安全检测请求。进一步,安全检测程序30可将安全检测请求提供给虚拟化管理器10。
相应地,虚拟化管理器10可从安全检测请求中,获取目标虚拟化实例自省模式的标识;并根据目标虚拟化实例自省模式的标识,创建目标虚拟化实例自省模式对应的目标线程模块。其中,目标虚拟化实例自省模式是安全检测程序根据对虚拟化实例进行安全检测的安全检测需求,从多种虚拟化实例自省模式中选择使用的至少一种虚拟化实例自省模式,不同虚拟化实例自省模式对应不同的线程模块。其中,第一虚拟化实例自省模式对应的线程模块为第一线程模块;第二虚拟化实例自省模式对应的线程模块为第二线程模块;第三虚拟化实例自省模式对应的线程模块为第三线程模块。
目标虚拟化实例自省模式可为1种或多种。多种是指2种或2种以上。目标虚拟化实例自省模式的具体数量,由对虚拟化实例20进行安全检测的安全检测需求决定。例如,若对虚拟化实例20进行安全检测的安全检测需求指示虚拟化实例对服务性能较为敏感,且对安全检测及时性也较为敏感,则确定目标虚拟化实例自省模式为第一虚拟化实例自省模式和第二虚拟化实例自省模式。相应地,虚拟化管理器10可以根据目标虚拟化实例自省模式的标识,确定需要创建的目标线程模块包括第一线程模块和第二线程模块,进而同时控制第一线程模块基于内存映射关系从目标地址空间中获取安全检测请求请求监测的内核数据作为目标数据对象,以及控制第二线程模块利用虚拟化实例的内核函数上挂载钩子函数获取目标内核函数在运行过程中产生的内核数据作为目标数据对象。
进一步可选地,在安全检测请求中包含目标对象的标识的情况下,目标线程模块可从安全检测请求中,获取目标对象的标识;并基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间获取目标对象的标识关联的目标数据对象。其中,目标对象的类型包括内核数据这一类型,目标对象的标识关联的目标数据对象包括安全检测请求请求监测的目标内核数据。和/或,目标对象的类型包括目标内核函数这一类型,目标对象的标识关联的目标数据对象包括安全检测请求请求监测的目标内核函数运行过程中产生的内核数据。和/或,目标对象的类型包括目标安全检测线程这一类型,目标对象的标识关联的目标数据对象包括目标安全检测线程关注的内核数据。
关于目标虚拟化实例自省模式对应的线程模块,基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间获取目标对象的标识关联的目标数据对象的具体实施方式,可参见上述各实施例中的相关内容,在此不再赘述。
本申请实施例在多种虚拟化实例自省模式结合进行实施时,多种虚拟化实例自省模式可优劣互补,取长补短,提高虚拟化实例安全检测的性能。
除了上述宿主机之外,本申请实施例还提供虚拟化实例自省方法。下面对本申请实施例提供的虚拟化实例自省方法进行示例性说明。
图5为本申请实施例提供的虚拟化实例自省方法的流程示意图。该虚拟化实例自省方法可适用于宿主机上部署的虚拟化管理器。宿主机上还部署有被虚拟化管理器管理的虚拟化实例以及位于虚拟化实例外部的安全检测程序,且虚拟化实例的内核地址空间被映射到宿主机的用户态地址空间中的目标地址空间。如图5所示,该虚拟化实例自省方法主要包括:
501、接收安全检测程序发送的安全检测请求。
502、基于虚拟化实例的内核地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间中获取安全检测请求关联的目标数据对象,目标数据对象包括虚拟化实例的至少部分内核数据。
503、将目标数据对象提供给安全检测程序,以供安全检测程序基于目标数据对象对虚拟化实例进行安全检测。
在本实施例中,虚拟化实例和虚拟化管理器部署于宿主机的用户态。虚拟化实例又可划分为用户态和内核态。虚拟化实例的用户态地址空间,用于存储虚拟化实例的用户态数据。虚拟化实例的内核态地址空间,用于存储虚拟化实例对应的内核态数据,如内核数据及内核函数等。关于虚拟化管理器、虚拟化实例及安全检测程序的实现形式的描述,可参见上述宿主机实施例的相关内容,在此不再赘述。
在本实施例中,安全检测程序部署于虚拟化实例外部的宿主机的用户态,实现虚拟化实例自省。这样,安全检测程序的安全性不再受虚拟化环境的影响,即便虚拟化实例受到入侵,基于宿主机和虚拟化实例之间的隔离性,入侵程序也无法干扰安全检测程序,使得安全检测程序能够正常运行,可提高安全检测程序的安全性。
然而,宿主机与虚拟化实例之间的隔离性,也带来了语义鸿沟(Semantic Gap)问题,即宿主机中的安全检测程序无法获知虚拟化实例的内部语义,给利用虚拟化实例自省技术增强虚拟化实例安全的应用带来了困难。
在本实施例中,为了解决上述技术问题,实现跨越语义鸿沟的虚拟化实例自省,虚拟化管理器将虚拟化实例的内核地址空间映射到宿主机的用户态地址空间中的目标地址空间。具体地,可在虚拟化实例创建过程中,从宿主机的用户态地址空间中的空闲地址空间中,为虚拟化实例分配目标地址空间;并建立虚拟化实例的内核地址空间与目标地址空间之间的内存映射关系,实现虚拟化实例的内核态地址空间,与宿主机的用户态地址空间中的目标地址空间之间的内存映射。
其中,虚拟化实例的内核态地址空间与宿主机的用户态地址空间中的目标地址空间之间的映射,实质为虚拟化实例的内核态地址空间存储的数据的映射,即将虚拟化实例的内核态地址空间与宿主机的用户态地址空间中的目标地址空间,可将虚拟化实例的内核态地址空间存储的数据(如虚拟化实例对应的内核数据及内核函数),存储至宿主机的用户态地址空间中的目标地址空间。这样,宿主机的用户态地址空间中的目标地址空间,存储有虚拟化实例对应的内核数据及内核函数等。
由于宿主机的用户态地址空间中的目标地址空间,存储有虚拟化实例对应的内核数据及内核函数,因此,部署于宿主机的用户态的虚拟化管理器可从目标地址空间获取虚拟化实例的操作系统层面的语义,即获取虚拟化实例对应的内核数据,消除虚拟化实例与宿主机之间的语义鸿沟。
具体地,安全检测程序可根据安全检测需求,向虚拟化管理器发送安全检测请求。该安全检测请求用于请求对虚拟化实例进行安全监测。针对虚拟化管理器,在步骤501中,可接收该安全检测请求。为了实现虚拟化管理器和安全检测程序之间的交互,可在虚拟化管理器上设置面向安全检测程序的安全检测服务接口,以与安全检测程序交互。
可选地,安全检测服务接口可实现为RPC接口、套接字(Socket)接口或API等。
在一些实施例中,安全检测服务接口实现为RPC接口,则安全检测程序可通过RPC方式调用安全检测服务接口,并通过安全检测服务接口向虚拟化管理器发送安全检测请求。相应地,虚拟化管理器可通过安全检测服务接口获取安全检测请求。
进一步,针对虚拟化管理器,在步骤502中,可响应于安全检测请求,基于上述虚拟化实例的内核地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间中获取安全检测请求关联的目标数据对象。该目标数据对象包括虚拟化实例的至少部分内核数据。目标数据对象包括的内核数据,可包括从目标地址空间直接读取的内核数据,也可包括响应安全检测请求的过程中虚拟化实例产生的内核数据等。
进一步,在步骤503中,可将目标数据对象提供给安全检测程序。具体地,可通过安全检测服务接口,将目标数据对象提供给安全检测程序。
在一些实施例中,可将目标数据对象转换为安全检测服务接口支持的目标协议格式;并通过安全检测服务接口,将具有目标协议格式的目标数据对象提供给安全检测程序。
相应地,安全检测程序可基于目标数据对象,对虚拟化实例进行安全检测。
在本实施例中,通过将虚拟化实例的内核地址空间映射到宿主机的用户态地址空间中的目标地址空间,实现宿主机的用户态地址空间对虚拟化实例对应的内核数据和内核函数的存储。这样,虚拟化管理器在响应安全检测请求时,可基于虚拟化实例的内核地址空间与宿主机的用户态地址空间之间的内存映射关系,从宿主机的用户态地址空间中获取安全检测请求关联的内核数据,并将安全检测请求关联的内核数据提供给部署于虚拟化实例的外部的宿主机上的安全检测程序,使得安全检测程序可获取虚拟化实例的内核数据,即虚拟化实例的操作系统层面的语义,跨越了虚拟机与虚拟化实例之间的语义鸿沟,实现了跨越语义鸿沟的虚拟化实例自省。
下面结合安全检测请求请求监测的目标对象,对上述虚拟化管理器在从宿主机的用户态地址空间中的目标地址空间中获取安全检测请求关联的目标数据对象的具体实施方式进行示例性说明。
结合图2,在一些实施例中,安全检测请求请求监测的目标对象为特定的内核数据(定义为目标内核数据),则目标数据对象可实现为目标内核数据。例如,目标数据对象可为执行查询进程命令所需的用于描述进程的结构体及特定属性等。
结合图2,安全检测程,可根据实际检测需求,确定待监测的目标内核数据;并将目标内核数据的标识封装至安全检测请求。之后,可将安全检测请求发送给虚拟化管理器。针对虚拟化管理器,上述步骤502可实现为:响应于安全检测请求,创建第一线程模块,该第一线程模块用于获取安全检测请求请求监测的内核数据。进一步,控制第一线程模块基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间中获取安全检测请求请求监测的目标内核数据,作为目标数据对象。
具体地,可控制第一线程模块从安全检测请求中,获取待监测的内核数据的标识;并基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间中获取待监测的内核数据的标识对应的内核数据,作为安全检测请求请求监测的目标内核数据,即作为目标数据对象。
在本实施例中,可控制第一线程模块基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,访问目标地址空间;并从目标地址空间,直接获取安全检测请求请求监测的目标内核数据,作为目标数据对象。
当然,也可控制第一线程模块基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,在目标地址空间执行虚拟化实例对应的用于数据提取的内核函数;利用用于数据提取的内核函数从目标地址空间,获取安全检测请求请求监测的目标内核数据,作为目标数据对象。
进一步,可控制第一线程模块将安全检测请求请求监测的目标内核数据提供给安全检测程序。具体地,可控制第一线程模块将安全检测请求请求监测的目标内核数据,转换为安全检测服务接口支持的目标协议格式;并通过安全检测服务接口将具有目标协议格式的目标内核数据提供给安全检测程序。安全检测程序可基于安全检测请求请求监测的目标内核数据,对虚拟化实例进行安全检测。关于安全检测程序基于安全检测请求请求监测的目标内核数据,对虚拟化实例进行安全检测的具体实施方式,可参见上述宿主机实施例的相关内容。
上述实施例示出的虚拟化实例自省模式,可定义为第一虚拟化实例自省模式。第一虚拟化实例自省模式安全检测程序主动扫描虚拟化实例的内核态内存,不修改虚拟化实例的内核的钩子(Hook)函数,即虚拟化实例的内核不会主动报告目标数据对象。对于虚拟化实例来说,为被动型虚拟化实例自省。这种虚拟化实例自省模式对虚拟化实例的服务性能影响较小,但无法及时发现入侵,适用于虚拟化实例对服务性能要求较高,即虚拟化实例的服务性能敏感的情况。
为了提高发现入侵的及时性,本申请实施例还提供另一种虚拟化实例自省模式,定义为第二虚拟化实例自省模式。第二虚拟化实例自省模式为主动型虚拟化实例自省模式,即虚拟化管理器可及时向安全检测程序报告虚拟化实例的相关行为。安全检测程序可根据虚拟化管理器的主动报告内容,对虚拟化实例进行安全检测。下面对第二虚拟化实例自省模式进行详细说明。
结合图3,安全检测程序可根据安全检测需求,请求检测特定的内核函数(定义为目标内核函数)。例如,特定的内核函数可为进程管理函数,如创建新进程的内核函数、在父进程中创建子进程的内核函数等。相应地,安全检测程序可将请求监测的目标内核函数的标识,封装在安全检测请求中;并将安全检测请求发送给虚拟化管理器。关于安全检测程序将安全检测请求发送给虚拟化管理器的实施方式,可参见上述实施例的相关内容,在此不再赘述。
针对虚拟化管理器,上述步骤502可实现为:响应于安全检测请求,创建另一线程模块(定义为第二线程模块);进一步,可控制第二线程模块在安全检测请求请求监测的目标内核函数上挂载钩子函数。钩子函数可在目标内核函数运行过程中,通知第二线程模块目标内核函数被执行。
在本实施例中,钩子函数可为第二线程模块实时挂载的,也可为第二线程模块在其它安全检测请求执行过程中预先挂载的。
对于上述安全检测程序,可根据实际安全检测需求,确定请求监测的目标内核函数的标识、目标内核函数中用于挂载钩子(Hook)函数的跟踪点(tracepoint)的标识及钩子函数的标识。进一步,安全检测程序可将目标内核函数的标识、目标内核函数中用于挂载钩子函数的跟踪点的标识及钩子函数的标识,封装至安全检测请求中;并将安全检测请求发送至虚拟化管理器。
相应地,针对虚拟化管理器,可控制第二线程模块从安全检测请求中,获取目标内核函数的标识、目标内核函数中的跟踪点的标识及所述钩子函数的标识;并基于钩子函数的标识,获取钩子函数的代码。可选地,可基于钩子函数的标识,从代码库中下载钩子函数的代码。
进一步,可控制第二线程模块基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系及目标内核函数的标识,从目标地址空间确定内核函数的代码;并根据跟踪点的标识,在目标内核函数的代码中确定跟踪点;之后,可在目标地址空间,利用钩子函数的代码在跟踪点修改目标内核函数的代码,从而在目标内核函数的跟踪点上挂载上述钩子函数。
钩子函数可在目标内核函数运行过程中,通知第二线程模块目标内核函数被执行。相应地,可控制第二线程模块在钩子函数在目标内核函数运行过程中发出通知的情况下,基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间获取目标内核函数在运行过程中产生的内核数据,作为目标数据对象。
具体地,目标内核函数在运行过程中,可将产生的内核数据存储于虚拟化实例的内核态地址空间;虚拟化管理器可将虚拟化实例的内核态地址空间中的目标内核函数在运行过程中产生的内核数据,映射到宿主机的用户态地址空间中的目标地址空间。因此,目标地址空间存储有目标内核函数在运行过程中产生的内核数据。基于此,运行于宿主机的用户态的第二线程模块,可基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间获取目标内核函数在运行过程中产生的内核数据,作为目标数据对象。
进一步,可控制第二线程模块将目标内核函数在运行过程中产生的内核数据,提供给安全检测程序。关于将目标内核函数在运行过程中产生的内核数据提供给安全检测程序的具体实施方式,可参见上述实施例的相关内容,在此不再赘述。相应地,安全检测程序可基于目标内核函数在运行过程中产生的内核数据,对虚拟化实例进行安全检测。关于安全检测程序基于目标内核函数在运行过程中产生的内核数据,对虚拟化实例进行安全检测的具体实施方式,可参见上述宿主机实施例的相关内容,在此不再赘述。
上述实施例提供的第二虚拟化实例自省模式,虚拟化管理器可通过在监测的虚拟化实例的目标内核函数上挂载钩子函数,并利用钩子函数主动通知目标内核函数被运行。这样,虚拟化管理器中的第二线程模块可及时获取目标内核函数运行过程中产生的内核数据,并及时反馈给安全检测程序进行安全检测,有助于提高对虚拟化实例安全检测的及时性。因此,上述第二虚拟化实例自省模式,适用于对虚拟化实例安全检测的及时性要求较高的情况,即对虚拟化实例安全检测的及时性敏感的情况。
上述实施例提供的第一虚拟化实例自省模式及第二虚拟化实例自省模式中的安全检测程序的安全检测逻辑,运行在虚拟化管理器的外部,在对虚拟化实例进行安全检测过程中,需要虚拟化管理器与安全检测程序之间通过安全检测服务接口进行交互。对于安全检测逻辑比较复杂的实施例来说,则虚拟化管理器与安全检测程序之间的交互也较为复杂,影响安全检测速度。
为了提高虚拟化实例的安全检测速度,本申请实施例还提供另一虚拟化实例自省模式,定义为第三虚拟化实例自省模式。在第三虚拟化实例自省模式中,将传统方案中运行在虚拟机里的安全检测逻辑“下沉”到宿主机的虚拟化管理器上,而结果就像安全检测逻辑运行在虚拟化实例里一样。下面进行具体说明。
结合图4,安全检测程,可根据实际安全检测需求,确定预先与虚拟化管理器约定的安全检测逻辑。安全检测逻辑在虚拟化管理器中以线程形式运行在虚拟化管理器中。相应地,安全检测程序可根据实际安全检测需求,确定待监测的目标安全检测线程;并将目标安全检测线程的标识封装至安全检测请求中。进一步,可将安全检测请求发送给虚拟化管理器。
针对虚拟化管理器,上述步骤502还可实现为:响应于安全检测请求,可创建另一线程模块(定义为第三线程模块);并控制第三线程模块创建安全检测请求请求监测的目标安全检测线程。其中,目标安全检测线程可基于预先封装好的虚拟化实例的系统调用接口作为用户态程序,运行在虚拟化实例的操作系统之上。这样,目标安全检测线程在其它虚拟化实例的用户态看起来,就像运行在虚拟化实例的用户态的线程,即就像图4中运行在虚拟化实例的用户态的目标安全检测线程代理。
由于目标安全检测线程可基于预先封装好的虚拟化实例的系统调用接口作为用户态程序,运行在虚拟化实例的操作系统之上,因此,目标安全检测线程可访问操作系统的用户态地址空间。因此,目标安全检测线程可基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间中获取目标安全检测线程关注的内核数据。
其中,目标安全检测线程关注的内核数据的具体内容,可参见上述宿主机实施例的相关内容,在此不再赘述。
进一步,目标安全检测线程可将获取的关注的内核数据输出。相应地,可控制第三线程模块获取目标安全检测线程输出的数据,作为目标数据对象。目标安全检测线程105输出的数据,即为目标安全检测线程关注的内核数据。
进一步,可控制第三线程模块可将目标安全检测线程关注的内核数据,提供给安全检测程序。安全检测程序可基于目标安全检测线程关注的内核数据,对虚拟化实例进行安全检测。
根据上述三种虚拟化实例自省模式,可知三种虚拟化实例自省模式各有优劣。在实际使用过程中,可采用三种虚拟化实例自省模式中的一种进行实施,当然,也可结合三种虚拟化实例自省模式中的多种进行实施。例如,可结合三种虚拟化实例自省模式中的任意2种进行实施,当然也可结合三种进行实施。在多种虚拟化实例自省模式结合进行实施时,多种虚拟化实例自省模式可优劣互补,取长补短,提高虚拟化实例安全检测的性能。
在结合三种虚拟化实例自省模式中的多种进行实施的示例中,可由安全检测程序确定在线安全检测时采用哪种虚拟化实例自省模式。具体地,安全检测线程可根据对虚拟化实例进行安全检测的安全检测需求,从多种虚拟化实例自省模式中,选择目标虚拟化实例自省模式。根据目标虚拟化实例自省模式的标识,生成安全检测请求;将安全检测请求发送给虚拟化管理器,以供虚拟化管理器基于虚拟化实例的内核地址空间与宿主机的用户态地址空间之间的内存映射关系和目标虚拟化实例自省模式的标识,从目标地址空间中获取安全检测请求关联的目标数据对象,目标数据对象包括虚拟化实例的至少部分内核数据;进而,接收虚拟化管理器返回的目标数据对象并根据目标数据对象对虚拟化实例进行安全检测。
其中,对虚拟化实例进行安全检测的安全检测需求可由用户决定,也可由安全检测程序的安全检测逻辑决定。对虚拟化实例进行安全检测的安全检测需求可包括:全检测过程中虚拟化实例的服务性能需求、安全检测的及时性需求、及对虚拟化实例进行安全检测的安全检测线程的逻辑复杂程度中的至少一种。
基于上述三种虚拟化实例自省模式的特点,可知上述第一虚拟化实例自省模式对虚拟化实例的侵入性较低,对虚拟化实例的服务性能影响较小,因此,第一虚拟化实例自省模式适用于虚拟化实例对服务性能较为敏感的情况。相应地,安全检测程序可在安全检测需求指示虚拟化实例对服务性能较为敏感的情况下,确定目标虚拟化实例自省模式为第一虚拟化实例自省模式。第一虚拟化实例自省模式为虚拟化管理器控制第一线程模块基于内存映射关系从目标地址空间中获取安全检测请求请求监测的目标内核数据作为目标数据对象的模式。
由于上述第二虚拟化实例自省模式的安全检测的及时性较高,因此,安全检测程序可在安全检测需求指示虚拟化实例对安全检测及时性较为敏感的情况下,确定目标虚拟化实例自省模式为第二虚拟化实例自省模式。第二虚拟化实例自省模式为虚拟化管理器控制第二线程模块利用虚拟化实例的内核函数上挂载钩子函数获取目标内核函数在运行过程中产生的内核数据作为目标数据对象的模式。
由于上述第三虚拟化实例自省模式适用于安全检测逻辑较为复杂的实施例,因此,安全检测程序可在安全检测需求指示对虚拟化实例进行安全检测的逻辑复杂程度为设定的逻辑复杂程度的情况下,确定目标虚拟化实例自省模式为第三虚拟化实例自省模式。进一步,在该情况下,还可以确定目标对象的类型为对虚拟化实例进行安全检测的安全检测线程。第三虚拟化实例自省模式为虚拟化管理器控制第三线程模块创建目标安全检测线程并获取目标安全检测线程输出的内核数据作为目标数据对象的模式;目标安全检测线程基于预先封装好的虚拟化实例的系统调用接口作为用户态程序运行在虚拟化实例的操作系统之上,并基于内存映射关系从目标地址空间中获取其关注的内核数据。
进一步,安全检测需求中还可以包含目标对象的描述信息及目标对象的类型,在该情况下,安全检测程序可根据安全检测需求包含的目标对象的描述信息及目标对象的类型,确定目标对象的标识;并根据目标对象的标识及目标虚拟化实例自省模式的标识,生成安全检测请求。进一步,安全检测程序可将安全检测请求提供给虚拟化管理器。
相应地,对虚拟化管理器来说,可从安全检测请求中,获取目标虚拟化实例自省模式的标识;并根据目标虚拟化实例自省模式的标识,创建目标虚拟化实例自省模式对应的目标线程模块。其中,目标线程模块包括第一线程模块、第二线程模块和第三线程模块中的至少一个。第一虚拟化实例自省模式对应的线程模块为第一线程模块;第二虚拟化实例自省模式对应的线程模块为第二线程模块;第三虚拟化实例自省模式对应的线程模块为第三线程模块。
进一步可选地,在安全检测请求中包含目标对象的标识的情况下,目标线程模块可从安全检测请求中,获取目标对象的标识;并基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间获取目标对象的标识关联的目标数据对象。其中,目标对象的类型包括内核数据这一类型,目标对象的标识关联的目标数据对象包括安全检测请求请求监测的目标内核数据。和/或,目标对象的类型包括目标内核函数这一类型,目标对象的标识关联的目标数据对象包括安全检测请求请求监测的目标内核函数运行过程中产生的内核数据。和/或,目标对象的类型包括目标安全检测线程这一类型,目标对象的标识关联的目标数据对象包括目标安全检测线程关注的内核数据。
关于目标虚拟化实例自省模式对应的线程模块,基于上述虚拟化实例的内核态地址空间与宿主机的用户态地址空间之间的内存映射关系,从目标地址空间获取目标对象的标识关联的目标数据对象的具体实施方式,可参见上述各实施例中的相关内容,在此不再赘述。
本申请实施例在多种虚拟化实例自省模式结合进行实施时,多种虚拟化实例自省模式可优劣互补,取长补短,提高虚拟化实例安全检测的性能。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤501和502的执行主体可以为设备A;又比如,步骤501的执行主体可以为设备A,步骤502的执行主体可以为设备B;等等。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如501、502等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。
相应地,本申请实施例还提供一种电子设备,该电子设备能够作为宿主机实现,宿主机上部署有虚拟化管理器、被虚拟化管理器管理的虚拟化实例,以及位于虚拟化实例外部的安全检测程序;虚拟化管理器面向安全检测程序提供安全检测服务接口,以与安全检测程序进行交互;如图6所示,该电子设备还包括:存储器61和处理器62;存储器61中存储有虚拟化管理器对应的程序代码和安全检测程序;其中,处理器62与存储器61耦合,用于执行虚拟化管理器对应的程序代码,以用于实现前述方法实施例中可由虚拟化管理器执行的方法步骤;以及用于执行安全检测程序,以用于实现前述方法实施例中可由安全检测程序执行的方法步骤。关于各方法步骤的详细描述可参见前述实施例,在此不在赘述。
进一步,如图6所示,本实施例的电子设备还包括:通信组件63、显示器64、电源组件65、音频组件66等其它组件。图6中仅示意性给出部分组件,并不意味着电子设备只包括图6所示组件。另外,图6中虚线框内的组件为可选组件,而非必选组件,具体可视电子设备的产品形态而定。本实施例的电子设备可以实现为台式电脑、笔记本电脑、智能手机或IOT设备等终端设备;也可以是传统服务器、云服务器或服务器集群等各种服务器设备。
相应地,本申请实施例还提供一种存储有计算机指令的计算机可读存储介质,当计算机指令被一个或多个处理器执行时,致使一个或多个处理器执行上述虚拟化实例自省方法中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
还需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、只读光盘(Compact Disc Read-Only Memory,CD-ROM)、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(或系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(如CPU等)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(Random-Access Memory,RAM)和/或非易失性内存等形式,如只读存储器(Read Only Memory,ROM)或闪存(Flash RAM)。内存是计算机可读介质的示例。
计算机的存储介质为可读存储介质,也可称为可读介质。可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(Phase-Change Memory,PRAM)、静态随机存取存储器(Static Random-Access Memory,SRAM)、动态随机存取存储器(Dynamic Random Access Memory,DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read Only Memory,EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(Digital Video Disc,DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(Transitory Media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括上述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上内容仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (15)

1.一种宿主机,其特征在于,所述宿主机上部署有虚拟化管理器、被所述虚拟化管理器管理的虚拟化实例,以及位于所述虚拟化实例外部的安全检测程序;所述虚拟化管理器面向所述安全检测程序提供安全检测服务接口,以与所述安全检测程序进行交互;
所述虚拟化管理器,用于将所述虚拟化实例的内核地址空间映射到所述宿主机的用户态地址空间中的目标地址空间,所述目标地址空间中存储有所述虚拟化实例对应的内核数据和内核函数;以及
接收所述安全检测程序发送的安全检测请求,基于所述虚拟化实例的内核地址空间与所述宿主机的用户态地址空间之间的内存映射关系,从所述目标地址空间中获取所述安全检测请求关联的目标数据对象,所述目标数据对象包括所述虚拟化实例的至少部分内核数据,并将所述目标数据对象提供给所述安全检测程序,以供所述安全检测程序基于所述目标数据对象对所述虚拟化实例进行安全检测。
2.根据权利要求1所述的宿主机,其特征在于,所述虚拟化管理器在从所述目标地址空间中获取所述安全检测请求关联的目标数据对象时,具体用于采用以下至少一种方式:
创建第一线程模块,将所述安全检测请求提供给所述第一线程模块,并控制所述第一线程模块基于所述内存映射关系从所述目标地址空间中获取所述安全检测请求请求监测的目标内核数据作为所述目标数据对象;
创建第二线程模块,利用所述第二线程模块在所述安全检测请求请求监测的目标内核函数上挂载钩子函数,并在所述钩子函数发出通知的情况下,基于所述内存映射关系从所述目标地址空间中获取所述目标内核函数在运行过程中产生的内核数据作为所述目标数据对象;
创建第三线程模块,利用所述第三线程模块创建所述安全检测请求请求监测的目标安全检测线程,并获取所述目标安全检测线程输出的内核数据作为所述目标数据对象;其中,所述目标安全检测线程基于预先封装好的所述虚拟化实例的系统调用接口作为用户态程序运行在所述虚拟化实例的操作系统之上,并基于所述内存映射关系从所述目标地址空间中获取其关注的内核数据并输出。
3.一种虚拟化实例自省方法,其特征在于,应用于宿主机上部署的虚拟化管理器,所述宿主机上还部署有所述虚拟化管理器对应的虚拟化实例以及安全检测程序,且所述虚拟化实例的内核地址空间被映射到所述宿主机的用户态地址空间中的目标地址空间;所述方法包括:
接收所述安全检测程序发送的安全检测请求;
基于所述虚拟化实例的内核地址空间与所述宿主机的用户态地址空间之间的内存映射关系,从所述目标地址空间中获取所述安全检测请求关联的目标数据对象,所述目标数据对象包括所述虚拟化实例的至少部分内核数据;
将所述目标数据对象提供给所述安全检测程序,以供所述安全检测程序基于所述目标数据对象对所述虚拟化实例进行安全检测。
4.根据权利要求3所述的方法,其特征在于,还包括:
在所述虚拟化实例创建过程中,为所述虚拟化实例分配所述目标地址空间,以存储所述虚拟化实例对应的内核数据及内核函数;并建立所述虚拟化实例的内核地址空间与所述宿主机的用户态地址空间之间的内存映射关系。
5.根据权利要求3所述的方法,其特征在于,所述基于所述虚拟化实例的内核地址空间与所述宿主机的用户态地址空间之间的内存映射关系,从所述目标地址空间中获取所述安全检测请求关联的目标数据对象,包括以下至少一种处理方式:
创建第一线程模块,将所述安全检测请求提供给所述第一线程模块,并控制所述第一线程模块基于所述内存映射关系从所述目标地址空间中获取所述安全检测请求请求监测的目标内核数据作为所述目标数据对象;
创建第二线程模块,利用所述第二线程模块在所述安全检测请求请求监测的目标内核函数上挂载钩子函数,并在所述钩子函数发出通知的情况下,基于所述内存映射关系,从所述目标地址空间获取所述目标内核函数在运行过程中产生的内核数据作为所述目标数据对象;
创建第三线程模块,利用所述第三线程模块创建所述安全检测请求请求监测的目标安全检测线程,并获取所述目标安全检测线程输出的数据作为所述目标数据对象;其中,所述目标安全检测线程基于预先封装好的所述虚拟化实例的系统调用接口作为用户态程序运行在所述虚拟化实例的操作系统之上,并基于所述内存映射关系从所述目标地址空间中获取其关注的内核数据并输出。
6.根据权利要求5所述的方法,其特征在于,所述控制所述第一线程模块基于所述内存映射关系从所述目标地址空间中获取所述安全检测请求请求监测的目标内核数据作为所述目标数据对象,包括:
控制所述第一线程模块基于所述内存映射关系,访问所述目标地址空间;并从所述目标地址空间,获取所述安全检测请求请求监测的目标内核数据作为所述目标数据对象;
或者,
控制所述第一线程模块执行所述虚拟化实例的第一内核函数,并基于所述内存映射关系控制所述第一内核函数从所述目标地址空间,获取所述安全检测请求请求监测的目标内核数据作为所述目标数据对象。
7.根据权利要求5所述的方法,其特征在于,所述利用所述第二线程模块在所述安全检测请求请求监测的目标内核函数上挂载钩子函数,包括:
利用所述第二线程模块从所述安全检测请求中,获取所述目标内核函数的标识、所述目标内核函数中的跟踪点的标识及所述钩子函数的标识;
基于所述钩子函数的标识,获取所述钩子函数的代码;
基于所述内存映射关系及所述目标内核函数的标识,从所述目标地址空间确定所述目标内核函数的代码;
根据所述跟踪点的标识,在所述目标内核函数的代码中确定所述跟踪点;
在所述目标地址空间,在所述跟踪点上挂载所述钩子函数的代码。
8.根据权利要求5所述的方法,其特征在于,所述目标内核函数为进程管理函数;所述基于所述内存映射关系从所述目标地址空间中,获取所述目标内核函数在运行过程中产生的内核数据作为所述目标数据对象,包括:
基于所述内存映射关系,访问所述目标地址空间;
从所述目标地址空间,获取所述进程管理函数运行过程中所管理的目标进程产生的内核数据作为所述目标数据对象。
9.根据权利要求3-8任一项所述的方法,其特征在于,所述接收所述安全检测程序发送的安全检测请求,包括:接收所述安全检测程序通过所述虚拟化管理器提供的安全检测服务接口发送的所述安全检测请求;
相应地,所述方法还包括:将所述目标数据对象转换为所述安全检测服务接口支持的目标协议格式;并通过所述安全检测服务接口将具有所述目标协议格式的目标数据对象提供给所述安全检测程序。
10.根据权利要求5-8任一项所述的方法,其特征在于,在创建第一线程模块、第二线程模块或第三线程模块之前,还包括:
从所述安全检测请求中,获取目标虚拟化实例自省模式的标识,所述目标虚拟化实例自省模式是所述安全检测程序根据对所述虚拟化实例进行安全检测的安全检测需求,从多种虚拟化实例自省模式中选择使用的至少一种虚拟化实例自省模式,不同虚拟化实例自省模式对应不同的线程模块;
根据所述目标虚拟化实例自省模式的标识,确定需要创建的目标线程模块;所述目标线程模块包括所述第一线程模块、所述第二线程模块和所述第三线程模块中的至少一个。
11.根据权利要求10所述的方法,其特征在于,所述目标数据对象包括所述安全检测请求请求监测的目标内核数据;和/或,所述安全检测请求请求监测的目标内核函数运行过程中产生的内核数据;和/或,所述安全检测请求请求对虚拟化实例进行安全检测使用的目标安全检测线程所关注的内核数据。
12.一种虚拟化实例自省方法,其特征在于,应用于宿主机上部署的安全检测程序,所述宿主机上还部署有虚拟化管理器和虚拟化实例,且所述虚拟化实例的内核地址空间被映射到所述宿主机的用户态地址空间中的目标地址空间;所述方法包括:
根据对所述虚拟化实例进行安全检测的安全检测需求,从多种虚拟化实例自省模式中,选择目标虚拟化实例自省模式;
根据所述目标虚拟化实例自省模式的标识,生成安全检测请求;
将所述安全检测请求发送给所述虚拟化管理器,以供所述虚拟化管理器基于所述虚拟化实例的内核地址空间与所述宿主机的用户态地址空间之间的内存映射关系和所述目标虚拟化实例自省模式的标识,从所述目标地址空间中获取所述安全检测请求关联的目标数据对象,所述目标数据对象包括所述虚拟化实例的至少部分内核数据;
接收所述虚拟化管理器返回的所述目标数据对象,并根据所述目标数据对象对所述虚拟化实例进行安全检测。
13.根据权利要求12所述的方法,其特征在于,所述根据对所述虚拟化实例进行安全检测的安全检测需求,从多种虚拟化实例自省模式中,选择目标虚拟化实例自省模式,包括:
在所述安全检测需求指示所述虚拟化实例对服务性能敏感的情况下,确定所述目标虚拟化实例自省模式为第一虚拟化实例自省模式;所述第一虚拟化实例自省模式为所述虚拟化管理器控制第一线程模块基于所述内存映射关系从所述目标地址空间中获取所述安全检测请求请求监测的目标内核数据作为所述目标数据对象的模式;
在所述安全检测需求指示所述虚拟化实例对安全检测及时性敏感的情况下,确定所述目标虚拟化实例自省模式为第二虚拟化实例自省模式;所述第二虚拟化实例自省模式为所述虚拟化管理器控制第二线程模块利用所述虚拟化实例的目标内核函数上挂载钩子函数获取所述目标内核函数在运行过程中产生的内核数据作为所述目标数据对象的模式;
在所述安全检测需求指示对所述虚拟化实例进行安全检测的逻辑复杂程度为设定的逻辑复杂程度的情况下,确定所述目标虚拟化实例自省模式为第三虚拟化实例自省模式;所述第三虚拟化实例自省模式为所述虚拟化管理器控制第三线程模块创建目标安全检测线程并获取所述目标安全检测线程输出的内核数据作为所述目标数据对象的模式;所述目标安全检测线程基于预先封装好的所述虚拟化实例的系统调用接口作为用户态程序运行在所述虚拟化实例的操作系统之上,并基于所述内存映射关系从所述目标地址空间中获取其关注的内核数据。
14.一种电子设备,其特征在于,所述电子设备能够作为宿主机实现,所述宿主机上部署有虚拟化管理器、被所述虚拟化管理器管理的虚拟化实例,以及位于所述虚拟化实例外部的安全检测程序;所述虚拟化管理器面向所述安全检测程序提供安全检测服务接口,以与所述安全检测程序进行交互;
所述电子设备还包括:存储器和处理器;所述存储器中存储有所述虚拟化管理器对应的程序代码和所述安全检测程序;
其中,所述处理器与所述存储器耦合,用于执行所述虚拟化管理器对应的程序代码,以用于实现权利要求3-11任一项所述方法中的步骤;以及用于执行所述安全检测程序,以用于实现权利要求12-13任一项所述方法中的步骤。
15.一种存储有计算机指令的计算机可读存储介质,其特征在于,当所述计算机指令被一个或多个处理器执行时,致使所述一个或多个处理器执行权利要求3-13任一项所述方法中的步骤。
CN202311249724.5A 2023-09-26 2023-09-26 宿主机、虚拟化实例自省方法及存储介质 Active CN116991543B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311249724.5A CN116991543B (zh) 2023-09-26 2023-09-26 宿主机、虚拟化实例自省方法及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311249724.5A CN116991543B (zh) 2023-09-26 2023-09-26 宿主机、虚拟化实例自省方法及存储介质

Publications (2)

Publication Number Publication Date
CN116991543A CN116991543A (zh) 2023-11-03
CN116991543B true CN116991543B (zh) 2024-02-02

Family

ID=88530525

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311249724.5A Active CN116991543B (zh) 2023-09-26 2023-09-26 宿主机、虚拟化实例自省方法及存储介质

Country Status (1)

Country Link
CN (1) CN116991543B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102831006A (zh) * 2012-07-25 2012-12-19 北京奇虎科技有限公司 虚拟机实现方法与虚拟机
CN107169347A (zh) * 2017-05-08 2017-09-15 中国科学院信息工程研究所 一种增强arm平台虚拟机自省安全的方法及装置
CN107391225A (zh) * 2017-07-13 2017-11-24 北京航空航天大学 一种基于多ept列表的监控方法和系统
CN111221628A (zh) * 2020-01-09 2020-06-02 奇安信科技集团股份有限公司 虚拟化平台上对虚拟机文件的安全检测方法及装置
CN114077480A (zh) * 2022-01-19 2022-02-22 维塔科技(北京)有限公司 一种主机与虚拟机共享内存方法、装置、设备及介质
CN114595038A (zh) * 2022-04-28 2022-06-07 阿里云计算有限公司 数据处理方法、计算设备及计算机存储介质
CN114866570A (zh) * 2022-04-18 2022-08-05 北京快乐茄信息技术有限公司 一种信息处理方法、装置、电子设备及存储介质
CN116774933A (zh) * 2023-06-19 2023-09-19 北京火山引擎科技有限公司 存储设备的虚拟化处理方法、桥接设备、系统及介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9529614B2 (en) * 2012-03-05 2016-12-27 Board Of Regents The University Of Texas Systems Automatically bridging the semantic gap in machine introspection
US20140372717A1 (en) * 2013-06-18 2014-12-18 Microsoft Corporation Fast and Secure Virtual Machine Memory Checkpointing

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102831006A (zh) * 2012-07-25 2012-12-19 北京奇虎科技有限公司 虚拟机实现方法与虚拟机
CN107169347A (zh) * 2017-05-08 2017-09-15 中国科学院信息工程研究所 一种增强arm平台虚拟机自省安全的方法及装置
CN107391225A (zh) * 2017-07-13 2017-11-24 北京航空航天大学 一种基于多ept列表的监控方法和系统
CN111221628A (zh) * 2020-01-09 2020-06-02 奇安信科技集团股份有限公司 虚拟化平台上对虚拟机文件的安全检测方法及装置
CN114077480A (zh) * 2022-01-19 2022-02-22 维塔科技(北京)有限公司 一种主机与虚拟机共享内存方法、装置、设备及介质
CN114866570A (zh) * 2022-04-18 2022-08-05 北京快乐茄信息技术有限公司 一种信息处理方法、装置、电子设备及存储介质
CN114595038A (zh) * 2022-04-28 2022-06-07 阿里云计算有限公司 数据处理方法、计算设备及计算机存储介质
CN116774933A (zh) * 2023-06-19 2023-09-19 北京火山引擎科技有限公司 存储设备的虚拟化处理方法、桥接设备、系统及介质

Also Published As

Publication number Publication date
CN116991543A (zh) 2023-11-03

Similar Documents

Publication Publication Date Title
CN110011823B (zh) 物联网设备的远程管理实现方法和装置
US10701139B2 (en) Life cycle management method and apparatus
US9141444B2 (en) Inter-application communication on mobile platforms
US10362096B2 (en) Lifecycle management of custom resources in a cloud computing environment
CA2761563C (en) Annotating virtual application processes
CN106354481B (zh) 对http请求进行统一映射的方法和设备
US7530081B2 (en) System for creating a dynamic OGSI service proxy framework using runtime introspection of an OGSI service
EP2932390B1 (en) Inversion-of-control component service models for virtual environments
CN111783106B (zh) 经由多层文件系统状态检测文件系统修改的系统和方法
US10963267B2 (en) Bootstrapping profile-guided compilation and verification
CN111338762A (zh) 请求处理技术
US20150026658A1 (en) Systems, Methods and Media for Dynamic Creation and Update of Activation Context for Component Object Model
JP6016808B2 (ja) Webアクセスを実装するための方法およびサーバシステム
US8849947B1 (en) IT discovery of virtualized environments by scanning VM files and images
CN104516885A (zh) 浏览程序双内核组件的实现方法及装置
CN113467970B (zh) 云计算系统中的跨安全区域的资源访问方法及电子设备
CN108376066B (zh) 代码处理装置及代码处理方法
US20180212817A1 (en) Enabling redirection policies to be applied based on the windows class of a usb device
CN111435382B (zh) 一种页面的登录校验方法及终端
US11960918B2 (en) Creating product orchestration engines
CN116991543B (zh) 宿主机、虚拟化实例自省方法及存储介质
CN114912103A (zh) 一种访问控制方法及相关装置
US9075640B1 (en) Sharing applications in a java virtual machine
US20220413812A1 (en) Method, system and computer-readable medium for integrating a backend-as-a-service with an online service
US10019244B1 (en) Interpreting program code using a symbol table

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant