CN106096400B - 一种Linux内核并行LSM框架实现方法 - Google Patents
一种Linux内核并行LSM框架实现方法 Download PDFInfo
- Publication number
- CN106096400B CN106096400B CN201610391501.6A CN201610391501A CN106096400B CN 106096400 B CN106096400 B CN 106096400B CN 201610391501 A CN201610391501 A CN 201610391501A CN 106096400 B CN106096400 B CN 106096400B
- Authority
- CN
- China
- Prior art keywords
- security
- security module
- lsm
- function
- frame
- 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.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2141—Access rights, e.g. capability lists, access control lists, access tables, access matrices
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)
- Stored Programmes (AREA)
Abstract
本发明公开了一种Linux内核并行LSM框架实现方法。本方法为:1)LSM框架中的钩子函数指针结构体中添加一链表结构;在LSM框架中创建一安全域字段数组,该安全域域字段数组中的每一指针对应一安全模块的安全域;2)根据配置获得多个安全模块的启动参数并执行对应初始化函数;当安全模块加载进入内核时,给该安全模块分配一钩子函数指针结构体,然后将该安全模块中的钩子函数与该结构体中的指针相连接,之后通过链表结构将该安全模块与其他安全模块的钩子函数指针结构体链接;3)运行LSM框架插入在系统调用函数中的钩子函数,按顺序依次执行链接起来的各安全模块对应的具体钩子函数。本发明使得各安全模块间相互独立,地位平等。
Description
技术领域
本发明涉及计算机操作系统信息安全领域,具体涉及一种Linux内核并行LSM框架实现方法。
背景技术
LSM(Linux Security Module)是内核的一个轻量级通用访问框架。它使得各种不同的安全访问框架模型能够以Linux可加载内核模块的形式实现出来。用户可以根据其需求选择合适的安全模块加载到Linux内核中,从而大大提高了Linux安全访问控制机制的灵活性和易用性。在Linux2.6版本的内核中,LSM已正式成为Linux内核安全机制的标准,在各个Linux发行版中提供给用户使用。
LSM为安全模块提供的最重要的机制是在内核相关系统调用函数内部的某些关键点插入对钩子函数的调用,用于帮助安全模块执行具体的访问控制。作为一种底层基础设施,LSM对外提供的,就是这些钩子函数的接口,而钩子函数的实现细节则有具体的安全模块完成。
当用户进程调用系统调用函数时,首先执行该函数中原有的功能错误性检查、传统的DAC访问控制检查,在系统实际访问内核内部对象之前,通过对相关LSM钩子函数的调用,根据具体的安全模块中的访问控制策略,判断该请求是否合法,若与安全策略相符,则继续进行常规访问操作,否则中断该系统调用,并返回适当的错误信息。其中安全模块引擎部分由具体的安全模块实现。
由于LSM框架当初设计的时候只设计了一个安全域和一套钩子函数指针的原因,目前的LSM框架仅支持单个独立安全模块。然而,目前存在的这些安全模块都是为了特定的安全需求而开发的,每个模块都有自己的侧重点,所实现的安全策略也是不可能全面的。同时,如果要开发一个安全需求完善的安全模块是非常困难的。所以目前的LSM框架没办法综合的实现各种安全策略。
目前针对这个问题,国内外的主要解决方案是采用LSM Stacking方案。Stacking方案实际上就是让第一个注册使用LSM框架的安全模块为主安全模块,后面注册的安全模块全部为从安全模块。主安全模块向从安全模块提供安全域和钩子函数指针,这样做的主要缺点是,从安全模块何时发挥安全作用,如何发挥作用以及返回的安全判定结果如何处理,均由主安全模块根据安全策略做出决策。即从安全模块完全受到主安全模块的管理与制约。
发明内容
针对现有技术中存在的技术问题,本发明的目的在于提供一种Linux内核并行LSM框架的实现方法。该方法采用链表链接的方式实现了同时实施多个安全模块的安全策略,并且各个安全模块之间的地位是平等的,因此将此技术方案叫做LSM Linking方案。该技术方案主要包括两个方面,一方面是对LSM框架中的钩子函数指针进行扩展,另一方面是对LSM框架的安全域进行扩展。
本发明的技术方案为:
一种Linux内核并行LSM框架实现方法,其步骤为:
1)在LSM框架中的钩子函数指针结构体中添加一链表结构head_list;在LSM框架中创建一安全域字段数组,该安全域域字段数组中的每一指针对应一安全模块的安全域;
2)在LSM框架初始化阶段,LSM框架根据配置获得多个安全模块的启动参数,并初始化链表结构head_list;然后根据各安全模块的启动顺序执行各安全模块的初始化函数;
3)当安全模块加载进入Linux内核时,LSM框架给该安全模块分配一钩子函数指针结构体,然后将该安全模块中的钩子函数与该钩子函数指针结构体中的指针相连接并给该安全模块分配一order值,之后通过钩子函数指针结构体的链表结构head_list将该安全模块与其他已加载进入Linux内核的安全模块的钩子函数指针结构体链接;其中,order值代表安全模块的启动顺序以及在安全域字段数组中的位置;
4)在LSM框架执行阶段,运行LSM框架插入在系统调用函数中的钩子函数;该钩子函数负责按顺序依次执行链接起来的各安全模块对应的具体钩子函数;
5)当一安全模块的钩子函数被调用时,该安全模块根据自身的order值从主客体结构中获取该安全模块的安全上下文信息并将其发送给安全模块策略引擎;安全模块策略引擎根据主客体安全上下文信息以及安全策略库,作出该安全模块对于此次调用的决策。
进一步的,通过修改LSM框架的初始化函数,使其能够接受多个安全模块的注册,并且能够根据安全模块的启动参数的顺序依次调用相应安全模块的初始化函数。
进一步的,通过修改LSM框架的启动参数解析函数,配置安全模块的使能开关以及启动执行顺序。
进一步的,步骤3)中,安全模块根据order值获得对应的安全域的地址,并对该安全域进行初始化与赋值。
进一步的,在LSM框架执行阶段,当用户进程调用系统调用函数时,系统调用函数首先进行参数错误检查,然后进行Linux系统自主访问控制检查;当检查通过后,运行LSM框架插入在系统调用函数中的钩子函数。
进一步的,LSM框架中设有一设置安全域字段数组中指针指向的安全域信息的接口函数,以及一获取安全域字段数组中指针指向的安全域信息的接口函数;安全模块通过这两个接口函数对各自对应的安全信息进行操作管理。
进一步的,该链表结构head_list为Linux内核通用链表结构。
该发明包含以下内容:
1)扩展钩子函数指针。在钩子函数指针结构体security_ops中添加一个Linux内核通用链表头struct head_list结构。当有安全模块加载进入内核时,就给该模块分配一个钩子函数指针结构体并初始化该结构体,之后通过head_list结构将其与其他安全模块的钩子函数指针结构体链接,如图1所示。
2)扩展安全域。在LSM框架中增加一个安全域字段数组LSM_blobs。如图2所示,内核中关键数据结构的每一个void*security指针都指向LSM扩展的安全域域字段数组,该安全域域字段数组中的每一个指针都对应一个安全模块的安全域。同时在LSM框架中增加两个对该安全域字段数组的接口函数,分别是设置和获取安全域字段数组中指针指向的安全域信息。安全模块可以通过这两个接口函数对各自对应的安全信息进行操作管理。
3)修改LSM框架的初始化函数,解除只能注册一个安全模块的限制,使其能够接受多个安全模块的注册,并且能够根据安全模块的启动参数的顺序依次调用相应安全模块的初始化函数。
4)修改LSM框架的启动参数解析函数。使得安全管理员能够配置形如security=”XXXX”的内核启动参数中的安全模块参数。通过配置该参数来管理安全模块的使能开关以及启动执行顺序。
本发明主要包含三个方面:(1)将LSM框架中的钩子函数指针结构体用head_list链表进行连接,使LSM框架能够对多个安全模块提供独立的钩子函数指针结构体。(2)在LSM框架中创建安全域字段数组结构,为每个安全模块提供安全域字段数组中的一个扩展的安全域。(3)修改LSM框架初始化与调用流程,使个各安全模块能够以链表链接的顺序依次初始化和执行。(4)修改启动参数解析函数,使得安全管理员能够方便的配置管理各安全模块的使能开关以及执行顺序。
与现有技术相比,本发明的积极效果:
本发明能够让LSM框架支持多个安全模块同时运行,采用并列链接的方式使得各安全模块间相互独立,地位平等。
本发明配置管理简单,安全管理员只需要简单的配置系统启动参数即可方便的是管理安全模块的使能开关以及执行顺序,方便的进行各个安全模块的综合使用。
本发明只需要少量修改linux内核代码,不影响系统性能。
附图说明
图1为LSM Linking钩子函数指针结构体扩展原理图。
图2为LSM Linking安全域扩展原理图。
图3为LSM Linking初始化流程图。
图4为LSM Linking系统调用流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明,本发明同样适用于Linux内核安全模块的并发执行。
本发明实施的步骤主要分为两个模块:LSM框架的初始化和LSM框架的执行。在初始化阶段,LSM框架根据内核启动参数依次调用各个安全模块的初始化函数,并将安全模块的钩子函数指针结构体用head_list链表链接起来;同时由各个安全模块完成各自安全域的初始化;在LSM框架执行阶段,当用户调用系统调用函数时会触发LSM框架在系统调用中插入的钩子函数从而执行LSM框架中的函数,该函数负责按链表顺序依次调用每个安全模块的安全检测函数,并将最终结果综合返回给系统调用。下面详细介绍实施步骤:
如图3所示,扩展之后的LSM框架初始化步骤为:
1)配置内核启动参数中的安全模块参数。系统启动后,LSM框架根据配置获得安全模块security的启动参数。
2)分析启动参数,如果有不合法的启动参数直接退出初始化,否则记录各安全模块的启动顺序,并初始化LSM框架中钩子函数指针结构体中的head_list链表结构。
3)按照步骤(2)中的启动顺序,依次执行各个安全模块的初始化函数。
4)调用相应的安全模块的初始化函数。
5)LSM框架为该安全模块新建立一个钩子函数指针结构体security_ops,将安全模块中的钩子函数与该钩子函数指针结构体中的指针相连接,并给该安全模块分配一个order值,同时将该钩子函数指针结构体加入head_list链表。order值代表安全模块的启动顺序以及在安全域字段数组中的位置。
6)安全模块根据步骤(5)中的order值获得对应的安全域地址,并对该安全域进行初始化与赋值。
7)如果该安全模块不是最后一个安全模块,则跳转步骤(4)调用下一个安全模块;否则初始化结束。
如图4所示扩展之后的系统调用步骤为:
1)当用户进程调用系统调用函数时。系统调用函数首先进行简单的参数错误检查。
2)进行Linux系统自带的自主访问控制检查。
3)运行LSM框架插入在系统调用函数中的钩子函数。钩子函数负责按顺序依次执行链表结构链接起来的各安全模块对应的具体钩子函数。
4)调用相应的安全模块的钩子函数。
5)该安全模块根据自身的order值从主客体结构中获取该安全模块的安全上下文信息(security context),并将该信息传递给安全模块策略引擎。
6)安全模块策略引擎根据主客体安全上下文信息以及安全策略库,作出该安全模块对于此次系统调用的决策。
7)如果该安全模块不是链表结构中最后一个安全模块,则跳转(4);否则进入(8)。
8)如果所有执行的安全模块作出的决策都是允许该系统调用,则进行正常的系统调用;否则拒绝该系统调用。
Claims (7)
1.一种Linux内核并行LSM框架实现方法,其步骤为:
1)在LSM框架中的钩子函数指针结构体中添加一链表结构head_list;在LSM框架中创建一安全域字段数组,该安全域字段数组中的每一指针对应一安全模块的安全域;
2)在LSM框架初始化阶段,LSM框架根据配置获得多个安全模块的启动参数,并初始化链表结构head_list;然后根据各安全模块的启动顺序执行各安全模块的初始化函数;
3)当安全模块加载进入Linux内核时,LSM框架给该安全模块分配一钩子函数指针结构体,然后将该安全模块中的钩子函数与该钩子函数指针结构体中的指针相连接并给该安全模块分配一order值,之后通过钩子函数指针结构体的链表结构head_list将该安全模块与其他已加载进入Linux内核的安全模块的钩子函数指针结构体链接;其中,order值代表安全模块的启动顺序以及在安全域字段数组中的位置;
4)在LSM框架执行阶段,运行LSM框架插入在系统调用函数中的钩子函数;该钩子函数负责按顺序依次执行链接起来的各安全模块对应的具体钩子函数;
5)当一安全模块的钩子函数被调用时,该安全模块根据自身的order值从主客体结构中获取该安全模块的安全上下文信息并将其发送给安全模块策略引擎;安全模块策略引擎根据主客体安全上下文信息以及安全策略库,作出该安全模块对于此次调用的决策。
2.如权利要求1所述的方法,其特征在于,通过修改LSM框架的初始化函数,使其能够接受多个安全模块的注册,并且能够根据安全模块的启动参数的顺序依次调用相应安全模块的初始化函数。
3.如权利要求1或2所述的方法,其特征在于,通过修改LSM框架的启动参数解析函数,配置安全模块的使能开关以及启动执行顺序。
4.如权利要求1或2所述的方法,其特征在于,步骤3)中,安全模块根据order值获得对应的安全域的地址,并对该安全域进行初始化与赋值。
5.如权利要求1或2所述的方法,其特征在于,在LSM框架执行阶段,当用户进程调用系统调用函数时,系统调用函数首先进行参数错误检查,然后进行Linux系统自主访问控制检查;当检查通过后,运行LSM框架插入在系统调用函数中的钩子函数。
6.权利要求1或2所述的方法,其特征在于,LSM框架中设有一设置安全域字段数组中指针指向的安全域信息的接口函数,以及一获取安全域字段数组中指针指向的安全域信息的接口函数;安全模块通过这两个接口函数对各自对应的安全信息进行操作管理。
7.权利要求1或2所述的方法,其特征在于,该链表结构head_list为Linux内核通用链表结构。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610391501.6A CN106096400B (zh) | 2016-06-06 | 2016-06-06 | 一种Linux内核并行LSM框架实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610391501.6A CN106096400B (zh) | 2016-06-06 | 2016-06-06 | 一种Linux内核并行LSM框架实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106096400A CN106096400A (zh) | 2016-11-09 |
CN106096400B true CN106096400B (zh) | 2019-10-01 |
Family
ID=57447898
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610391501.6A Expired - Fee Related CN106096400B (zh) | 2016-06-06 | 2016-06-06 | 一种Linux内核并行LSM框架实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106096400B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108614969B (zh) * | 2018-05-02 | 2021-06-15 | 北京搜狐新媒体信息技术有限公司 | 一种系统启动后加载的强制访问控制方法及系统 |
CN108647512B (zh) * | 2018-05-15 | 2022-10-21 | 北京安云世纪科技有限公司 | 终端安全控制方法、装置和计算机可读存储介质 |
CN111428241B (zh) * | 2019-10-31 | 2023-12-29 | 北京统信软件技术有限公司 | 一种多安全访问策略控制方法及计算设备 |
CN112668008A (zh) * | 2021-01-06 | 2021-04-16 | 上海湖顶大数据科技有限公司 | 一种基于lsm来实现动态的系统调用劫持的方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102393887A (zh) * | 2011-06-30 | 2012-03-28 | 成都市华为赛门铁克科技有限公司 | 基于lsm基制的应用集中管理系统及方法 |
-
2016
- 2016-06-06 CN CN201610391501.6A patent/CN106096400B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102393887A (zh) * | 2011-06-30 | 2012-03-28 | 成都市华为赛门铁克科技有限公司 | 基于lsm基制的应用集中管理系统及方法 |
Non-Patent Citations (1)
Title |
---|
Linux安全模块LSM研究及改进;邵长福;《中国优秀硕士学位论文全文数据库信息科技辑》;20130115;论文正文第5-7页,16-33页 * |
Also Published As
Publication number | Publication date |
---|---|
CN106096400A (zh) | 2016-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2018203054B2 (en) | System of distributed software quality improvement | |
CN106096400B (zh) | 一种Linux内核并行LSM框架实现方法 | |
CN104573115B (zh) | 支持多类型数据库操作的集成接口的实现方法及系统 | |
WO2019085087A1 (zh) | 接口测试及测试数据生成方法、装置、终端和存储介质 | |
CN102880546B (zh) | 一种基于xml数据库的软件集成测试方法及系统 | |
CN103297381B (zh) | 一种基于插件的业务访问方法及其系统 | |
US9246914B2 (en) | Method and apparatus for processing biometric information using distributed computation | |
CN105512044B (zh) | 用于关键字驱动测试的对象库的更新方法及系统 | |
CN105446799A (zh) | 一种计算机系统中进行规则管理的方法及系统 | |
CN103123605B (zh) | 一种Android平台自动化集成测试方法和装置 | |
CN105389256A (zh) | 一种单元测试方法及系统 | |
CN112256321A (zh) | 静态库打包方法、装置、计算机设备和存储介质 | |
WO2017148287A1 (zh) | 一种嵌入式软件开发方法、装置、平台及存储介质 | |
CN111949529B (zh) | 系统调试方法、装置、计算机设备和存储介质 | |
Berwanger et al. | A perfect-information construction for coordination in games | |
CN110727664A (zh) | 用于对公有云数据执行目标操作的方法与设备 | |
CN111752841A (zh) | 单测模拟方法、装置、设备与计算机可读存储介质 | |
CN105205123B (zh) | 一种数据库间数据交互方法和装置 | |
CN106020822B (zh) | 面向Pool对象的弱引用实现方法和装置 | |
CN103902282B (zh) | Web服务组合到有色Petri网的模型转化方法 | |
CN105653334B (zh) | 一种基于saas模式的mis系统快速开发框架 | |
CN101969442B (zh) | 基于进程运行环境感知与迁移的网络模拟框架实现方法 | |
CN112448909A (zh) | 电子锁管理方法、装置、系统及存储介质 | |
CN104753902B (zh) | 一种业务系统验证方法及验证装置 | |
CN105843735B (zh) | 一种终端内存的消耗方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20191001 |
|
CF01 | Termination of patent right due to non-payment of annual fee |