首页 > 网络安全频道 > 系统安全 > 正文
Linux ASLR漏洞:攻击者可无限禁用ASLR(CVE-2016-3672)
2016-04-20     我来说两句       作者:黑帽网
   我要投稿


近日,安全人员修复了一个Linux ASLR中比较古老的,拥有x86设备上的32位应用程序使用权限的任何用户,通过将RLIMIT_STACK资源设置为“无限制”可以禁用ASLR。
该漏洞CVE编号为CVE-2016-3672,CNNVD编号为CNNVD-201604-092。
2cto小科普:
aslr)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术。
检测
用户可以通过执行以下步骤检查其是否受到影响:
1、创建显示内存映射的空项目:
 

#includeint 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是否工作:
 

$ for i in `seq 1 10`; do ./show_maps | grep "r-xp.*libc"; donef75c4000-f7769000 r-xp 00000000 08:01 784726     /lib32/libc-2.19.sof75db000-f7780000 r-xp 00000000 08:01 784726     /lib32/libc-2.19.sof7557000-f76fc000 r-xp 00000000 08:01 784726     /lib32/libc-2.19.sof7595000-f773a000 r-xp 00000000 08:01 784726     /lib32/libc-2.19.sof7574000-f7719000 r-xp 00000000 08:01 784726     /lib32/libc-2.19.sof75af000-f7754000 r-xp 00000000 08:01 784726     /lib32/libc-2.19.sof7530000-f76d5000 r-xp 00000000 08:01 784726     /lib32/libc-2.19.sof7529000-f76ce000 r-xp 00000000 08:01 784726     /lib32/libc-2.19.sof75c2000-f7767000 r-xp 00000000 08:01 784726     /lib32/libc-2.19.sof75fe000-f77a3000 r-xp 00000000 08:01 784726     /lib32/libc-2.19.so


如果ibc-2.19.so库文件映射到随机位置,说明ASLR正常工作。
那么将RLIMIT_STACK栈设置为“无限制”后运行相同的检测:
 

$ ulimit -a | grep stackstack size              (kbytes, -s) 8192$ ulimit -s unlimitedstack size              (kbytes, -s) unlimited$ for i in `seq 1 10`; do ./show_maps | grep "r-xp.*libc"; done5559a000-5573f000 r-xp 00000000 08:01 784726      /lib32/libc-2.19.so5559a000-5573f000 r-xp 00000000 08:01 784726      /lib32/libc-2.19.so5559a000-5573f000 r-xp 00000000 08:01 784726      /lib32/libc-2.19.so5559a000-5573f000 r-xp 00000000 08:01 784726      /lib32/libc-2.19.so5559a000-5573f000 r-xp 00000000 08:01 784726      /lib32/libc-2.19.so5559a000-5573f000 r-xp 00000000 08:01 784726      /lib32/libc-2.19.so5559a000-5573f000 r-xp 00000000 08:01 784726      /lib32/libc-2.19.so5559a000-5573f000 r-xp 00000000 08:01 784726      /lib32/libc-2.19.so5559a000-5573f000 r-xp 00000000 08:01 784726      /lib32/libc-2.19.so5559a000-5573f000 r-xp 00000000 08:01 784726      /lib32/libc-2.19.so


libc-2.19.so库文件映射到了相同的位置,说明ASLR被禁用。
这是禁用ASLR的一种老方法,但不幸的是,当前的系统中仍然存在该问题。
漏洞简介
该漏洞由于当栈大小设置为“无限制”时,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)的使用率比较高,受影响的系统和用户仍然十分广泛。

修复
该漏洞的补丁如下:
diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.cindex 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版本中修复该问题。
 

 

 

点击收藏到自己的收藏夹!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:网神旧版VPN系统GETSHELL(同时影响网御神州、天融信、西安网赢、卫士通、吉大正元、美国凹凸、德国 ANIX等多家VPN厂商设备)
下一篇:MIUI ROM存在“篡权”漏洞可任意获取系统权限和短信、密码等重要数据
相关文章
图文推荐
排行
热门
网站
工具
无线
关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 中国黑帽网--致力于做最好的网络安全技术学习网站 。