[go: up one dir, main page]

CN107908958A - SELinux安全标识符防篡改检测方法及系统 - Google Patents

SELinux安全标识符防篡改检测方法及系统 Download PDF

Info

Publication number
CN107908958A
CN107908958A CN201711240118.1A CN201711240118A CN107908958A CN 107908958 A CN107908958 A CN 107908958A CN 201711240118 A CN201711240118 A CN 201711240118A CN 107908958 A CN107908958 A CN 107908958A
Authority
CN
China
Prior art keywords
pst
selinux
security
mapping table
identifier sid
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
Application number
CN201711240118.1A
Other languages
English (en)
Other versions
CN107908958B (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.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
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 National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN201711240118.1A priority Critical patent/CN107908958B/zh
Publication of CN107908958A publication Critical patent/CN107908958A/zh
Application granted granted Critical
Publication of CN107908958B publication Critical patent/CN107908958B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • G06F21/54Monitoring 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 by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures

Landscapes

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

Abstract

本发明公开了一种SELinux安全标识符防篡改检测方法及系统,方法的实施步骤包括建立进程及其安全标识符的映射关系表,当创建进程时将进程及其安全标识符作为新节点插入到映射关系表,当撤销进程时删除节点、通过合法调用接口发生改变时则更新节点;当进程执行新程序时对父进程安全标识符进行合法性检测,若与其在映射关系表中的安全标识符不一致,则根据映射关系表恢复父进程的安全标识符,并将其设为子进程的缺省安全标识符开始执行。本发明能够检测到攻击者利用内核提权攻击手段对进程安全标识符的非法篡改,并将进程安全标识符恢复为非法篡改前的安全标识符,能够防止攻击者通过内核提权攻击手段突破SELinux对系统的安全防护。

Description

SELinux安全标识符防篡改检测方法及系统
技术领域
本发明涉及Linux系统安全领域,具体涉及一种SELinux安全标识符防篡改检测方法及 系统。
背景技术
Linux操作系统的系统管理员拥有对系统范围内的所有资源进行访问与管理的特权,成为 恶意攻击者攻击的主要目标之一。一般情况下,恶意攻击者通过远程攻击等获取系统一般权 限后,还往往要利用系统的提权漏洞进行提权攻击,获取系统root权限对系统进行全盘控制。 为了保护系统管理员特权,操作系统的强制访问控制机制打破了root用户的特权,在操作系 统内部根据不同的访问控制安全策略对系统中各类对象之间的访问控制行为进行控制管理。 在这样的系统中,即使进程的属主为root,其所有行为也必须同时满足强制访问控制机制的 要求才能够在系统中被允许发生。目前Linux系统主要通过SELinux安全域隔离策略实现这 一控制。然而,随着运行在系统高级别的内核态提权漏洞攻击方法的出现,攻击者不仅可以 篡改进程的用户ID,还可以篡改进程的SELinux安全标识符。由于在进程的内核栈中,保存 进程权限信息的thread_info结构总是存放在内核栈的底部,因此攻击者可以根据内核栈中某 一变量的地址获取内核栈基址,从而获取进程task_struct在内存中的位置,并进一步获取进 程cred在内存中的位置,直接修改对应内存位置存储的数据,将对应的用户ID和组ID修改 0,即root用户/组ID,并且根据需要将SELinux安全标识符修改为目标安全标识符,从而绕 过系统中强制访问控制安全机制的检查。一旦攻击发生,如何能够尽早发现并制止进程利用 篡改后的权限进行非法访问成为重要的问题。
在Linux系统中,每个进程都有与其对应的唯一的进程标识符pid,在系统创建进程时会 生成一个尚未分配的pid并用其标识该进程。而每个进程的安全标识符的则经过创建、转换 和终止的生命周期。
Linux系统主要在两种情况下创建进程:(1)一个父进程希望复制自己从而使父进程和子 进程执行同一个程序中不同的代码段。该情况在网络服务进程中比较常见,父进程等待并接 受客户端的请求,当请求到达时,创建子进程并使其处理该请求,而父进程继续等待新的服 务请求。(2)一个进程要执行一个不同的程序。在该情况下,父进程创建一个子进程,然后 使子进程去执行该程序。在这两种情况下,当父进程创建子进程时,子进程通常继承父进程 的安全标识符。对于第二种情况,当子进程去执行另一个程序时,根据SELinux安全规则, 子进程的安全标识符可能会改变。
Linux系统创建进程的函数有fork(),vfork()和clone(),在Linux内核中与之对应的系统调 用分别为sys_fork(),sys_vfork()和sys_clone()。但是这三个系统调用在实际执行时都是通过 do_fork函数来创建进程。而三个系统调用由于参数的不同而导致了子进程和父进程之间对资 源的共享程度不同。进程撤销或终止的一般方式调用exit()库函数。当进程退出时一般是显示 地或隐式地调用了exit(),但最终都调用了do_exit函数。
Linux系统使用sys_execve()系统调用来执行一个新程序。新程序的实际执行是通过 do_execve函数来完成的。图1为进程执行新程序时的主要流程。当进程执行一个程序时, sys_execve()首先根据文件名及文件路径获取可执行文件的信息,然后调用do_execve()完成剩 余主要工作。在读取可执行文件信息后,do_execve函数将文件信息装载入linux_binprm结构。 根据可执行文件的信息,系统设置linux_binprm结构的安全标识符信息并保存在cred结构中, 该结构与task_struct结构中的cred结构一致。在进程开始执行新程序之前,根据linux_binprm 结构中的安全标识符设置进程安全标识符,在这一过程中进程安全标识符可能发生改变。在 设置完进程安全标识符并完成其他相关工作后,就可以返回用户态执行新程序。对于SELinux 来说,在设置linux_binprm结构安全标识符时,根据可执行文件不同可能发生进程安全标识 符转换。此时在执行新程序时,进程从父进程继承的安全标识符就会被转换为新的安全标识 符。
综上所述,Linux系统的SELinux安全标识符可能通过内核级提权漏洞被非法篡改,从 而使访问控制机制的检查被绕过。因此,结合Linux系统中进程安全标识符的转化过程,设 计对系统中进程安全标识符的合法性检查机制,尽早发现安全标识符被非法篡改并进行恢复, 中止攻击者对系统的攻击行为,对保护系统安全系统具有重要的现实意义。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种能够检测到攻击者利用 内核提权攻击手段对进程安全标识符的非法篡改,并将进程安全标识符恢复为非法篡改前的 安全标识符,能够防止攻击者通过内核提权攻击手段突破SELinux对系统的安全防护的 SELinux安全标识符防篡改检测方法及系统。
为了解决上述技术问题,本发明采用的技术方案为:
本发明提供一种SELinux安全标识符防篡改检测方法,实施步骤包括:
1)建立一个进程ID及其安全标识符SID的映射关系表pst,且当系统创建进程时,以进 程ID为索引,将进程ID及其安全标识符SID作为新节点插入到映射关系表pst中;当进程 撤销时,从映射关系表pst中删除通过进程ID索引的节点;当系统通过合法调用接口改变进 程的安全标识符SID时,则更新映射关系表pst中进程ID及其安全标识符SID,使映射关系 表pst中进程ID及其安全标识符SID的映射关系一直保持最新状态;
2)当进程执行新程序时,在实际执行新的子进程之前首先检测父进程的安全标识符SID 是否被非法修改,如果父进程的安全标识符SID与映射关系表pst中的父进程ID对应的安全 标识符SID不一致,则判定该父进程的安全标识符SID被非法修改,根据映射关系表pst中 保存的数据恢复父进程的安全标识符SID,跳转执行步骤3);否则判定该新程序的安全标识 符SID未被修改,跳转执行步骤3);
3)将子进程的缺省安全标识符SID设置为父进程的安全标识符SID,执行该子进程。
优选地,步骤1)中建立的映射关系表pst的数据结构包括一个链表的头指针以及为链表 中节点计数的变量,且每个节点中保存着进程ID和安全标识符SID以及指向下一个节点的 指针。
优选地,步骤1)中建立的映射关系表pst的初始化函数pst_init()嵌入在SELinux的初始 化函数selinux_init()中以在SELinux初始化时完成映射关系表的初始化,当确定系统启动 SELinux安全机制后,调用映射关系表的初始化函数pst_init函数完成映射关系表pst的初始 化。
优选地,步骤1)中将进程ID及其安全标识符SID作为新节点插入到映射关系表pst中、 更新映射关系表pst中进程ID及其安全标识符SID的详细步骤包括:首先检查以进程ID为 索引的节点在映射关系表pst中是否存在,如果不存在,则以输入参数中的进程ID及其安全 标识符SID作为新节点插入到映射关系表pst中;如果存在,则检查输入参数中的安全标识 符SID与映射关系表pst中保存的安全标识符SID是否一致,如果一致则不做任何更改返回; 如果不一致则将进程ID在映射关系表pst中对应保存的安全标识符SID修改为输入参数中安 全标识符SID;步骤1)中从映射关系表pst中删除通过进程ID索引的节点的详细步骤包括: 首先检查以输入参数中的进程ID为索引的节点在映射关系表pst中是否存在,如果存在,则 从映射关系表pst中删除通过进程ID索引的节点;否则不执行任何操作。
优选地,步骤1)中将进程ID及其安全标识符SID作为新节点插入到映射关系表pst中 是通过Linux系统的do_fork函数来调用在LSM框架中预设的钩子函数security_pst_insert函 数实现的;步骤1)中更新映射关系表pst中进程ID及其安全标识符SID是通过Linux系统 的commit_creds函数来调用在LSM框架中预设的钩子函数security_pst_insert函数实现的; 步骤1)中从映射关系表pst中删除通过进程ID索引的节点是通过Linux系统的do_exit函数 来调用在LSM框架中预设的钩子函数security_pst_remove函数实现的;所述钩子函数 security_pst_insert、security_pst_remove两者的函数指针均被添加到LSM框架的 security_operations结构体中。
优选地,所述钩子函数security_pst_insert、security_pst_remove在Linux系统的SELinux 模块中添加有security_pst_insert函数对应的安全函数selinux_pst_insert以及 security_pst_remove函数对应的安全函数selinux_pst_remove;在Linux系统未启用SELinux 安全机制时,所述钩子函数security_pst_insert、security_pst_remove被执行时,系统将不执行 SELinux模块中实现的selinux_pst_insert、selinux_pst_remove函数;在Linux系统启用SELinux 安全机制时,selinux_pst_insert与selinux_pst_remove函数在SELinux模块中被注册到全局变 量security_ops,且执行security_pst_insert函数时则通过调用安全函数selinux_pst_insert完成 将进程ID及其安全标识符SID作为新节点插入到映射关系表pst或更新映射关系表pst中进 程ID及其安全标识符SID,执行security_pst_remove函数时则通过调用安全函数 selinux_pst_remove从映射关系表pst中删除通过进程ID索引的节点。
优选地,步骤2)中检测父进程的安全标识符SID是否被非法修改是在install_exec_creds 函数中依据linux_binprm结构中保存的cred来设定子进程SID时进行检测,通过Linux系统 的commit_creds函数来调用在LSM框架中预设的钩子函数security_pst_check函数实现的。
优选地,所述钩子函数security_pst_check在Linux系统的SELinux模块中添加有security_pst_check函数对应的安全函数selinux_pst_check;在Linux系统未启用SELinux安全 机制时,钩子函数security_pst_check被执行时,系统将不执行SELinux实现的 selinux_pst_check函数;在Linux系统启用SELinux安全机制时,selinux_pst_check函数在 SELinux模块中被注册到全局变量security_ops,且执行security_pst_check函数时则通过调用 SELinux模块的selinux_pst_check完成检测该父进程的进程ID对应的安全标识符SID是否被 非法修改。
本发明还提供一种SELinux安全标识符防篡改检测系统,包括计算机设备,该计算机设 备被编程以执行本发明前述SELinux安全标识符防篡改检测方法的步骤。
本发明的SELinux安全标识符防篡改检测方法具有下述优点:如果攻击者通过内核提权 攻击手段修改了进程的安全标识符,则该进程的安全标识符对应的SID和映射关系表中所保 存的数据不一致,本发明的SELinux安全标识符防篡改检测方法能够检测到攻击者利用内核 提权攻击手段对进程安全标识符的非法篡改,并将进程安全标识符恢复为非法篡改前的安全 标识符,能够防止攻击者通过内核提权攻击手段突破SELinux对系统的安全防护。
附图说明
图1为现有技术的Linux系统执行新程序的流程示意图。
图2为本发明实施例方法的基本流程示意图。
图3为本发明实施例方法的LSM模块钩子函数插入的原理示意图。
具体实施方式
如图2所示,本实施例SELinux安全标识符防篡改检测方法的实施步骤包括:
1)建立一个进程ID及其安全标识符SID的映射关系表pst,且当系统创建进程时,以进 程ID为索引,将进程ID及其安全标识符SID作为新节点插入到映射关系表pst中;当进程 撤销时,从映射关系表pst中删除通过进程ID索引的节点;当系统通过合法调用接口改变进 程的安全标识符SID时,则更新映射关系表pst中进程ID及其安全标识符SID,使映射关系 表pst中进程ID及其安全标识符SID的映射关系一直保持最新状态;
2)当进程执行新程序时,在实际执行新的子进程之前首先检测父进程的安全标识符SID 是否被非法修改,如果父进程的安全标识符SID与映射关系表pst中的父进程ID对应的安全 标识符SID不一致,则判定该父进程的安全标识符SID被非法修改,根据映射关系表pst中 保存的数据恢复父进程的安全标识符SID,跳转执行步骤3);否则判定该新程序的安全标识 符SID未被修改,跳转执行步骤3);
3)将子进程的缺省安全标识符SID设置为父进程的安全标识符SID,执行该子进程。
在本实施例的映射关系表pst中,以进程ID为索引的节点中保存的安全标识符SID必须 时刻与系统中相应进程的权限凭证集cred中保存的安全标识符SID信息一致。如果不一致, 则会导致SELinux安全机制不能正常运行。因此当系统中创建新的进程或者已存在进程的安 全标识符更新时必须同步更新映射关系表。而为了防止由于随着新进程的创建映射关系表不 断增大从而导致检测效率降低的问题发生,当系统中已创建的进程撤销时,需要从映射关系 表中删除与进程ID一致的节点。本实施例中,步骤1)中建立的映射关系表pst的数据结构 包括一个链表的头指针以及为链表中节点计数的变量,且每个节点中保存着进程ID的编号 PID和安全标识符SID以及指向下一个节点的指针,具体代码如下:
上述代码中,pid_sid_node为节点的数据结构,其中pid用于存储进程ID,sid用于存储 进程ID的安全标识符SID,pid_sid_node*next为指向下一个节点的指针;pid_sid_table为映 射关系表pst的数据结构,pid_sid_node*head为链表的头指针,nel为链表中节点计数的变量。
本实施例中对SELinux模块进行改进,在现有SELinux模块的基础上添加新的模块,该 模块负责映射关系表pst的建立及维护。本实施例中,步骤1)中建立的映射关系表pst的初 始化函数pst_init()嵌入在SELinux的初始化函数selinux_init()中以在SELinux初始化时完成 映射关系表的初始化,当确定系统启动SELinux安全机制后,调用映射关系表的初始化函数 pst_init函数完成映射关系表pst的初始化。
本实施例中,步骤1)中将进程ID及其安全标识符SID作为新节点插入到映射关系表 pst中、更新映射关系表pst中进程ID及其安全标识符SID的详细步骤包括:首先检查以进 程ID为索引的节点在映射关系表pst中是否存在,如果不存在,则以输入参数中的进程ID 及其安全标识符SID作为新节点插入到映射关系表pst中;如果存在,则检查输入参数中的 安全标识符SID与映射关系表pst中保存的安全标识符SID是否一致,如果一致则不做任何 更改返回;如果不一致则将进程ID在映射关系表pst中对应保存的安全标识符SID修改为输 入参数中安全标识符SID;步骤1)中从映射关系表pst中删除通过进程ID索引的节点的详 细步骤包括:首先检查以输入参数中的进程ID为索引的节点在映射关系表pst中是否存在, 如果存在,则从映射关系表pst中删除通过进程ID索引的节点;否则不执行任何操作。
本实施例中,步骤1)中将进程ID及其安全标识符SID作为新节点插入到映射关系表 pst中是通过Linux系统的do_fork函数来调用在LSM框架中预设的钩子函数 security_pst_insert函数实现的;步骤1)中更新映射关系表pst中进程ID及其安全标识符SID 是通过Linux系统的commit_creds函数来调用在LSM框架中预设的钩子函数 security_pst_insert函数实现的;步骤1)中从映射关系表pst中删除通过进程ID索引的节点 是通过Linux系统的do_exit函数来调用在LSM框架中预设的钩子函数security_pst_remove 函数实现的;所述钩子函数security_pst_insert、security_pst_remove两者的函数指针均被添加 到LSM框架的security_operations结构体中。
参见图3,本实施例钩子函数security_pst_insert、security_pst_remove在Linux系统的 SELinux模块中添加有security_pst_insert函数对应的安全函数selinux_pst_insert以及 security_pst_remove函数对应的安全函数selinux_pst_remove;在Linux系统未启用SELinux 安全机制时,所述钩子函数security_pst_insert、security_pst_remove被执行时,系统将不执行 SELinux模块中实现的selinux_pst_insert、selinux_pst_remove函数;在Linux系统启用SELinux 安全机制时,selinux_pst_insert与selinux_pst_remove函数在SELinux模块中被注册到全局变 量security_ops,且执行security_pst_insert函数时则通过调用安全函数selinux_pst_insert完成 将进程ID及其安全标识符SID作为新节点插入到映射关系表pst或更新映射关系表pst中进 程ID及其安全标识符SID,执行security_pst_remove函数时则通过调用安全函数 selinux_pst_remove从映射关系表pst中删除通过进程ID索引的节点。
本实施例中,步骤2)中检测父进程的安全标识符SID是否被非法修改是在install_exec_creds函数中依据linux_binprm结构中保存的cred来设定子进程SID时进行检测, 通过Linux系统的commit_creds函数来调用在LSM框架中预设的钩子函数security_pst_check 函数实现的。
参见图3,本实施例中钩子函数security_pst_check在Linux系统的SELinux模块中添加 有security_pst_check函数对应的安全函数selinux_pst_check;在Linux系统未启用SELinux 安全机制时,钩子函数security_pst_check被执行时,系统将不执行SELinux实现的 selinux_pst_check函数;在Linux系统启用SELinux安全机制时,selinux_pst_check函数在 SELinux模块中被注册到全局变量security_ops,且执行security_pst_check函数时则通过调用 SELinux模块的selinux_pst_check完成检测该父进程的进程ID对应的安全标识符SID是否被 非法修改。
综上可知,映射关系表pst的相关函数接口如表1所示:
表1中,*pst为指向映射关系表的指针,pst为映射关系表,pid用于存储进程ID,sid 用于存储进程的安全标识符SID。
本实施例中,首先建立全局变量pst作为映射关系表,而映射关系表pst的维护主要通过 表1中的前三个函数接口完成:
1.映射关系表pst初始化
本实施例将映射关系表的初始化选择在SELinux初始化时完成,即在selinux_init函数中。 当确定系统启动SELinux安全机制后,调用pst_init函数完成映射关系表pst的初始化。
2.映射关系表pst的维护
映射关系表pst的插入及更新通过pst_insert函数完成。首先检查以进程ID为索引的节点 在映射关系表pst中是否存在。如果不存在,则以输入参数进程ID、安全标识符SID作为数 据源插入新的节点。如果存在,则检查输入参数与映射关系表pst中保存的安全标识符SID 是否一致。如果一致,则不做任何更改返回;否则将对应节点保存的安全标识符SID修改为 输入参数中的安全标识符SID。映射关系表pst中节点的删除通过pst_remove函数完成。该 函数首先检查以进程ID为索引的节点在映射关系表pst中是否存在。如果存在,则删除该节 点;否则不执行任何操作。
当进程创建时以及进程执行新程序时需要在映射关系表pst中插入新的节点或更新映射 关系表pst。当进程撤销时需要在映射关系表pst中删除相应节点。而Linux系统中所有进程 的创建都需要通过do_fork函数来完成,而当进程执行新程序时最终都是通过commit_creds 函数修改当前进程的权限凭证集cred,其中也包括SELinux授予进程的安全标识符。因此本 实施例选择在这两个函数中调用pst_insert函数。进程撤销是通过do_exit函数完成的,因此 本实施例选择在该函数中调用pst_remove函数。但是由于映射关系表是属于SELinux的一部 分,因此不能在do_fork函数和commit_creds函数中直接调用pst_insert函数,do_exit函数也 不能直接调用pst_remove函数。如果直接调用,那么当系统不启用SELinux安全机制时,系 统就不能正常启动和运行。因此,本实施例基于LSM框架,在LSM的基础上添加两个新的 钩子函数security_pst_insert(struct task_struct*tsk)和security_pst_remove(struct task_struct*tsk)。 LSM框架通过security_operations结构体使不同的安全模块实现的安全函数可以注册到LSM 框架中。
本实施例在该LSM框架的结构体中添加新元素,如下所示:
在SELinux中添加新的安全函数selinux_pst_insert(struct task_struct*tsk)和 selinux_pst_remove(struct task_struct*tsk)。这两个函数可以分别直接调用pst_insert()和 pst_remove函数来完成操作。当系统启用SELinux安全机制时,将这两个安全函数注册到 security_ops。在注册后,函数调用关系如图3所示。
本实施例的防篡改检测主要是通过pst_check函数来完成。该函数通过检测当前进程的安 全标识符是否与映射关系表pst中所保存的安全标识符SID是否一致来判断当前进程的安全 标识符是否被非法修改。如果被非法修改,则根据映射关系表pst中保存的安全标识符SID 来恢复进程的安全标识符。防篡改检测需要在系统真正执行新程序之前进行。因此本实施例 选择在进程通过install_exec_creds函数将linux_binprm结构中保存的cred提交更改到当前进 程时进行检测。install_exec_creds函数同样是通过commit_creds函数来具体完成相关工作的。 commit_creds函数中提供了LSM模块的钩子函数security_commit_creds(struct cred*new,const struct cred*old)。但是,SELinux机制并没有提供具体的操作函数完成相关操作。因此,本实 施例在SELinux模块中添加安全函数selinux_cred_commit(struct cred*new,const struct cred *old)函数,在该函数中,指针new指向linux_binprm结构体中的cred,而指针old指向当前 进程的cred。本实施例首先通过pst_check函数检测当前进程的安全标识符SID (old->security->sid)是否与映射关系表pst中保存的安全标识符SID一致。若一致,则不进 行任何操作。否则,返回映射关系表pst中保存的安全标识符SID,修改指针new指向的的 cred结构,将new->security->sid修改为映射关系表pst中保存的安全标识符SID。通过该方 式,本实施例SELinux安全标识符防篡改检测方法可以将非法修改的安全标识符恢复为修改 之前的安全标识符。
综上所述,本实施例SELinux安全标识符防篡改检测方法能够检测到攻击者利用内核提 权攻击手段对进程安全标识符的非法篡改,并将进程安全标识符恢复为非法篡改前的安全标 识符,能够防止攻击者通过内核提权攻击手段突破SELinux对系统的安全防护。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡 属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通 技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本 发明的保护范围。

Claims (9)

1.一种SELinux安全标识符防篡改检测方法,其特征在于实施步骤包括:
1)建立一个进程ID及其安全标识符SID的映射关系表pst,且当系统创建进程时,以进程ID为索引,将进程ID及其安全标识符SID作为新节点插入到映射关系表pst中;当进程撤销时,从映射关系表pst中删除通过进程ID索引的节点;当系统通过合法调用接口改变进程的安全标识符SID时,则更新映射关系表pst中进程ID及其安全标识符SID,使映射关系表pst中进程ID及其安全标识符SID的映射关系一直保持最新状态;
2)当进程执行新程序时,在实际执行新的子进程之前首先检测父进程的安全标识符SID是否被非法修改,如果父进程的安全标识符SID与映射关系表pst中的父进程ID对应的安全标识符SID不一致,则判定该父进程的安全标识符SID被非法修改,根据映射关系表pst中保存的数据恢复父进程的安全标识符SID,跳转执行步骤3);否则判定该新程序的安全标识符SID未被修改,跳转执行步骤3);
3)将子进程的缺省安全标识符SID设置为父进程的安全标识符SID,执行该子进程。
2.根据权利要求1所述的SELinux安全标识符防篡改检测方法,其特征在于,步骤1)中建立的映射关系表pst的数据结构包括一个链表的头指针以及为链表中节点计数的变量,且每个节点中保存着进程ID的编号PID和安全标识符SID以及指向下一个节点的指针。
3.根据权利要求1所述的SELinux安全标识符防篡改检测方法,其特征在于,步骤1)中建立的映射关系表pst的初始化函数pst_init()嵌入在SELinux的初始化函数selinux_init()中以在SELinux初始化时完成映射关系表的初始化,当确定系统启动SELinux安全机制后,调用映射关系表的初始化函数pst_init函数完成映射关系表pst的初始化。
4.根据权利要求1所述的SELinux安全标识符防篡改检测方法,其特征在于,步骤1)中将进程ID及其安全标识符SID作为新节点插入到映射关系表pst中、更新映射关系表pst中进程ID及其安全标识符SID的详细步骤包括:首先检查以进程ID为索引的节点在映射关系表pst中是否存在,如果不存在,则以输入参数中的进程ID及其安全标识符SID作为新节点插入到映射关系表pst中;如果存在,则检查输入参数中的安全标识符SID与映射关系表pst中保存的安全标识符SID是否一致,如果一致则不做任何更改返回;如果不一致则将进程ID在映射关系表pst中对应保存的安全标识符SID修改为输入参数中安全标识符SID;步骤1)中从映射关系表pst中删除通过进程ID索引的节点的详细步骤包括:首先检查以输入参数中的进程ID为索引的节点在映射关系表pst中是否存在,如果存在,则从映射关系表pst中删除通过进程ID索引的节点;否则不执行任何操作。
5.根据权利要求4所述的SELinux安全标识符防篡改检测方法,其特征在于,步骤1)中将进程ID及其安全标识符SID作为新节点插入到映射关系表pst中是通过Linux系统的do_fork函数来调用在LSM框架中预设的钩子函数security_pst_insert函数实现的;步骤1)中更新映射关系表pst中进程ID及其安全标识符SID是通过Linux系统的commit_creds函数来调用在LSM框架中预设的钩子函数security_pst_insert函数实现的;步骤1)中从映射关系表pst中删除通过进程ID索引的节点是通过Linux系统的do_exit函数来调用在LSM框架中预设的钩子函数security_pst_remove函数实现的;所述钩子函数security_pst_insert、security_pst_remove两者的函数指针均被添加到LSM框架的security_operations结构体中。
6.根据权利要求5所述的SELinux安全标识符防篡改检测方法,其特征在于,所述钩子函数security_pst_insert、security_pst_remove在Linux系统的SELinux模块中添加有security_pst_insert函数对应的安全函数selinux_pst_insert以及security_pst_remove函数对应的安全函数selinux_pst_remove;在Linux系统未启用SELinux安全机制时,所述钩子函数security_pst_insert、security_pst_remove被执行时,系统将不执行SELinux模块中实现的selinux_pst_insert、selinux_pst_remove函数;在Linux系统启用SELinux安全机制时,selinux_pst_insert与selinux_pst_remove函数在SELinux模块中被注册到全局变量security_ops,且执行security_pst_insert函数时则通过调用安全函数selinux_pst_insert完成将进程ID及其安全标识符SID作为新节点插入到映射关系表pst或更新映射关系表pst中进程ID及其安全标识符SID,执行security_pst_remove函数时则通过调用安全函数selinux_pst_remove从映射关系表pst中删除通过进程ID索引的节点。
7.根据权利要求1~6中任意一项所述的SELinux安全标识符防篡改检测方法,其特征在于,步骤2)中检测父进程的安全标识符SID是否被非法修改是在install_exec_creds函数中依据linux_binprm结构中保存的cred来设定子进程SID时进行检测,通过Linux系统的commit_creds函数来调用在LSM框架中预设的钩子函数security_pst_check函数实现的。
8.根据权利要求7所述的SELinux安全标识符防篡改检测方法,其特征在于,所述钩子函数security_pst_check在Linux系统的SELinux模块中添加有security_pst_check函数对应的安全函数selinux_pst_check;在Linux系统未启用SELinux安全机制时,钩子函数security_pst_check被执行时,系统将不执行SELinux实现的selinux_pst_check函数;在Linux系统启用SELinux安全机制时,selinux_pst_check函数在SELinux模块中被注册到全局变量security_ops,且执行security_pst_check函数时则通过调用SELinux模块的selinux_pst_check完成检测该父进程的进程ID对应的安全标识符SID是否被非法修改。
9.一种SELinux安全标识符防篡改检测系统,包括计算机设备,其特征在于计算机设备被编程以执行权利要求1~8中任意一项所述SELinux安全标识符防篡改检测方法的步骤。
CN201711240118.1A 2017-11-30 2017-11-30 SELinux安全标识符防篡改检测方法及系统 Active CN107908958B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711240118.1A CN107908958B (zh) 2017-11-30 2017-11-30 SELinux安全标识符防篡改检测方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711240118.1A CN107908958B (zh) 2017-11-30 2017-11-30 SELinux安全标识符防篡改检测方法及系统

Publications (2)

Publication Number Publication Date
CN107908958A true CN107908958A (zh) 2018-04-13
CN107908958B CN107908958B (zh) 2020-01-03

Family

ID=61849430

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711240118.1A Active CN107908958B (zh) 2017-11-30 2017-11-30 SELinux安全标识符防篡改检测方法及系统

Country Status (1)

Country Link
CN (1) CN107908958B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108763941A (zh) * 2018-05-21 2018-11-06 杭州龙境科技有限公司 一种基于索引节点的Linux访问权限控制方法
CN109344028A (zh) * 2018-09-13 2019-02-15 西安交通大学 一种免超级用户权限的进程行为监控装置与方法
CN111259386A (zh) * 2018-12-03 2020-06-09 阿里巴巴集团控股有限公司 内核安全检测方法、装置、设备及存储介质
CN111291364A (zh) * 2018-12-07 2020-06-16 阿里巴巴集团控股有限公司 内核安全检测方法、装置、设备及存储介质
CN115694943A (zh) * 2022-10-25 2023-02-03 中国人民解放军国防科技大学 基于行为的操作系统动态强制访问控制方法、系统及介质
US11775643B2 (en) 2020-10-16 2023-10-03 Industrial Technology Research Institute Method and system for labeling object and generating security policy of operating system

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080141338A1 (en) * 2006-12-07 2008-06-12 Dong Wook Kim Secure policy description method and apparatus for secure operating system
CN104951695A (zh) * 2015-06-16 2015-09-30 广东欧珀移动通信有限公司 一种基于Selinux定制应用程序安全策略方法和装置
CN105245543A (zh) * 2015-10-28 2016-01-13 中国人民解放军国防科学技术大学 一种基于安全标记随机化的操作系统强制访问控制方法
CN105260653A (zh) * 2015-10-20 2016-01-20 浪潮电子信息产业股份有限公司 一种基于Linux的程序安全加载方法及系统
CN106650438A (zh) * 2015-11-04 2017-05-10 阿里巴巴集团控股有限公司 一种恶意程序检测的方法及装置
CN106919812A (zh) * 2015-12-26 2017-07-04 腾讯科技(深圳)有限公司 一种应用进程权限管理方法和装置
CN106982428A (zh) * 2016-01-18 2017-07-25 中国移动通信集团公司 一种安全配置方法,安全控制装置及安全配置装置
CN107247903A (zh) * 2017-05-26 2017-10-13 郑州云海信息技术有限公司 基于SELinux实现Docker容器安全的解决方案

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080141338A1 (en) * 2006-12-07 2008-06-12 Dong Wook Kim Secure policy description method and apparatus for secure operating system
CN104951695A (zh) * 2015-06-16 2015-09-30 广东欧珀移动通信有限公司 一种基于Selinux定制应用程序安全策略方法和装置
CN105260653A (zh) * 2015-10-20 2016-01-20 浪潮电子信息产业股份有限公司 一种基于Linux的程序安全加载方法及系统
CN105245543A (zh) * 2015-10-28 2016-01-13 中国人民解放军国防科学技术大学 一种基于安全标记随机化的操作系统强制访问控制方法
CN106650438A (zh) * 2015-11-04 2017-05-10 阿里巴巴集团控股有限公司 一种恶意程序检测的方法及装置
CN106919812A (zh) * 2015-12-26 2017-07-04 腾讯科技(深圳)有限公司 一种应用进程权限管理方法和装置
CN106982428A (zh) * 2016-01-18 2017-07-25 中国移动通信集团公司 一种安全配置方法,安全控制装置及安全配置装置
CN107247903A (zh) * 2017-05-26 2017-10-13 郑州云海信息技术有限公司 基于SELinux实现Docker容器安全的解决方案

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108763941A (zh) * 2018-05-21 2018-11-06 杭州龙境科技有限公司 一种基于索引节点的Linux访问权限控制方法
CN109344028A (zh) * 2018-09-13 2019-02-15 西安交通大学 一种免超级用户权限的进程行为监控装置与方法
CN111259386A (zh) * 2018-12-03 2020-06-09 阿里巴巴集团控股有限公司 内核安全检测方法、装置、设备及存储介质
WO2020114262A1 (zh) * 2018-12-03 2020-06-11 阿里巴巴集团控股有限公司 内核安全检测方法、装置、设备及存储介质
CN111291364A (zh) * 2018-12-07 2020-06-16 阿里巴巴集团控股有限公司 内核安全检测方法、装置、设备及存储介质
CN111291364B (zh) * 2018-12-07 2024-03-01 斑马智行网络(香港)有限公司 内核安全检测方法、装置、设备及存储介质
US11775643B2 (en) 2020-10-16 2023-10-03 Industrial Technology Research Institute Method and system for labeling object and generating security policy of operating system
CN115694943A (zh) * 2022-10-25 2023-02-03 中国人民解放军国防科技大学 基于行为的操作系统动态强制访问控制方法、系统及介质
CN115694943B (zh) * 2022-10-25 2024-05-14 中国人民解放军国防科技大学 基于行为的操作系统动态强制访问控制方法、系统及介质

Also Published As

Publication number Publication date
CN107908958B (zh) 2020-01-03

Similar Documents

Publication Publication Date Title
CN107908958B (zh) SELinux安全标识符防篡改检测方法及系统
US8578487B2 (en) System and method for internet security
US12225013B2 (en) Securing application behavior in serverless computing
JP5462254B2 (ja) コンピューティングプロセスのための最小特権アクセスの付与
US9767280B2 (en) Information processing apparatus, method of controlling the same, information processing system, and information processing method
CN104735091B (zh) 一种基于Linux系统的用户访问控制方法和装置
US11831687B2 (en) Systems and methods for authenticating platform trust in a network function virtualization environment
US8181224B2 (en) Method for recognizing information flow and detecting information leakage by analyzing user's behaviors
US8689318B2 (en) Trusted computing entities
Abi-Antoun et al. Checking threat modeling data flow diagrams for implementation conformance and security
CN111400723A (zh) 基于tee扩展的操作系统内核强制访问控制方法及系统
CN101122936A (zh) 一种可信机制上的嵌入式平台引导
CN104732147A (zh) 一种应用程序处理方法
Bleikertz et al. Secure cloud maintenance: protecting workloads against insider attacks
CN110188574A (zh) 一种Docker容器的网页防篡改系统及其方法
Yao et al. Building secure firmware
US8782809B2 (en) Limiting information leakage and piracy due to virtual machine cloning
CN112446029A (zh) 可信计算平台
Lee Essays about computer security
CN111523115B (zh) 信息确定方法、函数调用方法及电子设备
JP5126495B2 (ja) 安全度評価と連動するセキュリティの方針設定装置、そのプログラムおよびその方法
JP6884652B2 (ja) ホワイトリスト管理システムおよびホワイトリスト管理方法
Emran et al. TPM-Based Continuous Remote Attestation and Integrity Verification for 5G VNFs on Kubernetes
EP3440585A1 (en) System and method for establishing a securely updatable core root of trust for measurement
US9507929B1 (en) Decentralized information flow securing method and system for multilevel security and privacy domains

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