CN116010973A - 一种操作系统的系统调用合法性校验方法和系统 - Google Patents

一种操作系统的系统调用合法性校验方法和系统 Download PDF

Info

Publication number
CN116010973A
CN116010973A CN202310090500.8A CN202310090500A CN116010973A CN 116010973 A CN116010973 A CN 116010973A CN 202310090500 A CN202310090500 A CN 202310090500A CN 116010973 A CN116010973 A CN 116010973A
Authority
CN
China
Prior art keywords
security
inode
system call
lsm
security policy
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
CN202310090500.8A
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.)
Kirin Software Co Ltd
Original Assignee
Kirin Software 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 Kirin Software Co Ltd filed Critical Kirin Software Co Ltd
Priority to CN202310090500.8A priority Critical patent/CN116010973A/zh
Publication of CN116010973A publication Critical patent/CN116010973A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明涉及一种操作系统的系统调用合法性校验方法和系统,属于系统调用技术领域,用以解决现有安全方案针对某一漏洞或者是特定领域不具有通用性的问题,方法包括:以inode节点为仲裁对象基于LSM框架在内核空间实现LSM安全模块;采用seccomp‑bpf在用户空间为不同应用程序配置对应的安全策略;将安全策略注入LSM安全模块中应用程序对应的inode节点的安全域中;拦截应用程序的进程启动系统调用,将应用程序对应的inode节点的安全域中存储的安全策略载入进程空间,根据安全策略对进程的系统调用进行校验。实现操作系统对所有安全的应用程序的系统调用接口的细粒度管控,提高了系统调用合法性校验的通用性和效率。

Description

一种操作系统的系统调用合法性校验方法和系统
技术领域
本发明涉及系统调用技术领域,尤其涉及一种操作系统的系统调用合法性校验方法和系统。
背景技术
在linux操作系统中,内核提供了用户进程与内核交互的一组接口。这些接口让应用程序受限地访问硬件设备,提供了创建新进程并与已有进程进行通信的机制,也提供了申请操作系统其他资源的能力。这些接口在应用程序和内核之间扮演了使者的角色,应用程序发出各种请求,而内核负责满足这些请求(或者无法满足时返回一个错误)。实际上提供这些接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行。但是在操作系统中,大量的系统调用接口直接暴露给应用程序,潜在的增加了系统受攻击面。然而并不是所有的系统调用都被需要,而且不安全的代码滥用系统调用会对系统造成安全威胁。
由于系统调用攻击成为黑客常用的一项技术,针对系统调用攻击的解决方案也提出了很多,如《Linux系统调用劫持:技术原理、应用及检测》,《基于系统调用限制的容器安全防护方案》,Android系统通过限制部分系统调用的使用减少系统调用的暴露面,等等,像这样的方案有很多,这些安全方案有些是针对系统某一漏洞,或者是特定领域如文献的容器安全领域,不具有通用性。
发明内容
鉴于上述的分析,本发明实施例旨在提供一种操作系统的系统调用合法性校验方法和系统,用以解决现有安全方案针对某一漏洞或者是特定领域不具有通用性的问题。
一方面,本发明实施例提供了一种操作系统的系统调用合法性校验方法,包括以下步骤:
以inode节点为仲裁对象基于LSM框架在内核空间实现LSM安全模块;
采用seccomp-bpf在用户空间为不同应用程序配置对应的安全策略;
将安全策略注入LSM安全模块中应用程序对应的inode节点的安全域中;
拦截应用程序的进程启动系统调用,将应用程序对应的inode节点的安全域中存储的安全策略载入进程空间,根据安全策略对进程的系统调用进行校验。
基于上述技术方案的进一步改进,所述LSM安全模块实现了inode_alloc_security和inode_init_security钩子函数;
所述inode_alloc_security钩子函数用于当操作系统启动为新建的文件创建inode节点时,为创建的inode节点申请和分配inode安全域;
所述inode_init_security钩子函数用于初始化所述inode安全域。
进一步地,将安全策略注入LSM安全模块中应用程序对应的inode节点的安全域中,包括:
通过系统调用setxattr(const char*path,const char*name,const void*value,size_t size,int flags)将安全策略注入内核空间,其中,参数path表示应用程序可执行文件的路径,参数name表示LSM安全模块的标识,参数value表示安全策略,参数size表示安全策略的大小,flags为缺省值;
所述LSM安全模块还实现了inode_setxattr钩子函数,所述inode_setxattr钩子函数用于拦截所述setxattr系统调用,根据setxattr系统调用的path和name参数找到LSM安全模块中应用程序对应的inode节点,将所述安全策略存储到所述inode节点的安全域中。
进一步地,所述LSM安全模块还实现了bprm_set_creds钩子函数,所述bprm_set_creds钩子函数用于拦截应用程序的进程启动系统调用,根据进程启动系统调用的参数找到该应用程序的inode节点,从所述inode节点中提取安全策略,将所述安全策略存储在所述进程的进程空间中。
进一步地,将所述安全策略存储在所述进程的task结构体的seccomp字段。
另一方面,本发明实施例提供了一种操作系统的系统调用合法性校验系统,包括以下模块:
LSM安全模块,所述LSM安全模块为以inode节点为仲裁对象基于LSM框架在内核空间实现的安全模块;
安全策略配置模块,用于采用seccomp-bpf在用户空间为不同应用程序配置对应的安全策略;
安全策略注入模块,用于将安全策略注入LSM安全模块中应用程序对应的inode节点的安全域中;
系统调用校验模块,用于拦截应用程序的进程启动系统调用,将应用程序对应的inode节点的安全域中存储的安全策略载入进程空间,根据安全策略对进程的系统调用进行校验。
基于上述技术方案的进一步改进,所述LSM安全模块实现了inode_alloc_security和inode_init_security钩子函数;
所述inode_alloc_security钩子函数用于当操作系统启动为新建的文件创建inode节点时,为创建的inode节点申请和分配inode安全域;
所述inode_init_security钩子函数用于初始化所述inode安全域。
进一步地,所述安全策略注入模块通过系统调用setxattr(const char*path,const char*name,const void*value,size_t size,int flags)将安全策略注入内核空间;其中,参数path表示应用程序可执行文件的路径,参数name表示LSM安全模块的标识,参数value表示安全策略,参数size表示安全策略的大小,flags为缺省值;
所述LSM安全模块还实现了inode_setxattr钩子函数,所述inode_setxattr钩子函数用于拦截所述setxattr系统调用,根据setxattr系统调用的path和name参数找到LSM安全模块中应用程序对应的inode节点,将所述安全策略存储到所述inode节点的安全域中。
进一步地,所述LSM安全模块还实现了bprm_set_creds钩子函数,所述bprm_set_creds钩子函数用于拦截应用程序的进程启动系统调用,根据进程启动系统调用的参数找到该应用程序的inode节点,从所述inode节点中提取安全策略,将所述安全策略存储在所述进程的进程空间中。
进一步地,所述LSM安全模块将所述安全策略存储在所述进程的task结构体的seccomp字段。
与现有技术相比,本发明通过以inode节点为仲裁对象基于LSM框架在内核空间实现LSM安全模块来管控系统中所有的进程,采用seccomp-bpf在用户空间为不同应用程序配置对应的安全策略,通过将安全策略注入LSM安全模块中应用程序对应的inode节点的安全域中,从而当不同应用程序启动时,查找应用程序对应的inode节点的安全域存储的安全策略,将其载入进程空间,从而通过seccomp技术校验应用程序的系统调用,实现操作系统细粒度的管控所有安装的应用程序的系统接口调用。由于bpf具有灵活高效的特点,所以本发明技术的代码执行效率高,且可以灵活制定策略,满足不同应用的不同校验需求。本发明的系统调用合法性校验方法对应用领域没有限制,在支持LSM安全框架和Seccomp BPF的linux内核上均可使用,应用范围更广,并且可以为操作系统中的任意应用程序定制对应的安全策略实现其系统调用合法性校验。
本发明中,上述各技术方案之间还可以相互组合,以实现更多的优选组合方案。本发明的其他特征和优点将在随后的说明书中阐述,并且,部分优点可从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过说明书以及附图中所特别指出的内容中来实现和获得。
附图说明
附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件;
图1为本发明实施例操作系统的系统调用合法性校验方法的流程图;
图2为本发明实施例操作系统的系统调用合法性校验系统的框图。
具体实施方式
下面结合附图来具体描述本发明的优选实施例,其中,附图构成本申请一部分,并与本发明的实施例一起用于阐释本发明的原理,并非用于限定本发明的范围。
Linux内核虽然通过权限和用户类型等访问控制手段限制了系统调用访问的范围,但是操作系统仍然有以下的安全威胁:
通过用户提权的技术手段,使普通用户可以使用超越普通用户权限的系统调用接口,增加系统资源被非法访问的风险。很多系统调用劫持的攻击就是利用这一漏洞实现的。
恶意程序频繁的调用系统接口,系统调用通过中断完成用户空间和内核空间的切换,而频繁的系统调用中断会导致进程一直占用CPU资源,无法响应其他请求,严重的会导致CPU资源耗尽,引起系统崩溃。
操作系统内核提供了大量系统调用接口,增加了系统攻击面,如arm/x86平台下系统调用接口约400个。
由于系统调用攻击成为黑客常用的一项技术,针对系统调用攻击的解决方案也提出了很多,现有的安全方案有些是针对系统某一漏洞的,或者是特定领域的,例如容器安全领域的,不具有通用性。
基于此,本发明的一个具体实施例,公开了一种操作系统的系统调用合法性校验方法,如图1所示,包括以下步骤:
S1、以inode节点为仲裁对象基于LSM框架在内核空间实现LSM安全模块;
S2、采用seccomp-bpf在用户空间为不同应用程序配置对应的安全策略;
S3、将安全策略注入LSM安全模块中应用程序对应的inode节点的安全域中;
S4、拦截应用程序的进程启动系统调用,将应用程序对应的inode节点的安全域中存储的安全策略载入进程空间,根据安全策略对进程的系统调用进行校验。
本发明基于Linux seccomp(Secure Computing mode)技术和内核LSM(LinuxSecurity Module)访问控制框架实现。Seccomp技术主要是用来限制某一进程可用的系统调用,它是一种减少linux内核暴露的机制,目前主要用于在某个应用程序中添加bpf指令,用于该应用程序的系统调用的过滤,其是在应用程序开发时在其中加入bpf指令,无法通过第三方向应用程序添加bpf指令,操作系统无法干涉应用程序的系统接口调用,局限性较大。LSM是一个轻量级、通用性和可集成不同的访问控制机制的安全框架。
本发明通过以inode节点为仲裁对象基于LSM框架在内核空间实现LSM安全模块来管控系统中所有的进程,采用seccomp-bpf在用户空间为不同应用程序配置对应的安全策略,通过将安全策略注入LSM安全模块中应用程序对应的inode节点的安全域中,从而当不同应用程序启动时,查找应用程序对应的inode节点的安全域存储的安全策略,将其载入进程空间,从而通过seccomp技术校验应用程序的系统调用,实现操作系统细粒度的管控所有安装的应用程序的系统接口调用。由于bpf具有灵活高效的特点,所以本发明技术的代码执行效率高,且可以灵活制定策略,满足不同应用的不同校验需求。本发明的系统调用合法性校验方法对应用领域没有限制,在支持LSM安全框架和Seccomp BPF的linux内核上均可使用,应用范围更广,并且可以为操作系统中的任意应用程序定制对应的安全策略实现其系统调用合法性校验。
LSM作为一个Linux内核补丁的形式实现,其本身不提供任何具体的安全策略,而是提供了一个通用的基础体系给安全模块,由安全模块来实现具体的安全策略。LSM框架是基于hook(钩子)机制实现了内核功能扩展,它的设计者几乎罗列了任何可能出现安全问题的地方,然后在这些地方安插钩子,并且这些钩子的实现定义为回调函数,具体的安全模块只需要自己实现这些钩子函数即可。安全模块通过在内核源代码中放置的钩子方法,来仲裁对内核内部对象进行的访问,这些对象有:任务,inode节点,打开的文件,信号量、消息等等。Linux内核可以同时支持多个不同的安全模块。
LSM框架在特定的内核数据结构中加入了安全域,安全域是一个void*类型的指针,它使得安全模块把安全信息和内核内部对象联系起来。下面列出被修改加入了安全域的内核数据结构,以及各自所代表的内核内部对象:
task_struct结构:代表任务(进程);
linux_binprm结构:代表程序;
super_block结构:代表文件系统;
inode结构:代表管道,文件,或者Socket套接字;
file结构:代表打开的文件;
sk_buff结构:代表网络缓冲区(包);
net_device结构:代表网络设备;
kern_ipc_perm结构:代表Semaphore信号,共享内存段,或者消息队列;
msg_msg:代表单个的消息。
由于每个应用程序对应有一个物理文件(即其可执行程序的二进制文件)每个文件在内核有一个对应的inode数据结构,即inode节点,因此,本发明的LSM安全模块是以inode节点为仲裁对象,实现inode对象相关的钩子函数。
所述LSM安全模块实现了inode_alloc_security和inode_init_security钩子函数;
所述inode_alloc_security钩子函数用于当操作系统启动时为新建的文件创建inode节点时,为创建的inode节点申请和分配inode安全域;
所述inode_init_security钩子函数用于初始化所述inode安全域。
当操作系统启动时,会创建应用程序对应的文件,当调用open()或creat()系统调用创建文件时会为新建的文件创建inode。以ext4文件系统为例来进行说明,当在ext4文件系统中调用ext4_new_inode()函数为新建的文件创建inode时,LSM安全模块的inode_alloc_security钩子函数拦截创建inode系统调用,申请并分配inode安全域。
具体的,inode节点对应的数据结构中有一个i_security字段,即安全域空间,它是void*类型,LSM安全模块的inode_alloc_security钩子函数用于为i_security指定具体的安全数据结构。
具体的,本发明中,LSM安全模块的安全数据结构如下:
struct syscall_inode_security_struct{
void*fprog;
};
其中,fprog指针用于指向的就是安全策略数据的地址,应用程序的安全策略就保存在这个结构中。
实施时,将syscall_inode_security_struct类型的指针赋值给i_security。
inode_alloc_security执行之后,执行inode_init_security钩子函数用于初始化所述inode安全域,例如将i_security指针初始化为NULL。
实施时,安全模块实现的部分hook如下所示:
static struct security_hook_list hooks[]={
LSM_HOOK_INIT(bprm_set_creds,syscall_bprm_set_creds),
LSM_HOOK_INIT(inode_alloc_security,syscall_inode_alloc_security),
LSM_HOOK_INIT(inode_init_security,syscall_inode_init_security),
LSM_HOOK_INIT(inode_setattr,syscall_inode_setattr),
LSM_HOOK_INIT(inode_setxattr,syscall_inode_setxattr),
LSM_HOOK_INIT(inode_post_setxattr,syscall_inode_post_setxattr),
LSM_HOOK_INIT(inode_free_security,syscall_inode_free_security)
};
例如,LSM安全模块实现了inode_alloc_security钩子函数,通过syscall_inode_alloc_security函数实现为inode节点申请并分配inode安全域。
通过security_add_hooks(hooks,ARRAY_SIZE(hooks))将实现了的hook函数添加到security_hook_list中。
将LSM安全模块注册到LSM框架中。不同版本的内核注册方式不同,例如,通过register_securty函数将LSM安全模块注册到LSM框架中,或者通过DEFINE_LSM宏对LSM安全模块进行初始化,从而将LSM安全模块注册到LSM框架中。
示例性的,LSM安全模块的部分初始化代码如下:
DEFINE_LSM(syscall)={
.name="syscall″,
.flags=LSM_FLAG_LEGACY_MAJOR,
.enabled=&syscall_enabled,
.blobs=&syscall_blob_sizes,
.init=secsyscall_init,
};
在secsyscall_init初始化模块中,调用security_add_hooks将LSM安全模块实现的hook函数添加到security_hook_list中。
实施时,可根据实际应用场景的需要,在操作系统用户空间中对各个应用程序或各类应用程序定制对应的系统调用安全策略。安全策略采用seccomp-bpf指令规则编写。
例如,对某个应用程序对文件系统有写保护的需求,可通过bpf指令编写安全策略禁止使用write系统调用接口。具体的,write系统调用接口禁用的指令代码如下:
struct sock_app_filter filter[]={
BPF_STMT(BPF_LD+BPF_W+BPF_ABS,arch_nr),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K,ARCH_NR,1,0),
BPF_STMT(BPF_RET+BPF_K,SECCOMP_RET_KILL),
BPF_STMT(BPF_LD+BPF_W+BPF_ABS,syscall_nr),
BPF_JUMP(BPF_JUMP+BPF_JEQ+BPF_K,__NR_write,0,1),
BPF_STMT(BPF_RET+BPF_K,SECCOMP_RET_KILL)
}
以上为该应用程序对应的安全策略的C语言实现方法,struct sock_app_filter这个结构体数组用来存储该应用程序对应的安全策略。
本发明的安全策略并非是在应用程序开发阶段写入应用程序中的,而是通过第三方的形式写入操作系统的内核,从而可以实现根据实际需要为任意应用程序定制对应的安全策略。
为需要监控的各个应用程序或各类应用程序配置好对应的安全策略后,将安全策略注入LSM安全模块中应用程序对应的inode节点的安全域中,具体包括:
通过系统调用setxattr(const char*path,const char*name,const void*value,size_t size,int flags)将安全策略注入内核空间,其中,参数path表示应用程序可执行文件的路径,参数name表示LSM安全模块的标识,参数value表示安全策略,参数size表示安全策略的大小,flags为缺省值;
所述LSM安全模块还实现了inode_setxattr钩子函数,所述inode_setxattr钩子函数用于拦截所述setxattr系统调用,根据setxattr系统调用的path和name参数找到LSM安全模块中应用程序对应的inode节点,将所述安全策略存储到所述inode节点的安全域中。
由于编写的安全策略是在用户空间,需要将其注入内核空间。具体的,通过setxattr系统调用将安全策略注入内核空间。实施时,将应用程序文件的路径作为path参数、LSM安全模块的标识作为name参数,应用程序的安全策略作为value参数,应用程序的安全策略的大小作为size参数,setxattr的flags参数设备默认值零,调用setxattr系统调用。
在内核空间需要拦截setxattr系统调用,以保存安全策略。因此,LSM安全模块还实现了inode_setxattr钩子函数,用于拦截setxattr系统调用。
安全模块还实现的inode_setxattr钩子函数如下:
static int syscall_inode_setxattr(struct dentry*dentry,const char*name,const void*value,size_t size,int flags);
通过参数dentry(dentry->d_inode;)可以获取到inode指针,通过inode指针的i_security字段找到安全域空间,参数value传递的是安全策略,将value的数据拷贝到inode节点的i_security字段中,从而将安全策略注入内核,保存在应用程序对应的inode的安全域中。
需要说明的是,setxattr系统调用在用户层传入的是path文件路径,在内核态path路径被转化为struct dentry,该结构体是描述文件的逻辑属性,dentry结构体中包含了文件名,文件的inode号等信息。
当应用程序的进程启动时,拦截应用程序的进程启动系统调用,查找应用程序对应的inode节点的安全域存储的安全策略载入进程空间。
具体的,通过在LSM安全模块实现bprm_set_creds钩子函数来拦截应用程序的进程启动系统调用,例如execv()系统调用。bprm_set_creds钩子函数根据进程启动系统调用的参数找到该应用程序的inode节点,从所述inode节点中提取安全策略,将所述安全策略存储在所述进程的进程空间中。
具体的,bprm_set_creds钩子函数的具体形式如下:
Static int int syscall_bprm_set_creds(struct linux_binprm*bprm);
需要说明的是,应用程序启动时,内核解析以及加载应用程序的二进制文件,会将程序相关信息映射成各种结构体,其中包括linux_binprm结构体linux_binpim结构体保存可执行程序的路径、参数和环境变量等信息。
通过内核接口file_inode(bprm->file),可以获取到应用程序对应的inode指针,inode指针的i_security字段存储的即是安全策略数据。
内核中的task结构体包含进程的所有信息,应用程序的安全策略就被保存在task结构体中。具体的,将所述安全策略存储在所述进程的task结构体的seccomp字段。
具体的,task结构体为如下形式:
struct task_struct{#ifdef CONFIG_THREAD_INFO_IN_TASK
/**For reasons of header soup(see current_thread_info()),this*must bethe first element of task_struct.*/
struct thread_info thread_info;#endif
/*-1unrunnable,0runnable,>0stopped:*/
volatile long state;
......
struct seccomp seccomp;
......
}
原生的系统内核不支持在内核空间将安全策略载入进程的接口。现有的Seccomp技术只提供了用户空间的接口,并未给内核其他模块提供接口。即,现有的seccomp模块只有如下接口,只能给用户层使用,不支持在核内使用,该接口的第二个参数限定了只能是用户空间传值:
static inline long seccomp_set_mode_filter(unsigned int flags,constchar__user*filter);
本发明在现有seccomp模块的基础上进行扩展,增加了一套接口给安全模块调用,通过该接口可以实现策略从安全模块加入到seccomp模块的应用程序进程空间中。
具体的,在seccomp模块添加以下接口:
long seccomp_set_mode_internal_filter(unsigned int flags,struct sock_fprog_kern*filter);
其中,其中参数filter,就是传递的安全策略。
seccomp_set_mode_internal_filter实现将安全策略filter保存在task结构体。
LSM安全模块拦截进程启动系统调用,根据参数找到该进程应用程序的inode节点,从所述inode节点中提取安全策略后,调用seccomp_set_mode_internal_filter将安全策略保存到进程的task结构体中。
seccomp模块是基于seccomp技术实现的,对进程的每一个系统调用进行校验。当进程有系统调用时进入到内核态后,seccomp模块从当前进程的task结构中取出seccomp字段存储的bpf安全策略指令,内核bpf虚拟机按照顺序执行指令,当指令禁止该系统调用执行时,通过SIGKILL信号终止进程,从而实现内核接口即系统调用的过滤校验。
通过当应用程序启动时将对应的安全策略保存在进程task结构体的seccomp字段中,从而直接利用seccomp进行系统调用过滤,提高了系统调用安全校验的效率。
本发明的一个具体实施例,公开了一种操作系统的系统调用合法性校验系统,如图2所示,包括以下模块:
LSM安全模块,所述LSM安全模块为以inode节点为仲裁对象基于LSM框架在内核空间实现的安全模块;
安全策略配置模块,用于采用seccomp-bpf在用户空间为不同应用程序配置对应的安全策略;
安全策略注入模块,用于将安全策略注入LSM安全模块中应用程序对应的inode节点的安全域中;
系统调用校验模块,用于拦截应用程序的进程启动系统调用,将应用程序对应的inode节点的安全域中存储的安全策略载入进程空间,根据安全策略对进程的系统调用进行校验。
基于上述技术方案的进一步改进,所述LSM安全模块实现了inode_alloc_security和inode_init_security钩子函数;
所述inode_alloc_security钩子函数用于当操作系统启动为新建的文件创建inode节点时,为创建的inode节点申请和分配inode安全域;
所述inode_init_security钩子函数用于初始化所述inode安全域。
进一步地,所述安全策略注入模块通过系统调用setxattr(const char*path,const char*name,const void*value,size_t size,int flags)将安全策略注入内核空间;其中,参数path表示应用程序可执行文件的路径,参数name表示LSM安全模块的标识,参数value表示安全策略,参数size表示安全策略的大小,flags为缺省值;
所述LSM安全模块还实现了inode_setxattr钩子函数,所述inode_setxattr钩子函数用于拦截所述setxattr系统调用,根据setxattr系统调用的path和name参数找到LSM安全模块中应用程序对应的inode节点,将所述安全策略存储到所述inode节点的安全域中。
进一步地,所述LSM安全模块还实现了bprm_set_creds钩子函数,所述bprm_set_creds钩子函数用于拦截应用程序的进程启动系统调用,根据进程启动系统调用的参数找到该应用程序的inode节点,从所述inode节点中提取安全策略,将所述安全策略存储在所述进程的进程空间中。
进一步地,所述LSM安全模块将所述安全策略存储在所述进程的task结构体的seccomp字段。
上述方法实施例和系统实施例,基于相同的原理,其相关之处可相互借鉴,且能达到相同的技术效果。具体实施过程参见前述实施例,此处不再赘述。
本领域技术人员可以理解,实现上述实施例方法的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读存储介质中。其中,所述计算机可读存储介质为磁盘、光盘、只读存储记忆体或随机存储记忆体等。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

Claims (10)

1.一种操作系统的系统调用合法性校验方法,其特征在于,包括以下步骤:
以inode节点为仲裁对象基于LSM框架在内核空间实现LSM安全模块;
采用seccomp-bpf在用户空间为不同应用程序配置对应的安全策略;
将安全策略注入LSM安全模块中应用程序对应的inode节点的安全域中;
拦截应用程序的进程启动系统调用,将应用程序对应的inode节点的安全域中存储的安全策略载入进程空间,根据安全策略对进程的系统调用进行校验。
2.根据权利要求1所述的操作系统的系统调用合法性校验方法,其特征在于,所述LSM安全模块实现了inode_alloc_security和inode_init_security钩子函数;
所述inode_alloc_security钩子函数用于当操作系统启动为新建的文件创建inode节点时,为创建的inode节点申请和分配inode安全域;
所述inode_init_security钩子函数用于初始化所述inode安全域。
3.根据权利要求1所述的操作系统的系统调用合法性校验方法,其特征在于,将安全策略注入LSM安全模块中应用程序对应的inode节点的安全域中,包括:
通过系统调用setxattr(const char*path,const char*name,const void*value,size_t size,int flags)将安全策略注入内核空间,其中,参数path表示应用程序可执行文件的路径,参数name表示LSM安全模块的标识,参数value表示安全策略,参数size表示安全策略的大小,flags为缺省值;
所述LSM安全模块还实现了inode_setxattr钩子函数,所述inode_setxattr钩子函数用于拦截所述setxattr系统调用,根据setxattr系统调用的path和name参数找到LSM安全模块中应用程序对应的inode节点,将所述安全策略存储到所述inode节点的安全域中。
4.根据权利要求1所述的操作系统的系统调用合法性校验方法,其特征在于,所述LSM安全模块还实现了bprm_set_creds钩子函数,所述bprm_set_creds钩子函数用于拦截应用程序的进程启动系统调用,根据进程启动系统调用的参数找到该应用程序的inode节点,从所述inode节点中提取安全策略,将所述安全策略存储在所述进程的进程空间中。
5.根据权利要求4所述的操作系统的系统调用合法性校验方法,其特征在于,将所述安全策略存储在所述进程的task结构体的seccomp字段。
6.一种操作系统的系统调用合法性校验系统,其特征在于,包括以下模块:
LSM安全模块,所述LSM安全模块为以inode节点为仲裁对象基于LSM框架在内核空间实现的安全模块;
安全策略配置模块,用于采用seccomp-bpf在用户空间为不同应用程序配置对应的安全策略;
安全策略注入模块,用于将安全策略注入LSM安全模块中应用程序对应的inode节点的安全域中;
系统调用校验模块,用于拦截应用程序的进程启动系统调用,将应用程序对应的inode节点的安全域中存储的安全策略载入进程空间,根据安全策略对进程的系统调用进行校验。
7.根据权利要求6所述的操作系统的系统调用合法性校验系统,其特征在于,所述LSM安全模块实现了inode_alloc_security和inode_init_security钩子函数;
所述inode_alloc_security钩子函数用于当操作系统启动为新建的文件创建inode节点时,为创建的inode节点申请和分配inode安全域;
所述inode_init_security钩子函数用于初始化所述inode安全域。
8.根据权利要求6所述的操作系统的系统调用合法性校验系统,其特征在于,
所述安全策略注入模块通过系统调用setxattr(const char*path,const char*name,const void*value,size_t size,int flags)将安全策略注入内核空间;其中,参数path表示应用程序可执行文件的路径,参数name表示LSM安全模块的标识,参数value表示安全策略,参数size表示安全策略的大小,flags为缺省值;
所述LSM安全模块还实现了inode_setxattr钩子函数,所述inode_setxattr钩子函数用于拦截所述setxattr系统调用,根据setxattr系统调用的path和name参数找到LSM安全模块中应用程序对应的inode节点,将所述安全策略存储到所述inode节点的安全域中。
9.根据权利要求6所述的操作系统的系统调用合法性校验系统,其特征在于,所述LSM安全模块还实现了bprm_set_creds钩子函数,所述bprm_set_creds钩子函数用于拦截应用程序的进程启动系统调用,根据进程启动系统调用的参数找到该应用程序的inode节点,从所述inode节点中提取安全策略,将所述安全策略存储在所述进程的进程空间中。
10.根据权利要求9所述的操作系统的系统调用合法性校验系统,其特征在于,所述LSM安全模块将所述安全策略存储在所述进程的task结构体的seccomp字段。
CN202310090500.8A 2023-02-09 2023-02-09 一种操作系统的系统调用合法性校验方法和系统 Pending CN116010973A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310090500.8A CN116010973A (zh) 2023-02-09 2023-02-09 一种操作系统的系统调用合法性校验方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310090500.8A CN116010973A (zh) 2023-02-09 2023-02-09 一种操作系统的系统调用合法性校验方法和系统

Publications (1)

Publication Number Publication Date
CN116010973A true CN116010973A (zh) 2023-04-25

Family

ID=86023205

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310090500.8A Pending CN116010973A (zh) 2023-02-09 2023-02-09 一种操作系统的系统调用合法性校验方法和系统

Country Status (1)

Country Link
CN (1) CN116010973A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118194307A (zh) * 2024-05-15 2024-06-14 浪潮云信息技术股份公司 一种提升信创操作系统安全性的方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118194307A (zh) * 2024-05-15 2024-06-14 浪潮云信息技术股份公司 一种提升信创操作系统安全性的方法

Similar Documents

Publication Publication Date Title
Priebe et al. SGX-LKL: Securing the host OS interface for trusted execution
US9989043B2 (en) System and method for processor-based security
Heuser et al. {ASM}: a programmable interface for extending android security
Schreckling et al. Kynoid: real-time enforcement of fine-grained, user-defined, and data-centric security policies for android
US20160042191A1 (en) Programmable interface for extending security of application-based operating system, such as android
Ujcich et al. Cross-app poisoning in software-defined networking
Smalley et al. Security enhanced (se) android: bringing flexible mac to android.
Bugiel et al. Towards Taming Privilege-Escalation Attacks on Android.
US7509639B2 (en) Customized execution environment
Fine et al. Assuring distributed trusted mach
Bianchi et al. Njas: Sandboxing unmodified applications in non-rooted devices running stock android
EP3367291B1 (en) Label transition for mandatory access controls
Dawoud et al. DroidCap: OS support for capability-based permissions in android
CN116010973A (zh) 一种操作系统的系统调用合法性校验方法和系统
Salles-Loustau et al. Don't just BYOD, bring-your-own-app too! Protection via virtual micro security perimeters
Huber et al. A secure architecture for operating system-level virtualization on mobile devices
Laurén et al. Analysis of security in modern container platforms
CN116521306A (zh) 一种容器使能selinux的方法和计算机设备
Wang et al. Pangu 9 internals
Sabanal et al. Playing in the Reader X sandbox
Cui et al. Container‐Based Privacy Preserving Scheme for Android Applications
Bugiel Establishing mandatory access control on Android OS
Im Safe and Secure Subprocess Virtualization in Userspace
Jing et al. TRIPLEMON: A multi-layer security framework for mediating inter-process communication on Android
CN118246021A (zh) 针对容器逃逸攻击的防御方法、装置、设备及存储介质

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