CN114816668A - 一种虚拟机内核监测方法、装置、设备及存储介质 - Google Patents
一种虚拟机内核监测方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114816668A CN114816668A CN202210473199.4A CN202210473199A CN114816668A CN 114816668 A CN114816668 A CN 114816668A CN 202210473199 A CN202210473199 A CN 202210473199A CN 114816668 A CN114816668 A CN 114816668A
- Authority
- CN
- China
- Prior art keywords
- virtual machine
- system call
- kernel
- vmm
- program
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45587—Isolation or security of 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)
- Debugging And Monitoring (AREA)
Abstract
本说明书提供一种虚拟机内核监测方法、装置、设备及存储介质,所述方法包括:VMM获取eBPF程序,将eBPF程序解析为至少一条系统调用指令并封装成对应的系统调用消息后从目标虚拟机的外部发送给目标虚拟机的内核;目标虚拟机的内核接收到系统消息,将各所述系统调用指令挂载至目标函数,以在所述目标函数被调用时执行所述系统调用指令,并将执行结果返回给所述VMM。
Description
技术领域
本说明书实施例涉及计算机技术领域,尤其涉及一种虚拟机内核监测方法、装置、设备及存储介质。
背景技术
虚拟化技术被广泛运用的当下,为用户提供实际服务的一般为云厂商在物理宿主机上运行的虚拟机。由于虚拟化技术的隔离性,宿主机与虚拟机之间的信息不透明。在这种情况下,有必要对虚拟机内部进行安全监测,以确保公司和用户的数据安全。安全监测可以通过在虚拟机内部增加内核监测模块,运行该监测模块中配置的监测程序的方式实现,但监测的灵活性和通用性低;也可以利用eBPF程序实现,但需要为eBPF程序的安装预留接口并增设相应的用户态客户端。
发明内容
为克服相关技术中存在的问题,本说明书提供了一种虚拟机内核监测方法、装置、设备及存储介质。
根据本说明书实施例的第一方面,提供一种虚拟机内核监测方法,所述方法包括:
VMM获取eBPF程序,将所述eBPF程序解析为至少一条系统调用指令,并封装成对应的系统调用消息后从目标虚拟机的外部发送给所述目标虚拟机的内核;
所述目标虚拟机的内核接收所述系统调用消息,将各所述系统调用指令挂载至目标函数,以在所述目标函数被调用时执行所述系统调用指令,并将执行结果返回给所述VMM。
根据本说明书实施例的第二方面,提供一种虚拟机内核监测方法,应用于VMM,所述方法包括:
获取eBPF程序;
将所述eBPF程序解析为至少一条系统调用指令;
将各所述系统调用指令封装成对应的系统调用消息后从目标虚拟机的外部发送给所述目标虚拟机的内核;
接收所述目标虚拟机的内核返回的所述系统调用指令对应的执行结果。
根据本说明书实施例的第三方面,提供一种虚拟机内核监测方法,应用于虚拟机内核,所述方法包括:
接收VMM发送的系统调用消息,所述系统调用消息中封装有eBPF程序中至少一条系统调用指令;
将各所述系统调用指令挂载至目标函数,以在所述目标函数被调用时执行所述系统调用指令,并将执行结果返回给所述VMM。
根据本说明书实施例的第四方面,提供一种虚拟机内核监测装置,应用于VMM,包括:
获取模块,用于获取eBPF程序;
解析模块,用于将所述eBPF程序解析为至少一条系统调用指令;
第一发送模块,用于将各所述系统调用指令封装成对应的系统调用消息后从目标虚拟机的外部发送给所述目标虚拟机的内核;
第一接收模块,用于接收所述目标虚拟机的内核返回的所述系统调用指令对应的执行结果。
根据本说明书实施例的第五方面,提供一种虚拟机内核监测装置,应用于虚拟机内核,包括:
第二接收模块,用于接收VMM发送的系统调用消息,所述系统调用消息中封装有eBPF程序中至少一条系统调用指令;
挂载模块,用于将各所述系统调用指令挂载至目标函数;
执行模块,用于在所述目标函数被调用时执行所述系统调用指令;
第二发送模块,用于将执行结果返回给所述VMM。
根据本说明书实施例的第六方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现上述第一方面至第三方面任意一项提供的方法。
根据本说明书实施例的第七方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于指令相关的硬件,来完成上述第一方面至第三方面任意一项提供的方法。
本说明书的实施例提供的技术方案可以包括以下有益效果:
本说明书实施例中,VMM将eBPF程序转换成虚拟机内核可执行的指令以及系统调用事件,通过消息的方式发送给虚拟机内核,虚拟机内核直接执行对应的系统调用事件,将各指令挂载至目标函数,以实现eBPF程序在虚拟机内核的加载。采用从虚拟机外部注入需要内核执行的eBPF程序的系统调用事件和指令的方式,使得虚拟机操作系统无需预留用于安装eBPF程序的接口,也无需配置用于使eBPF程序实现监测功能的用户态客户端,从而提高了虚拟机运行环境的安全性。此外,监测程序与虚拟机剥离开来,只需要修改监测程序即可执行多种监测任务而无需对虚拟机内核进行修改,从而提高了监测的灵活性和通用性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1是本说明书根据一示例性实施例示出的一种虚拟机内核监测方法的交互示意图。
图2A是本说明书示出的一种eBPF程序加载并挂载至虚拟机内核的示意图。
图2B是本说明书根据一示例性实施例示出的一种eBPF程序中的系统调用指令加载并挂载至虚拟机内核的示意图。
图3是本说明书根据另一示例性实施例示出的一种虚拟机内核监测方法的交互示意图。
图4A是本说明书根据一示例性实施例示出的一种应用于VMM的虚拟机内核监测方法的流程图。
图4B是本说明书根据一示例性实施例示出的一种应用于虚拟机内核的虚拟机内核监测方法的流程图。
图5是本说明书实施例虚拟机内核监测装置所在计算机设备的一种硬件结构图。
图6A是本说明书根据一示例性实施例示出的一种用于VMM的虚拟机内核监测装置的框图。
图6B是本说明书根据一示例性实施例示出的一种用于虚拟机内核的虚拟机内核监测装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本说明书一个或多个实施例所涉及到的专业性名词进行介绍。
虚拟机(Virtual Machine):通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,能够实现实体计算机中能够完成的工作。
宿主机:虚拟机必须在实体计算机上才能运行,运行有虚拟机的实体计算机就是该虚拟机的宿主机。
VMM(Virtural Machine Monitor):虚拟机管理器,一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件,用于创建和运行虚拟机,为虚拟机分配计算机资源。
eBPF(extended Berkeley Packet Filter):一种在无需更改内源代码或加载内核模块便可在Linux内核中运行的沙盒程序。
perf:Linux内核提供的一种性能剖析工具,能够进行函数级和指令级的热点查找,可以用来分析程序中热点函数的CPU占用率,从而定位性能瓶颈。
perf buffer:perf用于暂存事件数据的缓冲区。
epoll:一种I/O事件通知机制,是linux内核实现IO多路复用的一个实现。
Vsock:virtio-vsock通道,用于虚拟机与管理虚拟机的VMM之间的通信。
安全监测客户端:运行于宿主机上。
虚拟化技术被广泛运用的当下,为用户提供实际服务的一般为云厂商在物理宿主机上运行的虚拟机。由于虚拟化技术的隔离性,宿主机与虚拟机之间的信息不透明。在这种情况下,有必要对虚拟机内部进行安全监测,以确保公司和用户的数据安全。
对虚拟机内核进行监测需要考虑以下两点,其一是如何在虚拟机内部运行给定的监测程序,其二是如何将产生的监测数据即时、高效地传输给位于宿主机的安全监测客户端。关于监测程序的运行可以通过在虚拟机内部增加内核监测模块,运行该监测模块中配置的监测程序的方式实现。然而,内核监测模块中配置的监测程序一旦设定便只能执行一种监测任务,无法随时进行动态调整,不具备灵活性和通用性。此外,还可以使用eBPF程序对虚拟机内核进行监测,但需要操作系统预留用于安装eBPF程序的接口,并在虚拟机内部配置用户态客户端,一方面导致虚拟机存在被攻击的风险,另一方面在虚拟机内部增加了新的进程,增加了架构的复杂度,不利于后续技术演进。
有鉴于此,本说明书实施例提出一种虚拟机内核监测方法,将eBPF程序作为监测程序对配置有Linux操作系统的虚拟机内核进行监测。由VMM将eBPF程序中的各系统调用指令封装成系统调用消息从虚拟机的外部发送给虚拟机内核,虚拟机内核将接收到的系统调用指令挂载在目标函数上,为监测数据的产生提供监测环境。通过将eBPF程序转换成虚拟机内核可执行的系统调用指令并从虚拟机外部导入,一方面有助于提高虚拟机运行环境的安全性,另一方面可以通过修改eBPF程序中的系统调用指令以完成不同的监测任务,从而具备灵活性和通用性。
接下来对本说明书实施例进行详细说明。
如图1所示,图1是本说明书根据一示例性实施例示出的一种虚拟机内核监测方法的交互示意图,包括以下步骤:
步骤102,VMM120获取eBPF程序;
在虚拟机内核监测过程中还存在安装于宿主机上的安全监测客户端,监测程序可以由安全监测客户端下发,监测过程中产生的监测数据需要传输给安全监测客户端以对虚拟机内核的运行状态进行判断。在本说明书一实施例中,eBPF程序由安装于宿主机上的安全监测客户端发送给VMM。
步骤104,VMM120将eBPF程序解析为至少一条系统调用指令;
步骤106,VMM120将各系统调用指令封装成对应的系统调用消息后从目标虚拟机的外部发送给目标虚拟机的内核130;
步骤108,目标虚拟机的内核130接收系统调用消息,将各系统调用指令挂载至目标函数;
步骤110,目标虚拟机的内核130在所述目标函数被调用时执行所述系统调用指令,并将执行结果返回给所述VMM120。
eBPF程序在虚拟机内核中运行也就是虚拟机内核执行eBPF程序中包含的各项系统调用指令,故本说明书实施例通过将eBPF程序中的系统调用指令发送给虚拟机内核,虚拟机内核执行系统调用指令的方式同样能够实现监测任务。eBPF中的各项系统调用指令被执行之前需要先实现eBPF的系统调用指令在虚拟机内核中的加载和挂载。
eBPF程序可以采用C语言进行编写,可根据监测任务的不同灵活调整。如图2A所示为实现eBPF程序加载并挂载至虚拟机内核的示意图,一般包括以下操作:在加载至虚拟机内核之前需要先利用LLVM或Clang将eBPF程序210编译成eBPF字节码220,然后通过BPF系统调用将eBPF字节码220加载至虚拟机内核并为其创建数据存储区域Map240;随后虚拟机内核对eBPF字节码220进行安全验证,验证通过后将eBPF字节码220编译为eBPF机器码230即eBPF系统调用指令,最后将eBPF程序中的各项系统调用指令挂载到指定的钩子函数250上。
其中,Program是指eBPF程序210中的各项系统调用指令,Map240用于存储eBPF程序210中的各项系统调用指令被执行后的执行结果以及被执行时所需的数据,例如eBPF程序210中的一条指令为每运行一次则将计数值加一,则每一次运行后将当前次的计数值存储在Map240中,在下一次运行时则以当前次的计数值为基础加一。用户260也可访问Map240并读取其中的数据。eBPF程序在虚拟机内核中加载成功后会自动为Map240和Program分配对应的文件描述符(fd)。文件描述符作为Map和Program的标识,在需要对Map中的数据或Program对应的代码进行增删查改时作为函数的参数使用,例如将Map的文件描述符作为read()函数的参数即可查看Map240中存储的数据。被挂载的钩子函数250即为eBPF程序210监测的对象。当钩子函数被调用时执行挂载在其上的eBPF程序210中的系统调用指令,监测该钩子函数250被调用时产生的有关数据并将监测到的数据存储起来以用于后续反馈给安全监测客户端。
概括来说,eBPF程序在运行前需要经历加载、验证、编译和挂载这些过程,可以通过在虚拟机内核中编写相关的程序来实现,但同时伴随着增加虚拟机内核进程、提高虚拟机架构复杂度的缺点。
如图2B所示为根据本说明书一实施例示出的eBPF程序中的系统调用指令加载并挂载至虚拟机内核的示意图,在本说明书实施例中,eBPF程序中的系统调用指令加载并挂载至虚拟机内核中的过程基本遵循上述过程,不同的在于加载之前由VMM对eBPF程序210进行安全验证并编译为eBPF机器码230以获取eBPF系统调用指令,随后VMM将各项系统调用指令封装成系统消息后发送给虚拟机内核,虚拟机内核接收到系统消息后将eBPF系统调用指令挂载至钩子函数。为了让VMM具备编译eBPF程序的功能,作为一个实施例,可以将libbpf库集成到了VMM,并对libbpf库进行了修改以使其与VMM适配并将编译后得到的指令对应的系统调用事件输出,需要说明的是,并不排除本领域技术人员借助其他技术手段来实现此功能。采用由VMM发送执行指令对应的系统调用事件的方式以实现eBPF程序在虚拟机内核中的加载,无需在虚拟机内核额外配置相应的程序,从而有助于提高eBPF程序加载的效率。
VMM与虚拟机内核之间的通信方式有多种,可以采用任意一种网络通信方式进行通信,根据对应的通信协议对系统调用事件进行封装,比如可以通过VMM与虚拟机内核之间的专属vsock通道实现通信。在本说明书一实施例中,VMM与目标虚拟机的内核建立vsock通道,vsock通道用于VMM与目标虚拟机的内核之间通信。
目标虚拟机的内核在接收到VMM发送过来的系统调用消息后,将系统消息中封装的系统调用指令挂载到虚拟机内核中指定的钩子函数(目标函数)上。在本说明书一实施例中,挂载成功后目标虚拟机内核将eBPF程序的Map段和Program段的文件描述符返回给VMM。
当目标函数被调用时,虚拟机执行挂载在其上的指令,捕获目标函数被调用时产生的数据,被捕获的数据即为监测数据。监测数据可以存储在Map中,然而存储于Map中的监测数据需要用户主动访问才并从中进行筛选才能读取,不利于监测数据即时、高效地反馈至安全监测客户端。有鉴于此,本说明书实施例为监测数据创建专属的存储区域并创建用于在监测数据产生时发出通知的通知机制以提高获取监测数据的传输效率。在本说明书一实施例中,执行系统调用指令之前,VMM将用于创建缓冲区和创建通知机制的系统调用事件封装成对应的系统调用消息后,从目标虚拟机的外部发送给目标虚拟机的内核;缓冲区用于存储执行系统调用指令时产生的监测数据,通知机制用于在检测到所述监测数据产生后向VMM发送通知。
需要说明的是,创建用于存储所述监测数据的缓冲区需要执行的操作不仅限于创建一个缓冲区,还需要提供将监测数据写入缓冲区的方式并使虚拟机在执行eBPF程序中的各项系统调用指令时能够按照提供的方式存储监测数据。也就是说,eBPF程序中存储监测数据对应的指令需要根据具体的存储方式进行编写。此外,通知机制的创建除了使用具备监测和通知功能的工具外还需要提供被监测的对象。可以通过perf工具和epoll实例分别实现监测数据的存储与监测数据产生的通知。在本说明书另一实施例中,目标虚拟机的内核接收到用于创建缓冲区和创建通知机制的系统调用事件封装成对应的系统调用消息后执行的步骤包括:创建perf事件和epoll实例;为perf事件分配对应的缓冲区;将perf事件的文件描述符写入eBPF程序的Map,以在执行系统调用指令时通过调用perf事件的文件描述符将产生的监测数据存储至perf事件对应的缓冲区;将perf事件的文件描述符写入epoll实例,以通过epoll实例将被调用的perf事件的文件描述符通知给VMM。
在一台虚拟机上存在至少一个CPU,而任意一个CPU在运行过程中都可以调用内核挂载有eBPF程序中各项指令的目标函数。在这种情况下用户需要区分监测数据产生于哪一个CPU,可以通过分别为每一个CPU绑定一个perf事件的方式实现,根据虚拟机CPU的数量创建perf事件。在本说明书另一实施例中,目标虚拟机的CPU数量至少为一个,每个CPU绑定一个perf事件。虚拟机在成功创建perf事件和epoll实例会自动为二者分配文件描述符,并将文件描述符以及各perf事件分配的缓冲区的地址返回给VMM。需要说明的是,这里缓冲区的地址是虚拟机上的物理地址(Guest Physical Address,GPA)。
将perf事件的文件描述符写入所述eBPF程序的Map字段是为了虚拟机在执行eBPF程序中存储监测数据的指令时从Map中获取perf事件的fd以在对应的缓冲区写入监测数据。需要说明的是,采用上述方式存储监测数据则需要将上述输出方式对应的指令编写在eBPF程序中,也就是说在步骤102中获取的eBPF程序中存储监测数据的指令根据将监测数据存储入perf事件对应的数据缓冲区这一方式编写。
将所述perf事件的文件描述符写入epoll实例则是为了将perf事件作为epoll的检测对象,一旦perf事件的文件描述符被调用epoll则会知晓该perf事件对应的缓冲区写入了数据。由此无需用户频繁访问监测数据的存储区域即可得知监测数据的产生。但是,epoll在检测到监测数据的产生后不会主动通知VMM,用户向其发送请问后才会进行通知。在本申请一实施例中,VMM将等待指令对应的系统调用包装成系统调用消息发送给虚拟机内核,epoll实例在接收到该指令后将预设时间段内产生监测数据的perf事件的文件描述符返回给VMM,例如将从接到等待指令起5分钟内产生监测数据的perf事件的文件描述符返回VMM。
VMM作为创建并为虚拟机分配计算机资源的设备,其上存储有虚拟机物理地址(GPA)和宿主机虚拟地址(Host Virtural Address,HVA)之间的映射关系。也就是说,VMM在获取到存储监测数据的perf事件的文件描述符后,能够通过存储的GPA和HVA之间的映射关系获取perf事件对应的缓冲区的HVA地址,从而直接访问HVA地址以获取监测数据。在本说明书一实施例中,监测数据由VMM直接访问缓冲区的HVA地址获取,再发送给安全监测客户端。由此能够克服在虚拟机内部增加agent客户端从虚拟机内部向监测客户端发送监测数据存在的增加虚拟机进程,增加了架构的复杂度的缺点。
接下来通过另一实施例对本说明书实施例提出的虚拟机内核监测方法进行阐述(如图3所示),虚拟机内核执行的所有指令均由VMM340通过将对应的系统调用事件封装为系统调用消息后经由vsock通道发送给虚拟机内核。
步骤301,VMM340建立与虚拟机内核350之间的vsock通道;
步骤302,安全监测客户端330向VMM340发送eBPF程序;
步骤303,VMM340将eBPF程序解析为若干条系统调用指令;
步骤304,VMM340将解析得到的各项系统调用指令封装为系统调用消息发送给虚拟机内核350;
步骤305,虚拟机内核350将接收到的各项系统调用指令挂载至指定的钩子函数上并将Map段和Program段的文件描述符返回给VMM340;
步骤306,VMM340将接收到的Map段和Program段的信息返回给安全监测客户端330备用;
步骤307,VMM340向虚拟机内核350发送系统调用消息,其中包含指令:根据CPU数量创建perf事件;
步骤308,虚拟机内核350执行接收到的指令后将各个perf事件的文件描述符返回给VMM340;
步骤309,VMM340向虚拟机内核350发送系统调用消息,其中包含指令:为各个perf事件分配缓冲区地址;
步骤310,虚拟机内核350执行接收到的指令后将各个perf事件对应的缓冲区的GPA地址返回给VMM340;
步骤311,VMM340向虚拟机内核350发送系统调用消息,其中包含指令:创建epoll实例;
步骤312,虚拟机内核350执行接收到的指令,将epoll实例的文件描述符返回给VMM340;
步骤313,VMM340向虚拟机内核350发送系统调用消息,其中包含指令:将各个perf事件的文件描述符写入Map和epoll实例;
步骤314,VMM340向虚拟机内核350发送系统调用消息,其中包含指令:epoll实例等待指令;
步骤315,指定的钩子函数被调用后产生监测数据,虚拟机内核350将监测数据存储至相应的perf事件对应的缓冲区中并通过epoll实例将存储监测数据的perf事件的文件描述符发送给VMM340;
步骤316,VMM340根据存储的内存映射关系获取接收到的perf事件对应的缓冲区的HVA地址,访问HVA地址以读取监测数据并发送给安全监测客户端330。
如图4A所示,与前述方法实施例相对应,本说明书实施例还提供一种虚拟机内核监测方法,应用于VMM,包括:
步骤401,获取eBPF程序;
步骤403,将eBPF程序解析为至少一条系统调用指令;
步骤405,将各系统调用指令封装成对应的系统调用消息后从目标虚拟机的外部发送给目标虚拟机的内核;
步骤407,接收目标虚拟机的内核返回的系统调用指令对应的执行结果。
在本说明书一些实施例中,VMM还用于将用于创建缓冲区和创建通知机制的系统调用事件封装成对应的系统调用消息后,从目标虚拟机的外部发送给目标虚拟机的内核;缓冲区用于存储执行系统调用指令时产生的监测数据,通知机制用于在检测到所述监测数据产生后向所述VMM发送通知。
在本说明书一些实施例中,VMM还用于与目标虚拟机的内核建立vsock通道,通过vsock通道与虚拟机内核进行通信。
在本说明书一些实施例中,VMM还用于访问缓冲区的HVA地址后获取监测数据。
此外,如图4B所示,本说明书实施例还提供一种虚拟机内核监测方法,应用于虚拟机内核,包括:
步骤402,接收VMM发送的系统调用消息,系统调用消息中封装有eBPF程序中至少一条系统调用指令;
步骤404,将各系统调用指令挂载至目标函数;
步骤406,在目标函数被调用时执行系统调用指令,并将执行结果返回给VMM。
在本说明书一些实施例中,虚拟机内核还用于接收到用于创建缓冲区和创建通知机制的系统调用事件封装成对应的系统调用消息后执行以下步骤:
创建perf事件和epoll实例;为perf事件分配对应的缓冲区;
将所述perf事件的文件描述符写入所述eBPF程序的Map,以在执行所述系统调用指令时通过调用所述perf事件的文件描述符将产生的监测数据存储至所述perf事件对应的缓冲区;
将所述perf事件的文件描述符写入所述epoll实例,以通过所述epoll实例将被调用的所述perf事件的文件描述符通知给所述VMM;其中,缓冲区用于存储执行系统调用指令时产生的监测数据,通知机制用于在检测到监测数据产生后向VMM发送通知。
在本说明书一些实施例中,虚拟机内核还用于与VMM建立vsock通道。
与前述方法的实施例相对应,本说明书还提供了装置及其所应用的终端的实施例。
本说明书虚拟机内核监测装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在安全保护的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图5所示,为本说明书实施例安全保护装置所在电子设备的一种硬件结构图,除了图5所示的处理器510、内存530、网络接口520、以及非易失性存储器540之外,实施例中装置531所在的电子设备,通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
如图6A所示,图6A是本说明书根据一示例性实施例示出的用于VMM的一种虚拟机内核监测装置的框图,所述装置包括:
获取模块610,用于获取eBPF程序;
解析模块620,用于将eBPF程序解析为至少一条系统调用指令;
第一发送模块630,用于将各所述系统调用指令封装成对应的系统调用消息后从目标虚拟机的外部发送给所述目标虚拟机的内核;
第一接收模块640,用于接收所述目标虚拟机的内核返回的所述系统调用指令对应的执行结果。
如图6B所示,图6B是本说明书根据一示例性实施例示出的用于虚拟机内核的一种虚拟机内核监测装置的框图,所述装置包括:
第二接收模块650,用于接收VMM发送的系统调用消息,所述系统调用消息中封装有eBPF程序中至少一条系统调用指令;
挂载模块660,用于将各所述系统调用指令挂载至目标函数;
执行模块670,用于在所述目标函数被调用时执行所述系统调用指令;
第二发送模块680,用于将执行结果返回给所述VMM。
上述模块中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
相应的,本说明书还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现上述任一方法实施例所述的方法。本说明书还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于指令相关的硬件,来完成上述任一方法实施例所述的方法。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
Claims (12)
1.一种虚拟机内核监测方法,所述方法包括:
VMM获取eBPF程序,将所述eBPF程序解析为至少一条系统调用指令,并封装成对应的系统调用消息后从目标虚拟机的外部发送给所述目标虚拟机的内核;
所述目标虚拟机的内核接收所述系统调用消息,将各所述系统调用指令挂载至目标函数,以在所述目标函数被调用时执行所述系统调用指令,并将执行结果返回给所述VMM。
2.根据权利要求1所述的方法,执行所述系统调用指令之前,所述方法还包括:
所述VMM将用于创建缓冲区和创建通知机制的系统调用事件封装成对应的系统调用消息后,从目标虚拟机的外部发送给所述目标虚拟机的内核;所述缓冲区用于存储执行所述系统调用指令时产生的监测数据,所述通知机制用于在检测到所述监测数据产生后向所述VMM发送通知。
3.根据权利要求2所述的方法,所述目标虚拟机的内核接收到用于创建缓冲区和创建通知机制的系统调用事件封装成对应的系统调用消息后执行的步骤包括:
创建perf事件和epoll实例;
为所述perf事件分配对应的缓冲区;
将所述perf事件的文件描述符写入所述eBPF程序的Map,以在执行所述系统调用指令时通过调用所述perf事件的文件描述符将产生的监测数据存储至所述perf事件对应的缓冲区;
将所述perf事件的文件描述符写入所述epoll实例,以通过所述epoll实例将被调用的所述perf事件的文件描述符通知给所述VMM。
4.根据权利要求3所述的方法,所述目标虚拟机的CPU数量至少为一个,每个所述CPU绑定一个所述perf事件。
5.根据权利要求1所述的方法,所述方法还包括:所述VMM与所述目标虚拟机的内核建立vsock通道,所述vsock通道用于所述VMM与所述目标虚拟机的内核之间通信。
6.根据权利要求2所述的方法,所述方法还包括:
所述VMM访问所述缓冲区的HVA地址后获取所述监测数据。
7.一种虚拟机内核监测方法,应用于VMM,所述方法包括:
获取eBPF程序;
将所述eBPF程序解析为至少一条系统调用指令;
将各所述系统调用指令封装成对应的系统调用消息后从目标虚拟机的外部发送给所述目标虚拟机的内核;
接收所述目标虚拟机的内核返回的所述系统调用指令对应的执行结果。
8.一种虚拟机内核监测方法,应用于虚拟机内核,所述方法包括:
接收VMM发送的系统调用消息,所述系统调用消息中封装有eBPF程序中至少一条系统调用指令;
将各所述系统调用指令挂载至目标函数,以在所述目标函数被调用时执行所述系统调用指令,并将执行结果返回给所述VMM。
9.一种虚拟机内核监测装置,应用于VMM,所述装置包括:
获取模块,用于获取eBPF程序;
解析模块,用于将所述eBPF程序解析为至少一条系统调用指令;
第一发送模块,用于将各所述系统调用指令封装成对应的系统调用消息后从目标虚拟机的外部发送给所述目标虚拟机的内核;
第一接收模块,用于接收所述目标虚拟机的内核返回的所述系统调用指令对应的执行结果。
10.一种虚拟机内核监测装置,应用于虚拟机内核,所述装置包括:
第二接收模块,用于接收VMM发送的系统调用消息,所述系统调用消息中封装有eBPF程序中至少一条系统调用指令;
挂载模块,用于将各所述系统调用指令挂载至目标函数;
执行模块,用于在所述目标函数被调用时执行所述系统调用指令;
第二发送模块,用于将执行结果返回给所述VMM。
11.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现权利要求1-8任意一项所述的方法。
12.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于指令相关的硬件,来完成权利要求1-8任意一项所述的方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202210473199.4A CN114816668B (zh) | 2022-04-29 | 2022-04-29 | 一种虚拟机内核监测方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202210473199.4A CN114816668B (zh) | 2022-04-29 | 2022-04-29 | 一种虚拟机内核监测方法、装置、设备及存储介质 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN114816668A true CN114816668A (zh) | 2022-07-29 |
| CN114816668B CN114816668B (zh) | 2025-01-07 |
Family
ID=82510694
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202210473199.4A Active CN114816668B (zh) | 2022-04-29 | 2022-04-29 | 一种虚拟机内核监测方法、装置、设备及存储介质 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN114816668B (zh) |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN116257841A (zh) * | 2023-02-16 | 2023-06-13 | 北京未来智安科技有限公司 | 一种基于Kubernetes的函数处理方法及装置 |
| CN116661948A (zh) * | 2023-05-31 | 2023-08-29 | 昭通亮风台信息科技有限公司 | 一种基于eBPF的Java虚拟机内存访问方法和系统 |
| CN117251419A (zh) * | 2023-07-19 | 2023-12-19 | 软通动力信息技术(集团)股份有限公司 | 一种文件监测方法、装置、电子设备及存储介质 |
Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN110569106A (zh) * | 2019-08-27 | 2019-12-13 | Oppo广东移动通信有限公司 | 代码加载方法、装置、电子设备及计算机可读介质 |
| CN110955631A (zh) * | 2018-09-26 | 2020-04-03 | 上海瑾盛通信科技有限公司 | 文件访问追踪方法、装置、存储介质及终端 |
| EP3671508A1 (en) * | 2020-03-19 | 2020-06-24 | CyberArk Software Ltd. | Customizing operating system kernels with secure kernel modules |
| CN113448690A (zh) * | 2021-08-27 | 2021-09-28 | 阿里云计算有限公司 | 监测方法及装置 |
-
2022
- 2022-04-29 CN CN202210473199.4A patent/CN114816668B/zh active Active
Patent Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN110955631A (zh) * | 2018-09-26 | 2020-04-03 | 上海瑾盛通信科技有限公司 | 文件访问追踪方法、装置、存储介质及终端 |
| CN110569106A (zh) * | 2019-08-27 | 2019-12-13 | Oppo广东移动通信有限公司 | 代码加载方法、装置、电子设备及计算机可读介质 |
| EP3671508A1 (en) * | 2020-03-19 | 2020-06-24 | CyberArk Software Ltd. | Customizing operating system kernels with secure kernel modules |
| CN113448690A (zh) * | 2021-08-27 | 2021-09-28 | 阿里云计算有限公司 | 监测方法及装置 |
Non-Patent Citations (2)
| Title |
|---|
| JIBUM HONG ET AL.: "Design and Implementation of eBPF-based Virtual TAP for Inter-VM Traffic Monitoring", 《2018 14TH INTERNATIONAL CONFERENCE ON NETWORK AND SERVICE MANAGEMENT (CNSM)》, 9 November 2018 (2018-11-09) * |
| 王凯龙: "一种结合eBPF与KFENCE的Linux内核态内存漏洞检测方法的研究", 《电子世界》, no. 16, 31 August 2021 (2021-08-31) * |
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN116257841A (zh) * | 2023-02-16 | 2023-06-13 | 北京未来智安科技有限公司 | 一种基于Kubernetes的函数处理方法及装置 |
| CN116257841B (zh) * | 2023-02-16 | 2024-01-26 | 北京未来智安科技有限公司 | 一种基于Kubernetes的函数处理方法及装置 |
| CN116661948A (zh) * | 2023-05-31 | 2023-08-29 | 昭通亮风台信息科技有限公司 | 一种基于eBPF的Java虚拟机内存访问方法和系统 |
| CN117251419A (zh) * | 2023-07-19 | 2023-12-19 | 软通动力信息技术(集团)股份有限公司 | 一种文件监测方法、装置、电子设备及存储介质 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN114816668B (zh) | 2025-01-07 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US9658941B2 (en) | Methods and systems of function-specific tracing | |
| US10649749B1 (en) | Cross-environment application of tracing information for improved code execution | |
| US11902251B2 (en) | Socket transferring for HPC networks using kernel tracing | |
| US20180039507A1 (en) | System and method for management of a virtual machine environment | |
| US9632913B2 (en) | Remote debug service in a cloud environment | |
| CN105556475B (zh) | 请求处理技术 | |
| US8601469B2 (en) | Method and system for customizing allocation statistics | |
| US10346148B2 (en) | Per request computer system instances | |
| CN114816668A (zh) | 一种虚拟机内核监测方法、装置、设备及存储介质 | |
| US9122793B2 (en) | Distributed debugging of an application in a distributed computing environment | |
| US20170286644A1 (en) | Protection Method and Device for Application Data | |
| CN111240924B (zh) | 一种Linux虚拟机Socket监听的检测方法及其系统 | |
| CN115167985A (zh) | 一种虚拟化的算力提供方法及系统 | |
| CN114912103A (zh) | 一种访问控制方法及相关装置 | |
| CN114510321A (zh) | 资源调度方法、相关装置和介质 | |
| CN106126419A (zh) | 一种应用程序的调试方法及装置 | |
| CN113986466A (zh) | 一种面向云计算的gpu虚拟化系统和方法 | |
| CN116010017A (zh) | 一种交互方法、计算机设备和计算机存储介质 | |
| JPH11224203A (ja) | リモートオブジェクトコール方法、コンピュータ読み取り可能な記憶媒体、リモートオブジェクトコール処理方法、及び分散型コンピュータネットワークシステム | |
| CN117608654B (zh) | 一种业务系统配置方法及终端 | |
| CN114756435A (zh) | 日志读取方法、服务器、计算机设备和存储介质 | |
| Wawrzoniak et al. | Short-lived datacenter | |
| CN117075925B (zh) | libvirt管控面卸载方法、装置、设备及介质 | |
| CN117272285B (zh) | 一种基于Kubernetes的Unikernel运行方法及装置 | |
| CN118708298A (zh) | 基于Netty操作Kubernetes集群的PVC文件的方法、装置及系统 |
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 |