CN113268725A - 适用于arm平台的内核保护方法、访问方法及装置 - Google Patents

适用于arm平台的内核保护方法、访问方法及装置 Download PDF

Info

Publication number
CN113268725A
CN113268725A CN202010093439.9A CN202010093439A CN113268725A CN 113268725 A CN113268725 A CN 113268725A CN 202010093439 A CN202010093439 A CN 202010093439A CN 113268725 A CN113268725 A CN 113268725A
Authority
CN
China
Prior art keywords
struct
task
central processing
processing unit
identifier
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
Application number
CN202010093439.9A
Other languages
English (en)
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.)
Banma Zhixing Network Hongkong Co Ltd
Original Assignee
Banma Zhixing Network Hongkong Co 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 Banma Zhixing Network Hongkong Co Ltd filed Critical Banma Zhixing Network Hongkong Co Ltd
Priority to CN202010093439.9A priority Critical patent/CN113268725A/zh
Publication of CN113268725A publication Critical patent/CN113268725A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities

Landscapes

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

Abstract

公开了一种适用于ARM平台的内核保护方法、访问方法及装置。将进程信息thread_info结构体存储到进程描述符task_struct结构体中;在全局数组中存储进程描述符task_struct结构体所对应的指针。由此通过将thread_info从栈上分离出来存储到task_struct中,可以避免通过thread_info访问task_struct而带来的风险,并且可以解决因栈溢出影响导致重要数据被覆写的问题。而通过在全局数组中存储进程描述符task_struct结构体所对应的指针可以绕过硬件限制,不依赖于CPU架构,使得通过代码即可完成task_struct指针的存储和访问。

Description

适用于ARM平台的内核保护方法、访问方法及装置
技术领域
本公开涉及内核安全领域,特别是涉及一种适用于ARM平台的内核保护方法、访问方法及装置。
背景技术
task_struct是Linux内核中的一个重要数据结构,是每个进程和线程(在内核中线程也是一个进程)的进程描述符。task_struct结构体中存储了进程的进程名、uid、栈地址指针、父进程指针等几乎所有进程的重要信息。
thread_info是Linux内核中与task_struct相关的另一个重要数据结构,存储了当前进程(线程)的重要描述信息。
thread_info的存储位置比较特殊,它与内核栈共用8KB的内存空间,位于内核栈的底端,其中存储了对应进程的task_struct结构体指针以及addr_limit等重要数据结构。
内核中要获取当前task_struct结构体指针,通过调用current宏就可以完成,而current宏的实现原理就是通过当前栈指针sp,计算出thread_info地址,再通过thread_info即可获取当前task指针。
所以如果攻击者能够获取到内核执行代码执行机会,就可以很容易的通过栈指针找到task_struct的重要数据,进一步修改cred信息,提升权限。
另外,thread_info放在栈上,也很容易受到栈溢出影响导致重要数据被覆写,也可能被用于权限提升。
因此,需要一种方案,来解决因thread_info的上述存储结构导致的内核易被攻击问题。
发明内容
本公开要解决的一个技术问题是提供一种内核保护方案,解决因thread_info的现有存储结构导致的内核易被攻击问题。
根据本公开的第一个方面,提供了一种适用于ARM平台的内核保护方法,包括:将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及在全局数组中存储进程描述符task_struct结构体所对应的指针。
可选地,在全局数组中存储进程描述符task_struct结构体所对应的指针的步骤包括:将各个中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中,其中,全局数组中的元素为指针,元素的下标为中央处理器的标识。
可选地,该方法还包括:通过协处理器指令获取中央处理器的标识;基于获取到的中央处理器的标识,访问全局数组中与标识对应的指针。
可选地,访问全局数组中与标识对应的指针的步骤包括:读取全局数组中与标识对应的指针,以便基于读取到的指针访问当前进程描述符task_struct结构体;以及/或者对全局数组中与标识对应的指针执行写操作,以修改标识对应的中央处理器中当前进程描述符task_struct结构体所对应的指针。
可选地,该方法还包括:在访问全局数组中与标识对应的指针的过程中,关闭中断;在访问完毕后,打开中断。
可选地,访问全局数组中与标识对应的指针的过程的步骤是在临界区执行的。
根据本公开的第二个方面,还提供了一种内核保护方法,包括:将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及将至少部分中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中。
根据本公开的第三个方面,还提供了一种进程描述符task_struct结构体的访问方法,其特征在于,进程描述符task_struct结构体中存储有进程信息thread_info结构体,该方法包括:获取中央处理器的标识;基于获取到的中央处理器的标识,读取全局数组中与标识对应的指针,全局数组包括一个或多个元素,元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为中央处理器的标识;基于读取到的指针,访问当前进程描述符task_struct结构体。
根据本公开的第四个方面,还提供了一种进程信息thread_info结构体的访问方法,其特征在于,进程信息thread_info结构体被存储到进程描述符task_struct结构体中,该方法包括:获取中央处理器的标识;基于获取到的中央处理器的标识,读取全局数组中与标识对应的指针,全局数组包括一个或多个元素,元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为中央处理器的标识;基于读取到的指针,访问当前进程描述符task_struct结构体中的进程信息thread_info结构体。
根据本公开的第五个方面,还提供了一种内核保护方法,包括:将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及在全局数组中存储进程描述符task_struct结构体所对应的指针。
根据本公开的第六个方面,还提供了一种适用于ARM平台的内核保护装置,包括:第一存储模块,用于将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及第二存储模块,用于在全局数组中存储进程描述符task_struct结构体所对应的指针。
根据本公开的第七个方面,还提供了一种内核保护装置,包括:第一存储模块,用于将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及第二存储模块,用于将至少部分中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中。
根据本公开的第八个方面,还提供了一种进程描述符task_struct结构体的访问装置,进程描述符task_struct结构体中存储有进程信息thread_info结构体,该装置包括:获取模块,用于获取中央处理器的标识;读取模块,用于基于获取到的中央处理器的标识,读取全局数组中与标识对应的指针,全局数组包括一个或多个元素,元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为中央处理器的标识;访问模块,用于基于读取到的指针,访问当前进程描述符task_struct结构体。
根据本公开的第九个方面,还提供了一种进程信息thread_info结构体的访问装置,进程信息thread_info结构体被存储到进程描述符task_struct结构体中,该装置包括:获取模块,用于获取中央处理器的标识;读取模块,用于基于获取到的中央处理器的标识,读取全局数组中与标识对应的指针,全局数组包括一个或多个元素,元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为中央处理器的标识;访问模块,用于基于读取到的指针,访问当前进程描述符task_struct结构体中的进程信息thread_info结构体。
根据本公开的第十个方面,还提供了一种内核保护装置,包括:第一存储模块,用于将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及第二存储模块,用于在全局数组中存储进程描述符task_struct结构体所对应的指针。
根据本公开的第十一个方面,还提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行如上述第一个方面至第五个方面中任一方面述及的方法。
根据本公开的第十二个方面,还提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行如上述第一个方面至第五个方面中任一方面述及的方法。
由此,通过将thread_info从栈上分离出来存储到task_struct中,可以避免通过thread_info访问task_struct而带来的风险,并且可以解决因栈溢出影响导致重要数据被覆写的问题。而通过在全局数组中存储task_struct所对应的指针,可以绕过硬件限制,不依赖于CPU架构,使得通过代码即可完成task_struct指针的存储和访问。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了传统的thread_info存储结构示意图。
图2示出了本公开的thread_info存储结构示意图。
图3示出了根据本公开一个实施例的对全局数组进行写访问的示意图。
图4示出了根据本公开一个实施例的对全局数组进行读访问的示意图。
图5示出了根据本公开一个实施例的适用于ARM平台的内核保护装置的结构示意图。
图6示出了根据本公开另一个实施例的内核保护装置的结构示意图。
图7示出了根据本公开一个实施例的进程描述符task_struct结构体的访问装置的结构示意图。
图8示出了根据本公开一个实施例的进程信息thread_info结构体的访问装置的结构示意图。
图9示出了根据本公开一实施例的计算设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本公开改变了传统的thread_info存储方式,将进程信息thread_info结构体从内核栈移除,存储到进程描述符task_struct结构体中。通过将thread_info从栈上分离出来存储到task_struct中,可以避免通过thread_info访问task_struct而带来的风险,并且可以解决因栈溢出影响导致重要数据被覆写的问题。
图1示出了传统的thread_info存储结构示意图。
图2示出了本公开的thread_info存储结构示意图。
如图1所示,在传统方案中,thread_info存储了对应进程的task_struct结构体指针以及addr_limit等重要数据结构,攻击者可以通过thread_info访问task_struct,进一步修改task_struct中的cred信息,来提升权限。
如图2所示,本公开将thread_info从栈上分离出来存储到task_struct中,使得原有的thread_info与task_struct逻辑访问关系就反过来了。原来是通过thread_info来访问task_struct,现在变成通过task_struct才能访问到thread_info。如此可以避免通过thread_info访问task_struct而带来的内核被攻击风险。
在传统方案中,是通过thread_info来找到task_struct的指针,本公开将thread_info存储到task_struct中时,原有的通过thread_info访问task_struct的逻辑不再成立,因此需要找到一个地方来存储current_task的指针。
考虑到多核情况下,每个中央处理器(CentralProcessingUnit,简称CPU)运行过程中都有一个当前正在调度运行的进程,因此这个current_task指针的存储,应该优选地是各个CPU互相独立的全局变量。
为此本公开提出,可以在全局数组中存储进程描述符task_struct结构体所对应的指针。具体地,可以将各个CPU中当前进程描述符task_struct结构体所对应的指针存储到全局数组中,其中,全局数组中的元素为指针,元素的下标为CPU的标识。此处述及的CPU的标识用于标识CPU,可以是但不限于cpuid。
作为示例,全局数组可以记为current_task[cpuid],其中current_task可以视为数组名称,数组大小就是CPU数量,数组元素为CPU中当前进程描述符task_struct结构体所对应的指针,数组下标就是cpuid。
在全局数组中存储task_struct结构体的指针的方式,可以绕过硬件限制,不依赖于CPU架构,通过代码即可完成task_struct指针的存储和访问。
本公开的这种在全局数组中存储task_struct结构体的指针的方式,可以适用于多种平台,特别适用于硬件结构不支持以全局变量的形式存储t ask_struct指针的平台,例如ARM平台(也即ARM32平台)。
举例来说,在ARM64平台中具有sp_el0寄存器,el0代表用户态,这个寄存器用于存储用户态sp指针。在进入内核时,sp_el0将会被存储到栈上,在出内核时会被恢复,所以在内核中sp_el0实际上是一个闲置的状态,可以用来存储task_struct指针。在X86\X86_64平台中per_cpu是数组数据结构,系统的每一个CPU对应一个元素,X86上的per_cpu变量是基于fs/gs段寄存器寻址实现的,X86上是fs,X86_64上是gs。
而ARM平台(也即ARM32平台)上没有类似el_sp0的寄存器来存储task_struct指针。另外在ARM上访问per_cpu变量需要开关抢占,开关抢占是需要访问thread_info->preempt_count的,这样的话就需要去获取thread_info,同样无法实现。其中preempt_count用于表示该进程是否可以被抢占。抢占是指现行进程在运行过程中,如果有重要或紧迫的进程到达(其状态必须为就绪),则现运行进程将被迫放弃处理器,系统将处理器立刻分配给新到达的进程。
在全局数组中存储task_struct结构体的指针的方式,不依赖于CPU架构,通过代码即可完成task_struct指针的存储和访问,因此本公开的方案特别适用于ARM平台。
在本公开中,可以通过获取中央处理器的标识(例如cpuid)来找到task_struct的指针,进而访问task_struct或者task_struct中的thread_info。
获取cpuid的方式也是需要注意的,因为传统的thread_info->cpu方式在这里就不适用了,因为无法提前获取thread_info,逻辑上走不通。
本公开可以通过协处理器指令获取标识,然后基于获取到的标识,访问全局数组中与标识对应的指针,从而实现task_struct(或task_struct中的thread_info)的读写访问。关于协处理器指令以及通过协处理器指令获取cpuid的具体指令形式,本公开不再赘述。
作为示例,在基于获取到的标识访问全局数组中与标识对应的指针时,可以读取全局数组中与标识对应的指针,以便基于读取到的指针访问当前进程描述符task_struct结构体;以及/或者对全局数组中与标识对应的指针执行写操作,以修改标识对应的中央处理器中当前进程描述符task_struct结构体所对应的指针。
进一步地,考虑到多核情况,虽然各个CPU间互相独立,互不影响,但在同一个CPU上,在访问当前进程的task_struct的过程中,当前进程可能被抢占,导致出现同步问题,关闭抢占需要访问thread_info中的preempt_count,逻辑上存在问题。为此,本公开提出可以在访问全局数组时通过关中断来解决CPU间的同步问题。
作为示例,可以在访问全局数组中与标识对应的指针的过程中,关闭中断,在访问完毕后,打开中断。关闭中断也即关闭中断服务,打开中断也即恢复中断服务。
中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。
在本公开中,访问全局数组中与标识对应的指针的过程的步骤可以是在临界区执行的。临界区指的是访问共用资源的程序片段,进入临界区段时其他线程或是进程必须等待。
图3示出了根据本公开一个实施例的对全局数组进行写访问的示意图。
如图3所示,在开始执行写访问过程时,可以关闭中断,然后通过协处理器指令获取cpuid,然后对全局数组执行写操作,以更新全局数组,例如可以修改cpuid对应的中央处理器中当前进程描述符task_struct结构体所对应的指针。在写访问完毕后再恢复中断。其中整个流程可以在临界区执行。
图4示出了根据本公开一个实施例的对全局数组进行读访问的示意图。
如图4所示,在开始执行读访问过程时,可以关闭中断,然后通过协处理器指令获取cpuid,然后对全局数组执行读操作,以读取全局数组,例如可以读取全局数组中与所述标识对应的指针,以便基于读取到的指针访问当前进程描述符task_struct结构体,进而还可以访问当前进程描述符task_struct结构体中的进程信息thread_info结构体。在读访问完毕后再恢复中断。其中整个流程可以在临界区执行。
本公开还提出了一种进程描述符task_struct结构体的访问方法,进程描述符task_struct结构体中存储有进程信息thread_info结构体,该方法包括:获取中央处理器的标识;基于获取到的中央处理器的标识,读取全局数组中与标识对应的指针,全局数组包括一个或多个元素,元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为中央处理器的标识;基于读取到的指针,访问当前进程描述符task_struct结构体。关于方法涉及的细节可以参见上文相关描述,此处不再赘述。
本公开还提出了一种进程信息thread_info结构体的访问方法,进程信息thread_info结构体被存储到进程描述符task_struct结构体中,该方法包括:获取中央处理器的标识;基于获取到的中央处理器的标识,读取全局数组中与标识对应的指针,全局数组包括一个或多个元素,元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为中央处理器的标识;基于读取到的指针,访问当前进程描述符task_struct结构体中的进程信息thread_info结构体。关于方法涉及的细节可以参见上文相关描述,此处不再赘述。
综上,本公开的方案至少具有如下创新及有益效果。
1、将thread_info从栈上分离出来,移入task_struct结构体中,可以避免通过thread_info访问task_struct而带来的风险,并且可以解决因栈溢出影响导致重要数据被覆写的问题。
2、采用全局数组存储task_struct的指针,可以绕过硬件限制,不依赖于CPU架构,通过代码即可完成task_struct指针的存储和访问。
由于架构差异,ARM平台没有ARM64上的sp_el0,也没有类似X86\X86_64的基于段寄存器寻址的per_cpu变量实现,使得因硬件架构平台限制导致ARM平台不能采取其他平台中的内核保护方案。本公开采取软件方式实现,利用全局数组替代寄存器存储task指针,可以绕过硬件限制,使得本公开的方案可以适用于ARM平台。
3、采用协处理器指令获取cpuid。传统获取cpuid的方式是通过thread_info->cpu,但这里本身就是为了访问thread_info,因此行不通,需要换另一种方式,就是采用ARM协处理器指令来实现,绕过逻辑上的问题。取得当前cpuid做为数组下标,就可以对全局数组进行访问。
4、通过开关中断确保全局数组的访问同步问题。由于使用全局数组,需要保证同步问题。如果通过spin_lock锁去保证同步,在spin_lock中需要关抢占(preempt_disable()),是需要访问thread_info->preempt_count,这样和前面提到的访问thread_info->cpu一样,逻辑上就陷入循环走不通了,因此通过spin_lock来保证多处理器下全局数组同步是走不通的。
图5示出了根据本公开一个实施例的适用于但不限于ARM平台的内核保护装置的结构示意图。内核保护装置的功能模块可以由实现本公开原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图5所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。
下面就内核保护装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关描述,这里不再赘述。
参见图5,内核保护装置500包括第一存储模块510和第二存储模块520。
第一存储模块510用于将进程信息thread_info结构体存储到进程描述符task_struct结构体中。
第二存储模块520用于在全局数组中存储进程描述符task_struct结构体所对应的指针。其中,第二存储模块520可以将各个中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中,所述全局数组中的元素为所述指针,元素的下标为所述中央处理器的标识。
作为示例,内核保护装置500还可以包括获取模块和访问模块,获取模块可以用于通过协处理器指令获取所述中央处理器的标识;访问模块可以用于基于获取到的所述中央处理器的标识,访问所述全局数组中与所述标识对应的指针。
访问模块可以读取所述全局数组中与所述标识对应的指针,以便基于读取到的指针访问所述当前进程描述符task_struct结构体;并且/或者访问模块还可以对所述全局数组中与所述标识对应的指针执行写操作,以修改所述标识对应的中央处理器中当前进程描述符task_struct结构体所对应的指针。
作为示例,内核保护装置500还可以包括关闭模块和打开模块。关闭模块用于在访问模块访问所述全局数组中与所述标识对应的指针的过程中,关闭中断;打开模块用于在访问模块访问完毕后,打开中断。其中,访问模块可以在临界区执行所述访问所述全局数组中与所述标识对应的指针的过程的操作。
图6示出了根据本公开另一个实施例的内核保护装置的结构示意图。在本实施例中,内核保护装置可以适用于但不限于ARM平台。内核保护装置的功能模块可以由实现本公开原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图6所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。
下面就内核保护装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关描述,这里不再赘述。
参见图6,内核保护装置600包括第一存储模块610和第二存储模块620。
第一存储模块610用于将进程信息thread_info结构体存储到进程描述符task_struct结构体中。第二存储模块620用于在全局数组中存储进程描述符task_struct结构体所对应的指针。
作为示例,第二存储模块620可以用于将至少部分中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中。其中,第二存储模块620可以将各个中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中,所述全局数组中的元素为所述指针,元素的下标为所述中央处理器的标识。
作为示例,内核保护装置600还可以包括获取模块和访问模块,获取模块可以用于通过协处理器指令获取所述中央处理器的标识;访问模块可以用于基于获取到的所述中央处理器的标识,访问所述全局数组中与所述标识对应的指针。
访问模块可以读取所述全局数组中与所述标识对应的指针,以便基于读取到的指针访问所述当前进程描述符task_struct结构体;并且/或者访问模块还可以对所述全局数组中与所述标识对应的指针执行写操作,以修改所述标识对应的中央处理器中当前进程描述符task_struct结构体所对应的指针。
作为示例,内核保护装置600还可以包括关闭模块和打开模块。关闭模块用于在访问模块访问所述全局数组中与所述标识对应的指针的过程中,关闭中断;打开模块用于在访问模块访问完毕后,打开中断。其中,访问模块可以在临界区执行所述访问所述全局数组中与所述标识对应的指针的过程的操作。
图7示出了根据本公开一个实施例的进程描述符task_struct结构体的访问装置的结构示意图。在本实施例中,访问装置可以适用于但不限于ARM平台。访问装置的功能模块可以由实现本公开原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图7所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。
下面就访问装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关描述,这里不再赘述。
参见图7,访问装置700包括获取模块710、读取模块720以及访问模块730。
获取模块710用于获取中央处理器的标识。
读取模块720用于基于获取到的所述中央处理器的标识,读取全局数组中与所述标识对应的指针,所述全局数组包括一个或多个元素,所述元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为所述中央处理器的标识。
访问模块730用于基于读取到的指针,访问所述当前进程描述符task_struct结构体。
图8示出了根据本公开一个实施例的进程信息thread_info结构体的访问装置的结构示意图。在本实施例中,访问装置可以适用于但不限于ARM平台。访问装置的功能模块可以由实现本公开原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图8所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。
下面就访问装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关描述,这里不再赘述。
参见图8,访问装置800包括获取模块810、读取模块820以及访问模块830。
获取模块810用于获取中央处理器的标识。
读取模块820用于基于获取到的所述中央处理器的标识,读取全局数组中与所述标识对应的指针,所述全局数组包括一个或多个元素,所述元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为所述中央处理器的标识。
访问模块830用于基于读取到的指针,访问所述当前进程描述符task_struct结构体中的进程信息thread_info结构体。
图9示出了根据本公开一实施例可用于实现上述内核保护方法或访问方法的计算设备的结构示意图。
参见图9,计算设备900包括存储器910和处理器920。
处理器920可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器920可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(GPU)、数字信号处理器(DSP)等等。在一些实施例中,处理器920可以使用定制的电路实现,例如特定用途集成电路(ASIC,Application Specific Integrated Circuit)或者现场可编程逻辑门阵列(FPGA,Field Programmable Gate Arrays)。
存储器910可以包括各种类型的存储单元,例如系统内存、只读存储器(ROM),和永久存储装置。其中,ROM可以存储处理器920或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器910可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(DRAM,SRAM,SDRAM,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器910可以包括可读和/或写的可移除的存储设备,例如激光唱片(CD)、只读数字多功能光盘(例如DVD-ROM,双层DVD-ROM)、只读蓝光光盘、超密度光盘、闪存卡(例如SD卡、min SD卡、Micro-SD卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
存储器910上存储有可执行代码,当可执行代码被处理器920处理时,可以使处理器920执行上文述及的内核保护方法或访问方法。
上文中已经参考附图详细描述了根据本发明的适用于ARM平台的内核保护方法、访问方法、装置及计算设备。
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

Claims (17)

1.一种适用于ARM平台的内核保护方法,其特征在于,包括:
将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及
在全局数组中存储进程描述符task_struct结构体所对应的指针。
2.根据权利要求1所述的内核保护方法,其特征在于,所述在全局数组中存储进程描述符task_struct结构体所对应的指针的步骤包括:
将各个中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中,其中,所述全局数组中的元素为所述指针,元素的下标为所述中央处理器的标识。
3.根据权利要求1所述的内核保护方法,其特征在于,还包括:
通过协处理器指令获取所述中央处理器的标识;
基于获取到的所述中央处理器的标识,访问所述全局数组中与所述标识对应的指针。
4.根据权利要求3所述的内核保护方法,其特征在于,访问所述全局数组中与所述标识对应的指针的步骤包括:
读取所述全局数组中与所述标识对应的指针,以便基于读取到的指针访问所述当前进程描述符task_struct结构体;以及/或者
对所述全局数组中与所述标识对应的指针执行写操作,以修改所述标识对应的中央处理器中当前进程描述符task_struct结构体所对应的指针。
5.根据权利要求3所述的内核保护方法,其特征在于,还包括:
在访问所述全局数组中与所述标识对应的指针的过程中,关闭中断;
在访问完毕后,打开中断。
6.根据权利要求5所述的内核保护方法,其特征在于,所述访问所述全局数组中与所述标识对应的指针的过程的步骤是在临界区执行的。
7.一种内核保护方法,其特征在于,包括:
将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及
将至少部分中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中。
8.一种进程描述符task_struct结构体的访问方法,其特征在于,所述进程描述符task_struct结构体中存储有进程信息thread_info结构体,该方法包括:
获取中央处理器的标识;
基于获取到的所述中央处理器的标识,读取全局数组中与所述标识对应的指针,所述全局数组包括一个或多个元素,所述元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为所述中央处理器的标识;
基于读取到的指针,访问所述当前进程描述符task_struct结构体。
9.一种进程信息thread_info结构体的访问方法,其特征在于,所述进程信息thread_info结构体被存储到所述进程描述符task_struct结构体中,该方法包括:
获取中央处理器的标识;
基于获取到的所述中央处理器的标识,读取全局数组中与所述标识对应的指针,所述全局数组包括一个或多个元素,所述元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为所述中央处理器的标识;
基于读取到的指针,访问所述当前进程描述符task_struct结构体中的进程信息thread_info结构体。
10.一种内核保护方法,其特征在于,包括:
将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及
在全局数组中存储进程描述符task_struct结构体所对应的指针。
11.一种适用于ARM平台的内核保护装置,其特征在于,包括:
第一存储模块,用于将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及
第二存储模块,用于在全局数组中存储进程描述符task_struct结构体所对应的指针。
12.一种内核保护装置,其特征在于,包括:
第一存储模块,用于将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及
第二存储模块,用于将至少部分中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中。
13.一种进程描述符task_struct结构体的访问装置,其特征在于,所述进程描述符task_struct结构体中存储有进程信息thread_info结构体,该装置包括:
获取模块,用于获取中央处理器的标识;
读取模块,用于基于获取到的所述中央处理器的标识,读取全局数组中与所述标识对应的指针,所述全局数组包括一个或多个元素,所述元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为所述中央处理器的标识;
访问模块,用于基于读取到的指针,访问所述当前进程描述符task_struct结构体。
14.一种进程信息thread_info结构体的访问装置,其特征在于,所述进程信息thread_info结构体被存储到所述进程描述符task_struct结构体中,该装置包括:
获取模块,用于获取中央处理器的标识;
读取模块,用于基于获取到的所述中央处理器的标识,读取全局数组中与所述标识对应的指针,所述全局数组包括一个或多个元素,所述元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为所述中央处理器的标识;
访问模块,用于基于读取到的指针,访问所述当前进程描述符task_struct结构体中的进程信息thread_info结构体。
15.一种内核保护装置,其特征在于,包括:
第一存储模块,用于将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及
第二存储模块,用于在全局数组中存储进程描述符task_struct结构体所对应的指针。
16.一种计算设备,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求1至10中任何一项所述的方法。
17.一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如权利要求1至10中任何一项所述的方法。
CN202010093439.9A 2020-02-14 2020-02-14 适用于arm平台的内核保护方法、访问方法及装置 Pending CN113268725A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010093439.9A CN113268725A (zh) 2020-02-14 2020-02-14 适用于arm平台的内核保护方法、访问方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010093439.9A CN113268725A (zh) 2020-02-14 2020-02-14 适用于arm平台的内核保护方法、访问方法及装置

Publications (1)

Publication Number Publication Date
CN113268725A true CN113268725A (zh) 2021-08-17

Family

ID=77227286

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010093439.9A Pending CN113268725A (zh) 2020-02-14 2020-02-14 适用于arm平台的内核保护方法、访问方法及装置

Country Status (1)

Country Link
CN (1) CN113268725A (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104239134A (zh) * 2013-06-21 2014-12-24 华为技术有限公司 一种众核系统的任务管理方法和装置
US20150220455A1 (en) * 2014-02-03 2015-08-06 Samsung Electronics Co., Ltd. Methods and apparatus for protecting operating system data
US20190163493A1 (en) * 2017-11-30 2019-05-30 Western Digital Technologies, Inc. Methods, systems and devices for recovering from corruptions in data processing units
CN111400702A (zh) * 2020-03-24 2020-07-10 上海瓶钵信息科技有限公司 一种虚拟化的操作系统内核保护方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104239134A (zh) * 2013-06-21 2014-12-24 华为技术有限公司 一种众核系统的任务管理方法和装置
US20150220455A1 (en) * 2014-02-03 2015-08-06 Samsung Electronics Co., Ltd. Methods and apparatus for protecting operating system data
US20190163493A1 (en) * 2017-11-30 2019-05-30 Western Digital Technologies, Inc. Methods, systems and devices for recovering from corruptions in data processing units
CN111400702A (zh) * 2020-03-24 2020-07-10 上海瓶钵信息科技有限公司 一种虚拟化的操作系统内核保护方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
LINUS BENEDICT TORVALDS: "linux-4.9.10\\linux-4.9.10\\include\\linux\\sched.h", pages 1, Retrieved from the Internet <URL:https://cdn.kernel.org/pub/linux/kernel/v4.x/> *
ZYZ913614263: "linux进程学习-进程描述符的存储", pages 1 - 2, Retrieved from the Internet <URL:www.cnblogs.com/zendu/p/4990730.html> *
左玉丹;丁滟;魏立峰;: "Linux内核提权攻击研究", 计算机工程与科学, no. 11, 15 November 2016 (2016-11-15), pages 74 - 79 *

Similar Documents

Publication Publication Date Title
US11681535B2 (en) Linking virtualized application namespaces at runtime
US8443423B2 (en) Secure information processing
EP3005127B1 (en) Systems and methods for preventing unauthorized stack pivoting
US9898430B2 (en) Tracking virtual machine memory modified by a single root I/O virtualization (SR-IOV) device
WO2019201011A1 (zh) 系统的启动方法、装置、电子设备和存储介质
KR101461378B1 (ko) 동기화 simd 벡터
CN107003864B (zh) 恢复片上系统设备
US7774636B2 (en) Method and system for kernel panic recovery
US7992147B2 (en) Processor control register virtualization to minimize virtual machine exits
US8074274B2 (en) User-level privilege management
US20120084477A1 (en) Transactional Memory Preemption Mechanism
KR20160119140A (ko) 타겟 메모리 어드레스에 대응한 메모리 속성 유닛의 영역을 식별하는 영역식별 연산
JP2012043443A (ja) 連続フロープロセッサパイプライン
GB2513975A (en) Instruction emulation processors, methods, and systems
WO2019212696A1 (en) Multithread framework for use in pre-boot environment of a system-on-chip
CN111259386A (zh) 内核安全检测方法、装置、设备及存储介质
CN109416632B (zh) 用于处理数据的装置和方法
CN113268725A (zh) 适用于arm平台的内核保护方法、访问方法及装置
US20080010426A1 (en) Processor system and processing method for operating system program in processor system
US11526358B2 (en) Deterministic execution replay for multicore systems
JP4756599B2 (ja) データ処理装置
US6954848B2 (en) Marking in history table instructions slowable/delayable for subsequent executions when result is not used immediately
US20090217014A1 (en) Processor, memory device, processing device, and method for processing instruction
CN117573419B (zh) 一种页面异常处理方法及装置
JP2562838B2 (ja) プロセッサ及びストアバッファ制御方法

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