写点什么

回顾 Linux 内核后门

  • 2013-12-29
  • 本文字数:1138 字

    阅读完需:约 4 分钟

由于最近大众对美国国家安全局(NAS)的关注,人们的注意力转移到后门程序上。对于不熟悉该术语的人们,后门是一种有意在操作系统或软件中植入的漏洞,允许未授权的用户访问系统。在 2003 年曾经有人试图向 Linux 内核植入后门,虽然被发现了,但是这表明不论看上去多普通的变更都会引入漏洞,以及源码控制管理的重要性。

Corbet 在 LVN.Net 的文章中首次提到以下这段代码,它把自己伪装成类似 wait4 函数的参数校验。

复制代码
if((options == (__WCLONE|__WALL)) && (current->uid = 0))
retval = -EINVAL;

正常情况下没有任何影响,但是如果调用程序故意传入非法值,if 表达式的第二部分就会执行。该部分会将程序的用户 ID(current->uid)设为 0, 在 Linux 中就是 root 用户。

一眼看上去这就像是一个简单的代码错误,开发人员经常疏忽将’==‘写成’=’。虽然你认为函数 wait4 不应该与用户 ID 有任何关系,但是很明显这是故意为为之。

Corbet 描述了该后门是如何被发现的

CVS 库中的每个变更都会包含反向链接信息,表明与 BitKeeper 中的变更相同。有问题的变更缺少这样的信息,所以很快就能辨认出来。 试图通过这种方式进行变更是很可疑的,至少可以这么说,所以我们非常关注变更请求到底是什么。

攻击者曾经再次向 BitKeeper 库的 CVS 克隆库中植入后门。他继续说道

CVS 代码库是从 BitKeeper 生成的,但是补丁程序进入 BitKeeper 代码库并不经过它。所以有问题的代码只会影响基于 CVS 代码库工作的用户。发行商使用的内核不是来自该库,这次事故也说明,问题代码能够驻留很长一段时间。

大家想象一下,如果有人向代码库发起这样的攻击,增加几行看上去很好的代码,实际上植入了一个后门,而代码库没有 Linux 内核团队的控制和严格检查,你如何保护自己不受攻击。

一种方式是在应用程序中创建自己的“内核”,只有这段代码可以改变用户的角色和权限。其他的代码只是获取到用户权限的只读视图,这样他们就不能轻易得获取 root 权限。

在这样的模型中,"current->uid=0"这样的代码不会编译。如果任何人想实施攻击,或是直接修改应用程序的安全模块,但是我们会密切关注这样的修改,或是使用反射的伎俩,但是反射代码肯定比简单的赋值操作更容易被察觉到。

如果语言层面支持,一种更好的方式是使用户权限完全不可变。这种方式能够更大程度限制攻击发生的地方,只能是创建权限的地方。

这些措施应该配合对源码控制服务器的限制进行实施。一是限制尽可能少的人向主分支中提交代码,而不是过于开放;二是安全敏感代码默认应该完全锁定,只能根据问题具体情况授予编辑权限,实施的具体方法依赖此人是否使用分布式或集中式的源码控制以及具体的产品。

如果没有在变更代码成为产品之前进行审计,最终这些技术都会失效,这些措施只能减少审计疏漏问题发生的可能性。

2013-12-29 22:134919
用户头像

发布了 28 篇内容, 共 12.2 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

第五周 实现一致性 hash 算法

Geek_fabd84

架构师训练营第1周学习总结

菜青虫

极客大学架构师训练营

并发环境下,先操作数据库还是先操作缓存?

捡田螺的小男孩

数据库 缓存 后端 并发

架构师训练营第一周作业

TONNY

食堂就餐卡系统设计

菜青虫

1024|推荐一个开源免费的Spring Boot教程

Java旅途

Java 开源 Spring Boot

架构师训练营 - 第五周 - 作业一

行者

第13周作业

Vincent

极客时间 极客大学

架构师训练营第五周作业——一致性哈希算法

文智

极客大学架构师训练营

关于Java面试必备的Java集合知识,终于有大佬总结整理出来了!

Java架构之路

Java 程序员 架构 面试 编程语言

架构师训练营 W01 总结

Geek_f06ede

极客大学架构师训练营

Git:使用Git之前的配置

bobo

git

一个程序猿应该具备哪些能力?

锐哥

程序员 1024讲话 1024

二十二、 深入Python的进程和线程(上篇)

刘润森

Python

周练习 5

何毅曦

架构师训练营W01作业

Geek_f06ede

极客大学架构师训练营

2020年的Java程序员面试三件套:多线程+算法+微服务

Java架构师迁哥

架构师训练营 - 第五周 - 作业二

行者

学习总结

TONNY

SQL优化-分治思想

GeekYin

MySQL SQL优化

一个大型的互联网应用系统使用了哪些技术手段

kawayi

Netty源码解析 -- ChannelPipeline机制与读写过程

binecy

Netty nio 源码剖析

架构师训练营第五周作业

我是谁

极客大学架构师训练营

架构师训练营 第一课作业

文江

介绍几种微商常见的引流方式

boshi

营销 电商

架构师训练营 1 期第 5 周:技术选型(一) - 总结

piercebn

极客大学架构师训练营

架构师1期-技术选型(一)作业

ltl3884

极客大学架构师训练营

第13周总结

Vincent

极客时间 极客大学

代码作业

Geek_4c1353

极客大学架构师训练营

【高并发】面试官问我:为什么局部变量是线程安全的?

冰河

多线程 高并发 高性能 线程安全 签约计划第二季

ping TCP端口的实用小工具tcping

网络 ping tcping

回顾Linux内核后门_安全_Jonathan Allen_InfoQ精选文章