Web安全漏洞分类


1.1 Web安全漏洞分类
Web安全漏洞可以分为两类:一类包括平台的安全漏洞,另一类是应用自身的安全漏洞。

1.1.1    Web平台的安全漏洞

Web平台自身的安全漏洞——许多Web应用程序共享的部分,例如Linux、Windows、Apaehe和oraele等。它们扮演着以下角色:

n           Web服务器   这一部分为用户浏览器提供Web页面。最常用的例子就是Apache和IIS。每种Web服务器都有一系列安全漏洞。

n           应用服务器    这一部分包括用户操作、解释、提供数据。应用服务器可以是Web服务器的一部分,例如PHP和Apache、ASP.NET和IIS。另一方面,应用服务器可以是物理上独立的服务器,例如Tomcat Servlet引擎。每种Web应用服务器同样有一系列安全漏洞。

n           数据库    这一部分存储应用所需的全部数据。尽管用户能够与Web和应用服务器交互,但他们通常不能直接访问数据库服务器。大多数情况下,应用务器代理用户和数据库之间的数据,并格式化数据使之能够正确存储。每种数据库服务器也都有一系列安全漏洞。

Web应用自身的安全漏洞,即Web站点中的编程错误引起的暴露用户的详细息、允许恶意用户执行任意的数据库查询,甚至允许通过远程命令行访问服务。

1.1.2    web应用程序漏洞

基于Web的应用程序漏洞是错综复杂的,常见的Web应用程序漏洞有以下大类。

Ø          跨站点脚本攻击

XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。

Web页面经常在应用程序的某个地方对用户的输入进行回显。一般在预先设计好的某个特定域中输入纯文本才能被回显,但是HTML并不仅仅支持纯文本,还可以包含多种客户端的脚本代码,以此来完成许多操作,诸如验证表单数据,或者提供动态的用户界面元素。

Ø          SQL Injection攻击

SQL命令就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。

SQL命令即为应用系统前端Web和后端数据库之间的接口,使得数据可以传递至Web应用程序,也可以从其中发送出来。很多Web站点都会利用用户输入的参数动态的生成SQL查询要求,攻击通过在URL、表格域,或者其他的输入域中输入自已的SQL命令,以此改变查询属性骗过应用程序,从而可以对数据库进行不受限制的访问。

Ø          物理路径泄露漏洞

物理路径泄露,即攻击者可能利用此漏洞得到的信息对系统进行进一步的攻击,提供Web、FTP、SMTP等公共服务器都可能出现物理路径泄露的问题。

物理路径泄露属于低风险等级缺陷,它的危害一般被描述为“攻击者可以利用此漏洞得到信息,来对系统进一步地攻击”。导致Web服务器路径泄露的原因有很多,可能是Web平台本身、脚本语言解释器、引擎插件、组件、辅助程序等一些原因错误导致的。很多时候Web服务器路径泄露漏洞是由于Web服务器处理用户请求出错导致的,如通过提交一个超长的请求,或者是某个精心构造的特殊请求,或者是请求一个Web服务器上不存在的文件。这些请求都有一个共同特点,那就是被请求的文件肯定属于CGI脚本,而不是静态HTML页面。比如,提交一个不存在的CGI文件请求,或者提交一个没有输出的CGI文件的请求,请求返回结果将会把网站本身所在的物理路径给暴露出来。

另一种类型的Web服务器路径泄露漏洞是由于Web服务器的某些显示环境变量的程序错误输出了Web服务器的物理路径。

同时,在Web应用网站开发过程中,程序员没有合理应用编程语言提供的出错处理函数。例如Perl中的“die”函数,如果没有在错误信息后面加上“\n”的话,就很可能会导致物理路径泄露。

Ø          源代码泄露漏洞

源代码泄露漏洞的产生是由于输入验证错误引起的。

以IIS为例,IIS是通过文件扩展名来决定将一个文件内容直接显示出来还是作为脚本执行的。对于ASP文件,如果请求中的扩展名是“.asp”那么IIS可以正确处理。如果将扩展名后面加一个“%81”,IIS将不认为这是一个ASP文件,也就不会执行。但是文件系统会忽略文件名后的“%81”,可以正确找到文件。例如请求URL为:http://www.megamoneycorp.com/getreport.asp?item=Q1-2005.htm,则可以构造URL:http://www.megamoneycorp.com/getreport.asp?item=getreport.asp,以显示源代码。

Ø          目录遍历漏洞

目录遍历攻击指的是恶意用户找到受限文件的位置并且浏览或者执行它们。

Web服务器程序(包括Web应用程序)就是向用户提供包含动态或者静态页面,这些页面都存储在Web服务器中。Web服务器和Web应用程序的作用就是对这些页面进行处理并将其发送到客户机上,同时将正在访问的用户限制在表示Web内容的文件中,而且还需要阻止攻击者浏览和执行Web服务器上的任何其它文件。目录遍历主要使用猜测文件是否存在的方法进行。

Ø          执行任意命令

执行任意命令即执行任意操作系统命令,主要包括两种情况:一是通过遍历目录,如二次解码和UNICODE解码漏洞,来执行系统命令;另外一种就是Web服务器把用户提交的请求作为SSI指令解析,因此导致执行任意命令。

在Web发展的早期,程序员利用C语言或者Perl语言编写Web应用程序,存放于Unix服务器上。这个理念就是编写短小的应用程序,并且将他们连接起来,完成更复杂的功能。在安全方面,当数据被传送到一个不同环境的其他组件中时,会对Web服务器造成很大的安全漏洞,使得攻击变得异常的容易。这种攻击背后的思想就是运行自已输入的命令,而不是按照开发人员预期的那样,执行某个指定的程序。

攻击这种漏洞的目标是发送到服务器上的操作系统命令或者可执行程序的用户输入。这些输入域的一部分会常出现在应用程序的参数中,这些参数可能是页面中包含的一些被引用的文件,也可能是其他程序的参数。

Ø          缓冲区溢出漏洞

缓冲区溢出攻击是指在扰乱具有某些特权运行的程序的功能的前提下,使得攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了。一般而言,攻击者攻击root程序,然后执行类似“exec(sh)”的执行代码来获得root的shell,但不一直是这样的。为了达到这个目的,攻击者必须达到如下的两个目标:(1)在程序的地址空间里安排适当的代码。 (2)通过适当地初始化寄存器和存储器,让程序跳转到我们安排的地址空间执行。由于这类攻击使任何人都有可能取得主机的控制权,所以它代表了一类极其严重的安全威胁。

缓冲区溢出是针对Web应用最严重的一种攻击,当程序无法检查正在处理的数据输入量时就有可能发生缓冲区溢出问题,如果输入的数据量超过了程序为其分配的内存空间的大小,它就会侵占其他程序堆栈的内存空间,这些内存中原有的其他数据就会被覆盖。大多数情况下,这些被覆盖的数据会导致软件崩溃。

Ø          拒绝服务攻击

服务拒绝攻击企图通过使你的服务计算机崩溃或把它压跨来阻止你提供服务Q929230,服务拒绝攻击是最容易实施的攻击行为,主要包括:死亡之ping (ping of death)、泪滴(teardrop)、SYN洪水(SYN flood)、Land攻击、Smurf攻击、 Fraggle攻击、 电子邮件炸弹、畸形消息攻击等。

拒绝服务攻击思想是,代码的执行总是需要时间的,每次调用函数,或者是由Web服务器或者是由应用程序或者是由数据库,函数执行的过程中总要耗费一定的处理器周期。如果执行过程需要很长的时间,并且操作系统无法将其切换到其他的程序上,服务器就会被束缚在为一个请求进行服务的过程中。

Ø          CGI漏洞攻击

CGI 是 Common Gateway Interface 的缩写,是服务器端和用户沟通的程序,使得外部程序能生成HTML、图像或者其他内容,而服务器处理的方式与那些非外部程序生成的HTML、图像或其他内容的处理方式是相同的。

CGI程序是交互性的,它允许用户把自已的数据按照一定的格式发送给服务器,然后由服务器对其进行解释,之后再把解释的结果传给用户,如果用户提交了一些非正常的数据,那么服务器在解释这些数据时可能会绕过IIS对文件名所作的安全检查,在某些条件下,攻击者可以执行任意系统命令。

Ø          被破坏的认证和会话管理

被破坏的认证和会话管理(Broken Authentieation and Session Mangement):授权和会话管理包括处理用户授权和管理激活态的会话的所有方面。

授权是这个过程的关键方面,但是即使是固有的授权验证也有可能遭到含有漏洞的信任管理功能破坏。这些固有的授权验证包含修改密码、忘记密码、记住密码、账号更新和其它更新功能。在网络中,通常的用户授权包括userID和密码的使用。功能更为强大的授权方法包括基于密码标记或者统计的软件和硬件,但是这种机制对于大多数的网络应用程序而言是一笔无法负担的开销。大多数的账户和会话管理漏洞可能导致对于用户或者系统管理员账号的破坏。开发团队通常会低估设计这些保障网站信任授权和会话管理方案的复杂性,网络应用程序必须建立会话来跟踪每个用户的请求数据流。HTTP并不提供这方面的能力,所以网络应用程序必须自己创建它们。

Ø          不当异常处理

不当异常处理(Improper Error Handling)可能给网站带来各种各样的安全问题。最常见的问题就是向用户显示内部出错信息,如果这些出错信息不加选择都展现到用户面前,那么就可能公开了本不应该公开的细节。这些细节可能为攻击者提供网站潜在漏洞的重要线索,并且这类信息也会干扰到正常用户。

在正常操作时,Web应用程序也会生成一些出错情况,内存不够、空指针异常、系统调用失败、数据库不存在、网络超时等。这些错误必须被一个即定的严密方案正确地处理,从而为用户提供一份有意义的出错信息,为Web应用维护人员提供诊断信息,而不是为攻击者提供有用的信息。有时即使出错信息不能提供过多的细节,出错信息的差异也会把该Web应用是如何工作的这样重要的信息暴露出来:并且暴露了那些出错信息背后的隐含意义。例如,当一个用户试图访问一份他无权访问的文件时,通常出错信息会给出如下提示“访问被拒绝”,这种区别可能会暴露这个文件是否存在,或者这个Web应用的目录结构。

Ø          不安全的存储

大多数Web应用程序都需要存储敏感的信息,它们或者将信息存储到数据库中,或者将信息存储到文件系统的某个位置上。通常,人们使用加密技术来保护这些敏感的信息,虽然加密技术已经很容易使用,但是开发人员还是常常在将加密技术和应用程序相结合的时候出错。开发人员可能过高地估计了加密技术所带来的安全度,并且他们不会像留意网站中其它部分的安全那样注意存储部分的安全。经常出错的几个地方包括:

n         未对关键数据进行加密;

n         密钥、证书和密码的不安全存放;

n         在内存中不恰当地保存关键信息;

n         不当的随机资源;

n         不当的算法选择;

n         一种新开发的加密算法;

n         当密钥更改或者其它必备的维护过程发生时,无法提供最新的技术支持。

Ø          不安全的配置管理

Web应用程序服务器的配置对于Web应用程序的安全起到了关键作用。许多应用程序服务器提供了Web应用程序能够使用的服务,例如数据存储、目录服务、邮件、信息处理等等,没有合理配置的服务器很可能导致各种安全问题。

一般说来,网络开发小组和网站管理小组的工作是各自独立的,Web应用程序的安全要求两者共同努力,并且需要其中的成员都能够保障系统Web应用程序的安全。许多服务器的配置问题妨碍了安全性,它们包括:

n         服务器软件漏洞或者错误的配置允许列出目录和进行目录遍历;

n         没必要的缺省、备份或者例子文件;

n         服务器软件未打补丁的漏洞;

n         不当的文件和目录访问权限;

n         没有必要的服务,包括内容管理和远程管理;

n         使用缺省密码和账号;

n         被激活的、可以被访问的管理或者调试功能;

n         使用缺省证书;

n         通过外部系统的不正确授权;

n         错误配置的SSL证书和加密设置。

上述问题一旦被检测出来,可能会被很快攻克并且造成网站的巨大破坏,得逞的攻击也能给网站的备份系统(包括数据库和其它相关的网站)造成很大损害。

Ø          竞争条件

竞争条件是指,当由于事件次序异常而造成对同一资源的竞争,从而导致程序无法正常运行时,就会出现“竞争条件”。该漏洞通常为设计问题,典型的有Ptrace漏洞、广泛存在的文件操作时序竞争。

竞争条件无需介入同一程序的两个部分之间的竞争;如果一个外部的攻击者可以通过意想不到的方式干扰程序,那么就会出现很多安全问题。条件竞争主要针对一些管理服务器而言,这类服务器一般是以system或root身份运行的。当它们需要使用一些临时文件,而在对这些文件进行写操作之前,却没有对文件的属性进行检查,一般可能导致重要系统文件被重写,甚至获得系统控制权。

Ø          未验证的输入

Web应用程序一般是根据HTTP请求中用户的输入决定如何响应,攻击者能够利用HTTP请求中的任何一部分,包括URL、请求字符串(Qurey String)、cookie头部、表单项,隐含参数传递代码来发动攻击。

一些网站使用过滤器过滤掉恶意输入,但是对于输入信息存在着各种各样的编码方式,几乎所有的HTTP输入都可以被表示成多种形式,使用编码技术可以绕过Web应用程序的验证与过滤机制,而且对这种攻击难以防范。很多网络应用程序只在使用了客户端机制来验证输入。但是,客户端的验证机制可以简单的绕过去,这就造成了网络应用程序直接面对那些恶意的输入参数而毫无防备。攻击者可以使用简单的工具例如telnet来生成他们的HTTP请求,他们可以很不在意那些开发人员在客户端预先设置好安全机制。

Ø          错误的访问控制

错误的访问控制(Broken Access Control),访问控制有时也被称为授权,是指一个网络应用程序如何将一些对于某些内容和功能的访问权利赋予某些用户而不是其它用户。这种验证通常在授权之后执行,并且管理那些己经授权了的用户允许进行的什么操作。

你可能感兴趣的:(Web安全漏洞分类)