首页
社区
课程
招聘
[旧帖] 请教一些与Linux内核安全相关的问题 0.00雪花
发表于: 2014-12-15 12:32 3902

[旧帖] 请教一些与Linux内核安全相关的问题 0.00雪花

2014-12-15 12:32
3902
抱歉,本人对这方面的概念很不熟悉。

我首先想请教的是,内核空间和用户空间的分离,是不是主要就是从安全角度考虑的?

其次,从用户空间影响内核空间,都有哪些方式?我能想到的有,通过系统调用,通过内存映射(但mmap本身也是系统调用),通过加载模块(但加载模块的命令本身也是系统调用?),然后我就想不到了。我说得对吗?还有哪些?

然后就是,攻击内核有哪些方式?能稍微说一下细节么?

最后就是,通过攻击拿到root权限,是不是就是无敌了,想在内核里干什么就干什么,相当于控制了整个内核以及硬件?还是说,其实也只有有限的能力能干坏事?

感谢。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 55
活跃值: (348)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我也不是Linux专家,但有一些基本概念。
1、内核空间和用户空间的分离,主要是从系统的安全和可靠性角度考虑的。内核空间运行的代码被认为是可靠的代码,用户空间的代码一般来说更容易出错,确保用户空间的代码错误不会影响到内核,从内核是为多个应用服务的,不能一个应用的错误导致内核崩溃从而影响其它应用。
2、用户空间影响内核空间,直接的角度,只能通过系统调用了。
3、内核攻击,要看你具体的目标了,Linux由于有内核源码公开,方便你研究新的攻击方法。
4、拿到root权限,就可以安装内核模块,像Windows下安装内核驱动一样,理论上可以干你任何想干的事情。据我所知,凡是有超级用户的操作系统,国际安全评级机构对其评级就不会太高,比如Linux和Windows NT基本上就是C2这个级别。
2014-12-15 15:10
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
本人也不是专家,尝试回答一下楼主的问题

1. 稳定、复用、安全
某些嵌入式设备的系统是不分内核空间和用户空间的,就一块内存任你乱搞,但那是因为任务简单。无论是个人PC还是服务器,任务都非常复杂,设想一下如果不把任务调度和内存管理统一起来由单一的程序(即内核)管理,如何支持上层那么多的应用程序。其次,很多驱动类程序是比较底层的,如网卡驱动,应用层的各种网络应用最终都需要调用到一致的网卡驱动代码,网卡驱动之上的协议层也是如此,这些代码即复杂且可以复用,为什么不交给单一程序(即内核)管理。。。慢慢地,就演变成了一部分程序(复杂的,高度复用的)和另一部分程序(更上层的解决任务的)分开来,对这两部分程序给予不同的权限(R0,R3),对于前者,可以完全控制硬件,不允许出错。对于后者,允许出错,相应的,只给部分权限,这种权限的划分落地就是不同地址空间的划分

2.主要是通过内核提供的接口来影响内核,如果内核不提供,应用层无法影响内核(原因参考1)
这些接口包括系统调用、文件接口(/proc 等)、内核模块。。。这些接口可以通过内核编译选项开启或关闭,比如可以关闭内核模块接口,这样应用层是无法插入模块的

3.linux上权限系统比windows严格,所以如果拿不到root做的事情有限,如果要拿到root,可能要用到漏洞等等。。,这一步比较难吧

4. 如果拿到root,同时该kernel编译时开放了内核模块接口,那么,由于你可以插入代码到内核,你当然可以控制整个内核,前提是对内核代码比较熟,不要一插入模块就崩~ , 另外,linux内核模块有校验机制,如果是预先编译好的攻击模块,还不得不先面对绕过校验这一关
2014-12-30 16:34
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
1 用户空间和内核空间的分离的确是出于安全考虑
2 系统调用和用户空间切换到内核空间的唯一途径
3 攻击内核的方法,其实是是看漏洞的特点,一般有数组越界, 任意地址写, 堆溢出,栈溢出.还有一些是逻辑错误.
4 root权限是最大的权限,拥有了root权限可以做任何事.
2015-1-8 17:59
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
补充一点, 有的情况下即便拿到root权限也可能是假root, 是做不了什么的, 也就是一个普通用户. 在3.8版本后加入namespace特性. http://dockone.io/article/530   http://coolshell.cn/articles/17010.html. 还有KCON2015 WZT的演讲
2015-8-25 11:03
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
两年了,可能你早就明白了。我简单说一下,linux的内核状态和用户状态是由硬件的实模式和保护模式支持的,所有用户都是在保护模式下工作的,在kernel初始化完成第一个"手工"进程后,这个进程就进入了保护模式,后面所有进程都是这个进程的子孙。所有进程进入内核态都必须通过系统调用或中断(中断也是由内核自己处理),硬件为kernel的这个设计提供基础(中断和门陷)。
内核态或用户态这个问题和用户的权限是两个层面的东西.一个是内存层的是运行时的状态,一个可以看作是硬盘或者叫外部存储层的东西.root用户可以改变、删除、运行任何文件(包括内核自身的文件)可以关闭系统,但不能用一个进程直接随意地去访问内核的内存空间(加载自己内核模块是可以工作在内核模式的,你也可以自己定义系统调用等等)。
2016-5-18 15:19
0
雪    币: 262
活跃值: (55)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
1: 的确是从安全考虑的内核空间和用户空间进行分离.
2: 用户态可以通过系统系统调用来访问内核态
3: 内核存在的很多和用户态代码一样的问题比如缓冲区溢出,格式化字符串,条件竞争等.
4:linux安全模型比较单纯,的确变成了root就可以想干嘛干嘛,不过不能超越系统的能力范畴.
2016-5-18 16:32
0
游客
登录 | 注册 方可回帖
返回
//