现在的位置: 首页 > 综合 > 正文

注入攻击(Injection Flaws)

2013年10月08日 ⁄ 综合 ⁄ 共 2403字 ⁄ 字号 评论关闭
 

注入攻击Injection Flaws)
From OWASP
http://www.owasp.org/index.php/Injection_Flaws
Contents
  • 1 简介
  • 2 受影响的环境
  • 3 示例
  • 4 找到你系统的漏洞
  • 5 保护你的系统

简介

注入攻击是攻击者通过Web应用传播恶意的代码到其他的系统上。这些攻击包括系统调用(通过shell命令调用外部程序)和后台数据库调用(通过SQL注入)一些设计上有缺陷的Web应用中的Perl,python和其他语言写的脚本(script)可能被恶意代码注入和执行。任何使用解释执行的Web应用都有被攻击的危险。 Any time a web application uses an interpreter of any type there is a danger of an injection attack.
很多Web应用使用操作系统的特性和外部程序来完成他们的某些功能。发送邮件或许是最常用的外部程序,很多其他程序也一同被使用。当一个Web应用通过Http请求把外部请求的信息传递给应用后台时,必须非常小心。否则攻击这可以把某些特殊字符、恶意代码或者命令改变器注入这些信息中,你的Web应用可能会把这些攻击代码传递给后台执行。
SQL注入是一种广泛使用的危险度极高的注入攻击方式。要使用这种攻击方式,攻击者必须找到Web应用传递给数据库的参数。通过把恶意的SQL命令嵌入参数中,攻击者可以让Web应用把这些查询发送到数据库中。发现这些攻击和系统漏洞并不难。但是攻击产生的后果却相当致命,攻击者可以得到,破坏或者摧毁你所有数据库的内容。
注入攻击的系统漏洞可以很容易的被发现和攻击,但是他们在系统中也是相当的隐蔽。攻击的结果也会很严重,从小的错误到危及整个系统,甚至是系统被破坏。在任何情况下,外部调用的使用是非常广泛的,所以Web应用的注入漏洞必须高度重视。
影响的系统
每个Web应用系统都允许外部命令,比如系统调用、shell调用和SQL请求。注入攻击依赖于这些系统如何使用这些调用和系统的哪些部分使用这些调用。但是如果Web应用没有很好的设计和编码,所有的外部调用(external calls)都会受到攻击。
案例
·         Examples: 一个恶意的参数修改可以使系统访问其他用户的文件(比如文件请求加上文件追溯符“../” characters as part of a filename request). 另外一些命令也可以附加到参数中使得脚本运行 (如., “; rm –r *”). SQL查询可以通过在SQL语句中增加一些限制条件,比如”where”子句中增加“OR 1=1”)来获得对数据请求的访问的权限.
·         OWASP 的创建安全的Web应用和Web服务指南。第八章: 数据验证 http://www.owasp.org/documentation/guide.html
·         如何创建HTTP验证引擎(通过Stinger验证J2EE) http://www.owasp.org/columns/jeffwilliams/jeffwilliams2
·         Have Your Cake and Eat it Too (.NET validation) http://www.owasp.org/columns/jpoteet/jpoteet2
·         SQL注入白皮书: http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf
如何找到你系统的漏洞
最好的方法是搜索你所有的源代码,找到使用外部资源的命令(比如system,exec,fork,Runtime.exec,SQL queries,或者在你系统里面使用解释器interpreters的任何创建请求的的语法)注意很多语言通过多种方式来运行外部命令。开发者应检查他们的代码,找到所有的可以通过HTTP请求注入的漏洞。检查过代码之后,注意采用如下的步骤来保护你的应用。
保护你的系统
最简单的防护措施是尽可能避免执行外部解释器。对于脚本命令和系统调用,有很多特点的类库来执行他们。使用这些类库但不引入系统脚本解释器,通过这种方式可以避免脚本命令导致的大量问题。
对于你仍然要是用的系统命令,比如对后台数据库的访问,你必须仔细检查确保其中不包含任何恶意内容。你也可以结构化你的请求代码使得参数传入的都是数据而不是可执行的语句。使用存储过程和Prepared statement会提供很好的保护,确保提供的输入都作为数据. 这些方法会减少,但不是完全减少外部调用的风险。你仍然必须验证这些输入来确保它满足安全的要求。
另外一个提供对命令注入很好的预防方法是通过系统权限配置,只允许Web应用使用某些特定的命令. 因此你不能以root用户来启动Web服务器或者以DBADMIN用户来访问数据库。否则攻击者可以利用这些权限很高的用户攻击系统。某些J2EE系统可以允许使用JAVA沙箱(java sand box),这种方式也可以防止某些系统命令的执行。
如果一个外部命令必须执行,任何插入到命令的用户信息都必须强制检查。要提供处理错误的机制,比如处理请求时的超时处理和阻塞处理。所有的输出,返回代码错误代码都必须检查来确保所有的处理过程没有受到攻击。这样至少可以让你检查是否系统运行中是否出现了问题。否则攻击永远不能被检测到。
“OWASP Filters project“ 是一个可重用的防止注入攻击的组件。OWASP 发布的CodeSeeker是一个应用级别的防火墙。
 
如果您需要这样的安全服务,可以找我联系li.woohoo@gmail.com

 

抱歉!评论已关闭.