软件系统安全性测试.docx

上传人:b****5 文档编号:2897434 上传时间:2022-11-16 格式:DOCX 页数:11 大小:68.45KB
下载 相关 举报
软件系统安全性测试.docx_第1页
第1页 / 共11页
软件系统安全性测试.docx_第2页
第2页 / 共11页
软件系统安全性测试.docx_第3页
第3页 / 共11页
软件系统安全性测试.docx_第4页
第4页 / 共11页
软件系统安全性测试.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

软件系统安全性测试.docx

《软件系统安全性测试.docx》由会员分享,可在线阅读,更多相关《软件系统安全性测试.docx(11页珍藏版)》请在冰豆网上搜索。

软件系统安全性测试.docx

软件系统安全性测试

系统安全性测试

1.1  Web程序安全测试

Web程序安全测试中的SQL注入式攻击测试和拒绝服务攻击的防范。

1.1.1 SQL注入式攻击及测试

1.什么是SQL注入式攻击

所谓SQL注入式攻击,就是指攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串中,欺骗服务器执行恶意的SQL命令。

在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。

常见的SQL注入式攻击的过程如下。

(1)某个ASP.NETWeb应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。

(2)“登录”页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。

下面是ASP.NET应用构造查询的一个例子。

System.Text.StringBuilderquery=newSystem.Text.StringBuilder(

"SELECT*fromUsersWHERElogin='")

.Append(txtLogin.Text).Append("'ANDpassword='")

.Append(txtPassword.Text).Append("'");

(3)攻击者在用户名和密码输入框中输入"'or'1'='1"之类的内容。

(4)将用户输入内容提交给服务器之后,服务器运行上面的 ASP.NET 代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成 SELECT*fromUsersWHERElogin=''or'1'='1'ANDpassword=''or'1'='1'。

(5)服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。

(6)由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。

如果攻击者知道应用会将表单中输入的内容直接用于验证身份查询,他就会尝试输入某些特殊的 SQL 字符串篡改查询,改变其原来的功能,欺骗系统授予其访问权限。

系统环境不同,攻击者可能造成的损害也不同,这主要由应用访问数据库的安全权限决定。

如果用户账户具有管理员或其他比较高级的权限,攻击者就可能对数据库的表执行各种他想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表。

SQL注入式攻击的总体思路如下。

(1)发现SQL的注入位置。

(2)判断后台的数据库类型。

(3)确定XP_CMDSHELL可执行的情况。

(4)发现Web虚拟目录。

(5)上传ASP木马。

(6)得到管理员权限。

2.SQL注入式攻击的种类

1)没有正确过滤转义字符

在用户的输入没有被转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句。

这样就会导致应用程序的终端用户对数据库上的语句实施操纵。

比方说,上面那段代码就会演示这种漏洞。

这种代码的设计目的是将一个特定用户从其用户表中取出,但是如果用户名被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作可能就不仅仅是代码的编写者所期望的那样了。

如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为'1'='1'永远是正确的。

在一些SQL服务器上,如在SQLServer中,任何一个SQL命令都可以通过这种方法被注入,包括执行多个语句。

例如:

statement:

="SELECT*FROMusersWHEREname='"+userName+"';"

通过给userName赋如下的值,将会导致删除“users”表,同时又可以从“data”表中选择所有的数据(实际上就是透露了每一个用户的信息)。

a';DROPTABLEusers;SELECT*FROMdataWHEREnameLIKE'%

这就将最终SQL语句变成下面这个样子。

SELECT*FROMusersWHEREname='a';DROPTABLEusers;SELECT*FROMdataWHEREnameLIKE'%';

2)非法类型处理

如果一个用户提供的字段并非一个强类型,或者没有实施类型强制,就会发生这种形式的攻击。

当在一个SQL语句中使用一个数字字段时,如果程序员没有检查用户输入的合法性(是否为数字型),就会发生这种攻击。

例如:

statement:

="SELECT*FROMdataWHEREid="+a_variable+":

"

从这个语句可以看出,作者希望a_variable是一个与“id”字段有关的数字。

不过,如果终端用户选择一个字符串,就绕过了对转义字符的需求。

例如,将a_variable设置为:

1;DROPTABLEusers,它会将“users”表从数据库中删除,SQL语句变成:

SELECT*FROMDATAWHEREid=1;DROPTABLEusers;

3)数据库服务器中的漏洞

有时,数据库服务器软件中也存在着漏洞,如mysql服务器中mysql_real_escape_string()函数的漏洞。

这种漏洞允许一个攻击者根据错误的统一字符编码执行一次成功的SQL注入式攻击。

4)盲目的SQL注入式攻击

当一个Web应用程序易于遭受攻击而其结果攻击者却不见时,就会发生所谓的盲目的SQL注入式攻击。

有漏洞的网页可能并不会显示数据,而是根据注入到合法语句中的逻辑语句的结果显示不同的内容。

这种攻击相当耗时,因为必须为每一个获得的字节精心构造一个新的语句。

但是一旦漏洞的位置和目标信息的位置被确立以后,一种称为Absinthe的工具就可以使这种攻击自动化。

5)条件响应

注意,有一种SQL注入迫使数据库在一个普通的应用程序屏幕上计算一个逻辑语句的值,如:

SELECTbooktitleFROMbooklistWHEREbookId='OOk14cd'AND1=1;

这会导致一个标准页面,而语句SELECTbooktitleFROMbooklistWHEREbookId='OOk14cd'AND1=2在页面易于受到SQL注入式攻击时,它有可能给出一个不同的结果。

这样的一次注入将会证明盲目的SQL注入是可能的,它会使攻击者根据另外一个表中的某字段内容设计可以评判真伪的语句。

6)条件性差错

如果WHERE语句为真,这种类型的盲目SQL注入会迫使数据库评判一个引起错误的语句,从而导致一个 SQL 错误。

例如,SELECT1/0FROMusersWHEREusername='Ralph'。

显然,如果用户Ralph存在的话,被零除将导致错误。

7)时间延误

时间延误是一种盲目的SQL注入,根据所注入的逻辑,它可以导致SQL引擎执行一个长队列或者是一个时间延误语句。

攻击者可以衡量页面加载的时间,从而决定所注入的语句是否为真。

以上仅是对SQL攻击的粗略分类。

从技术上讲,如今的SQL注入式攻击者们在如何找出有漏洞的网站方面更加聪明,也更加全面,现在已出现了一些新型的SQL攻击手段。

黑客们可以使用各种工具来加速漏洞的利用过程。

我们不妨看看theAsproxTrojan 这种木马,它主要是通过一个发布邮件的僵尸网络来传播,其整个工作过程可以这样描述:

首先,通过受到控制的主机发送的垃圾邮件将此木马安装到电脑上,然后,受到此木马感染的电脑会下载一段二进制代码,在其启动时,它会使用搜索引擎搜索用微软的ASP技术建立表单的、有漏洞的网站。

搜索的结果就成为SQL注入攻击的靶子清单。

接着,这个木马会向这些站点发动SQL注入式攻击,使有些网站受到控制、破坏。

访问这些受到控制和破坏的网站的用户将会受到欺骗,从另外一个站点下载一段恶意的JavaScript代码。

最后,这段代码将用户指引到第三个站点,这里有更多的恶意软件,如窃取口令的木马。

3.检查和防御SQL注入式攻击的方法

1)使用参数化的过滤性语句

要防御SQL注入式攻击,用户的输入就绝对不能直接被嵌入到SQL语句中。

恰恰相反,用户的输入必须进行过滤,或者使用参数化的语句。

参数化的语句使用参数而不是将用户输入嵌入到语句中。

在多数情况中,这样的SQL语句可以被修正。

下面是一个使用Java和JDBCAPI的例子。

PreparedStatementprep=conn.prepareStatement("SELECT*FROMUSERSWHEREPASSWORD=?

");

prep.setString(1,pwd);

总体上讲,有两种方法可以保证应用程序不易受到SQL注入式攻击:

一是使用代码复查,二是强迫使用参数化语句。

强迫使用参数化语句意味着嵌入用户输入的 SQL语句在运行时将被拒绝。

2)避免使用解释程序

因为这正是黑客们借以执行非法命令的手段。

3)避免出现一些详细的错误消息

因为黑客们可以利用这些消息,要使用一种标准的输入确认机制来验证所有的输入数据的长度、类型、语句、企业规则等。

4)使用专业的漏洞扫描工具

攻击者们目前正在自动搜索攻击目标并实施攻击。

其技术甚至可以轻易地被应用于其他 Web 架构中的漏洞。

企业应当投资一些专业的漏洞扫描工具,如大名鼎鼎的Acunetix的Web漏洞扫描程序等。

一个完善的漏洞扫描程序不同于网络扫描程序,它专门查找网站上的 SQL 注入式漏洞。

最新的漏洞扫描程序可以查找最新发现的漏洞。

5)在Web应用程序开发过程的所有阶段实施代码的安全检查

首先,要在部署Web应用之前实施安全测试,这种措施的意义比以前更大、更深远。

其次,还应当在部署之后用漏洞扫描工具和站点监视工具对网站进行测试。

1.1.2 拒绝服务攻击及检测

1.什么是拒绝服务攻击

拒绝服务,英文为“DenialofService”,也就是我们常说的DoS。

那么什么是拒绝服务攻击呢?

大家可以这样理解,凡是能导致合法用户不能进行正常网络服务的行为都算是拒绝服务攻击。

拒绝服务攻击的目的非常明确,就是用超出被攻击目标处理能力的海量数据包消耗可用系统、带宽资源,致使网络服务瘫痪,从而阻止合法用户对正常网络资源的访问,达到攻击者不可告人的目的。

常见的DoS攻击有针对硬件(网络设备、路由器、交换机)的DoS、针对网络层(IP协议)核心实现的DoS和针对应用层(浏览器、Web服务器、Mail)的DoS。

2.从DoS到DDoS

DDoS(DistributedDenialofService,分布式拒绝服务)的攻击方式虽然与DoS一样,也是向被攻击目标连续发送大量的IP包,以导致服务器不能为合法用户提供正常服务,但是它区别于DoS的绝妙之处在于动员了大量“无辜”的计算机向目标共同发起进攻,采用分布式拒绝服务攻击手段。

DDoS与DoS的最大区别就是人多力量大。

原来的DoS是一台机器攻击目标,现在的DDoS是很多台机器利用它们的高带宽攻击目标,更容易将目标网站攻克。

除此之外,DDoS攻击方式较为自动化,攻击者可以把他的程序安装到网络中的多台机器上,所采用的攻击工具使被攻击对象难以察觉,只要攻击者发出攻击命令,这些机器便发起进攻。

DDoS的表现形式主要有两种:

一种为流量攻击,主要是针对网络带宽的攻击,即大量攻击包导致网络带宽被阻塞,合法网络包被虚假的攻击包淹没而无法到达主机;另一种为资源耗尽攻击,主要是针对服务器主机的攻击,即通过大量攻击包导致主机的内存被耗尽或CPU被内核及应用程序占完而无法提供网络服务。

3.DoS/DDoS的防范

对付DoS/DDoS是一个系统工程,想仅仅依靠某种系统或产品防住DDoS是不现实的,可以肯定的是,完全杜绝DDoS是不可能的,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1