来自 数据 2021-06-10 14:24 的文章

ddos防攻击_云防护是什么意思网站打不开_超高防御

ddos防攻击_云防护是什么意思网站打不开_超高防御

介绍最近,我们遇到了一类漏洞,这类漏洞是在一段时间前发现的,但并不十分为人所知,尽管它的发现和利用的潜在影响是至关重要的。在(重新)发现这类bug的过程中,我们设法在一个基于Linux的设备上获得了一个特权shell,它只提供了一个受限的shell。起初,似乎不可能从shell中跳出并执行任意命令。shell没有执行任何明显错误的操作,ddoscc攻击防御,过滤输入字符的黑名单似乎正确地验证了受限的shell输入。在本文中,我们将展示如何克服这些明显的限制。本文仅介绍Bash和ksh。一些shell可以更好地防止这些漏洞;其他shell可能容易受到相同类型的bug的影响。算术展开与评价那么什么是算术展开?来自GNU的Bash手册:"算术扩展允许算术表达式的求值和结果的替换。"[0]简单地说,这意味着我们可以使用算术表达式(加法、减法等),并且可以通过shell轻松解决。表达式中的元素必须是数值的、已知的算术函数或变量。以下是易受攻击的shell脚本:算术.sh:#!/垃圾桶/垃圾桶LOCALSCOPE="你好"echo$变量if((变量==0))然后回音"真"其他的回音"假"金融机构如果[[$LOCALSCOPE!="你好"]]然后回声"击中"金融机构身份证件它拥有我们所需要的一切,并且可以通过许多不同的方式加以利用,尽管它一开始并不这么看。它过于简单化;攻击者控制变量环境变量,这可能是许多不同设置(用户输入到CGI脚本、传递的环境变量、参数等)的结果。这个脚本非常简单;它打印变量(这有助于我们调试并且不会出错),然后将输入与0进行比较,根据语句的真值打印TRUE或FALSE,然后检查LOCALSCOPE变量的值,然后从路径执行id二进制文件。就这么简单。我们强烈建议在这一点上暂停,并尝试使用脚本:变量=任何值/算术.sh显然,通常的命令执行技术不起作用,在这种情况下,我们可以使用$()```;|或其他重定向,但默认情况下不会计算这些重定向。信息泄露当我们意识到错误出现在错误的输入结果中时,我们的乐趣就开始了。如果使用特殊格式或意外字符,shell将显示为数不多的错误消息之一,动态ip防御ddos,例如:#变量=":atest"/算术.sh:a测试/算术.sh:第3行:(((::atest==0:语法错误:需要操作数(错误标记为":atest==0")false UID=0(根)gid=0(根)组=0(根)用户输入将反映在错误消息中。如果我们能挤出一些关于系统的信息,这将是非常有用的。如果发生这种情况,求值方法将递归,直到所有符号都被解析,因此我们可以使用其他环境变量来打印其值,例如PATH:#VARIABLE='PATH'/算术.shPATH./算术.sh:第3行:(((:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:语法错误:应输入操作数(错误标记为"/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin")false UID=0(root)gid=0(root)groups=0(root)显然,只有当错误显示给攻击者时,这才是一个安全漏洞。重写变量算术评估还有一个有趣的特性。它可以给变量赋值。有了它,我们可以覆盖或分配新的数值给不同范围的变量。LOCALSCOPE变量在脚本中应该是坚如磐石的,没有任何行可以修改该变量,因此相应的语句永远不会为true,hit永远不会被打印出来。还是会呢?#变量="LOCALSCOPE=1337"/算术。shLOCALSCOPE=1337FALSEhituid=0(根)gid=0(根)组=0(根)如果我们想修改多个变量,也可以这样做,我们只需要使用逗号:变量="LOCALSCOPE1=1337,LOCALSCOPE2=1"/算术.sh回想一下,我们正在滥用shell的算术求值特性,那么为什么不花哨地使用算术函数呢?变量="LOCALSCOPE1=cos(LOCALSCOPE2)"/算术.sh路径覆盖->命令执行基于前面提到的技术,我们已经到达了条件命令执行的阶段。如果:在算术之后,源代码中至少有一个外部可执行文件被引用评估。我们可以在运行脚本的目录(PWD)中创建一个目录,并使用引用的可执行文件的名称创建一个文件#mkdir 0回声"!/bin/sh">0/id#echo"echo pwned">>0/id#chmod 777 0/id#VARIABLE='PATH=0'/算术.shPATH=0真实到底发生了什么事?如前所述,我们可以用数值覆盖任何变量。我们选择了值0,因此从算术求值的行开始,路径变量将更改为0,直到脚本退出。将在计算后执行的任何外部命令或可执行文件(具有相对名称)将在路径中查找,因此在目录0中查找。由于我们将名为id的小邪恶脚本放在那里,因此将调用它而不是默认的/usr/bin/id。这很好,但是如果不带条件地执行任何命令,不是很好吗?无条件命令执行我们发现最大的意外是无条件处决。算术表达式根本不应该执行命令替换;它应该只扩展和计算语句。但是,如果在表达式中使用数组,并且它的索引是一个命令,那么shell将用它的结果替换该命令,因此该命令将被执行。#VARIABLE='arr[$(uname-n-s-m-o)]'/算术.sharr[$(uname-n-s-m-o)]/算术.sh:第4行:Linux kali x86_64 GNU/Linux:表达式语法错误(错误标记为"kali x86_64 GNU/Linux")uid=0(root)gid=0(root)groups=0(root)其他含义Stéphane Chazelas(发现Shellshock的研究人员)也发现了这种漏洞,并编制了一份简单的易受攻击案例列表。必须指出的是,不仅双括号易受攻击。在某些情况下,其他表达式也将计算命令。欲了解更多信息和脆弱案例列表,请阅读[1]。建议首先,建议引用所有变量时引用它。这在大多数情况下可以防止重新解释,也可以防止在使用空格或IFS中的任何内容时进行分词。不幸的是,在算术扩展的情况下,ddos攻击防御专用硬件,引用并没有帮助,所以程序员应该确保所有的变量和输入都来自可信的来源。如果不是这样,则应仔细检查和清理输入,否则可能会出现所描述的漏洞。结论虽然源代码乍看起来很可靠,但事实证明它是易受攻击的,可以通过多种方式加以利用。除了最后一种技术外,所有的技术在设计上都是这样工作的。关于无条件执行命令,意见似乎不同…根据我们在网上找到的帖子和邮件,我们在2014年5月首次提到了该漏洞,ddos攻击防御权衡,并在bug bash邮件列表中提出了一个修复方案,并讨论了是否应该修复该漏洞。尽管有人认为这是一个安全漏洞,cc攻击后怎么防御,应该加以纠正,但其他人并不赞同这一观点[2]。2014年12月晚些时候,Stéphane Chazelas也在Stack Exchange上写了一个更有趣的答案,可以在这里找到:[3]。作者:Balazs Bucsay[@xoreipeip]https://twitter.com/xoreipeip[0]https://www.gnu.org/software/bash/manual/html_node/athertic-Expansion.html[1]https://unix.stackexchange.com/questions/172103/security-implements-of-using-unsatized-data-in-shell-algorithm-evaluation[2]https://lists.defectivebydesign.org/archive/html/bug-bash/2014-06/msg0006.html[3]https://unix.stackexchange.com/questions/171346/security-implements-of-forgoting-to-quote-a-variable-in-bash-posix-shell?stw=2分享这个:TwitterRedTitleLinkedIn Facebook是这样的:就像加载。。。