Linux ASLR漏洞:攻击者可无限禁用ASLR

  

  近日,安全人员修复了一个Linux ASLR中比较古老的漏洞,拥有x86设备上的32位应用程序使用权限的任何用户,通过将RLIMIT_STACK资源设置为“无限制”可以禁用ASLR。

  该漏洞CVE编号为CVE-2016-3672,CNNVD编号为CNNVD-201604-092。

  2cto小科普:

  aslr)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术。

  检测

  用户可以通过执行以下步骤检查其系统是否受到影响:

  1、创建显示内存映射的空项目:

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  #include

  int main(int argc, const char *argv[])

  {

  char cmd[256];

  sprintf(cmd, "cat /proc/%d/maps", getpid());

  system(cmd);

  return 0;

  }

  2、编译该程序:

  $ gcc show_maps.c -o show_maps # In a i386 machine

  $ gcc show_maps.c -o show_maps -m32 # In a 64-bit machine

  3、运行该程序检查ASLR是否工作:

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  $ for i in `seq 1 10`; do ./show_maps | grep "r-xp.*libc"; done

  f75c4000-f7769000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  f75db000-f7780000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  f7557000-f76fc000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  f7595000-f773a000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  f7574000-f7719000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  f75af000-f7754000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  f7530000-f76d5000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  f7529000-f76ce000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  f75c2000-f7767000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  f75fe000-f77a3000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  如果ibc-2.19.so库文件映射到随机位置,说明ASLR正常工作。

  那么将RLIMIT_STACK栈设置为“无限制”后运行相同的检测:

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  $ ulimit -a | grep stack

  stack size (kbytes, -s) 8192

  $ ulimit -s unlimited

  stack size (kbytes, -s) unlimited

  $ for i in `seq 1 10`; do ./show_maps | grep "r-xp.*libc"; done

  5559a000-5573f000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  5559a000-5573f000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  5559a000-5573f000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  5559a000-5573f000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  5559a000-5573f000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  5559a000-5573f000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  5559a000-5573f000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  5559a000-5573f000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  5559a000-5573f000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  5559a000-5573f000 r-xp 00000000 08:01 784726 /lib32/libc-2.19.so

  libc-2.19.so库文件映射到了相同的位置,说明ASLR被禁用。

  这是禁用ASLR的一种老方法,但不幸的是,当前的Linux系统中仍然存在该问题。

  漏洞简介

  该漏洞由于当栈大小设置为“无限制”时,ASLR Linux随机化所有的mmap基址。也就是说,当在i386和X86_64上使用legacy模式模拟X86_32时,程序只随机化栈和可执行文件,忽略了其他的mmapped文件(库文件,vDSO等),甚至在有些Linux版本中,可执行文件都不是随机化的。

  mmap_legacy_base()函数用来计算当栈大小设置为“无限制”时的库文件位置:

  static unsigned long mmap_legacy_base(void)

  {

  if (mmap_is_ia32())

  return TASK_UNMAPPED_BASE;

  else

  return TASK_UNMAPPED_BASE + mmap_rnd();

  }

  当系统运行在本地32位系统(i386)或32位模拟系统(x86_32)中时,该函数不会添加任何随机偏移。

  漏洞利用

  攻击者只需要将栈大小设置为“无限制”,然后运行一个32位应用程序,这种方法主要用于运行(攻击)提权应用,如setuid或setgid。

  影响

  拥有x86系统上32位应用运行权限的攻击者可以利用该漏洞禁用任意应用的ASLR,包括setuid和setgid程序。需要注意的是其实它本身并不算是一个漏洞,而是一种禁用ASLR的方式,攻击者可以将其与别的漏洞结合使用。由于i386(Intel 80386)的使用率比较高,受影响的系统和用户仍然十分广泛。

  修复

  该漏洞的补丁如下:

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  18

  19

  20

  21

  22

  23

  24

  25

  26

  27

  28

  29

  30

  31

  32

  diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c

  index 96bd1e2..389939f 100644

  --- a/arch/x86/mm/mmap.c

  +++ b/arch/x86/mm/mmap.c

  @@ -94,18 +94,6 @@ static unsigned long mmap_base(unsigned long rnd)

  }

  /*

  - * Bottom-up (legacy) layout on X86_32 did not support randomization, X86_64

  - * does, but not when emulating X86_32

  - */

  -static unsigned long mmap_legacy_base(unsigned long rnd)

  -{

  - if (mmap_is_ia32())

  - return TASK_UNMAPPED_BASE;

  - else

  - return TASK_UNMAPPED_BASE + rnd;

  -}

  -

  -/*

  * This function, called very early during the creation of a new

  * process VM image, sets up which VM layout function to use:

  */

  @@ -116,7 +104,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm)

  if (current->flags & PF_RANDOMIZE)

  random_factor = arch_mmap_rnd();

  - mm->mmap_legacy_base = mmap_legacy_base(random_factor);

  + mm->mmap_legacy_base = TASK_UNMAPPED_BASE + random_factor;

  if (mmap_is_legacy()) {

  mm->mmap_base = mm->mmap_legacy_base;

  该补丁启用了legacy模式下的i386和X86_32上的库文件、vDSO和mmap请求的随机化,并将在下一个Linux版本中修复该问题

  http://www.biyinjishi.com/products/a70-b7010/

  http://www.biyinjishi.com/products/a70-b7015/

  http://www.biyinjishi.com/products/a70-b7020/

  http://www.biyinjishi.com/products/a70-b7050/

  http://www.biyinjishi.com/products/a70-b7060/

  http://www.biyinjishi.com/products/a70-b7099/

  http://www.biyinjishi.com/products/a99-b9920/

  http://www.biyinjishi.com/products/a99-b9925/

  http://www.biyinjishi.com/products/a99-b9960/

  http://www.biyinjishi.com/products/a99-b9999/

时间: 2024-10-05 12:11:59

Linux ASLR漏洞:攻击者可无限禁用ASLR的相关文章

linux gcc++漏洞:普通用户获得root权限

linux gcc++漏洞:普通用户获得root权限 2012-02-06 10:22:38|  分类: linux安全|举报|字号 订阅   经我测试在RHEL5 / CentOS5 / FC13都成功了. 首先介绍下一下具体步骤中涉及到的2个频繁的出现的词语: taviso:作者 Tavis Ormandy 的简称,Google信息安全工程师 个人微博:http://my.opera.com/taviso/blog/ http://twitter.com/taviso exploit:自己创

Linux高危漏洞曝光:Linux 内核 ipv4/udp.c 远程恣意代码执行

漏洞描述 Linux kernel是美国Linux基金会发布的操作体系Linux所使用的内核.Linux kernel 4.5之前的版别中的udp.c文件存在安全缝隙,Linux内核中的udp.c答应长途攻击者经过UDP流量履行恣意代码,这些流量会在履行具有MSG_PEEK象征的recv体系调用时触发不安全的第2次校验和核算,长途攻击者可精心构造数据履行恣意代码,进一步致使本地提权,归于高危缝隙.但由于现实状况中,根据UDP协议的效劳时MSG_PEEK象征在实际使用的状况较少,受该长途指令履行缝

Linux 幽灵漏洞CVE 2015-0235 (glibc修补方案)

漏洞的危害: [CVE 2015-0235: GNU glibc gethostbyname 缓冲区溢出漏洞 ]全面爆发,该漏洞的产生是Qualys公司在进行内部代码审核时,发现了一个在GNU C库(glibc)中存在的__nss_hostname_digits_dots函数导致的缓冲区溢出漏洞.这个bug可以通过gethostbyname *()函数来触发,本地和远程均可行.该漏洞(幽灵漏洞)造成了远程代码执行,攻击者可以利用此漏洞获取系统的完全控制权. 检查系统是否存储幽灵漏洞: 将下面的代

Kali linux安装漏洞扫描工具Nessus指南

引子:Nessus是著名信息安全服务公司tenable推出的一款漏洞扫描与分析软件,号称是"世界上最流行的漏洞扫描程序,全世界超过75,000个组织在使用它".尽管这个扫描程序可以免费下载得到,但是要从Tenable更新到所有最新的威胁信息,每年的直接订购费用是$1,200,也就是每个月100美刀.在Linux, FreeBSD, Solaris, Mac OS X和Windows下都可以使用 Nessus. Nessus目前分为四个版本:Nessus Home.Nessus Prof

微软发布补丁封杀允许Surface RT安装Linux的“漏洞”

关于Linux的学习,请参考书籍<Linux就该这么学> 2012年诞生的Surface RT平板机就产品而言挺悲剧的,基于ARM架构跑Windows RT操作系统,但是不兼容x86环境,导致产品和市场定位混乱,消费者也很迷茫,最终在经历了两代之后就回到了x86平台,Windows RT操作系统也被彻底放弃. 但是,微软对 Surface RT 还是挺关照的,至今都在不断发布安全维护补丁,最新的一个“MS16-094(3172727)”;还悄然修复了一个几乎从未有人知晓的“漏洞”,根据官方说明

Linux Bash 漏洞最终解决方案

距24日报出Bash漏洞以来,Linux 系列相关已于25日给出了相关补丁,可是当天又出现问题,故需要重新打补丁:在机器上执行 yum -y update bash  之后,可通过以下命令来测试是否真正完成了补丁升级,系统处于安全层面: env -i  X='() { (a)=>\' bash -c 'echo date'; cat echo s\ ls 如果你的系统显示 系统时间 , 说明尚未脱离危险期,请升级 bash , 如下图: 如果显示为 date , 那么恭喜你,你的系统已经安全,如

Linux安全漏洞Bash修补方法

Bash安全漏洞故障处理方法 一:漏洞描述 该漏洞源于你调用的bash shell之前创建的特殊的环境变量,这些变量可以包含代码,同时会被bash执行. 二:已确认被成功利用的软件及系统 所有安装gun bash 版本小于或者等于4.3的linux操作系统. 三:漏洞检测方法 [[email protected] ~]# bash -versionGNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)Copyright (C) 2

CTF中做Linux下漏洞利用的一些心得

其实不是很爱搞Linux,但是因为CTF必须要接触一些,漏洞利用方面也是因为CTF基本都是linux的pwn题目. 基本的题目分类,我认为就下面这三种,这也是常见的类型.

Linux Glibc漏洞在线更新

1. 漏洞背景 代码审计公司Qualys的研究人员在glibc库中的__nss_hostname_digits_dots()函数中发现了一个缓冲区溢出的漏洞,这个bug可以经过gethostbyname*()函数被本地或者远程的触发. 1)通过gethostbyname()函数或gethostbyname2()函数,将可能产生一个堆上的缓冲区溢出.经由gethostbyname_r()或gethostbyname2_r(),则会触发调用者提供的缓冲区溢出(理论上说,调用者提供的缓冲区可位于堆,栈