技术分享 | LSM,Linux 内核的安全防护盾

计算机安全是一个非常重要的概念和主题,它不仅仅可以保护用户个人信息和资产的安全,还可以影响到用户在使用过程中的体验;但同时,它也是一个很抽象的概念,关于其相关文献和资料不计其数,但它究竟是什么、包含什么,并没有详尽并全面的介绍。尽管困难,国际上还是对计算机安全概括出了三个特性:

私密性(Confidentiality)

完整性(Integrity)

可用性(Availability)

三者合起来简写为 CIA 。私密性就是数据不被未授权的人看到;完整性指存储或传输的信息不被篡改;可用性是指自己的设备在需要使用的时候能够使用。

内核对于系统的重要性是无需多言的。Linux 内核安全的开发从上世纪 90 年代中后期开始,经过 20 多年的开发, Linux 内核中安全相关模块还是很全面的,有用于强制访问控制的 LSM 、有用于完整性保护的 IMA 和 EVM 、有用于加密的密钥管理模块和加密算法库、还有日志和审计模块、以及一些零碎的安全增强特性。

LSM是什么

LSM ,全称为 Linux Security Modules ,中文直译为 Linux 安全模块。别看叫 Linux 安全模块,但 LSM 其实是一个在内核各个安全模块的基础上提出(抽象出)的轻量级安全访问控制框架。该框架只是提供一个支持安全模块的接口,本身不能增强系统安全性,具体的工作交给各安全模块来做。这有点儿类似于系统架构师和工程师的关系,架构师负责抽象建模、系统设计和框架搭建,工程师按照架构师的框架设计进行编码,将其构想付诸实现。

再具体点说, LSM 在 Linux 内核中体现为一组安全相关的函数,这些安全函数在系统调用的执行路径中会被调用。因此 LSM 的目的是对用户态进程进行强制访问控制。至于这些安全函数要实施什么样的访问控制,则是由具体的安全模块决定的。

两段内容就提到了两次安全模块,那到底都有哪些安全模块?

截止到2014年, Linux 内核主线上共有 5 个安全模块:SELinux、AppArmor、Smack、TOMOYO 和 Yama,后来又增加了 LoadPin 和 SafeSetID 等。虽然还被称为模块,但实际上自 Linux 内核 2.6.x 版本之后, Linux 就强制 LSM 各个模块必须被编译进内核中,不能再以模块的形式存在了。这意味着,在运行时不能再随意加载一个所谓的安全模块作为访问控制机制了,也不能随意卸载一个安全模块了。

LSM的历史

说起 LSM 的历史,就不能不提到 SELinux 。实际上是先有的 SELinux ,后有的 LSM ,可以说 LSM 是由 SELinux 推动才应运而生的。具体是怎么回事?且听我慢慢道来。

在 2001 年的 Linux Kernel 峰会上,美国国家安全局(National Security Agency,简写为 NSA )代表建议在 Linux Kernel 2.5 中加入 Security-Enhanced Linux(SELinux) 。然而,这一提议遭到了 Linus Torvalds( Linux 之父)的拒绝。当然了,拒绝也是有原因、有理由的:

一方面, SELinux 并不是唯一用于增强 Linux 安全性的安全子系统;

另一方面,并不是所有的开发人员都认为 SELinux 是最佳的解决方案。最终,“托爷”还真就没让 SELinux 加入到 Linux Kernel 2.5 。

虽然来了个“烧鸡大窝脖”,可是人家 NSA 可没有气馁和放弃。相反,将 Linux Security Module ,即 LSM 的开发提上日程。打那之后,LSM 子系统开发了近 3 年,终于在 2003 年完成了由 SELinux 到 LSM 的迁移,并在 Linux Kernel 2.6 正式加入到内核中。自此以后,大量安全模块应运而生了,比如 RHEL、Fedora、CentOS 等发行版中默认的 SELinux ,以及在 Ubuntu、OpenSUSE、SUSE、Debian 等发行版中默认的 AppArmor 等等(就是上文列出的那些安全模块)。

LSM框架结构及实现机制

LSM 框架主要由五大部分组成:

在关键的特定内核数据结构中加入了安全域;

在内核源码中不同的关键点处插入对安全钩子函数的调用;

提供了一个通用的安全系统调用;

提供了注册和注销函数,使得访问控制策略可以以内核模块方式实现;

将 capabilities 逻辑的大部分功能移植为一个可选的安全模块。       

具体实现上, LSM 框架通过提供一系列的 Hook 即钩子函数来控制对内核对象的操作,其本质是插桩法。Hook 函数的访问示意图如下:

通过系统调用进入内核之后,系统首先进行错误检查;错误检查通过之后,进行传统的权限检查即自主访问控制(Discretionary Access Control,DAC)检查(传统权限检查主要是基于用户的,用户通过验证之后就可以访问资源);通过之后才会进行强制访问控制(Mandatory Access Control,MAC)。强制访问控制是不允许主体干涉的一种访问控制,其采用安全标识、信息分级等信息敏感性进行访问控制,并通过比较主体的级别和资源的敏感性来确定是否允许访问。

总结

LSM 是一个很大的概念和课题,涉及很多方面、层面的知识,非常值得深入学习、探索和研究。

它作为 Linux 内核的一个关键组成部分,对计算机安全至关重要。深入研究 LSM 可以为提高 Linux 系统的安全性、性能和适应性提供重要见解,并有助于满足不断演变的安全需求。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容