• / 17
  • 下载费用:5 金币  

22Bash漏洞分析.pptx

关 键 词:
22 BASH 漏洞 分析
资源描述:
Bash漏洞分析,郭庆阳 2015140140吕阳 2015140141罗斌杰 2015140144聂凡杰 2015140148,目录,,,Bash漏洞分析,,,,,1,2,3,4,什么是Bash?,Bash漏洞的起源,Bash漏洞原理分析,漏洞的测试及修复思路,,,,,,,,,1,,,,什么是Bash?,bash是Unix系统上的shell也就是说,它是一个能让你在Unix以及Linux系统上执行命令的一个解释器,它通常是通过SSH或者telnet来连接的。它也可以作为WEB服务器上的CGI脚本的一个解析器,正如我们平时在Apache里面所看到的那样。从上个世纪80年代开始它就已经存在了,它是从早期的SHELL实现中演化而来的(名字是从Bourne shell衍生出来的),并且非常流行。Unix家族里还有许多别的SHELL,bash的特别之处在于它是Linux以及Mac OS X系统的默认SHELL,而它们都是非常流行的操作系统。这个漏洞的风险之所以这么大,这也是一个非常主要的因素——bash无处不在——它被称作是”任何Linux系统上安装量最大的工具之一”。,,,,,,,,,,,,,,,2,Bash漏洞的起源,,,,,,这个漏洞的起因源自于Bash(Bourne Again SHell)的ENV指令http://ss64.com/bash/env.htmlenv: Display, set, or remove environment variables, Run a command in a modified environment.Syntax env [OPTION]... [NAME=VALUE]... [COMMAND [ARGS]...]1. Options 1) -u NAME 2) --unset=NAME Remove variable NAME from the environment, if it was in the environment. 3) -i --ignore-environment Start with an empty environment, ignoring the inherited environment.2. COMMAND [ARGS]需要执行的指令,,,Bash漏洞的起源,Bash漏洞的起源,,对这个指令,有两个关键点要注意ENV指令允许临时改变环境变量,即指定本次指令执行的环境变量,这从一定程度上给了黑客进行PATH Hajaking的可能性 ENV指令还允许在设置环境变量后进行指令执行,从某种程度上来说,ENV相当于一个指令执行的指令,同时还附带有临时设置环境变量的功能,,,3,,,漏洞原理的分析,漏洞原理的分析,1,2,3,4,以bash-3.2版本的源代码为例进行分析\bash-3.2\builtins\evalstring.c没有对传入的command进行正确的边界检查,引入了代码注入的可能性,虽然ENV是一个指令执行的指令,但是这并不是这次CVE漏洞的产生原因,原因在于ENV的指令执行走的是正常的BASH指令解析、执行流程,而在一个采取了安全配置的服务器上,对敏感指令的执行都是进行用户级别的权限限制的,所以,ENV本身并不是任意指令执行。真正导致命令任意执行的原因是"Code Injection",即代码注入,从这个角度来看,这种漏洞应该采用防御SQL注入的思路来进行,对漏洞原理进行一下总结1. bash(本地、ssh、cgi)允许使用ENV进行path临时设置 2. 黑客通过自定义函数,并导出到变量中3. BASH对环境变量的设置是通过"代码执行(EVAl)"完成的,即把ENV的参数当成code来执行,这在正常情况下是没有问题的4. 问题的关键是BASH没有对传入的参数进行正确的边界检查,导致数据和代码的混杂,产生了和PHP EVAL Code InJection类似的漏洞env x='() { :;}; echo vulnerable'5. 代码注入的关键点在; echo vulnerable,\bash-3.2\variables.c这个文件负责对bash中的变量进行解析,我们在ENV中进行的临时环境变量设置,将在这个文件中完成initialize_shell_variables对环境变量中的代码进行了执行,由于它错误的信任的外部发送的数据,形成了和SQL注入类似的场景,这句代码和PHP中的eval是类似的,黑客只要满足2个条件 1. 控制发送的参数,并在其中拼接payload 2. 黑客发送的包含payload的参数会被无条件的执行,而执行方不进行任何的边界检查,,,4,,,漏洞的测试及修复思路,,,1,攻击的场景,,,2,,,3,攻击发动向量,漏洞的测试及修复思路,漏洞的测试及修复思路,,,1,攻击的场景,漏洞的测试及修复思路,Bash的环境变量解析存在的漏洞,但是正如Redhat官网的issue所说的,bash的这个漏洞只能算是本机任意指令执行漏洞,还不能算是远程代码执行,要达到远程代码执行,还需要其他方式的配合,我们来梳理一下思路,要发动这个攻击,需要满足以下几个条件1. 必须存在对BASH的调用:因为只有Bash存在这个环境变量解析漏洞 1) 可以是本地交互的SHELL(就是poc的代码所证实的场景) 2) WEB接口对Bash的调用接口(例如 Bash CGI 即xxx.sh)2. 我们要能够控制Bash执行的环境变量,因为这个代码的注入点是在Bash的环境变量的设置中的官方给出的ENV的那个poc,是了更好地解释这个原理3. 接口会将我们传入的包含payload code参数带入环境变量中4. 接口要能够将我们注入的代码执行结果返回回来,这才能完成一个完整的代码注入流程,,,2,攻击发动向量,漏洞的测试及修复思路,根据这些先决条件,我们可以得到一些攻击向量,我们这个时候发现,Bash CGI(xxx.sh)正好满足以上的这几个条件1. Linuc WEB Server提供的CGIL接口允许我们通过远程HTTP方式进行Bash调用2. 客户端可以任意修改发送的HTTP头部的字段参数3. Bash CGI会将客户端发送的HTTP数据包的HTTP头部的字段作为ENV的参数传入环境变量的设置函数中,也就是说,Bash CGI默认将HTTP头部参数作为环境变量设置源4. 当我们的Code Inject Payload被传入Bash的环境设置函数之后,注入的代码被成功解析执行,代码执行的结继续以"环境变量"的形式保存在环境变量中5. Bash CGI会返回的HTTP数据包中会将环境变量一并发送回客户端//整个流程构成了一次完整的代码注入攻击,,,2,攻击发动向量,漏洞的测试及修复思路,,,3,漏洞的测试及修复思路,手工测试方法poc: env x='() { :;}; echo vulnerable' bash -c "echo this is a test"expected result: vulnerablethis is a test//如果出现这个结果,则说明本机的bash存在漏洞,,,3,漏洞的测试及修复思路,漏洞的测试及修复思路,测试思路:1) webserver常常将Referer、UserAgent、header等参数作为环境变量的设置源 2) 服务器提供了CGI脚本,当 CGI script被webserver执行的时候,CGI Script会去调用Bash黑客可以通过开启了CGI的httpd服务器进行远程代码执行2. Secure Shell (SSH)对于git、rsync这类远程shell来说,常常会对用户可以执行的指令进行严格限制,但是这个BASH解析漏洞提供了一个bypass的向量3. dhclient动态主机配置协议客户端(dhclient的)被用来通过DHCP自动获取网络配置信息。该客户端使用不同的环境变量和运行bash来配置网络接口。连接到一个恶意的DHCP服务器可能允许攻击者在客户机上运行任意代码。黑客通过在域中的DHCP服务器中对DHCP的回送包进行特定的修改,可以达到污染dhcpclient的环境变量参数的目的,从而进行远程代码执行,,,3,漏洞的测试及修复思路,漏洞的测试及修复思路,修复思路:从攻击方法上来看,这种漏洞属于边界检查缺失导致的代码注入漏洞,所以我们的修复思路也应该从这两个方面入手1. 进行正确的边界检查,严格区分函数定义和代码注入2. 对输入参数进行参数化防御,不允许除了允许范围之外的参数传入,THANK,YOU!,
展开阅读全文
1
  金牌文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:22Bash漏洞分析.pptx
链接地址:http://www.gold-doc.com/p-256765.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们
copyright@ 2014-2018 金牌文库网站版权所有
经营许可证编号:浙ICP备15046084号-3
收起
展开