本发明属于操作系统内核防护领域,具体涉及一种针对恶意ebpf字节码防护方法
背景技术:
1、操作系统的安全性,尤其是linux内核的安全性,对于确保计算机系统的稳定性和用户数据的机密性至关重要。linux内核作为开源系统的核心,其安全性直接影响到数百万用户和企业的信息安全,是维护计算环境的稳定性和可用性的基础。然而,正是由于其广泛的使用和开源的代码,linux内核也一直是黑客和恶意软件攻击的重要目标,因此,确保linux内核的安全性至关紧要。
2、ebpf(extended berkeley packet filter)是一项在linux内核中加载和执行用户提供的程序(ebpf程序)的新颖技术,其发展迅猛并已成为内核中的重要组成部分。相较于传统的可装载内核模块方案,ebpf采用验证器来确保ebpf程序的安全性。这一安全保证使得ebpf被视为一项具有前景的技术,可能成为扩展内核功能的实际途径。如今,ebpf已被广泛应用于系统观测、安全和网络等多个领域。
3、然而,作为一个有前景的linux子系统,ebpf允许用户注内核的字节码这一机制,会引入内核漏洞(如验证器错误)之外的固有风险,即攻击者可以劫持其字节码的解释流从而获取任意字节码执行的能力(下称ebpf解释流劫持攻击),这对内核防护工作提出了新的挑战。众所周知,由于linux内核的庞大代码库和复杂功能,内核漏洞是难以避免的。遗憾的是,目前对ebpf安全性的研究主要集中在验证器的改进上,而忽视了ebpf子系统本身可能引入的潜在威胁。通过实施ebpf解释流劫持攻击,很多看似风险较低的漏洞将可以被利用以攻击操作系统内核,这对整个计算机系统的安全造成极大的威胁。
4、现有的内核防护机制却无法抵御ebpf解释流劫持攻击,它可以无需修改页表绕过只读保护,并且同时绕过数据不可执行保护和控制流完整性保护。另一方面,由于攻击具有强大的表达能力(图灵完备),使得攻击者可以与许多进阶的防护手段如selinux等对抗,而这进一步增加了ebpf解释流劫持攻击的威胁。
5、因此,需要提供一种防护方法,弥补现有内核防护的缺失,能够性能开销较低的,有效抵御ebpf解释流劫持攻击的威胁。
技术实现思路
1、本发明提供了一种针对恶意ebpf字节码的防护方法,该方法能够性能开销较低的,有效抵御ebpf解释流劫持攻击的威胁。
2、本发明具体实施例提供了一种针对恶意ebpf字节码的防护方法,包括:
3、(1)追踪ebpf解释器的程序计数器数据流,将识别出的与程序计数器数据流直接或间接相关的数据作为易被恶意ebpf字节码篡改的目标对象;
4、(2)在linux内核中寻找使用所述目标对象的函数,在所述函数的入口处设置检查点来验证ebpf程序的合法性;
5、在设置的检查点验证ebpf程序的合法性,包括:
6、依据所述目标对象的偏移量移动目标对象对应的待检查的ebpf程序结构体指针以访问目标对象内的字段,将所述字段对应的指针加上所述字段的偏移量以获取ebpf程序结构体的id;
7、基于ebpf程序结构体的id从合法的ebpf程序结构体指针集合中搜索出对应的合法的ebpf程序结构体指针,如果待检查的ebpf程序结构体指针与对应的合法的ebpf程序结构体指针数值一致则ebpf程序合法。
8、进一步的,将识别出的与程序计数器数据流直接或间接相关的数据作为易被恶意ebpf字节码篡改的目标对象,其中:
9、所述直接相关的数据为与程序计数器数据流的指针直接进行运算操作的数据;
10、所述间接相关的数据为通过递归寻找与程序计数器数据流的指针间接进行运算操作的数据。
11、进一步的,在追踪ebpf解释器的程序计数器数据流之前,对获得的ebpf解释流数据进行过滤,将标记为只读的数据进行去除。
12、进一步的,在linux内核中寻找使用所述目标对象的函数,所述使用所述目标对象的函数为解释器函数。
13、进一步的,还能够在所述函数的尾调用处理分支处设置检查点来验证ebpf程序的合法性。
14、进一步的,在通过字段对应的指针访问待检查的ebpf程序结构体指针的id前,通过内存访问安全检查函数来检查所述字段。
15、进一步的,利用linux内核的标识符反向映射结构和检索接口基于待检查的ebpf程序结构体指针从合法的ebpf程序结构体指针集合中搜索出对应的合法的ebpf程序结构体指针。
16、进一步的,对于无法直接获取ebpf程序指针的情况,本发明通过ebpf程序对象内的字节码字段间接推测出该对象的地址。
17、与现有技术相比,本发明的有益效果为:
18、本发明弥补了现有技术无法抵御ebpf解释流劫持攻击的缺陷。本发明能够通过识别出易被恶意ebpf字节码篡改的目标对象,基于识别出的目标对象能够找到必要的检查点,避免冗余的检查,提高防护效率;本发明还能够基于获得的ebpf程序结构体的id从ebpf程序结构体指针集合(标识符反向映射)中搜索出对应的合法的ebpf程序结构体指针,而无需将待检查的ebpf程序结构体指针与ebpf程序结构体指针集合一一比对,在有效抵御ebpf解释流劫持攻击的威胁的同时,性能开销较低。
1.一种针对恶意ebpf字节码的防护方法,其特征在于,包括:
2.根据权利要求1所述的针对恶意ebpf字节码的防护方法,其特征在于,将识别出的与程序计数器数据流直接或间接相关的数据作为易被恶意ebpf字节码篡改的目标对象,其中:
3.根据权利要求1所述的针对恶意ebpf字节码的防护方法,其特征在于,在追踪ebpf解释器的程序计数器数据流之前,对获得的ebpf解释流数据进行过滤,将标记为只读的数据进行去除。
4.根据权利要求1所述的针对恶意ebpf字节码的防护方法,其特征在于,在linux内核中寻找使用所述目标对象的函数,所述使用所述目标对象的函数为解释器函数。
5.根据权利要求1所述的针对恶意ebpf字节码的防护方法,其特征在于,还能够在所述函数的尾调用处理分支处设置检查点来验证ebpf程序的合法性。
6.根据权利要求1所述的针对恶意ebpf字节码的防护方法,其特征在于,在通过字段对应的指针访问待检查的ebpf程序结构体指针的id前,通过内存访问安全检查函数来检查所述字段。
7.根据权利要求1所述的针对恶意ebpf字节码的防护方法,其特征在于,利用linux内核的标识符反向映射结构和检索接口基于待检查的ebpf程序结构体指针从合法的ebpf程序结构体指针集合中搜索出对应的合法的ebpf程序结构体指针。
8.根据权利要求1所述的针对恶意ebpf字节码的防护方法,其特征在于,对于无法直接获取ebpf程序指针的情况,本发明通过ebpf程序对象内的字节码字段间接推测出该对象的地址。