CN115729771A - 内核线程的保护方法、终端和计算机可读存储介质 - Google Patents
内核线程的保护方法、终端和计算机可读存储介质 Download PDFInfo
- Publication number
- CN115729771A CN115729771A CN202111022540.6A CN202111022540A CN115729771A CN 115729771 A CN115729771 A CN 115729771A CN 202111022540 A CN202111022540 A CN 202111022540A CN 115729771 A CN115729771 A CN 115729771A
- Authority
- CN
- China
- Prior art keywords
- thread
- monitoring
- kernel
- state
- task
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000012544 monitoring process Methods 0.000 claims abstract description 125
- 230000002159 abnormal effect Effects 0.000 claims abstract description 14
- 239000000725 suspension Substances 0.000 claims description 17
- 238000012795 verification Methods 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 6
- 238000004891 communication Methods 0.000 abstract description 2
- 238000001514 detection method Methods 0.000 description 21
- 230000008569 process Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 4
- 230000005856 abnormality Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000007123 defense Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000001010 compromised effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例涉及通信技术领域,特别涉及一种内核线程的保护方法、终端和计算机可读存储介质。内核线程至少包括:第一线程和第二线程,内核线程的保护方法包括:通过所述第一线程执行待保护工作;通过所述第一线程对所述第二线程进行监控,并通过所述第二线程对所述第一线程进行监控;若监控到所述第一线程出现异常或监控到所述第二线程出现异常,对执行所述待保护工作时的内存读写操作进行拦截,可以提高对内核线程保护的安全性。
Description
技术领域
本申请实施例涉及通信技术领域,特别涉及一种内核线程的保护方法、终端和计算机可读存储介质。
背景技术
在现代计算机操作***中,多线程操作扮演着十分重要的角色,它可以允许使用者在同一时间对多个任务加以控制。在操作***内核中,存在着许多内核线程,内核线程是直接由内核本身启动的进程,它实际上是将内核函数委托给独立的进程来执行。内核线程可以看作内核的分身,一个分身可以处理一件特定的事情。内核线程只能运行在内核态,不能在用户态运行,而且内核线程只能访问虚拟地址空间的内核部分,不能访问用户空间。如果用户需要执行任务,这个任务需要在***启动后就立即自动执行,而且希望任务在***运行期间一直不停地运行,那么使用内核线程来执行这种任务是一种很好的选择。
现有的内核线程保护方案主要为:单线程监控,即创建一个线程,对其他的线程进行监控,但是这种方案有一个严重的缺陷,那就是如果攻击者先将监控线程杀死,那么这个保护措施就失去了作用,即对内核线程保护的安全性低。
发明内容
本申请实施例的主要目的在于提出一种内核线程的保护方法、终端和计算机可读存储介质,可以提高对内核线程保护的安全性。
为至少实现上述目的,本申请实施例提供了一种内核线程的保护方法,所述内核线程至少包括:第一线程和第二线程,所述方法包括:通过所述第一线程执行待保护工作;通过所述第一线程对所述第二线程进行监控,并通过所述第二线程对所述第一线程进行监控;若监控到所述第一线程出现异常或监控到所述第二线程出现异常,对执行所述待保护工作时的内存读写操作进行拦截。
为实现上述目的,本申请实施例还提供了一种终端,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的内核线程的保护方法。
为至少实现上述目的,本申请实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述的内核线程的保护方法。
本申请实施例中,内核线程至少包括:第一线程和第二线程,通过第一线程执行待保护工作;通过第一线程对第二线程进行监控,并通过第二线程对第一线程进行监控;若监控到第一线程出现异常或监控到第二线程出现异常,对执行待保护工作时的内存读写操作进行拦截。即第一线程视为工作线程,它既执行本来要做的工作即待保护工作,又执行监控工作,第二线程视为监控线程,第一线程对第二线程进行监控,第二线程对第一线程进行监控,形成一个监控环。在监控到异常时,对内存读写操作进行拦截,即直接锁死***防止***进一步被破坏。攻击者如果想攻破监控环并且不被检测到,就必须在监控环保护的一个周期内同时攻破第一线程和第二线程,而在同一周期内同时攻破第一线程和第二线程的难度很大,因此本申请实施例中的内核线程的保护方法的攻破难度较大,从而可以提高对内核线程保护的安全性。
附图说明
图1是本申请实施例中提到的内核线程的保护方法的流程示意图;
图2是本申请实施例中提到的通过第一线程对第二线程进行监控,并通过第二线程对第一线程进行监控的实现方式的流程示意图;
图3是本申请实施例中提到的通过第一线程对第二线程的运行状态进行监控,确定第二线程的运行状态是否为死亡状态或永久挂起状态的实现过程的流程示意图;
图4是本申请实施例中提到的通过第二线程对第一线程的运行状态进行监控,确定第一线程的运行状态是否为死亡状态或永久挂起状态的实现过程的流程示意图;
图5是本申请实施例中提到的监控环的示意图;
图6是本申请实施例中提到的内核执行模式的示意图;
图7是本申请实施例中提到的TEE执行模式的示意图;
图8是本申请实施例中提到的混合执行模式的示意图;
图9是本申请实施例中提到的终端的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本申请各实施例中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本申请所要求保护的技术方案。以下各个实施例的划分是为了描述方便,不应对本申请的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。
随着移动通信和互联网技术的飞速发展,智能终端在各个领域扮演着越来越重要的角色,智能终端的安全性变得越来越重要。如果在***中能够提供一个相对可信赖的运行环境,使用户的关键数据或应用在这个相对可信赖的环境中使用和运行,这样,即使***被攻破,入侵者也无法直接获取用户的重要信息,这就是可信执行环境(TrustedExecution Environment,TEE)的主要作用和理念。为了给终端提供安全的运行环境,精简指令集计算微处理器(Advanced RISC Machines,ARM)引入了TrustZone技术,它将中央处理器(central processing unit,CPU)的工作状态分为普通世界Normal World和安全世界Secure World,当CPU工作在Normal World状态时,即使用户拥有root权限也无法访问处于Secure World状态中的任何资源。***可以通过调用安全监控模式调用(secure monitorcall,smc)指令实现ARM核的Secure World状态与Normal World状态之间的切换,当***调用SMC指令时,***会陷入Monitor Mode中。本申请实施例中结合可信执行环境(Trustedexecution environment,TEE)技术,可以在TEE中进行对内核线程执行的工作代码的保护。
本申请的一个实施例中,内核线程包括第一线程和第二线程,第一线程视为工作线程,它既执行本来要做的工作即待保护工作,又执行监控工作,第二线程视为监控线程,第一线程对第二线程进行监控,第二线程对第一线程进行监控,形成一个监控环。本申请实施例提供的内核线程的保护方法可以参考图1,包括:
步骤101:通过第一线程执行待保护工作;
步骤102:通过第一线程对第二线程进行监控,并通过第二线程对第一线程进行监控;
步骤103:若监控到第一线程出现异常或监控到第二线程出现异常,对执行待保护工作时的内存读写操作进行拦截。
本申请实施例中,在监控到异常时,对内存读写操作进行拦截,即直接锁死***防止***进一步被破坏。攻击者如果想攻破第一线程和第二线程之间形成的监控换并且使该攻击行为不被检测到,就必须在监控环保护的一个周期内同时攻破第一线程和第二线程,而在同一周期内同时攻破第一线程和第二线程的难度很大,因此本申请实施例中的内核线程的保护方法的攻破难度较大,从而可以提高对内核线程保护的安全性,以确保待保护工作的安全性。
在一个例子中,在内核启动完成后,比如Linux内核启动完成后,终端可以自动执行一个函数,该函数将依次创建并激活第一线程和第二线程。
在步骤101中,需要执行待保护工作的工作代码可以被写入第一线程中,从而使得终端可以通过第一线程执行待保护工作。其中,待保护工作,比如可以为:支付工作、人脸识别工作、指纹识别工作等。本实施例的内核线程的保护方法通过监控环的监控,最终可以保护待保护工作在执行过程中的安全性。
在步骤102中,用于对第二线程进行监控的代码可以被写入第一线程中,从而使得终端可以通过第一线程对第二线程进行监控。用于对第一线程进行监控的代码可以被写入第二线程中,从而终端可以通过第二线程对第一线程进行监控。也就是说,第一线程和第二线程之间可以互相进行监控。
在步骤103中,若终端监控到第一线程出现异常或监控到第二线程出现异常,则对内存读写操作进行拦截,即在监控到出现异常时,不再执行内存读写操作,直接锁死***防止***进一步被破坏。
其中,监控到第一线程的异常可以包括:第一线程的运行状态为死亡状态或永久挂起状态、第一线程的函数代码段被篡改。监控到第二线程的异常和第一线程的异常类似,为避免重复此处不再赘述。也就是说,本步骤中可以通过第一线程对所述第二线程的运行状态进行监控,确定第二线程的运行状态是否为死亡状态或永久挂起状态;通过第二线程对第一线程的运行状态进行监控,确定第一线程的运行状态是否为死亡状态或永久挂起状态。
在一个例子中,对执行待保护工作时的内存读写操作进行拦截,包括:在安全世界Secure World的监控模式Monitor Mode中调用TrustZone地址空间控制组件,对执行待保护工作时的内存读写操作进行拦截,方便了高效、准确的拦截内存读写操作。其中,TrustZone地址空间控制组件可以为TZC400控制器或TZC380控制器等,本实施例对此不做具体限定。
在一个实施例中,考虑到目前对内核线程的攻击可以分为以下两种:1)永久挂起或杀死内核线程,攻击者可能通过各种恶意手段获取到被攻击内核线程的task_struct结构体,然后将内核线程杀死或者永久挂起,这样,被攻击的内核线程就不能再继续执行任务了。2)篡改内核线程执行的工作代码,攻击者可能找到被攻击内核线程执行的工作代码的内存地址,然后直接修改工作代码执行流程或者篡改内核线程所执行的工作代码,达到攻击的目的。基于此,本实施例提供对内核线程的两种监控方式,1)监控内核线程的运行状态是否为死亡状态或永久挂起状态,即监控内核线程所至少包括的第一线程和第二线程的运行状态是否为死亡状态或永久挂起状态。2)监控内核线程所执行的工作代码是否被篡改,即监控内核线程所至少包括的第一线程和第二线程所执行的工作代码是否被篡改。下面分别对两种监控方式进行说明:
在一个实施例中,在第一线程和第二线程执行的工作代码存储在内核空间的只读代码段的情况下,可以对第一线程和第二线程进行代码只读性检测,当代码只读性检测通过则认为所执行的工作代码未被篡改,当代码只读性检测不通过则认为所执行的工作代码被篡改。通过第一线程对第二线程进行监控,并通过第二线程对第一线程进行监控的实现方式可以参考图2,包括:
步骤201:获取第一线程执行的工作代码在内核空间中的第一地址区间,并获取第二线程执行的工作代码在内核空间中的第二地址区间;
步骤202:根据第一地址区间的内容和第二地址区间的内容,对第一线程执行的工作代码和第二线程执行的工作代码进行校验,得到第一线程对应的第一校验结果和第二线程对应的第二校验结果;
步骤203:根据第一校验结果与第一线程对应的第一标准校验结果,监控第一线程执行的工作代码是否被篡改;
步骤204:根据第二校验结果与第二线程对应的第二标准校验结果,监控第二线程执行的工作代码是否被篡改。
在一个例子中,步骤202的实现方式可以为:根据第一地址区间的内容进行按字节异或,得到异或结果,将该异或结果作为第一线程对应的第一校验结果。其中,按字节异或的方式可以为:将第一地址区间内的第一个字节的内容和第二个字节的内容进行异或,得到一个异或值,继续将该异或值与第三个字节的内容进行异或,得到一个最新的异或值,再将该新的异或值与第三个字节的内容进行异或,再得到一个最新的异或值,以此类推,直到完成和最后一个字节的异或得到最后一个异或值,该最后一个异或值即为第一校验结果。第二校验结果的获取方式与第一校验结果的获取方式类似,为避免重复,此处不再赘述。
在一个例子中,步骤202的实现方式可以为:根据第一地址区间的内容求第一哈希值,将该第一哈希值作为第一线程对应的第一校验结果,根据第二地址区间的内容求第二哈希值,将该第二哈希值作为第二线程对应的第二校验结果。
在步骤203中,如果第一校验结果与第一线程对应的第一标准校验结果相同,则可以确定第一线程执行的工作代码未被篡改,从而确定对第一线程进行的代码只读性检测通过。如果第一校验结果与第一线程对应的第一标准校验结果不同,则可以确定第一线程执行的工作代码被篡改,从而确定对第一线程进行的代码只读性检测未通过。
在一个例子中,第一校验结果为异或结果,第一标准校验结果为第一标准异或结果。其中,第一标准异或结果为初次对第一线程进行代码只读性检测得到的异或结果。初次执行代码只读性检测时,在第一线程中调用一条SMC指令将***切换到Monitor Mode,获取第一线程的的工作代码在内核空间中的第一地址区间,对第一地址区间的内容按字节进行异或操作,得到异或结果,初次得到的该异或结果即可以作为第一标准校验结果。
在一个例子中,第一校验结果为第一哈希值,第一标准校验结果为第一标准哈希值。第一标准哈希值为初次对第一线程进行代码只读性检测得到的哈希值。初次执行代码只读性检测时,在第一线程中调用一条SMC指令将***切换到Monitor Mode,获取第一线程的的工作代码在内核空间中的第一地址区间,对第一地址区间的内容求第一哈希值,初次得到的该第一哈希值即可以作为第一标准哈希值。
在步骤204中,如果第二校验结果与第二线程对应的第二标准校验结果相同,则可以确定第二线程执行的工作代码未被篡改,从而确定对第二线程进行的代码只读性检测通过。如果第二校验结果与第二线程对应的第二标准校验结果不同,则可以确定第二线程执行的工作代码被篡改,从而确定对第二线程进行的代码只读性检测未通过。
在一个例子中,第二校验结果为异或结果,第二标准校验结果为第二标准异或结果。第二标准异或结果为初次对第二线程进行代码只读性检测得到的异或结果。第二标准异或结果的确定方式与第一标准异或结果的确定方式类似,为避免重复,此处不再赘述。
在一个例子中,第二校验结果为第二哈希值,第二标准校验结果为第二标准哈希值。第二标准哈希值为初次对第二线程进行代码只读性检测得到的哈希值。第二标准哈希值的确定方式与第一标准哈希值的确定方式类似,为避免重复,此处不再赘述。
在一个例子中,可以周期性的对第一线程和第二线程进行代码只读性检测,周期性的判断第一线程和第二线程是否通过代码只读性检测。当代码只读性检测未通过时,触发防御措施卡死***,防御措施为对内存读写操作进行拦截。
在一个例子中,在步骤201之前,还包括:拦截到从普通世界Normal World向安全世界Secure World中发送的目标SMC指令;其中,所述目标SMC指令用于对函数代码段是否被篡改进行检测。在具体实现中,可以预先设置目标SMC指令对应的目标smc_fid,目标smc_fid可以理解为目标SMC指令的指令标识。当接收到从普通世界Normal World向安全世界Secure World中发送的SMC指令,获取接收的该SMC指令的smc_fid,如果接收的该SMC指令的smc_fid与目标smc_fid相同,则认为接收的该SMC指令为目标SMC指令,从而可以确定拦截到从Normal World向Secure World中发送的目标SMC指令,以继续执行对内核线程的代码只读性检测。
本实施例中,结合了TEE技术,在TEE中即Secure World中可以对内核线程执行的工作代码的只读性进行周期性检查保护,通过对目标SMC指令的拦截,能够及时对内核线程所执行的工作代码进行是否被篡改的检测,从而在检测到工作代码被篡改后,及时对内存读写操作进行拦截,以防止***进一步被破坏。
在一个实施例中,通过第一线程对第二线程的运行状态进行监控,确定第二线程的运行状态是否为死亡状态或永久挂起状态,包括:检测通过第一线程创建的task_struct类型的第一指针是否为有效指针;其中,第一指针指向第二线程的第一task_struct结构体;在第一指针为有效指针的情况下,检测第一task_struct结构体的state变量的值;在第一task_struct结构体的state变量的值为预设的第一类值的情况下,则确定第二线程的运行状态为死亡状态;在第一task_struct结构体的state变量的值为预设的第二类值的情况下,则确定第二线程的运行状态为不可中断的挂起状态,当第二线程的运行状态为不可中断的挂起状态的持续时长超过预设时长,则确定第二线程的运行状态为永久挂起状态。其中,预设的第一类值可以用于表征死亡状态,比如第一类值可以包括:4、16、32或128等,预设的第二类值可以用于表征不可中断的挂起状态,比如第二类值可以包括:2。预设时长可以根据实际需要进行设置,本实施例对此不做具体限定。
在具体实现中,第一线程中可以运行用于监控第二线程的运行状态的代码,从而终端可以通过第一线程对第二线程的运行状态进行监控。第二线程中可以运行用于监控第一线程的运行状态的代码,从而终端可以通过第二线程对第一线程的运行状态进行监控。当内核线程环即监控环中有线程被杀死或者永久挂起时(即监控到内核线程环中某个线程的运行状态为死亡状态或永久挂起状态),内核线程环就会启动防御措施卡死***。
在一个例子中,通过第一线程对第二线程的运行状态进行监控,确定第二线程的运行状态是否为死亡状态或永久挂起状态的实现过程可以参考图3,包括:
步骤301:获取通过第一线程创建的task_struct类型的第一指针;
其中,第一指针指向第二线程的第一task_struct结构体。
步骤302:while(1);
步骤303:检测获取的第一指针是否为有效指针;如果是,则执行步骤304,否则执行步骤311;
步骤304:判断第一task_struct结构体的state变量的值是否为4、16、32或128;如果是,则执行步骤311,否则执行步骤305;
步骤305:获取当前时间点1;
步骤306:判断第一task_struct结构体的state变量的值是否为2;如果是,则执行步骤307,否则执行步骤302;
步骤307:获取当前时间点2,并获取当前时间点1和当前时间点2之间的时间差;
步骤308:判断时间差是否超过预设时长;如果是则执行步骤309,否则执行步骤310;
其中,判断时间差是否超过预设时长,即可以理解为判断第二线程处于不可中断的挂起状态的持续时长是否超过预设时长。
步骤309:确定第二线程的运行状态为永久挂起状态;
步骤310:延迟100毫秒,继续执行步骤306;
步骤311:确定第二线程的运行状态为死亡状态。
在具体实现中,在步骤309和步骤311之后,即已经确定第二线程出现异常,则可以对内存读写操作进行拦截。
在一个实施例中,通过第二线程对第一线程的运行状态进行监控,确定第一线程的运行状态是否为死亡状态或永久挂起状态,包括:检测通过第二线程创建的task_struct类型的第二指针是否为有效指针;其中,第二指针指向第一线程的第二task_struct结构体;在第二指针为有效指针的情况下,检测第二task_struct结构体的state变量的值;在第二task_struct结构体的state变量的值为预设的第一类值的情况下,确定第一线程的运行状态为死亡状态;在第二task_struct结构体的state变量的值为预设的第二类值的情况下,确定第一线程的运行状态为不可中断的挂起状态,当第一线程的运行状态为不可中断的挂起状态的持续时长超过预设时长,则确定第一线程的运行状态为永久挂起状态。其中,第一类值、第二类值、预设时长的介绍可以参考上文的相关介绍,为避免重复,此处不再赘述。
在一个例子中,通过第二线程对第一线程的运行状态进行监控,确定第一线程的运行状态是否为死亡状态或永久挂起状态的实现过程可以参考图4,包括:
步骤401:获取通过第二线程创建的task_struct类型的第二指针;
其中,第二指针指向第一线程的第二task_struct结构体。
步骤402:while(1);
步骤403:检测获取的第二指针是否为有效指针;如果是,则执行步骤404,否则执行步骤411;
步骤404:判断第二task_struct结构体的state变量的值是否为4、16、32或128;如果是,则执行步骤411,否则执行步骤405;
步骤405:获取当前时间点1;
步骤406:判断第二task_struct结构体的state变量的值是否为2;如果是,则执行步骤407,否则执行步骤402;
步骤407:获取当前时间点2,并获取当前时间点1和当前时间点2之间的时间差;
步骤408:判断时间差是否超过预设时长;如果是则执行步骤409,否则执行步骤410;
步骤409:确定第一线程的运行状态为永久挂起状态;
步骤410:延迟100毫秒,继续执行步骤406;
步骤411:确定第一线程的运行状态为死亡状态。
在具体实现中,在步骤409和步骤411之后,即已经确定第一线程出现异常,则可以对内存读写操作进行拦截。
本申请实施例中,可以及时检测到攻击者可能通过各种恶意手段获取到被攻击内核线程的task_struct结构体,通过对内核线程的工作状态的监控,能够在监控到运行状态为死亡状态或是永久挂起状态时,及时对内存读写操作进行拦截,以防止***进一步被破坏。
在一个实施例中,第二线程包括:第一监控线程和第二监控线程,通过第一线程对第二线程进行监控,并通过第二线程对第一线程进行监控,包括:通过第一线程对第一监控线程进行监控,通过第一监控线程对第二监控线程进行监控,并通过第二监控线程对第一线程进行监控。也就是说,内核线程包括:第一线程、第一监控线程、第二监控线程,这三个线程构成监控环。
在一个例子中,第一线程记为工作线程A,第一监控线程记为监控线程B,第二监控线程记为监控线程C,工作线程A、监控线程B和监控线程C组成的监控环可以参考图5,图5中,工作线程A用于对监控线程B的运行状态进行监控,监控线程B用于对监控线程C的运行状态进行监控,监控线程C用于对工作线程A的运行状态进行监控,工作线程A还用于进行代码只读性检测工作。该代码只读性检测工作包括:检测工作线程A要执行的工作代码是否被篡改、检测监控线程B要执行的工作代码是否被篡改、检测监控线程C要执行的工作代码是否被篡改。
在一个例子中,在Linux内核启动完成后,终端可以自动执行一个函数,该函数将依次创建并激活上述的工作线程A、监控线程B、监控线程C。工作线程A既执行本来要做的工作,又执行监控工作,监控线程B和监控线程C执行监控工作。三个线程的监控关系如图5所示,工作线程A对监控线程B进行监控,监控线程B对监控线程C进行监控,监控线程C对工作线程A进行监控,形成一个监控环。
本申请实施例中,通过三个内核线程形成的监控环,攻击难度更高,即攻击者如果想攻破监控环并且不被检测到,那么必须在监控环保护的一个周期内同时攻破工作线程和两个监控线程,即必须在一个周期内同时攻破三个内核线程,然而在一个周期内同时攻破三个内核线程是十分困难的,因此,本实施例中提供的内核线程的保护方法的攻击难度更高,极大的提升了内核线程的安全性。
值得一提的是,在具体实现中,根据实际需要监控环中的内核线程的数量可以在3个的基础上进一步增加,以进一步增加攻击难度,从而提高内核线程的安全性。
在一个实施例中,第一线程执行工作时的工作模式包括:内核执行模式、TEE执行模式、混合执行模式;在内核执行模式下,第一线程工作时执行的工作代码被写入第一线程中;在TEE执行模式下,第一线程工作时执行的工作代码被写入在安全世界Secure World中创建的可信应用(TrustedApplication,TA)中,第一线程通过调用TA执行工作代码;在混合执行模式下,第一线程工作时执行的第一种工作代码被写入第一线程中,第一线程工作时执行的第二种工作代码被写入在安全世界Secure World中创建的TA中,第一线程通过调用TA执行第二种工作代码。下面对三种工作模式进行具体说明:
如果需要执行的工作代码量比较大,而且要求执行效率比较高的时候,如果内核态执行可以满足安全性要求,那么可以直接将要执行的工作代码写在第一线程中,这就是内核执行模式。假设,本实施例中的监控环采用如图5所示的监控环,则内核执行模式的示意图可以参考图6,即要执行的工作代码写在工作线程A中。
如果需要执行的工作代码量很小,而且对工作的安全性要求很高,内核态执行不足以满足安全要求的话,那么就可以选择在TEE中执行此工作。在SecureWorld中创建一个TA,然后将安全性要求很高的工作代码写在TA中,然后第一线程通过TEE驱动等调用SMC指令使SecureWorld中的TA执行工作,这就是TEE执行模式。假设,本实施例中的监控环采用如图5所示的监控环,则TEE执行模式的示意图可以参考图7,即要执行的工作代码写在TA中,工作线程A通过调用SMC指令,使SecureWorld中的TA执行工作代码。由工作线程A调用SecureWorld中的TA来完成安全性要求很高的任务。这样,工作线程A执行的工作代码实质上是在TEE中运行的,即使攻击者获得了Normal World下的root权限,也不能知道工作线程A执行了什么任务,保密性极高。
如果需要执行的工作代码量比较大,但是只有一部分代码对安全性要求极高,内核态不足以满足它执行的安全性,而其他部分代码的执行完全可以由内核态执行的话,那么就可以选择将安全性要求极高的代码(第二种工作代码)使用TEE执行模式,其他部分代码(第一种工作代码)使用内核执行模式,这就是混合执行模式。假设,本实施例中的监控环采用如图5所示的监控环,则混合执行模式的示意图可以参考图8,第一种工作代码写入工作线程A中,第二种工作代码写入TA中,当工作线程A需要执行第二种工作代码时,可以通过调用SMC指令,使SecureWorld中的TA执行第二种工作代码。也就是说,在混合执行模式下,将真正对安全性要求很高的工作代码放到TEE中执行,对安全性要求不太高的工作代码放到工作线程A下执行,考虑到将工作代码全部放到TEE中执行中,可能影响执行效率,因此,本实施例中的混合执行模式可以兼顾安全性和执行效率。
在具体实现中,考虑到工作代码被写入在Secure World中创建的TA中时,很难被篡改,安全性很高。因此,在TEE执行模式下,由于第一线程工作时执行的工作代码被写入在Secure World中创建的TA中,则可以不对第一线程进行代码只读性检测。在混合执行模式中,由于第一线程中的第二种工作代码被写入在Secure World中创建的TA中,则可以不对第一线程中的第二种工作代码进行代码只读性检测。通过不进行代码只读性检测,在一定程度上可以提高***的执行效率。
本实施例,具备让用户灵活选择任务执行模式的优势。如果任务代码量大,且要求效率高,用户可以选择在内核模式下执行任务;如果任务代码量不大,对安全性要求很高,用户可以选择在TEE模式下执行任务;如果需要兼顾安全性和任务执行效率,那么用户可以选择在混合模式下执行任务。并且,本实施例并不局限于Linux操作***,还可以在Android操作***甚至其他提供可信执行环境的操作***上使用,因此可移植性更好。而且,本实施例并不对Linux操作***的版本有限制,只要Linux操作***提供可信执行环境即可。
在具体实现中,操作***厂商和TEE提供商可以按照本申请实施例提供的方法分别对操作***和TEE进行更新,用户的终端通过网络下载更新包后安装更新,当操作***和TEE均完成更新后,用户的终端即可自动运行本申请实施例中的内核线程的保护方法。
需要说明的是,本申请实施例中的上述各示例均为为方便理解进行的举例说明,并不对本发明的技术方案构成限定。
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
本申请实施例还提供了一种终端,如图9所示,包括至少一个处理器901;以及,与至少一个处理器901通信连接的存储器902;其中,存储器902存储有可被至少一个处理器901执行的指令,指令被至少一个处理器901执行,以使至少一个处理器901能够执行上述实施例中的内核线程的保护方法。
其中,存储器902和处理器901采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器901和存储器902的各种电路连接在一起。总线还可以将诸如***设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器901处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器901。
处理器901负责管理总线和通常的处理,还可以提供各种功能,包括定时,***接口,电压调节、电源管理以及其他控制功能。而存储器902可以被用于存储处理器901在执行操作时所使用的数据。
本申请实施例还提供了一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述方法实施例。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
Claims (10)
1.一种内核线程的保护方法,其特征在于,所述内核线程至少包括:第一线程和第二线程,所述方法包括:
通过所述第一线程执行待保护工作;
通过所述第一线程对所述第二线程进行监控,并通过所述第二线程对所述第一线程进行监控;
若监控到所述第一线程出现异常或监控到所述第二线程出现异常,对执行所述待保护工作时的内存读写操作进行拦截。
2.根据权利要求1所述的内核线程的保护方法,其特征在于,在所述第一线程和第二线程执行的工作代码存储在内核空间的只读代码段的情况下,所述通过所述第一线程对所述第二线程进行监控,并通过所述第二线程对所述第一线程进行监控,包括:
获取所述第一线程执行的工作代码在所述内核空间中的第一地址区间,并获取所述第二线程执行的工作代码在所述内核空间中的第二地址区间;
根据所述第一地址区间的内容和所述第二地址区间的内容,对所述第一线程执行的工作代码和所述第二线程执行的工作代码进行校验,得到所述第一线程对应的第一校验结果和所述第二线程对应的第二校验结果;
根据所述第一校验结果与所述第一线程对应的第一标准校验结果,监控所述第一线程执行的工作代码是否被篡改;
根据所述第二校验结果与所述第二线程对应的第二标准校验结果,监控所述第二线程执行的工作代码是否被篡改。
3.根据权利要求2所述的内核线程的保护方法,其特征在于,在所述获取所述第一线程执行的工作代码在所述内核空间中的第一地址区间,并获取所述第二线程执行的工作代码在所述内核空间中的第二地址区间之前,还包括:
拦截到从普通世界Normal World向安全世界Secure World中发送的目标SMC指令;其中,所述目标SMC指令用于对工作代码是否被篡改进行检测。
4.根据权利要求1所述的内核线程的保护方法,其特征在于,所述通过所述第一线程对所述第二线程进行监控,并通过所述第二线程对所述第一线程进行监控,包括:
通过所述第一线程对所述第二线程的运行状态进行监控,确定所述第二线程的运行状态是否为死亡状态或永久挂起状态;
通过所述第二线程对所述第一线程的运行状态进行监控,确定所述第一线程的运行状态是否为死亡状态或永久挂起状态。
5.根据权利要求4所述的内核线程的保护方法,其特征在于,所述通过所述第一线程对所述第二线程的运行状态进行监控,确定所述第二线程的运行状态是否为死亡状态或永久挂起状态,包括:
检测通过所述第一线程创建的task_struct类型的第一指针是否为有效指针;其中,所述第一指针指向所述第二线程的第一task_struct结构体;
在所述第一指针为有效指针的情况下,检测所述第一task_struct结构体的state变量的值;
在所述第一task_struct结构体的state变量的值为预设的第一类值的情况下,确定所述第二线程的运行状态为死亡状态;
在所述第一task_struct结构体的state变量的值为预设的第二类值的情况下,确定所述第二线程的运行状态为不可中断的挂起状态,当所述第二线程的运行状态为不可中断的挂起状态的持续时长超过预设时长,则确定所述第二线程的运行状态为永久挂起状态;
所述通过所述第二线程对所述第一线程的运行状态进行监控,确定所述第一线程的运行状态是否为死亡状态或永久挂起状态,包括:
检测通过所述第二线程创建的task_struct类型的第二指针是否为有效指针;其中,所述第二指针指向所述第一线程的第二task_struct结构体;
在所述第二指针为有效指针的情况下,检测所述第二task_struct结构体的state变量的值;
在所述第二task_struct结构体的state变量的值为预设的第一类值的情况下,确定所述第一线程的运行状态为死亡状态;
在所述第二task_struct结构体的state变量的值为预设的第二类值的情况下,确定所述第一线程的运行状态为不可中断的挂起状态,当所述第一线程的运行状态为不可中断的挂起状态的持续时长超过预设时长,则确定所述第一线程的运行状态为永久挂起状态。
6.根据权利要求1所述的内核线程的保护方法,其特征在于,所述第一线程执行待保护工作时的工作模式包括:内核执行模式、TEE执行模式、混合执行模式;
在所述内核执行模式下,所述第一线程执行的工作代码被写入所述第一线程中;
在所述TEE执行模式下,所述第一线程执行的工作代码被写入在安全世界SecureWorld中创建的可信应用TA中,所述第一线程通过调用所述TA执行所述工作代码;
在所述混合执行模式下,所述第一线程执行的第一种工作代码被写入所述第一线程中,所述第一线程执行的第二种工作代码被写入在安全世界Secure World中创建的可信应用TA中,所述第一线程通过调用所述TA执行所述第二种工作代码。
7.根据权利要求1至6任一项所述的内核线程的保护方法,其特征在于,所述第二线程包括:第一监控线程和第二监控线程,所述通过所述第一线程对所述第二线程进行监控,并通过所述第二线程对所述第一线程进行监控,包括:
通过所述第一线程对所述第一监控线程进行监控,通过所述第一监控线程对所述第二监控线程进行监控,并通过所述第二监控线程对所述第一线程进行监控。
8.根据权利要求1至6任一项所述的内核线程的保护方法,其特征在于,所述对执行所述待保护工作时的内存读写操作进行拦截,包括:
在安全世界Secure World的监控模式Monitor Mode中调用TrustZone地址空间控制组件,对执行所述待保护工作时的内存读写操作进行拦截。
9.一种终端,其特征在于,包括:至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至8中任一所述的内核线程的保护方法。
10.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8中任一项所述的内核线程的保护方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111022540.6A CN115729771A (zh) | 2021-09-01 | 2021-09-01 | 内核线程的保护方法、终端和计算机可读存储介质 |
PCT/CN2022/108692 WO2023029835A1 (zh) | 2021-09-01 | 2022-07-28 | 内核线程的保护方法、终端和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111022540.6A CN115729771A (zh) | 2021-09-01 | 2021-09-01 | 内核线程的保护方法、终端和计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115729771A true CN115729771A (zh) | 2023-03-03 |
Family
ID=85292186
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111022540.6A Pending CN115729771A (zh) | 2021-09-01 | 2021-09-01 | 内核线程的保护方法、终端和计算机可读存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115729771A (zh) |
WO (1) | WO2023029835A1 (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9305167B2 (en) * | 2014-05-21 | 2016-04-05 | Bitdefender IPR Management Ltd. | Hardware-enabled prevention of code reuse attacks |
CN106933658A (zh) * | 2015-12-29 | 2017-07-07 | 北京明朝万达科技股份有限公司 | 一种操作***中后台进程防杀死的方法和装置 |
CN106201690A (zh) * | 2016-07-07 | 2016-12-07 | 乐视控股(北京)有限公司 | 应用运行控制方法及装置 |
CN106599690A (zh) * | 2016-12-21 | 2017-04-26 | 哈尔滨安天科技股份有限公司 | 国产操作***下的可移动介质访问权限的管控方法及*** |
-
2021
- 2021-09-01 CN CN202111022540.6A patent/CN115729771A/zh active Pending
-
2022
- 2022-07-28 WO PCT/CN2022/108692 patent/WO2023029835A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2023029835A1 (zh) | 2023-03-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109871695B (zh) | 一种计算与防护并行双体系结构的可信计算平台 | |
CN109918916B (zh) | 一种双体系可信计算***及方法 | |
US8621628B2 (en) | Protecting user mode processes from improper tampering or termination | |
JP6706273B2 (ja) | インタープリタ仮想マシンを用いた挙動マルウェア検出 | |
EP3391274B1 (en) | Dual memory introspection for securing multiple network endpoints | |
RU2698776C2 (ru) | Способ ведения базы данных и соответствующий сервер | |
KR102307534B1 (ko) | 다수 소프트웨어 개체들에 걸쳐서 악성 행동을 트래킹하기 위한 시스템들 및 방법들 | |
KR101946982B1 (ko) | 가상 머신에서 멀웨어 탐지를 위한 프로세스 평가 | |
US10984096B2 (en) | Systems, methods, and apparatus for detecting control flow attacks | |
US10826919B2 (en) | Methods and cloud-based systems for protecting devices from malwares | |
US12032661B2 (en) | Hardware-assisted system and method for detecting and analyzing system calls made to an operating system kernel | |
CN111353162B (zh) | 基于TrustZone分核异步执行的主动可信计算方法及*** | |
Yamauchi et al. | Additional kernel observer to prevent privilege escalation attacks by focusing on system call privilege changes | |
CN115879099A (zh) | 一种dcs控制器、操作处理方法和防护子*** | |
WO2014004212A1 (en) | Timer for hardware protection of virtual machine monitor runtime integrity watcher | |
WO2017131679A1 (en) | System management mode test operations | |
CN115729771A (zh) | 内核线程的保护方法、终端和计算机可读存储介质 | |
CN111480160B (zh) | 用于过程验证的***、方法和介质 | |
CN110008001B (zh) | 虚拟机监控器的安全加固方法、***及硬件安全监控卡 | |
CN113821790A (zh) | 基于Trustzone的工业可信计算双体系架构实现方法 | |
Atamli et al. | IO-Trust: an out-of-band trusted memory acquisition for intrusion detection and forensics investigations in cloud IOMMU based systems | |
CN112269995A (zh) | 一种智能电网环境计算与防护并行的可信计算平台 | |
CN112269996A (zh) | 一种面向区块链主节点的主动免疫可信计算平台的动态度量方法 | |
Ling et al. | Prison break of android reflection restriction and defense | |
Liao et al. | A stack-based lightweight approach to detect kernel-level rookits |
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 |