如何斩断SQL注入式攻击的疯狂大魔掌?WEB安全

关键词: 魔掌 注入式 攻击者 攻击

如何斩断SQL注入式攻击的疯狂大魔掌?WEB安全(精选3篇)

篇1:如何斩断SQL注入式攻击的疯狂大魔掌?WEB安全

近年来,SQL注入式攻击一直如幽灵般困扰着众多企业,成为令企业毛骨悚然的梦魇,从八月中旬以来,新一轮的大规模SQL注入式攻击袭掠了大量的网站,连苹果公司的网站也未能幸免。这种猖獗的攻击向业界招示其日渐流行的趋势, 们也越来越喜欢这种可以渗透进入企业的基础架构和数据库资源的攻击方式

关于对付SQL注入攻击的方法已经有许多讨论,但是为什么还是有大量的网站不断地遭受其魔掌呢?安全研究人员认为,现在正是重新梳理最佳方法来对付大规模的SQL注入攻击的时候,从而减轻与注入攻击相关的风险。笔者在此介绍的这些方法未必是革命性的创举,但是又有多少企业真正按照要求全面地实施这些方法呢?

下面,我们将一一谈论这些方法:

使用参数化查询

企业应当制定并强化自行开发软件的安全编码指南,要求开发人员使用参数化查询来构建SQL查询,这样就可以将数据与代码区分开来。

对于多数SQL查询来说,开发人员需要指明某类标准,为此,就需要利用参数化查询,其实就是在运行时可传递参数参数化查询就是在SQL语句中有一个或多个嵌入参数的查询。这种将参数嵌入到SQL语句中的方法与动态构造SQL字符串相比,不易产生错误。下面我们看一个在.NET应用程序中使用参数化查询的例子。假设我们想给张三增加工资500元,可参考如下的代码。这些代码范例演示了参数化查询的使用,并展示了如何使用更新语句:

通过利用SQL的更新命令,你可以更新记录。在上面的例子中,我们作了如下操作:创建并打开一个数据库链接;创建一个代表执行更新语句的数据库命令;使用EDBCommand 的ExecuteNonQuery方法执行插入命令。

每一个参数都用一个EDBParameter对象指明。对于需要在SQL语句中指定的每一个参数来说,你需要创建一个EDBParameter对象,然后将值指派给这个对象。然后,将EDBParameter对象添加到EDBCommand命令的参数集中。

对于多数开发平台来说,应当使用参数化的语句而不是将用户输入嵌入到语句中。在许多情况下,SQL语句是固定的,每一个参数都是一个标量,而不是一个表。用户输入会被指派给一个参数。下面再给出一个使用Java和JDBC API的例子:

PreparedStatement prep = conn.prepareStatement(“SELECT * FROM USERS WHERE USERNAME=? AND PASSWORD=?”);

prep.setString(1, username);

prep.setString(2, password);

prep.executeQuery();

笔者用这些例子只是想告诉开发人员,应当确保在查询数据库之前对输入进行净化,

保障用户输入到网站的内容就是你正要查找的数据类型,所以说,如果你正在寻找一个数字,就要努力保障这种输入一定是一个数字而非字符。

实施过滤和监视工具

在Web应用程序和数据库这个水平上的过滤和监视工具有助于阻止攻击并检测攻击行为,从而减轻暴露在大规模的SQL注入式攻击中的风险。

在应用程序水平上,企业应当通过实施运行时的安全监视来防御SQL注入攻击和生产系统中的漏洞。同样地,Web应用防火墙也有助于企业部署某些基于行为的规则集,可以在发生损害之前阻止攻击。

在数据库水平上,数据库活动监视还可以从后台过滤攻击。数据库的监视活动是对付SQL注入的一种很强大的工具。对于目前所知道的注入攻击而言,应当部署好过滤器,以便向数据库管理员发出警告:正在发生不太安全的问题;还要有一些一般的过滤器,用以查找SQL注入攻击中的典型伎俩,如破坏SQL代码的不规则的数字引用等。

精心编制错误消息

可以利用你的错误消息,以便于将来对付你。所以开发团队和数据库管理员都需要考虑:在用户输入某些出乎意料的“数据”时,应当返回的错误消息。

企业应当配置Web服务器和数据库服务器,使其不输出错误或警告消息。因为攻击者可以利用“盲目SQL注入”等技术了解你的数据库设计细节。

及时打补丁并强化数据

由于没有打补丁或者配置错误,而造成与Web应用程序相关联的数据库遭受攻击,那么与SQL注入攻击相关的风险也会因之增加。

很显然,只要有补丁可用,你就需要给数据库打补丁,并且还要给Web应用程序和Web服务打补丁。

此外,别忘了你的数据库是怎样配置的。你需要禁用不必要的服务和功能,目的是为了强化数据库及其赖以运行的操作系统。

限制数据库的特权

最后,企业需要更好地管理与Web应用程序相关的账户与后台数据库交互方式。许多问题之所以发生,其原因在于数据库管理员全面开放了一些账户,其目的是为了让开发人员更轻松地工作。但是,这些超级用户账户极易遭受攻击,并会极大地增加由SQL注入攻击及其它Web攻击给数据库所造成的风险。

一定要正确地管理所有的账户,使其仅能以最低的特权访问后台的数据库,当然前提是能够完成其工作。你一定要保障这些账户不会拥有对数据库作出更改的权利。

篇2:如何斩断SQL注入式攻击的疯狂大魔掌?WEB安全

Rain Forest Puppy于2000年发布了一篇关于SQL注入的报告, 提出自从SQL数据库开始连接Web应用起, SQL注入就已经存在, 根据网络统计, 每年都有数万个网站遭受SQL注入式攻击。是Web应用程序安全漏洞的发生率最高、危害性最大的漏洞。因此, 有必要了解SQL注入攻击的原理和攻击方法, 采取相应地防范措施, 有效防止SQL注入攻击。

1 SQL注入攻击原理

1.1 SQL注入攻击原理

SQL注入漏洞:应用程序在向后台数据库传递SQL (Structured Query Language) 查询时, 如果为攻击者提供了影响该查询的能力, 则会引发SQL注入。SQL注入攻击是通过漏洞扫描工具扫描Web页面中存在的SQL注入漏洞, 漏洞扫描工具主要有HDSI、Domain等, 通过SQL注入点, 插入或者添加到Web页面输入的参数中, 再将非法参数传递给服务器端的数据库中, 并加以解析和执行, 从而获得数据库服务器最高用户的权限, 对数据库进行任意操作, 控制服务器系统。因为SQL的多样性和构造时使用的方法提供了丰富了编码手段, 因此凡是构造SQL语句的步骤都存在被攻击的风险。

1.2 SQL注入攻击途径

如果开发人员无法彻底理解后台数据库架构或者无法完全意识到所开发代码潜在的安全问题, 那么他们编写的应用容易受到SQL注入攻击。Web应用开发人员在将从Web表单、cookie、输入参数接收到的值传递给SQL查询之前并未主动对其进行过验证, 那么代码将存在SQL注入漏洞。攻击者通过构造动态字符串控制SQL查询的输入, 并将其解析为代码, 攻击者就有能力在后台数据库上执行攻击代码。

1.2.1 通过用户输入攻击

攻击者通过交互表单注入动态构造SQL查询攻击代码, 包含这些攻击代码的请求构造成SQL查询, 进而提交给数据库, 是SQL注入攻击最常见的途径。

1.2.2 通过系统变量攻击

Web应用在使用Http、Header和环境变量时, 这些系统变量未经过处理就写入数据库, 可能导致SQL注入攻击。

1.2.3 通过cookies攻击

Cookies文件存储在客户端, 其中包含着Web应用生成的状态信息, 再次访问这个Web应用时, 会返回存储时的数据信息, 通过植入cookies构建SQL查询进而提交攻击代码。

1.2.4 二阶注入攻击

攻击者向数据库植入可以触发SQL注入的恶意代码, 这些代码不会立刻导致威胁, 这个恶意输入实在系统运行过程中触发的。

1.3 SQL注入攻击方式

SQL语言属性决定对SQL注入的攻击方式有很多种, 是Web应用程序安全漏洞的发生率最高、危害性最大的漏洞。

1.3.1 逻辑错误的查询攻击

攻击者尝试注入语句导致数据库出现逻辑错误、语法错误或者类型转换, 得到相应的错误信息来进行判断, 攻击者可以分析数据库的关系结构、提取数据, 为下一步攻击进行信息搜集和前提条件。

1.3.2 重言式攻击

重言式攻击是指在条件语句中注入代码, 使条件语句结果始终为真, 如果程序未对输入进行验证, 则可以绕过服务器的身份认证, 返回数据表的内容

1.3.3 联合查询攻击

攻击者将构造Union查询语句插入到正常的SQL语句中, 绕过身份验证, 提取数据, 进而获取想要得到的信息。

1.3.4 利用存储过程攻击

由于存储过程一般都是用脚本语言编写, 和普通程序一样都存在风险, 攻击者确定后台数据库的类型后, 就可以像附带查询攻击一样构造命令来执行存储过程, 进而实现远程控制

1.3.5 附带查询攻击

附带查询攻击依赖于数据库支持单个字符串中包含多个查询语句的配置, 该攻击不改变原来查询语句, 只是在查询语句后附带查询攻击语句, 该攻击主要是提取、增加和修改数据库表中的数据, 实现漏洞攻击。

1.3.6 推理注入

推理注入方式有两种基本方式:时间测定注入和SQL盲注。网络管理员对数据库进行了基础的安全设置, 逻辑查询攻击将无法获取响应报错信息。时间测定注入是指在注入语句中加入时间延迟判断语句, 通过时间延迟来判断数值范围。SQl盲注是指通过输入不同参数得到相应结果来判断参数是否可以注入。

1.3.7 编码替换攻击

攻击者为了躲避自动防御系统对单引号、注释符等恶意代码检测, 通过例如ASCII解析的方式来实现编码替换。

2 SQL注入攻击检测技术和防范措施

2.1 SQL注入攻击检测技术

SQL注入攻击检测分为入侵前和入侵后。入侵前检测是指利用SQL注入软件检测工具进行检测;注入攻击后的检测是指对日志文件和数据库表文件进行检测。攻击后检测更具可操作性, SQL注入攻击之后会在系统日志、IIS日志或者数据库中留下日志文件或者产生临时表, 根据这些文件可以判断网站是否发生SQL注入攻击。

2.2 SQL注入攻击防范措施

2.2.1 代码层合理防范措施

如何阻止应用中出现的SQL注入进一步恶化, 对于开发人员或者是安全专家, 都可以通过代码层进行一些合理的操作来降低或者消除SQL注入攻击带来的安全问题。

1) 使用参数化语句:动态SQL是引发SQL注入漏洞的原因, 使用参数语言来安全组装SQL查询。

2) 验证输入:尽可能的使用白名单输入验证, 当无法使用白名单进行验证时也需要使用黑名单进行验证, 确保对用户输入的类型、大小、范围和内容进行验证工作。

3) 编码输入:确保对用户输入的查询代码进行正确编码, 避免单引号等特殊字符查询语句;确保对LIKE中的通配符进行合理编码;对提交数据中敏感问题要进行输入验证和输出编码, 确保数据库接收数据是安全的。

4) 规范化:将输入信息进行编码规划格式后, 再进行输入验证;做到单个字符编码规范化;使用白名单输入验证。

2.2.2 平台层合理防范措施

平台层防御是为了构建一个多层的安全架构, 优化处理应用在运行时的总体安全。检测、阻止SQL注入的平台层防御是与安全代码的补充。平台层防范用于检测、阻止不需要重编译易受攻击的应用的源代码即可SQL注入攻击, 主要是确保Web服务器和部署框架安全的技术插件。

1) 运行时保护技术:在无法修改代码情况, 运行时保护是应对SQL注入攻击的有效手段, 适当配置Web应用防火墙、设置截断过滤器、给URL或者网页打虚拟补丁、启用应用入侵检测系统、数据库防火墙等可以有效检测、阻止SQL注入攻击, 实现运行时跨越多级、多层 (网络、Web服务器、服务框架、数据库) 安全保护。

2) 确保数据库安全:有效强化数据库, 控制攻击者沙箱化在应用数据上, 在不影响其他数据库和系统情况下, 有效锁定数据库服务器, 将访问局限在必须的数据库对象上, 对敏感数据进行加密操作, 虽然不能阻止SQL注入攻击, 但是可以将影响控制在最小化。

3 总结

在如今的互联网时代, 上网已经在人们日常生活中占据着重要的位置, 网络安全需要得到足够的重视, 尽量避免人们在使用网络时承担Web应用安全风险。SQL注入漏洞攻击是目前Web应用所面临最为严重的一类安全问题。该文介绍了SQL注入攻击的原理、方法和防范技术, 希望引起大家对SQL注入漏洞重视, 加强对网络安全技术研究, 及早发现安全漏洞, 保障网络应用安全。

摘要:Microsoft SQL Server、MySQL和Oracle是目前三大主流数据库, 基于此所开发的WEB网站是目前大多数网站采用的常规模式。虽然Web技术不断成熟, 安全性也不断提高, 但是SQL注入漏洞不可必可避免的存在, 且攻击工具也不断更新, SQL注入漏洞已经是Web应用系统中最为严重的安全漏洞之一。该文将分析SQL注入攻击的原理, 综合探讨应对SQL攻击的防范技术

关键词:SQL注入攻击,检测技术,代码层,平台层

参考文献

[1]TK Rao, GY Kumar, EK Reddy.Major Issues of WebApplications:A Case Study of SQL Injection.2012, 2 (1) :16-20.

[2]孙建舒.SQL注入式攻击与防范[J].计算机与信息技术, 2011 (8) .

[3]吴贵山.SQL注入攻击防御策略的研究[J].计算机与网络, 2012 (9) .

篇3:如何斩断SQL注入式攻击的疯狂大魔掌?WEB安全

在2010和2013年OWASP (Open Web Application Security Project) 总结的web应用程序最可能、最常见、最危险的十大安全隐患排名中注入式风险名列榜首, 攻击者往往利用SQL注入漏洞对WEB服务器和后台数据库实施攻击, 轻则篡改网页内容, 重则窃取重要内部数据, 更为严重的则是在网页中植入恶意代码, 使得网站访问者受到侵害, 2011年4月38万个网站遭受Liza Moon SQL注入攻击, 4-5月索尼公司各大网站频频遭到SQL注入攻击, 10月近20万网站受到SQL入侵使1百多万的ASP.NET平台的Web页面受到影响, 类似SQL注入攻击层出不穷。根据Inperva公司的“监测黑客论坛:ADC每月网络攻击分析 (2012年10月) ”报告显示, 在论坛的讨论主题中, SQL注入占19%。因此, 对SQL注入及攻击检测为提高Web环境的运行安全有十分重要的意义

1 SQL注入概述

SQL注入 (SQL Injection) 是一种数据库攻击手段, 也是WEB应用程序漏洞存在的一种表现形式, 它的实际意义就是利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中, 从而达到入侵数据库乃至操作系统的目的。造成SQL注入的原因是程序员只注重业务逻辑的实现, 缺乏安全意识, 没有考虑到代码的健壮性及安全性的结果, 在编写代码的时候, 没有对用户输入数据的合法性进行判断, 使应用程序存在安全隐患。

SQL注入攻击, 就是利用SQL注入技术来实施的网络攻击, 它威胁面广、破坏性大, 具有很强的普遍性, 只要是支持批量处理SQL指令的数据库 (如:My SQL、MSQL、Oracle、DB2、Sybase等) 服务器, 都有可能受到此种手法的攻击。同时, 攻击过程简单、技术门槛低, 攻击者无须具备专业的SQL注入知识, 甚至在不熟悉相关知识的背景下, 就可利用一些好的注入工具 (例如教主的HDSI、NBSI、明小子的Domain等) 完成对存在SQL注入漏洞的网站或者Web应用程序实施攻击和破坏。由于SQL注入是从HTTP服务端口 (如:通常为80端口) 通过对页面请求访问服务器, 表面上看来和正常的web访问没有区别, 即使有防火墙, 也不会对其发出警报 (普通网络防火墙是对HTTP/HTTPS全开放的) , 因此SQL注入具有极强的隐蔽性。

2 SQL注入过程分析

SQL注入的方法灵活、攻击手段多样、能避免绝大多数常规防火墙的防御, 其SQL注入过程一般分为以下五个步骤, 如图1所示。

(1) 寻找注入点

注入点是指存在注入漏洞的web网页。URL以html或shtml结尾的静态页面不存在注入, 只有形如带有“?”的URL的动态页面才有注入的可能性, 因为页面信息的生成是根据不同的查询参数从数据库中获取信息, 存在对数据库的访问, 需要数据库的支持。由于HTTP请求有GET和POST两种方式, 所以SQL注入攻击有GET注入和POST注入两种方式, 通过在浏览器地址栏中或页面表单中输入一些诸如“and 1=1”、“and 1=2”以及“’”等一些特殊字符, 可以根据浏览器返回的错误信息来判断是否存在SQL注入, 从而找到注入点。

(2) 获取数据库类型信息

获取数据库类型等信息是SQL注入中一个关键的部分, 可通过构造特殊的SQL语句产生的出错信息判断数据库类型。假如现在有URL地址:http://www.***.com/show.aspx?id=6, 若在其地址的末尾加上一个单引号, 即:http://www.***.com/show.aspx?id=6'可以根据返回的结果来判断后台数据库的类型, 为进一步注入奠定基础。如果页面出现类似错误显示“Microsoft JET Database Engine错误’80040e14′”, 可判断后台数据库为ACCESS数据库。如果返回这样的结果:Microsoft OLE DB Provider for SQL Server错误'80040e14', 字符串'之前有未闭合的引号, 该错误信息说明没有过滤单引号且数据库类型是SQLSERVER, 此类型数据库使用“sa”作为数据库系统管理员默认的账户, 如果攻击者确认web应用后台数据库使用的是SQLSERVER, 可釆用默认密码破解手段去获取系统管理员账户信息。

(3) 猜测数据库表名、字段名、用户名、密码等信息

数据库中存放的表名、字段名都是有规律可言的[1], 例如My SQL数据库中系统自带的information_schema信息数据库中保存着关于My SQL服务器所维护的所有其他数据库的信息, 当前My SQL实例中所有数据库的信息存放在SCHEMATA表, 所有表信息存放在TABLES表中, 所有表中列信息存放在COLUMNS表中。

猜测数据库表名、字段名不是一件简单的任务[2], 为了提高猜解的成功率, 需要在确认待破解表名和字段名的长度后, 再进一步判断表名和字段名。攻击者可以通过构建特殊数据库访问语句在数据库中依次查找表名、字段名、用户名和密码的长度内容, 具体做法是在正常的URL后面添加对应的SQL测试语句, 在请求提交后, 根据web服务器的响应来做判断。若提交后能得到正常的网页内容, 则说明攻击者假设的表名或字段名是正确的;反之就是错误的, 就需要做进一步的假设继续提交测试语句, 直到能成功显示web网页内容时为止。这个猜测过程也可以通过网上现成的大量注入工具快速实现, 并借助破解网站破译用户密码。

(4) 寻找web系统管理后台入口

通常web系统的注册用户只能以前台登录的方式去访问Web服务器, Web后台系统管理的界面不面向普通用户开放, 要寻找到后台的登陆路径, 可以利用扫描工具快速搜索, 依次对可能的登陆地址进行尝试, 当试出管理后台的入口地址后, 再利用之前得到的管理员信息登录Web系统, 这时相当于掌握了整个web系统的管理权限

(5) 入侵和破坏

成功登陆后台管理后, 接下来就可以随意进行破坏, 如非法发布信息、篡改网页、上传木马、修改、盗取并泄漏用户资料等, 并进一步入侵数据库服务器。

3 SQL注入攻击检测

SQL注入攻击方式有两种, 一是通过人为构造一些畸形的输入的手工方式, 另一种用工具方式[3]。攻击者无论采用哪种攻击方式, 在SQL注入攻击成功后都会在系统中留下蛛丝马迹, 判断Web系统是否受到过SQL注入攻击的有效方式有四种[4]: (1) 检查后台数据库是否有异常数据表, 使用HDSI、NBSI等SQL注入攻击软件工具进行SQL注入攻击后, 都会在数据库中生成一些临时表; (2) 查看后台数据库日志, 对于后台数据库启用日志管理后会记录对数据库的访问情况, 特别是一些记录执行有错误SQL语句的日志上能发现是否受到SQL注入攻击; (3) 查看IIS日志, 在Web服务器中IIS日志会记录访问者的IP地址、访问时间、访问文件、访问方式等详细信息, SQL注入攻击往往会频繁访问某一个存在SQL注入点的页面文件, 日志文件会较大, 通过查看日志文件的大小和内容, 也可以判断是否发生过SQL注入攻击; (4) 通过查看系统管理员账号、端口开启情况、系统最近日期产生的一些文件、病毒及安全防火墙日志等信息来判断是否发生过入侵。

4 结语

SQL注入攻击技术门槛低、隐蔽性强, 已成为Web应用安全的严重威胁。本文分析了SQL注入的特点、过程及步骤, 阐明和总结了SQL注入攻击检测的方法, 为提高Web系统的服务安全提供借鉴。

参考文献

[1]SQL注入攻击与防御简介, http://www.h3c.com.cn/About_H3C/Company_Publication/IP_Lh/2012/06/Home/Catalog/201212/769059_30008_0.htm, 2012.

[2]Microsoft SQL Server安全回顾.[EB/OL].http://wwvv'.microsoft.com/china/cte/ctc/Newsletter/04/ctc2.htm.2004 3 25.

[3]王时绘, 张希运.SQL注入的成因、检测和防范措施的研究[J].湖北大学学报 (自然科学版) .2010, 32 (3) :269-272.

注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:66553826@qq.com

上一篇:婚礼主持词 婚礼主持词完整版(20篇) 下一篇:婚礼主持词完整版 婚礼主持词最新完整版(四篇)