防范注入式攻击

2024-06-11

防范注入式攻击(精选11篇)

防范注入式攻击 第1篇

由于多数程序员不了解SQL注入漏洞的知识, 目前互联网上网站经常遭受SQL注入攻击。本文, 笔者针对PHP+My SQL型和ASP+SQLServer型Web程序的SQL注入攻击防范措施进行了详细阐述, 并给出了预防SQL注入漏洞的方法, 有助于提高Web应用程序员的安全意识和Web程序的安全性。

一、SQL注入原理

1. SQL注入原理。

SQL注入攻击是指黑客在用户交互端精心编写一些SQL语句, 把特殊的SQL指令语句插入到系统实际SQL语句中并执行它, 从而获取主机控制权限的攻击方法。SQL注入是从正常的WWW端口访问, 而且表面看起来跟一般的Web页面访问没什么区别, 所以目前市面上的防火墙不会对SQL注入发出警报。以PHP语言为例, 如果用户的输入能够影响脚本中SQL命令的生成, 那么很可能在添加了单引号、#号等转义命令字符后, 能够改变最终生成的SQL命令。

2. 举例说明。

如果程序员在编程时没有对用户输入的变量$U和$P进行合理的限制, 当攻击者把用户名输入为admin’#的时候, 输入字符串中的单引号和脚本中的单引号形成配对, 而输入字符串中的“#”号对于mysql语言来说是行注释符, 后边的语句将被当做注释处理掉。这使攻击者可以轻易绕过身份验证机制, 因此, 没有正确密码也能看到管理员的信息。对于SQL注入攻击, 很多程序员对它仍然没有足够的重视, 编写的网站中遗留了大量SQL注入攻击漏洞。加上许多专门的SQL注入软件 (如NBSI) 的“蓬勃发展”, 使得一个既不懂编程又不懂SQL的人, 只要知道如何操作这个软件就可以轻而易举地入侵一家网站。

二、SQL注入攻击的特点

1. 广泛性。

SQL注入攻击利用的是简单的SQL语法, 因此所有基于SQL语言标准的Web应用程序都可能成为SQL注入攻击的目标。如果没有对输入的SQL语句做严格的技术处理, 理论上都会存在SQL注入漏洞安全隐患。市场上主流的Web应用程序均发现存在SQL注入漏洞的问题。

2. 危害大。

通过SQL注入攻击可以控制整个Web应用系统, 在不经授权的情况下对数据做任意地修改, 甚至恶意篡改网页的内容, 破坏性极大。

3. 技术要求低。

目前互联网上出现了许多SQL注入攻击工具, 如明小子、桂林老兵等都是非常出名的攻击工具。攻击者无需专业知识, 直接利用此类工具软件便可随意地对存在SQL注入攻击漏洞的网站实施攻击。

三、SQL注入攻击检测与防范

目前针对Web服务器的SQL注入攻击技术层出不穷, 但其内部机理都是利用畸形的SQL语句通过客户端浏览器与服务器之间的共享连接来实现绕过认证获取敏感信息。如何让系统管理者采取有效的防范措施阻止内部信息的泄露, 将整个系统的威胁降至最低, 是目前服务器防守的关键。

1. SQL注入攻击检测方法。

SQL注入攻击检测分为入侵前的检测和入侵后的检测, 入侵前检测可以手工测试也可以通过软件检测, 入侵后检测主要是针对日志的检测。

(1) 数据库检查。使用HDSI、NBSI和Domain等SQL注入攻击软件工具进行SQL注入攻击后, 都会在数据库中生成一些临时表。通过查看数据库中最近新建表的结构和内容, 就可以判断是否曾经发生过SQL注入攻击。

(2) IIS日志检查。在Web服务器中如果启用了日志记录, 则IIS日志会记录访问者的IP地址、访问文件等信息, SQL注入攻击往往会大量访问某一个页面文件 (存在SQL注入点的动态网页) , 且日志文件也会急剧增加。

2. 一般SQL注入攻击的防范方法。

(1) IIS服务器安全设置。攻击者常用错误信息判断SQL漏洞是否存在, 可以修改IIS的返回信息, 使得所有错误返回一样的信息, 攻击者无从获取网站信息。可以修改C:WINDOWSHelpiis Helpcommon目录下的500-100.asp文件为统一格式的500.htm。对于静态网站, 一般不设置脚本可执行权限, 动态网站也只设置纯脚本权限。对于用户上传的文件设置为无可执行权限, 上传文件夹不放置系统配置文件。IIS如无匿名登录需求, 则可取消该项服务。

(2) 功能代码端设置。程序员要习惯将应用系统中的密码字段进行加密 (如最常见的MD5加密) , 这不仅仅是为了隐藏用户信息, 尊重用户隐私, 更重要的是提高系统的安全性。也就是在程序中要对用户输入的信息进行检验, 以达到SQL攻击的防御效果。目前这种检验方法一般有2种:替换或删除敏感字符串, 在服务器正式处理前对提交数据进行检验。

(3) SQL Server安全配置。用于程序连接数据库的用户不应使用服务器角色组, 而应使用数据库用户角色组成员。SA级别的权限是不能随便配置的, 黑客SQL注入得手后调用xp_cmdshell命令就可以得到系统的最高权限。最好的方法是只给予db_Reader和db_Writer权限, 遇到有需要备份的用户最好另行新建用户。SQL Server可以精确地设置某一数据库中各个表的select、update、delete等操作的权限, 开发人员应根据应用系统的不同功能要求, 合理地配置好这些权限。

防范注入式攻击 第2篇

关于对付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攻击给数据库所造成的风险。

SQL注入攻击与防范技术 第3篇

关键词:SQL注入,黑客,网站安全

引言

SQL注入攻击可以算是互联网上最为流传最为广泛的攻击方式, 许多企业网站先后遭此攻击。所谓SQL注入 (SQLInjection) , 就是利用程序员对用户输入数据的合法性检测不严或不检测的特点, 故意从客户端提交特殊的代码, 从而收集程序及服务器的信息, 查询数据库。

1 主要的攻击方法实现的介绍

(1) 一些网站的管理登陆页面对输入的用户名和密码没有做SQL过滤, 导致网站被攻击。

这里假设一个没有严格过滤SQL字符的管理登陆界面。事实上黑客并不需要知道用户名和密码, 那么黑客只需在用户名里面输入"'or 1=1--", 密码任意输入, 提交后, 系统认为用户名为空 ('') 或者 (1=1恒成立) , 后面不执行 (--) , 就无需验证密码直接进入后台。

(2) 下面的查询语句在有注入漏洞的服务器上被恶意利用也会导致严重后果。

String SqlStr=”Select*from customers where CompanyName like'%"+text Box1.Text+"%"';

这样的字符串连接可能会带来灾难性的结果, 比如用户在文本框中输入:

a'or 1=1

那么Sql Str的内容就是:

select*from customers where CompanyName like'%a'or 1=1--%'

这样, 整个customers数据表的所有数据就会被全部检索出来, 因为1=1永远true, 而且最后的百分号和单引号被短横杠注释掉了。

如果用户在文本框中输入:

a'EXEC s P_addlogin'John', '123'EXEC s P_addsrvrolemember'John', 'sysadmin'--

那么Sql Str的内容就是:

select*from customers where CompanyName like'%a'EXEC sp_addlogin'John', '123'

EXEC sp_addsrvrolemember'John', 'sysadmin'--

该语句是在后台数据库中增加一个用户John, 密码123, 而且是一个sysadmin账号, 相当于sa的权限。

如果用户这时在文本框中输入:a'EXECxp_cmdShell ('format c:/y') --运行之后就开始格式化C盘!

(3) 通过注入获得管理员账户密码。

一个正常的网址http://localhost/lawjia/show.asp?ID=101, 将这个网址提交到服务器后, 服务器将进行类似Select*from表名where字段="&ID的查询 (ID即客户端提交的参数, 本例是即101) , 再将查询结果返回给客户端。

当某人知道网站管理员帐号存储在表login中, 其用户名为admin, 如果想知道管理员密码, 此时他可从客户端接着提交这样一个网址:

http://localhost/lol/show.asp?ID=101 and (Select password from login where user_name='admin') >0

返回的出错信息如下:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)

[Microsoft][ODBC SQL Server Driver][SQL Server]将varchar值'!@huway**a'转换为数据类型为int的列时发生语法错误。

/lol/show.asp, 第27行

黑体字部分即为返回密码

(4) 通过工具进行注入攻击测试。

如何判断一个网站能否被注入, 首先找到注入点, 像上面提到的“/show.asp?ID=101”就是一个注人点, 很多新闻系统的新闻显示页面、产品发布显示页面都有类似ID=101的标志, 在ID=101后面直接输入and 1=1, 如果没有出错, 仍然返回原先显示页面, 这就是一个注人漏洞, 如果返回您的网址不合法, 显然己经做了SQL过滤。

显然人工猜测表名是一件麻烦事情, 但大多存放管理员的账户的表通常为addmin, guan, login这样简单单词, 通过黑客工具附带字典, 先确定表的名称, 接着猜测字段, 然后穷学查询字段第一位、第二、第三位…, 直到全部出来, 借助工具, 对有注人漏洞网站攻击成功率可达60%以上。注入工具有NBSI、啊D、Domain等。

以上仅是对SQL攻击的粗略分类。但从技术上讲, 如今的SQL注入攻击者们在如何找出有漏洞的网站方面更加聪明, 也更加全面了。出现了一些新型的SQL攻击手段。黑客们可以使用各种工具来加速漏洞的利用过程。

2 防御和检查SQL注入的手段

2.1 使用参数化的过滤性语句

要防御SQL注入, 用户的输入就绝对不能直接被嵌入到SQL语句中。恰恰相反, 用户的输入必须进行过滤, 或者使用参数化的语句。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中, SQL语句就得以修正。然后, 用户输入就被限于一个参数。下面是一个使用Java和JDBCAPI例子:

PreparedStatement prep=conn.prepareStatement ("SELECT*FROM USERS WHERE PASSWORD=?") ;

prep.setString (1, pwd) ;

总体上讲, 有两种方法可以保证应用程序不易受到SQL注入的攻击, 一是使用代码复查, 二是强迫使用参数化语句的。强迫使用参数化的语句意味着嵌入用户输入的SQL语句在运行时将被拒绝。不过, 目前支持这种特性的并不多。如H2数据库引擎就支持。

2.2 还要避免使用解释程序, 因为这正是黑客们借以执行非法命令的手段。

2.3 防范SQ L注入, 还要避免出现一些详细的错误消息, 因为黑客们可以利用这些消息。要使用一种标准的输入确认机制来验证所有的输入数据的长度、类型、语句、企业规则等。

2.4 使用专业的漏洞扫描工具。但防御SQL注入攻击也是不够的。攻击者们目前正在自动搜索攻击目标并实施攻击。其技术甚至可以轻易地被应用于其它的Web架构中的漏洞。企业应当投资于一些专业的漏洞扫描工具, 如大名鼎鼎的Acunetix的Web漏洞扫描程序等。一个完善的漏洞扫描程序不同于网络扫描程序, 它专门查找网站上的SQL注入式漏洞。最新的漏洞扫描程序可以查找最新发现的漏洞。

3 结束语

建议Web应用程序的程序员们对其代码进行测试并打补丁, 虽然SQL注入漏洞被发现和利用的机率并不太高。但近来攻击者们越来越多地发现并恶意地利用这些漏洞。因此, 在部署其软件之前, 开发人员应当更加主动地测试其代码, 并在新的漏洞出现后立即对代码打补丁, 做为网站管理人员要在Web应用程序开发过程的所有阶段实施代码的安全检查。首先, 要在部署Web应用之前实施安全测试, 这种措施的意义比以前更大、更深远。网站管理人员还应当在部署之后用漏洞扫描工具和站点监视工具对网站进行测试。

参考文献

[1]马宜义.网络安全与病毒防范.上海:上海交通大学院出版社, 2009.

[2]秦志兴, 张凤荔.计算机病毒原理与防范[M].北京:人民邮电出版社, 2007.

DNS攻击原理与防范 第4篇

DNS的工作原理

DNS分为Client和Server,Client扮演发问的角色,也就是问Server一个Domain Name,而Server必须要回答此Domain Name的真正IP地址。而当地的DNS先会查自己的资料库。如果自己的资料库没有,则会往该DNS上所设的的DNS询问,依此得到答案之后,将收到的答案存起来,并回答客户。

DNS服务器会根据不同的授权区(Zone),记录所属该网域下的各名称资料,这个资料包括网域下的次网域名称及主机名称。

在每一个名称服务器中都有一个快取缓存区(Cache),这个快取缓存区的主要目的是将该名称服务器所查询出来的名称及相对的IP地址记录在快取缓存区中,这样当下一次还有另外一个客户端到次服务器上去查询相同的名称 时,服务器就不用在到别台主机上去寻找,而直接可以从缓存区中找到该笔名称记录资料,传回给客户端,加速客户端对名称查询的速度。例如:

当DNS客户端向指定的DNS服务器查询网际网路上的某一台主机名称 DNS服务器会在该资料库中找寻用户所指定的名称 如果没有,该服务器会先在自己的快取缓存区中查询有无该笔纪录,如果找到该笔名称记录后,会从DNS服务器直接将所对应到的IP地址传回给客户端 ,如果名称服务器在资料记录查不到且快取缓存区中也没有时,服务器首先会才会向别的名称服务器查询所要的名称。例如:

DNS客户端向指定的DNS服务器查询网际网路上某台主机名称,当DNS服务器在该资料记录找不到用户所指定的名称时,会转向该服务器的快取缓存区找寻是否有该资料 ,当快取缓存区也找不到时,会向最接近的名称服务器去要求帮忙找寻该名称的IP地址 ,在另一台服务器上也有相同的动作的查询,当查询到后会回复原本要求查询的服务器,该DNS服务器在接收到另一台DNS服务器查询的结果后,先将所查询到的主机名称及对应IP地址记录到快取缓存区中 ,最后在将所查询到的结果回复给客户端

常见的DNS攻击包括:

1) 域名劫持

通过采用 手段控制了域名管理密码和域名管理邮箱,然后将该域名的NS纪录指向到 可以控制的DNS服务器,然后通过在该DNS服务器上添加相应域名纪录,从而使网民访问该域名时,进入了 所指向的内容。

这显然是DNS服务提供商的责任,用户束手无策。

2) 缓存投毒

利用控制DNS缓存服务器,把原本准备访问某网站的用户在不知不觉中带到 指向的其他网站上。其实现方式有多种,比如可以通过利用网民ISP端的DNS缓存服务器的漏洞进行攻击或控制,从而改变该ISP内的用户访问域名的响应结果;或者, 通过利用用户权威域名服务器上的漏洞,如当用户权威域名服务器同时可以被当作缓存服务器使用, 可以实现缓存投毒,将错误的域名纪录存入缓存中,从而使所有使用该缓存服务器的用户得到错误的DNS解析结果。

最近发现的DNS重大缺陷,就是这种方式的。只所以说是“重大”缺陷,据报道是因为是协议自身的设计实现问题造成的,几乎所有的DNS软件都存在这样的问题。

3)DDOS攻击

一种攻击针对DNS服务器软件本身,通常利用BIND软件程序中的漏洞,导致DNS服务器崩溃或拒绝服务;另一种攻击的目标不是DNS服务器,而是利用DNS服务器作为中间的“攻击放大器”,去攻击其它互联网上的主机,导致被攻击主机拒绝服务。

4) DNS欺骗

DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为。

原理:如果可以冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址,这样的话,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这就是DNS欺骗的基本原理,

DNS欺骗其实并不是真的“黑掉”了对方的网站,而是冒名顶替、招摇撞骗罢了。

现在的Internet上存在的DNS服务器有绝大多数都是用bind来架设的,使用的bind版本主要为bind 4.9.5+P1以前版本和bind 8.2.2-P5以前版本.这些bind有个共同的特点,就是BIND会缓存(Cache)所有已经查询过的结果,这个问题就引起了下面的几个问题的存在.

DNS欺骗

在DNS的缓存还没有过期之前,如果在DNS的缓存中已经存在的记录,一旦有客户查询,DNS服务器将会直接返回缓存中的记录

防止DNS被攻击的若干防范性措施

互联网上的DNS放大攻击(DNS amplification attacks)急剧增长。这种攻击是一种数据包的大量变体能够产生针对一个目标的大量的虚假的通讯。这种虚假通讯的数量有多大?每秒钟达数GB,足以阻止任何人进入互联网。

与老式的“smurf attacks”攻击非常相似,DNS放大攻击使用针对无辜的第三方的欺骗性的数据包来放大通讯量,其目的是耗尽受害者的全部带宽。但是,“smurf attacks”攻击是向一个网络广播地址发送数据包以达到放大通讯的目的。DNS放大攻击不包括广播地址。相反,这种攻击向互联网上的一系列无辜的第三方DNS服务器发送小的和欺骗性的询问信息。这些DNS服务器随后将向表面上是提出查询的那台服务器发回大量的回复,导致通讯量的放大并且最终把攻击目标淹没。因为DNS是以无状态的UDP数据包为基础的,采取这种欺骗方式是司空见惯的。

这种攻击主要依靠对DNS实施60个字节左右的查询,回复最多可达512个字节,从而使通讯量放大8.5倍。这对于攻击者来说是不错的,但是,仍没有达到攻击者希望得到了淹没的水平。最近,攻击者采用了一些更新的技术把目前的DNS放大攻击提高了好几倍。

当前许多DNS服务器支持EDNS。EDNS是DNS的一套扩大机制,RFC 2671对次有介绍。一些选择能够让DNS回复超过512字节并且仍然使用UDP,如果要求者指出它能够处理这样大的DNS查询的话。攻击者已经利用这种方法产生了大量的通讯。通过发送一个60个字节的查询来获取一个大约4000个字节的记录,攻击者能够把通讯量放大66倍。一些这种性质的攻击已经产生了每秒钟许多GB的通讯量,对于某些目标的攻击甚至超过了每秒钟10GB的通讯量。

要实现这种攻击,攻击者首先要找到几台代表互联网上的某个人实施循环查询工作的第三方DNS服务器(大多数DNS服务器都有这种设置)。由于支持循环查询,攻击者可以向一台DNS服务器发送一个查询,这台DNS服务器随后把这个查询(以循环的方式)发送给攻击者选择的一台DNS服务器。接下来,攻击者向这些服务器发送一个DNS记录查询,这个记录是攻击者在自己的DNS服务器上控制的。由于这些服务器被设置为循环查询,这些第三方服务器就向攻击者发回这些请求。攻击者在DNS服务器上存储了一个4000个字节的文本用于进行这种DNS放大攻击。

现在,由于攻击者已经向第三方DNS服务器的缓存中加入了大量的记录,攻击者接下来向这些服务器发送DNS查询信息(带有启用大量回复的EDNS选项),并采取欺骗手段让那些DNS服务器认为这个查询信息是从攻击者希望攻击的那个IP地址发出来的。这些第三方DNS服务器于是就用这个4000个字节的文本记录进行回复,用大量的UDP数据包淹没受害者。攻击者向第三方DNS服务器发出数百万小的和欺骗性的查询信息,这些DNS服务器将用大量的DNS回复数据包淹没那个受害者。

如何防御这种大规模攻击呢?首先,保证你拥有足够的带宽承受小规模的洪水般的攻击。一个单一的T1线路对于重要的互联网连接是不够的,因为任何恶意的脚本少年都可以消耗掉你的带宽。如果你的连接不是执行重要任务的,一条T1线路就够了。否则,你就需要更多的带宽以便承受小规模的洪水般的攻击。不过,几乎任何人都无法承受每秒钟数GB的DNS放大攻击。

浅析ARP攻击与防范 第5篇

【关键词】ARP;局域网;监听;攻击;欺骗

【中图分类号】TP393 【文献标识码】A 【文章编号】1672-5158(2013)03-0067-01

1. 背景

随着信息技术的发展,计算机网络己经成为工作生活中不可或缺的工具。但伴之而来的非法入侵也一直威胁着计算机网络系统的安全,干扰了互联网的正常发展。因此,如何有效地防范各种攻击,增强网络安全性,是一项重要的课题。

局域网内经常性大面积断线;IP地址冲突不断;内网主机互访出错频繁;网站主页给篡改,网页发现病毒;杀毒软件无可奈何;进而登陆账号被盗、敏感信息外泄……

这些常见的局域网故障,很大程度上跟ARP攻击有关。ARP攻击是一种典型的欺骗类攻击,攻击主机通过发送伪造的ARP应答来更新目标主机的ARP高速缓存,从而使自身赢得目标主机的信任。然后再实施有效攻击或非法监听网络数据包,造成目标主机被攻破或机密信息泄漏等一系列灾难性后果。

2. ARP攻击模式

从ARP协议工作原理可以看出,ARP协议是建立在信任局域网内所有结点的基础上的,它很高效,但却不安全。它是无状态的协议,不会检查自己是否发过请求包,也不管(其实也不知道)是否是合法的应答,只要收到目标MAC是自己的ARP reply包或arp广播包(包括ARP request和ARP reply),都会接受并缓存。这就为ARP欺骗提供了可能,恶意节点可以发布虚假的ARP报文从而影响网内结点的通信,甚至可以做“中间人”。

2.1 IP冲突或DoS攻击

这种攻击形式与中间人攻击有相似之处,都是持续广播伪造的ARP应答报文,截取并转发主机和网关之间的报文,监听主机与网关之间的通信,常用于窃取敏感的登陆信息和密码。

3 ARP整体防护设计思路

从ARP攻击原理可以看出,防范ARP欺骗攻击最大困难在于其攻击不是针对服务器或交换机系统本身的,而且攻击源可以在网段内任何一个地方隐藏,其隐蔽性很高。所以有时候即使管理员发现了攻击的存在,要在最短时间内快速定位攻击源也是非常困难的事情。这就意味着像防治普通攻击或病毒那样单一的从服务器系统或者从网络网关上进行防范效果不是很好。

一个完整的ARP攻击防范策略需要从三方面同时入手:计算机系统防护、网络设备维护以及健全网络安全监管机制。

计算机系统防护。这是基于主机的安全防护,主要从系统安全加固、系统DLL控制、MAC ARP绑定、安装ARP防火墙等方面构筑第一道防线。

网络设备的防护。局域网内的主机通过交换机、路由器相连,因而应该在交换机与路由器上构筑第二道防线。在交换机某些固定端口上配置静态MAC地址,把一个MAC地址永久性地分配给一个端口。对于连接服务器或机密主机的交换机端口,设置安全保护,阻止攻击方对该端口的监听。对于具有DHCP功能的路由器,尽量用手动指定IP地址给已知MAC地址的主机。

健全网络安全监管机制、合理分配网络资源。监听局域网内ARP数据包的情况。通过监听和分析网络状况,如主机表、协议、数据包特征以及流量等多方面的信息,及时发现通信异常,定位攻击源,并从源头上解决ARP攻击。同时合理利用VLAN优化网络,把ARP攻击所造成的损失减到最低。

4. 结束语

ARP攻击之所以能在公众局域网内如此轻易的传播,是因为在拥有机器数量较多的公众上网环境,由于其中各类系统的安全责任点归属复杂、使用人员安全意识欠缺,造成环境内安全管理漏洞较大、安全盲点较多,从而使新一代以ARP欺骗为基础的网页挂码或重定向攻击得以滋生。即使一个单位或网站管理员能保证自己的服务器与网络交换设备不被攻占,他也无法抵御来自网络范围内任何一台机器的ARP攻击。对付此类攻击,传统上从操作系统或交换设备的单点防御已无济于事。

SQL注入攻击原理和防范方法 第6篇

由此看出, 获知通用的SQL注入攻击防御方法, 对于加强安全建设具有非常重要的作用。本文将重点对SQL注入攻击产生的原理与防范SQL注入的措施进行讨论。

1 SQL注入概述

SQL注入攻击是一种常用的应用层攻击手段, 是最危险、 最普遍的基于Web攻击手段之一, 同时也是对企业运营最具破坏性的漏洞之一。SQL通常采用的注入手段是通过Web表单提交、输入域名、页面请求等方式, 将修改的SQL命令语句传输到服务器, 最终达到欺骗服务器执行恶意SQL命令的目的。这种访问方式从语法结构上看, 与一般通过Web页面访问没有太大区别。

SQL注入是攻击者根据自己的目的, 对SQL语句进行修改, 并通过服务器对相关SQL语句执行的操作, 而不是按照设计者的意图执行相关的系统SQL语句。如:很多网站在编程时, 没有对输入的合法性进行验证。输入的用户名为“tests”, 密码设置为“tests123”, 对其数据库用户表进行查询的SQL语句就是“select * from用户表where用户名='tests' and密码='tests123'”。但是如果对语句进行修改, 用户名变成“' or 1=1 --'”, 密码输入为空, 组合后SQL结果为“select * from用户表where用户名='' or 1=1 --'' and密码=''”。“' or 1=1 --'”。这个判断导致SQL不对用户名和密码进行验证, 这将导致攻击者可以查出表用户表的所有记录, 成功登录系统。如果再加上“drop用户表”等破环性语句, 会对系统产生极大危害。

2 SQL注入的主要危害

如果网站存在SQL注入漏洞, 攻击者可以轻松获得管理员账号、密码, 从而任意删改网站上发布的信息, 甚至攻击者还可以将木马传到网站上, 从而控制企业的整个服务器。 如果攻击者攻破的系统中有企业存放的秘密商业信息, 将导致信息泄露, 将可能对公司造成重大经济损失。如果攻击者对系统数据进行修改, 存放在数据库中的数据将被破坏, 数据变得不准确, 这将会对使用者造成误导, 甚至可能导致整个系统瘫痪。

3 SQL注入攻击特点

3.1广泛性

SQL注入利用的是SQL语法, 它可跨越各种操作对网站进行攻击。只要Web应用系统未对SQL的输入进行校验、 处理, 攻击者均可采取SQL注入攻破。

3.2隐蔽性高

SQL注入通过WWW端口访问系统, 与正常的Web页面访问方式没有区别, 因此, 一般防火墙软件难以识别。

3.3攻击时间短

攻击者可以在几秒到几分钟的时间完成对数据库或Web服务器的控制。

3.4技术难度小

SQL注入在网络上可找到多款工具, 且基本为图形化工具, 因此, 学习起来非常简单。

3.5危害大

SQL注入攻击成功后, 攻击者可轻易对网站信息进行修改, 获取企业机密, 给企业造成重大经济损失等。

4 SQL注入攻击的原理

目前, 大多数Web应用程序, 均采用各类数据库存放数据。攻击者通常利用特定SQL语句改造数据或字符串, 以绕过认证机制, 输入方式将组合参数传入后台执行SQL语句, 从而实现入侵数据库的目的。可以看出, 攻击者可以非法入侵系统的主要原因是应用系统对用户输入的数据未细致过滤。通常攻击者可将输入的内容传递给动态构建SQL字符串语句, 并由数据库对该非法语句加以执行。如:“select count ( 单号) from账单where用户名= 'test123' and密码='test456'”, 这里的用户名和密码都是从Web表单获得的数据。如果在表单中用户名的输入框中输入' or 1=1 -- ', 密码为空, 此时SQL语句就变成了“select count ( 单号) from账单where用户名= '' or 1=1 --'' and密码='' ”, 因为1=1永远为真, 所以这里完全跳过了SQL验证。如果在表单中, 包含未筛选的用户输入的字符串, 可直接用来构造 (或者影响) 动态SQL命令, 或者可作为存储过程的输入参数, 这类表单特别容易受到SQL注入式攻击。

在实际应用中, 通常通过手工注入测试、自动化注入测试两种方式对SQL注入攻击进行测试。

第一, 手工注入测试

(1) 判断系统是否可进行注入

例如, SQL存在于形为?id=XX等带参数的动态页面中, 这些页面访问了数据库, 都是SQL注入攻击的目标之一。

(2) 初步判断数据库的类型

不同数据库语法上都有所不同, 而且不同数据库也有不同攻击方法。可以利用数据库的变量等方法判断数据库类型。

(3) 猜测系统的数据表

可通过经验猜测表名, 常用的数据表有userinfo、 users、members、userlist、memberlist等。可在语句后加入and exists (select count (*) from表名) 等语句或查看系统表, 猜测系统表名。

(4) 猜测字段名与字段值

可采用语句and (select count ( 列名) from表名) >0判断字段名, 录入用户名常用的字段有username、name、user等。 采用语句猜测出了字段名与字段值之后, 便可以进一步猜测出其数据表的字段值。

第二, 自动化注入测试

现在互联网上有许多SQL的自动化测试工具, 如BSQL Hacker、The Mole、Sqlmap、Havij等。采用这类工具可更加便捷地检测系统中是否可进行SQL注入攻击。

5 SQL注入攻击防范措施

(1) 替换或删除敏感字符和字符串。通过单引号和双引号转换、限制长度、正则表达式等方式校验用户输入的数据, 可删除或替换敏感的字符或字符串。如使用以下语句 (Replace (old_text, old_chars, new_chars) ) 。

(2) 避免使用动态SQL, 动态SQL在使用过程中才被编译, 易成为攻击者攻击对象。

(3) 配置最小执行权限, 不要使用管理员权限连接数据库, 要删除冗余用户。

(4) 查询过程中的参数化查询, 使用存储过程代替。 存储过程的语句可实现在创建时就被编译, 只会运行创建时所定义的查询语句的语法。存储过程是DBMS执行的一段程序, 它是将操作数据提交给存储过程去执行, 可以有效防止SQL注入。同时, 要把危险的和不必要的存储过程删除。

(5) 要屏蔽服务器的详细错误, 防止将错误信息传到客户端。

(6) 通过正则、Html Encode等方法有效防止空格等被DBMS解释, 但注意不要把编码、解码颠倒了。

(7) 不要直接机密信息存放, 要加密或者hash掉密码和敏感信息。

(8) 通过数据库防火墙系统, 控制数据库的访问行为、 阻断危险操作、审计可疑行为。

(9) 使用专业的漏洞扫描工具, 寻找可能被SQL注入攻击的点。凭借专业工具, 发现SQL注入漏洞, 并提醒管理员采取积极措施预防SQL注入攻击。

(10) 对应用系统文件设置权限与加密, 比如:应用系统采用了IIS提供的信息服务, 应对其Web站点目录设置核实的访问权限, 同时对客户的访问进行记录。

6结语

本文重点阐述SQL注入攻击的原理、方法及其防范措施, 结合SQL实例代码进行解释, 力求从根本上使人们对SQL注入攻击有直观认识, 从而使开发者对开发的应用程序进行有效的安全性检测, 防止因SQL注入攻击带来一系列问题。

参考文献

[1]王云, 郭外萍, 陈承欢.Web项目中的SQL注入问题研究与防范方法[J].计算机工程与设计, 2010 (5) :976-978.

[2]Justin Clarke.SQL Injection Attacks and Defense[M].北京:清华大学出版社.2010:6.

[3]360互联网安全中心.2015年中国网站安全报告[R].2016:2.

[4]张勇, 李力, 薛倩.Web环境下SQL注入攻击的检测与防御[J].现代电子技术, 2004 (15) :105-107.

[5]徐陋, 姚国祥.SQL注入攻击全面预防办法及应用[J].计算机信息, 2006 (3) :18-20.

[6]刘帅.SQL注入攻击及其防范检测技术的研究[J].电脑知识与技术, 2009 (28) .

防范注入式攻击 第7篇

1 概述

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

SQL注入的方法灵活 、 攻击手段多样 、 能避免绝大多数常规防火墙的防御, 其SQL注入过程一般分为5个步骤 (1)寻找注入点;(2) 获取数据库类型信息;(3) 猜测数据库表名、 字段名、 用户名、 密码等信息;(4) 寻找Web系统管理后台入口;(5) 入侵和破坏。

2 SQL 注入防范技术

作为Web系统管理员应养成良好的数据备份和定期查看数据库、 IIS、 防火墙等各类日志信息的习惯, 发现异常, 迅速找准注入点, 分析原因, 若是操作系统漏洞引起的需及时对系统进行升级和打补丁。 若是Web系统程序本身的问题,可以即刻做好SQL注入防御补救措施, 然后修改程序代码。若对程序代码的修改与完善, 编程者可通过程序代码对程序中动态构造的SQL语句作严格的过滤、 检测或参数化SQL查询达到预防SQL注入攻击的目的, 由于该方法涉及到源码的修改, 需要拥有和修改程序的源代码, 是一种侵入式的解决方案[1], 暂不考虑此种方法 , 而是以Windows+SQL SERVER+ASP.NET环境为例 , 结合笔记从事服务器管理的经验 , 从服务器的安全配置、 防御补救方面实现防SQL注入攻击。

2.1 服务器的安全配置

2.1.1 操作系统与 IIS 的设置

操作系统 与IIS是承载Web系统正常 运行的基 本环境 ,其安全与否是整个Web系统有效抗SQL注入攻击的根基。 对于操作系统应定期进行系统升级和打补丁, 安装必要的网络防火墙和病毒防火墙, 关闭无需的服务和端口, 禁用相关危险组件, 配置Web应用程序以最少的特权模式运行, 给静态网页和动态网页所在目录分别设置不同权限, 尽量不给目录写权限, 如网站后台管理中心上传的文件存放的目录, 执行权限设为 “无”, 将限定上传文件执行权限, 即使上传了木马程序也无法正常运行。

IIS的HTTP错误消息提示功能方便了Web应用程序开发人员调试和查错, 同时也给SQL注入攻击者带来了可乘之机,可以将其禁止或将错误提示重定向。 IIS提供了对CGI、 ASP和ASPX等多种类型程序的解析, 根据Web系统应用的需要仅保留必要的Web服务扩展, 也可减少SQL注入攻击。 在IIS中配置类似于Rewrite、 URLScan等ISAPI, Rewrite采用URL重写技术实现页面的伪静态, 隐藏了URL真实路径, 防止攻击者进行字符串猜解, 提高了页面的安全性, URLScan可对HTTP服务器请求进行实时监察 , 能够屏蔽恶意代码在服务器端执行, 起到了防范SQL注入攻击的作用。

2.1.2 数据库的设置

SQL注入的核心是数据库 , 因此数据库自身的安全显得十分重要。 在数据库的安全配置中应考虑以下问题:

(1) 账户的管理

SQL Server数据库的默认账户为sa, 且为系统管理员权限, 可降低系统默认账户sa的权限或修改默认系统账号, 配置强口令, 同时删除冗余账户。

(2) 远程服务的管理

若数据库和Web程序在同一服务器中, 关闭TCP 1433/UDP 1434端口对外的连接 , 即为把数据库的TCP/IP远程访问关闭, 若不在同一服务器, 可通过修改数据库所在服务器的安全策略限定IP访问。

(3) 扩展存储过程的管理

删除用不到或者很少使用的扩展存储过程[2], 如xp_cmd_shell过程 , 它可以调用Windows CMD进程执行Windows脚本, 执行添加用户、 更改权限等危险的操作。

(4) 角色的管理[3]

给访问数据库的Web应用程序所需的最低的权限, 禁止Web应用程序使用数据库管理员账户连接数据库 。

2.2 防御补救

Web应用程序从功能需求分析 、 设计 、 开发到交付给用户正式使用需要一定的周期, 若在使用过程中发现因源码缺陷导致的SQL注入, 则需返原开发人员修改源程序, 对于注入原因的分析、 源码漏洞的找寻和修改方案的制定需要花费大量的时间, 这期间将不得不关停服务器, 至此会给用户带来相当不利的影响。

建立SQL注入攻击防御补救模型, 如图1所示, 在正式访问Web应用程序的前端加入对POST和GET请求的注入检测, 存在注入的访问记录其IP、 访问方式、 访问页面等日志信息, 并给Web系统管理员发送电子邮件, 禁止客户进一步访问, 起到提醒和预警的作用。 整个模型不涉及到Web应用程序源程 序的修改 , 可在服务 器受到SQL注入攻击 后 , 在Web应用程序前端加入SQL注入检测 , 迅速起到抗SQL注入攻击的作用, 对于那些不利于修改源程序或需要较长时间修改源程序的用户来讲可作为一种较好的预防SQL注入攻击的补救措施或应用方案。

在ASP.NET环境下 , Global.asax文件是一 个文本文 件 ,它提供全局可用代码, 这些代码定义了包括应用程序的事件处理程序、 会话事件、 方法和静态变量等全局性事件, 为Application对象和Session对象定义了5个基本事件[4], 如表1所示, 除此之外还有Application_Begin Request和Application_End Request等其他事 件 , 其中 , Application_Begin Request事件在页面开始请求时 (POST或GET请求) 被触发, 建立非侵入式SQL注入攻击防御补救模型中的关键也在于对该事件进行扩展编程。

以下是Global.asax文件中Application_Begin Request事件的主要代码段:

在Web应用程序根目录下建立App_Code目录, 并创建SQLInjection.cs文件 , 建立SQLInjection类并实现Valid Post Data和Valid Get Data等方法 , 主要代码如下 :

3 结语

以Windows+SQL SERVER+ASP.NET环境为例 , 重点从SQL注入攻击防范视角出发 , 通过配置操作系统 、 IIS以及数据库等安 全策略全 面提高了Web应用的安 全性 , 并建立了SQL注入攻击防御补救模型 , 实现了相关代码 。 通过在实际项目中 (学校多个服务器) 的使用, 能够很好地起到SQL注入防范的作用, 所有代码均在Win7+VS.net 2008下调试通过。

摘要:网络中SQL注入攻击隐蔽性强、危害大。从SQL注入攻击防范角度出发,建立SQL注入攻击防御补救模型,并通过配置操作系统、IIS以及数据库等安全策略,全面提高了服务器抗SQL注入攻击的能力,给出了相关代码,在实际项目中得到了较好的应用。

防范注入式攻击 第8篇

随着网络产业的迅猛发展, 基于B/S模式 (即浏览器/服务器模式) 的网络应用越来越普及, 这些Web站点大多使用Web脚本语言后台数据库系统开发, 在这些网络程序中, 如果不对网页中用户提交的数据进行合法性判断和过滤, 就可能导致安全隐患, 黑客可以通过提交构造好的数据库查询代码, 得到返回信息, 通过返回结果获的网站的敏感信息, 这就是所谓SQL注人。SQL注人攻击不仅可能使我们敏感的数据库信息被非法浏览、修改或删除, 甚至可能使我们的服务器被黑客控制, 成为“砧板上的肉鸡”。

2、SQL注入原理

SQL注入就是攻击者通过正常的WEB页面, 把自己SQL代码传入到应用程序中, 从而通过执行非程序员预期的SQL代码, 达到窃取数据或破坏的目的。

应用程序通过具有高权限的账号连接数据库, 将产生注入风险。数据库的某些表中, 用户可以直接通过输入指令来构造SQL命令, 或者构造存储过程的参数, 使得这些表单存在SQL注入风险。而很多网站程序在开发时, 并没有对用户的输入进行有效行、合法性的验证或者程序自身的算法中没有过多的考虑限制因素, 使得应用程序存在很多安全漏洞。黑客可以通过提交一段特定代码, 得到程序的返回结果, 进而获得网站的敏感的信息或者控制整个服务器。

3、SQL注入的一般步骤

3.1 寻找注入点

检测是否存在注入漏洞直接的方法是在要提交的参数后面添加单引号, 如果存在注入漏洞则程序会因此终止执行, 返回错误提示。

以下地方应重点检测: (1) Web页表单的某字段。 (2) 通过URL传递参数的链接。 (3) 通过Cookie存储并提供服务器的参数。 (4) 页面的隐藏表单中。

3.2 收集信息

在进行下一步的攻击之前, 了解目标系统的输出机制、SQL的查询方式、数据库类型、用户权限及数据库与操作系统之间的交互层次等是非常必要的。取得目标服务器的系统版本号, 在成功注入字符串后, 分析其WEB程序的运行:返回出错页面或改变页面的显示内容。

3.3 通过“1=1”获取数据库内部结构

要得到数据库的内部结构, 可以通过"HAVING 1=1"语句来遍历表中所有的列。'group by columnnames having 1=1语句使UNION对每列使用sum () 函数, 可以进一步确定各列的数据类型。

3.4 提取数据

得到表中各列后, 通过构造SQL便可轻松获得数据内容, 通过将某列字符类型与整数类型相比较来得到所有数据。例如:http://loc alh ost/ch ecku ser.asp?id=a dmin'%20and%20pwd=1%20--&pwd=tes tpwd将得到全部的数据字段, 通过构造SQ L语句, 可以把用户名和密码读出到一个表的列中, 然后再把该列和整数类型比较, 通过分析错误信息得所有数据。

3.5 扩大范围

到此入侵者将尝试扩大攻击范围, 将已经成功入侵的主机作为媒介, 入侵网络中其它的主机。在MS SQL Server可以通过“sele ct*from sysservers”语句查询已连接到此服务器的主机, 使用OPENROWSET命令映射这些主机。或者从本地上传木马或攻击程序到目标主机, 远程执行命令控制主机。

4、数据库注入的防范措施

4.1 区分普通用户与系统管理员用户的权限

权限设计时, 授予终端用户基本权限, 使其没有数据库对象的建立、删除等权限。即使终端用户执行恶意指令, 由于权限的限制, 这些代码也无法执行。

4.2 使用参数化语句

编写SQL语句时, 用户的输入将不直接变为SQL执行语句。而是变为参数来传递, 可以有效的防止SQL注入攻击。另外用户输入的内容也必须进行过滤。使用参数化的语句传递用户的输入变量。参数化语句不直接将用户的输入直接嵌入到SQL语句中。通过这种方法, 可以防止大部分的SQL注入攻击。

4.3 用户输入的验证

防治SQL注入攻击有两种方法, 一是对用户输入的内容进行检查与验证;二是使用参数化语句来传递用户的输入内容。检验输入变量的内容, 过滤非法内容。拒绝变量包含二进制数、转义序列和注释字符等。

利用存储过程也可以实现过滤输入变量。在程序允许的情况下, 禁止数据库包含如分号、分隔符、注释分隔符等字符。过滤这些特殊符号后, 即使攻击者在SQL语句中嵌入了恶意代码, 也将无法执行。

4.4 使用数据库自带的安全参数

为了减少注入式攻击对于SQL Server数据库的不良影响, SQL Server数据库中设计了相一些相对安全的SQL参数。在数据库的设计过程中, 程序员要尽量多使用这些现成的参数来防止恶意的SQL注入攻击。

4.5 使用专业的漏洞扫描工具寻找漏洞

通过漏洞扫描工具, 可以使管理员找到可能被存在注入漏洞的点。通过不断更新漏洞扫描工具, 可以帮助管理员找到最新的漏洞, 使管理员可以采取积极的措施来预防S QL注入攻击。如果攻击者使用的扫描程序无法扫描到SQL注入漏洞, 那么攻击者也无从下手。

5、结语

SQL注入攻击主要是因应用程序开发过程中编程不严密而造成, 使得攻击者可以通过有效手段进行攻击。要防止此类事情发生, 就要求网站程序开发人员和系统管理员必须提高安全防范意识, 了解SQL注入攻击的方法和防范方式, 尽可能减少系统程序漏洞, 提高数据库系统的安全性。

摘要:SQL注入就是攻击者通过正常的WEB页面, 把自己SQL代码传入到应用程序中, 从而通过执行非程序员预期的SQL代码, 达到窃取数据或破坏的目的。随着网络产业的迅猛发展, 基于B/S模式的网络应用越来越普及, 在这些网络程序中, 如果不对网页中用户提交的数据进行合法性判断和过滤, 就可能导致安全隐患, 恶意的浏览者可以通过提交精心构造的数据库查询代码, 这就是所谓SQL注入。

防范注入式攻击 第9篇

随着互联网技术的发展, Web应用程序的开发越来越多, 针对Web应用的攻击也在迅猛增长。通常情况下, Web系统服务器和数据库管理系统软件通过合理的策略配置与密码机制, 攻击者往往不能够直接实施攻击, Web应用与数据库的访问接口就成为攻击者实施攻击的一条捷径。SQL注入攻击就是现在存在于Web应用中最常见的一种攻击方式, 在Internet或企业内网中, 对Web应用进行的SQL注入攻击大量存在。加之一部分程序员因缺乏设计经验和安全意识, 开发出的软件产品存在安全隐患, 这种攻击手段很容易被攻击者利用。但是只要对Web应用采取合理的防范措施就可以阻止SQL注入的发生或减少攻击造成的损失。

1 SQL注入攻击原理

Web应用程序易受SQL注入攻击主要是由于Web应用程序开发人员对用户输入的验证不充分造成的。常见的SQL 注入攻击有以下几种方式:

(1) 通过登录表单进行注入。攻击者利用客户端用户向服务器端提交数据请求时输入非法数据, 通过后台服务器执行被修改过的SQL语句, 得到与程序原有预期不同的结果, 甚至可以执行删除数据库等管理操作。

(2) 攻击者通过修改Cookie内容来实施SQL注入攻击。Cookie是Web应用程序产生的、存储在客户端机器上的包含状态信息的文件。当客户端想重新获取某个Web应用程序时, 可以利用Cookie来恢复其之前的状态信息。攻击者可以在客户端修改其内容, 将攻击嵌入到Cookie中进行提交, 当Web应用程序访问Cookie的内容构造SQL查询语句时, 就会引发SQL注入攻击。

(3) 盲目SQL注入攻击。攻击者通过提交输入数据来检测应用是否存在SQL注入漏洞, 当提交一个错误的SQL查询语句时, 服务器将返回一个错误消息给客户端, 攻击者从这些错误消息中获取有用信息后反复地进行探测, 获取数据库中的敏感数据。

2 SQL注入攻击的防范措施

通常, SQL注入攻击的过程为:攻击者在Web应用程序客户端输入界面中输入精心构造的非法数据, 提交给服务器端构建SQL查询语句, 然后服务器执行该SQL查询语句并将执行的结果返回给客户端。客户端、服务器端和数据库都有可能被SQL注入攻击。由于程序开发人员无法控制客户端用户的输入内容, 所以我们只能在服务器端和数据库上加强防范SQL注入攻击。

2.1 用户输入数据转义

在用户的输入没有为转义字符过滤时, 就会发生这种形式的注入式攻击, 它会被传递给一个SQL语句。这样就会导致应用程序的终端用户对数据库上的语句实施操纵。例如, 在Web应用程序的登录页面中, 允许用户输入其用户名 (username) 和密码 (password) 两个参数, 应用程序通过users表中进行登录身份验证。假设登录用户名为:“zhangsan”, 密码为:“2011015”。则身份验证语句为:select * from users where username='zhangsan' and password='2011015', 正常情况下, 如果上述SQL查询返回一条记录, 则说明是合法用户;反之, 则是非法用户。如果分别为username和password 两个参数赋以下的值:“’a’ or 0=0--”和“’a’”, 则上述SQL语句就会变为:select * from users where username=’a’or 0=0--and password=’a’, 显然在该语句的两个判断条件中, 其中有一个总是为真, 即0=0, 因此身份验证就会成功。可见攻击者在不知道有效的用户名和密码的情况下就可以通过身份验证。

为了防范SQL注入攻击, 需要对用户输入的数据进行检查。转义机制根据应用开发采用的语言与后台数据库的不同, 所使用的具体方法可能不同, 但是其基本原理都是相同的。这种技术工作方式如下:能够将你提供给查询语句的特殊字符转义, 告诉DBMS 用户提供的输入是数据而不是代码。如果对用户提供输入数据使用合适的转义机制, DBMS将不会混淆输入, 从而避免可能的SQL注入漏洞。例如:PHP提供了输入转义机制magic_quotes_gpc, 保护应用程序免受潜在的SQL注入攻击。如果启用magic_quotes_ gpc=on功能, 就会在用户提交的` (单引号) 、“ (双引号) 、反斜线) 、NULL等敏感字符前面加上转义字符, 达到防止注入攻击的目的。

2.2 使用存储过程

使用存储过程, 可以在预防非法注入方面提供更好的保护。存储过程要求开发者首先定义SQL代码, 然后在使用中通过参数传输值。存储过程在执行前, 首先会执行预编译, 编译出错则不会执行, 这在某种程度上提供一层天然的屏障。其次, 使用存储过程而不是直接访问基本表, 可以提供更好的安全性。因此, 攻击者将不能探测到SELECT语句。第三, 存储过程可以加密。另外, 使用存储过程还有两方面好处:一是在数据库中使用专用的存储过程能严格地限制数据库用户使用此存储过程的权限。二是性能优势, 将所有的SQL代码放在数据库中, 使SQL代码的开发与应用程序开发独立存放, 方便数据库开发者的开发、升级与维护操作。VB.Net存储过程示例:

Try

Dim command As SqlCommand = new SqlCommand ("sp_getAccountBalance", connection)

command.CommandType = CommandType.StoredProcedure

command.Parameters.Add (new SqlParameter ("@CustomerName", CustomerName.Text) )

Dim reader As SqlDataReader = command.ExecuteReader ()

‘…

Catch se As SqlException

‘error handling

End Try

2.3 服务器端和数据库安全配置

(1) 为了降低一次成功SQL注入攻击所产生的危害, 应该根据具体情况分配给数据库账户最小的权限, 不要分配DBA或admin类型的访问权限给应用账户, 尽量不要分配create或delete权限给数据库账户。

(2) 因为很多的SQL注入攻击都是根据IIS提供的出错信息来判断攻击的, SQL错误信息经常会透露某些数据库设计的细节, 所以当应用程序发生SQL运行错误时, 不要把数据库返回的错误信息完全地显示给用户。合理的做法是:开发者需要对SQL出错页面进行包装, 针对所有的错误都只返回一种由程序员定义好的错误信息提示页面, 让攻击者无法从中得到有价值的内容。

(3) 经常检验IIS日志和数据表。

(4) SQL注入攻击常常会对某些关键名称进行反复探测侦查, 从而从中发现敏感信息。如operator, name, id, password 等。因此在设计数据库时, 应避免使用明显含义的表名和字段名。

(5) 在数据库端给用户密码加密。比如用MD5加密。MD5没有反向算法, 是不能解密的。攻击者即使知道经加密后存在数据库里的密码, 也无法知道原始密码。

2.4 漏洞扫描工具

目前, 在客户端进行安全漏洞检测最常用的就是各种商业漏洞扫描器, 比如HP WebInspect、IBMtational AppScan等, 或者开源的漏洞扫描器, 比如Gamja和Hscan等。这些漏洞扫描器的目标不仅仅是SQL注入漏洞, 还包括其他Web漏洞, 比如XSS漏洞、恶意文件执行、目录遍历攻击等, 这在一定程度上限制了其对SQL注入漏洞检测的深度;而且不少漏洞扫描工具都是重入侵, 轻测试。

3 结束语

针对常见的SQL注入攻击, 在程序开发阶段主动防范, 能有效提高Web应用程序的安全性。因此, 研究SQL注入攻击的原理与防范技术对于Web应用的开发人员与维护人员来说具有重要的意义, 在应用开发时就应尽量采用先进的技术, 这样才能远离SQL注入攻击对Web应用的危害, 保护系统的安全。

摘要:SQL注入攻击已成为当前Web应用程序的主要安全漏洞之一, 其危害巨大, 受到国内外研究人员的高度重视和广泛关注。介绍了SQL注入攻击的原理和分类, 并结合Web应用程序开发给出了若干防范措施。

关键词:SQL注入攻击,防范,Web应用

参考文献

[1]王丽丽.浅析SQL盲注攻击的实现[J].信息安全与通信保密, 2008 (5) .

[2]陈楠, 薛质.SQL注入攻击的实现和防范[J].信息安全与通信保密, 2005 (1) .

ARP攻击的定位与防范 第10篇

关键词:ARP;局域网;攻击

中图分类号:TP393.08 文献标识码:A文章编号:1007-9599 (2011) 06-0000-01

Positioning and Prevention of ARP Attack

He Jiadong1,Yang Ming2,Liu Xin2

(1.8630 Troops Network Center,Tianjin300250,China;2.Military Medical College Network Information Center,Tianjin300162,China)

Abstract:This paper first introduces the ARP protocol,analyzes the reasons for producing ARP attacks,describing the network's performance suffered after the ARP attack.Finally,the active defense and passive defense two security solutions given.

Keywords:ARP;LAN;Attack

一、概述

在网络世界中,MAC地址的获取过程是一个动态的解析的过程。在这个过程之中通过ARP地址解析协议将IP地址与网卡MAC地址进行映射。ARP攻击就是利用ARP地址解析过程的漏洞对局域网用户进行攻击,使受害者获得错误的IP-MAC映射关系,导致受害者与错误的主机进行通讯。利用ARP攻击,攻击者可以实现欺骗攻击、交换环境嗅探、MAC地址表溢出以及拒绝服务攻击。因此,ARP攻击对局域网存在着巨大的威胁。

二、ARP攻击

ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的底层协议,负责将某个IP地址解析成对应的MAC地址。

ARP是地址解析协议,是一种将IP地址转化成物理地址的协议。从IP地址到物理地址的映射有两种方式:表格方式和非表格方式。ARP具体说来就是将网络层地址解析为数据连接层的MAC地址。

ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。

ARP攻击主要是存在于局域网网络中,局域网中若有一台计算机感染ARP木马,则感染该ARP木马的系统将会试图通过“ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。

基于ARP协议的这一工作特性,黑客向对方计算机不断发送有欺诈性质的ARP数据包,数据包内包含有与当前设备重复的Mac地址,使对方在回应报文时,由于简单的地址重复错误而导致不能进行正常的网络通信。一般情况下,受到ARP攻击的计算机会出现两种现象:1.不断弹出“本机的0-255段硬件地址与网络中的0-255段地址冲突”的对话框;2.计算机不能正常上网,出现网络中断的症状。

三、ARP攻击的定位

一旦网络中遭受到ARP攻击,由于ARP协议天生的缺陷,必需尽快找到攻击源头,将其从网络中隔离开,才能彻底阻止其对网络继续入侵。

从攻击原理上进行分析,一方面所有的ARP攻击源都会有其特征——网卡会处于混杂模式,因此,我们可以通过ARPKiller这样的工具扫描网内有哪台机器的网卡是处于混杂模式的,从而判断这台机器有可能正在进行ARP攻击。

从另一方面来说,在局域网发生ARP攻击时,可以通过查看交换机的动态ARP表中的内容,确定攻击源的MAC地址;也可以在局域网中部署Sniffer等网络嗅探工具,定位ARP攻击源的MAC。

四、ARP攻击的防范

(一)被动防御措施

1.客户端安装杀毒软件并保持病毒库随时更新,解决终端用户不小心感染ARP病毒,从而对局域网造成危害的问题。

2.客户端安装ARP防火墙软件,防止被ARP攻击。一般ARP防火墙通过向网络中定期广播自己的MAC地址来“主动”告知其他终端不要被“欺骗”,同时在自己的客户端上绑定网关的MAC地址,防止自己被“欺骗”。

3.舍弃ARP协议,采用其他寻址协议,例如PPPOE。采用该方式则会产生一系列的兼容性问题。

总之,采用被动的防御措施,只能“治标”,不能“治本”,而且会给网络带来额外的负担。并不是我们介绍的重点。

(二)主动防御措施

1.dhcp snooping。DHCP Snooping技术是DHCP安全特性,通过建立和维护DHCP Snooping绑定表过滤不可信任的DHCP信息,这些信息是指来自不信任区域的DHCP信息。DHCP Snooping绑定表包含不信任区域的用户MAC地址、IP地址、租用期、VLAN-ID 接口等信息。

dhcp-snooping的主要作用就是隔绝非法的dhcp server,通过配置非信任端口。另外,建立和维护一张dhcp-snooping的绑定表,这张表一是通过dhcp ack包中的ip和mac地址生成的,二是可以手工指定。

这张表是后续DAI(dynamic arp inspect)和IP Source Guard 基础。这两种类似的技术,是通过这张表来判定ip或者mac地址是否合法,来限制用户连接到网络的。

2.ARP inspection。DAI是以dhcp-snooping的绑定表为基础来检查mac地址和ip地址的合法性。需要注意的是,对于前面dhcp-snooping的绑定表中关于端口部分,是不做检测的;同时对于已存在于绑定表中的mac和ip对于关系的主机,不管是dhcp获得,还是静态指定,只要符合这个表就可以了。如果表中没有就阻塞相应流量。

在开始应用Dynamic ARP Inspection时,交换机会记录大量的数据包,当端口通过的数据包过多时,交换机会认为遭受DoS攻击,从而将端口自动errdisable,造成通信中断。为了解决这个问题,我们需要加入命令errdisable recovery cause arp-inspection

在cisco网络环境下,boot request在经过了启用DHCP SNOOPING特性的设备上时,会在DHCP数据包中插入option 82的选项(具体见RFC3046)这个时候,boot request中数据包中的gateway ip address:为全0,所以一旦dhcp relay 设备检测到这样的数据包,就会丢弃。

[作者简介]

防范注入式攻击 第11篇

SQL注入攻击 (SQL Injection, 简称注入攻击) , 是利用应用程序的数据库漏洞, 向服务器提交提交SQL查询代码, 根据分析Web页面返回的结果, 进而获得数据库的关键数据或权限。

由于SQL注入攻击是从正常端口进行访问, 防火墙不会对这种攻击发出警报, 一般只能通过分析IIS管理日志才能发现。目前国内多数中小型网站采取托管方式进行管理, 采用人工分析日志来防范SQL注入攻击是比较困难的, 需要在程序设计时有针对性的处理.

本文简要说明SQL注入攻击的步骤和常见手段, 并提出几种程序设计时采用的防范方法.

1 SQL注入攻击的步骤和手段

1.1 SQL注入攻击的步骤

SQL注入攻击的步骤: (1) 通过构造特殊的SQL语句寻找注入漏洞; (2) 利用注入漏洞反复尝试, 获取后台数据库的相关信息; (3) 分析数据库相关信息, 尝试获取系统管理员权限, 为进一步攻击做铺垫。

1.2 SQL注入攻击的常见手段

SQL注入攻击的常见手段: (1) 在查询URL的末尾添加"and 1=1", "and 1=2", 构造查询语句, 根据返回页面的结果判断该页面是否存在SQL注入的漏洞; (2) 将数据库内置变量的判断语句添加到查询请求URL的末尾, 根据返回页面的结果获得关键信息。如user是SQLServer的内置变量, 在URL末尾添加and user>0, 返回页面可能将正确的user名称返回; (3) 在查询URL的末尾利用存储过程调用系统命令进行注入。如在URL末尾添加exec master..xp_cmdshell"net user name password/add"。相当于用net命令新建了用户名为name, 密码为password的Windows的帐号。

2 软件开发中防范SQL注入攻击的方法

在程序设计中, 加强用户输入的合法性检查, 采用存储过程处理输入值, 制定合理的错误返回策略, 以及设计数据库时规范命名能有效的防范Web应用程序被SQL注入方式攻击。

2.1 用户输入进行合法性检查

SQL注入攻击的手段总是离不开篡改用户输入信息.我们需要对一些特殊字符, 比如单引号、双引号、分号、逗号、冒号、连接号等进行转换或者过滤, 同时还要限制用户输入的长度。特殊字符检查的函数例子如下:

输入值采用存储过程方式处理, 利用存储过程将查询URL中的输入值参数化, 数据库服务器不会将参数的内容视为SQL指令的一部份来处理, 而在数据库完成SQL指令的编译后, 才套用参数运行, 能避免大部分SQL注入的风险。

利用存储过程的关键代码如下:

2.2 制定合理的错误返回策略

因为SQL错误信息经常会透露某些数据库设计的细节, 所以应用程序的发生SQL运行错误时, 不要把数据库返回的错误信息无差别地显示给用户。合理的做法是对SQL出错页面进行包装, 根据用户是否具有调试权限, 决定向用户显示全部错误信息或仅提示SQL运行错误。

2.3 数据库设计时规范命名

软件工程师在设计数据库时, 应避免采用常见单词随意给数据库的表和字段随意命名, 如system Info, account, name, use Id, password等。SQL注入攻击中常常会尝试这些关键名称是否存在。因此应遵循数据库设计规则, 对表和字段增加合适的前缀、后缀, 进行合理命名。

3 结束语

Web应用程序开发门槛很低, 一部分程序员因缺乏设计经验和安全意识, 开发出的软件产品存在安全隐患。针对常见的SQL注入攻击, 我们在程序开发阶段就主动防范, 能有效提高网站的安全性。

摘要:介绍了SQL注入攻击的步骤和常见手段, 并重点从软件开发角度描述防范SQL注入攻击的方法。

关键词:SQL注入,软件开发,防范方法

参考文献

[1]邹建.深入浅出SQL SERVER2005[M].北京:人民邮电出版社, 2008.

[2]Microsoft China Technology Center, SQL Server安全回顾[EB/OL], http://www.microsoft.com/china/ctc/Newsletter/04/ctc2.htm, 2004.

上一篇:国Ⅳ标准论文下一篇:利益相关农业保险