1  Information Leak漏洞风险

从应用层软件,到hypervisor再到kernel代码,都存在Information Leak的风险。下面给出一些示例:

应用层软件:通常是应用敏感数据泄漏,比如从远程客户端获取服务端敏感数据。CVE-2012-0053,Openssl的心脏滴血等。

Hypervisor:主要是向guest泄漏hypervisor数据。CVE-2010-4525.

Kernel代码:泄漏内核地址,空间布局等,如CVE-2013-2147.

这里主要分析内核中的Information Leak漏洞所带来的风险。内核中的Information Leak通常都是用来绕过内核中的保护机制(利用缓解:StackGuard, ASLR),由于本身并不能直接用来形成提权等高风险操作,因此Information Leak漏洞经常被人忽视。

先来看一下这些保护机制。

StackGuard.

StackGuard是一种编译器实现的保护技术,它在栈函数返回地址前插入一个“canary”,当发生溢出“canary”值被破坏,将触发系统的异常处理流程。它的安全性依赖于“canary”的保密,也就是“canary”不能被攻击者预测或取到。

ASLR.

ASLR技术是将进程等的加载地址随机化,它的安全性依赖于加载基地址的不可预测,使exploit不能精确进行地址覆盖。

无论“canary”还是ASLR的基地址,对攻击者来说都是“秘密”。也就是在没有Information Leak漏洞前提下,这些都是用户不可直接获取的。但Information Leak漏洞可以辅助攻击者获取到这些“秘密”,进而绕过内核中的保护机制,成功实现漏洞利用。

2  Information Leak漏洞分类

根据漏洞成因,可以对Information Leak漏洞进行分类。这里同样只关注内核中的情况。

字节对齐带来的内存“空洞”.

为了程序性能,编译器在编译代码时会对变量进行字节对齐,从而引入了一些内存“空洞”。比如结构体使用sizeof计算的大小一般会大于各个成员占用空间大小的和。当这些内核中的内存“空洞”没有被初始化(ABI没有规定函数退栈时要清理这些栈空间),通过copy_to_user等函数拷贝到用户空间时,就会造成Information Leak漏洞,泄漏内核栈中的数据,比如泄漏了一个栈上指针,就可以通过它来计算进程基址(stackjack攻击)。

缺少变量初始化.

内核函数中的本地变量声明后,默认不会被初始化。根据C99描述这块空间的内容是不确定的。实际上栈空间是被各函数复用的,因此未初始化变量的内容很可能保存的是上个函数栈上的数据。

缺少对用户读操作的检查.

当向用户空间拷贝数据时,没有做大小检查或者检查逻辑出现错误,都会导致Information Leak。这类漏洞通常称作“越界读”,它允许用户态读取不应该被访问的内核空间数据。

其它bug导致的infoleaks.

其它的Information Leak原因这里不做研究,但提一下。比如/proc/,/sys/和/boot/文件系统中也提供了内核符号地址,它们已经靠kptr_restrict机制保护,但也可能因为bug而绕过。另外系统缓存,日志等都有可能导致Information Leak.

上面说到Information Leak可能危害保证StackGuard和ASLR可靠基础的“秘密”,下面分析一下内核中的Information Leak确切会影响哪些数据。

Data段.

内核中的data段保存了编译时就确定的全局变量,data段的泄漏可能导致静态内核symbols的泄漏,比如某些用于配置的变量。

内核栈是根据ABI约定,运行时分配的。里面包含了函数返回地址,栈指针和一些其它数据。比如函数调用的参数,StackGuard机制的“canary”等。另外如果没有实现栈地址随机化,还会泄漏栈布局。

内核中的堆是由内存分配器管理,在需要的地方动态分配。这些堆分配器通常使用双向链表来管理这些堆内存。Information Leak会漏洞这些堆存储的内容,还有可能泄漏用于堆管理的结构数据。

3  栈的Information Leak漏洞检测技术

分析目前的漏检测技术,发现通过数据流分析的方法,可以对Information Leak进行建模来进行漏洞检测。在模型里定义3个基本元素:数据源,数据接收方和传播路径。

我们可以对程序进行语义分析来匹配这套模型,从而识别漏洞。语义分析这个工作,选用开源的Coccinelle工具。

1 handler(...) {

2 <...

3 T ID;

4 ... when != memset(&ID, 0, ...)

5 when != ID = ...

6* copy_to_user(EV, &ID, EN)

7 ...>}

1)  数据源:ID变量

2)  数据接收方:用户态指针EV

3)  传播路径:我们想确定ID的内容没有被初始化。因此限定条件,ID在copy_to_user前没有memset()或初始化操作

像其它基于数据流的静态检测技术类似,这种方法也存在缺陷。比如这种Information Leak检测方法假定漏洞发生在一个函数内的,因此这种方法覆盖不了多函数场景。但实际测试中,依然会发现很多Linux内核和三方Driver的Information Leak漏洞。

转载于:https://www.cnblogs.com/gm-201705/p/9864084.html

Linux内核info leak漏洞相关推荐

  1. linux内核竞争条件漏洞,Linux内核竞争条件漏洞-导致远程代码执行

    原标题: Linux内核竞争条件漏洞-导致远程代码执行 导读*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 运行了Linux发行版 ...

  2. str045漏洞提权linux,Linux运维知识之CVE-2016-5195 Dirtycow: Linux内核提权漏洞

    本文主要向大家介Linux运维知识之CVE-2016-5195 Dirtycow: Linux内核提权漏洞绍了,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. CVE-2016- ...

  3. CVE-2022-0847 Linux内核提权漏洞分析

    文章目录 前言 漏洞复现 1.1 文件覆写poc/exp 1.2 覆写/etc/passwd 漏洞分析 2.1 Linux管道机制 2.2 splice系统调用 2.3 漏洞利用流程 总结 前言 20 ...

  4. 最新Linux内核本地DoS漏洞CVE-2017-8064 4.10.12之前版本均受影响 还有一个CVE-2017-7979...

    今天SecurityFocus刚刚更新的消息,Linux内核本地拒绝服务漏洞CVE-2017-8064,Linux kernel 4.10.12之前版本全部受影响.攻击者利用该漏洞可以实施本地拒绝服务 ...

  5. ctf中linux内核态的漏洞挖掘与利用系列1

    说明 该系列文章主要是从ctf比赛入手,针对linux内核上的漏洞分析.挖掘与利用做讲解,本篇文章主要介绍内核漏洞利用所需的前置知识以及准备工作. linux内核态与用户态的区别 以 Intel CP ...

  6. linux内核远程漏洞,CVE-2019-11815:Linux内核竞争条件漏洞导致远程代码执行

    *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 运行了Linux发行版的计算机设备,如果内核版本小于5.0.8的话,将有可能受到一 ...

  7. PWN2OWN 2017 Linux 内核提权漏洞分析

    0.前言 在2017年PWN2OWN大赛中,长亭安全研究实验室(Chaitin Security Research Lab)成功演示了Ubuntu 16.10 Desktop的本地提权.本次攻击主要利 ...

  8. linux 网络瘫痪,Linux内核发现TCP漏洞,小流量也能DoS瘫痪设备

    卡内基梅隆大学的 CERT/CC 发出一个 Linux 内核漏洞警告,称 Linux 4.9 内核或者更高版本中出现一个 TCP 漏洞,该漏洞可使攻击者通过极小流量对系统发动 DoS (Denial- ...

  9. Linux 内核 cgroups 新漏洞可导致攻击者逃逸容器

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 Linux 内核修复了一个高危漏洞 (CVE-2022-0492),它本可被滥用于逃逸容器,在容器主机上执行任意命令. 该缺陷存在于Linux ...

  10. 谷歌发布 Linux 内核提权漏洞奖励计划,综合奖金最高超30万美元

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 谷歌在博客中表示推出Linux 内核漏洞奖励计划,为其三个月(截止到当地时间2022年1月31日).如研究员能在实验环境中通过已修复漏洞实现提权 ...

最新文章

  1. leetcode 729, 731, 732. My Calendar I, II, III | 729. 我的日程安排表 I, II, III(线段树)
  2. datagrid vue_类似 easyui 中 datagrid 使用习惯的 element-ui 数据表格组件(el-datagrid)...
  3. python按照区间长度给定不同数量的随机数
  4. 并发编程大师系列之:CountDownLatch和Join
  5. iOS 面试题整理(带答案)二
  6. 基于Java的在线音乐网站的设计_基于javaweb的音乐网站的设计与实现论文.doc
  7. Java实现国密算法SM2,SM3,SM4,并且实现ECB和CBC模式
  8. 如何设计优秀的满意度调查问卷?
  9. UVa 11137 - Ingenuous Cubrency
  10. 进制转化——2022蓝桥杯(E题)
  11. Python图像处理(Pillow/PIL)入门
  12. 用 Seaborn 做数据可视化(1)——绘图功能(1)可视化统计关系:sns.relplot()
  13. 自学Python 57 多线程开发(七)使用 Connection对象和共享对象 Shared
  14. 马云 996 一文的诡辩与话术:大家是怎么被洗脑还帮人数钱的
  15. qlv转MP4,最新的方法
  16. AAC音频格式分析与解码
  17. 【GIT-3】GIT 的基础教程 分支管理 fixbug分支 Featur 冲突处理 标签管理 操作
  18. ACM-ICPC近年省赛汇总
  19. Heavy Blue Writeup
  20. php重构求圆柱圆锥的体积,将一个体积是120立方厘米的圆柱形木料削成一个最大的圆锥,削去的比剩下的多______立方厘米....

热门文章

  1. python检测按键按下_如何检测按键是否被按下?
  2. cl.大圣归来.ml index.php,《西游记之再世妖王》提档清明节 大圣归来“毒打”万妖...
  3. 全球四大卫星导航系统
  4. 相关搜索 --- 搜索中的推荐
  5. 希尔伯特变换求包络原理
  6. win10换win7系统步骤操作详解
  7. Python爬虫浏览器标识库
  8. 【面试】--【集合容器】
  9. opnet统计量介绍
  10. 2021年年总结:你无法让每个人都满意,甚至是大多数人。