访问 Web 应用程序的内容始终通过带有通用前缀的 URL 进行,例如 http://host/Web-Application-Prefix/file.html。(3) web.xml 部署描述符允许控制 Web 应用程序行为的许多方面。(4) 分离/隔离。每个 Web 应用程序都有自己的:ServletContext、类加载器、会话、URL 前缀和目录结构。Web 应用程序的结构包括:(i) 常规 Web 内容和 JSP(HTML、样式表、图像等)。位于主目录或其子目录中。(ii) Servlet。如果 Servlet 已解压,则位于 WEB-INF/classes 目录或其子目录中。(iii) 实用程序类和已解压的 bean。与 Servlet 位于同一位置。(iv) JAR 文件。位于 WEB-INF/lib 目录。(v) Web.xml。(vi) 标签库描述符文件。(vii) WEB-INF 目录中客户端无法直接访问的文件。网络安全的两大目标是:(1) 保护浏览器。用户应该能够访问任何网站而不受损害,例如未经用户许可的信息被窃取,以及网站 A 无法干扰网站 B 的会话。(2) 保护 Web 应用程序。驻留在 Web 上的应用程序应具备与独立应用程序相同的安全属性。.

当一个组织部署 Web 应用程序(例如,在 Tomcat Web 服务器上通过 JDBC 与 SQL 数据库服务器交互)时,它就等于邀请所有人向其发送 HTTP/HTTPS 请求。隐藏在这些请求中的攻击可以绕过传统的安全措施,例如防火墙、过滤器、入侵防御系统 (IPS)、杀毒软件 (AV) 等。每个 Web 应用程序的代码都成为安全边界的一部分。因此,Web 应用程序的数量、规模和复杂性都会增加组织安全边界的暴露程度。网站可以嵌入来自多种来源的内容,例如框架、脚本、CSS、对象(Flash)等。Web 2.0 一词大约在 2004 年出现,它指的是那些能够促进交互式信息共享、互操作性、以用户为中心的设计以及 Web 协作的 Web 应用程序。Web 2.0 网站正变得越来越交互式,允许用户以越来越协作的方式执行更多操作。例如,混搭 (Mashup) 允许 Web 用户轻松地将第三方服务集成到他们的网站中。 Web 2.0 中使用的一项技术是名为 AJAX(异步 JavaScript 和 XML)的编程技术。例如,谷歌地图在其地图处理 Web 应用程序中就使用了 AJAX。AJAX 有助于创建更具吸引力的网站和网页,但同时也为攻击者提供了攻击 Web 服务器和利用越来越多网站漏洞的途径。基于 AJAX 的网站具有更大的攻击面,因为它们与浏览器的交互更多,并且可以在客户端(PC、PDA、iPad、手机、iPhone/Android 等)执行 JavaScript 代码。AJAX 增加了跨站脚本攻击 (XSS) 的风险,这种攻击通常发生在网站开发人员未正确编写网页代码的情况下。攻击者可以利用这些漏洞窃取用户帐户、发起网络钓鱼诈骗以窃取信息,以及在用户计算机上下载恶意代码。.


Identification2p目前,应用程序遭受攻击的风险日益增加。据美国国家标准与技术研究院 (NIST) 称,95% 的漏洞存在于软件中。据 Gartner 称,75% 的攻击发生在应用程序层面。据 White Hat Security 称,十分之七的网站存在严重漏洞。据 Forrester 称,62% 的组织在过去十二个月中遭遇过安全漏洞。据Cenzic称,利用来自NIST(及其NVD,即NIST国家漏洞数据库)、MITRE、SANS、US-CERT和OSVDB的数据,Web应用程序漏洞占总数的比例呈上升趋势:2008年第二季度为73%,2008年第三季度为80%,2009年第三季度和第四季度为82%。IBM的数据显示,Web应用程序漏洞的累计数量从2004年的2000个增加到2008年的约15000个。Gartner的数据显示,到2010年,60%的IT组织已经能够将漏洞检测作为其软件开发生命周期(SDLC)流程的组成部分。根据 Tom Brennan 2010 年发布的《网站安全统计报告》,存在至少一个漏洞的网站比例如下:ASP (74%)、ASPX (73%)、Cold Fusion (86%)、Struts (77%)、JSP (80%)、PHP (80%) 和 Perl (88%)。同样,存在至少一个漏洞的网站比例如下:ASP (57%)、ASPX (58%)、Cold Fusion (54%)、Struts (56%)、JSP (59%)、PHP (63%) 和 Perl (75%)。.

根据德克萨斯州首席信息安全官 (CISO) 2010 年 2 月的报告,2010 年的攻击趋势包括:(i) 恶意软件、蠕虫和木马。通过电子邮件、即时通讯以及受感染或恶意网站传播。(ii) 僵尸网络和僵尸程序。这些攻击不断提升其加密和隐蔽能力,更难被检测。(iii) 恐吓软件。这类软件伪装成免费的安全软件,但实际上感染了恶意软件。(iv) 客户端软件攻击。这类攻击的目标包括浏览器(例如 Safari、Mozilla Firefox、Google Chrome、Opera、Netscape、Internet Explorer、Webkit 等)、媒体播放器、PDF 阅读器等。(v) 勒索软件攻击。这类攻击包括 DDoS 攻击,恶意软件会索要赎金,如果用户拒绝,则会加密硬盘,使其无法使用。(vi) 社交媒体攻击。用户对在线好友的信任使得这些网络成为攻击者的主要目标,不仅用于娱乐,也用于商业用途。(vii) 云计算。云计算的日益普及使其成为攻击者的另一个首要目标。 (八)网络应用程序。众所周知,它们的开发过程中安全控制措施不足。(九)预算削减。这对安全人员来说是一个重大问题,却为网络犯罪分子提供了可乘之机。.


组件类型和Web结构。.

Web 的主要结构组件包括:(i) 客户端/浏览器;(ii) 服务器。服务器运行在配备多核处理器的复杂硬件上;(iii) 缓存。缓存支持各种有趣的实现方式并减少等待时间;(iv) 互联网。互联网是全球网络基础设施,它基于 TCP/IP 协议栈实现数据传输。Web 的主要语义组件包括:(a) HTTP(超文本传输​​协议)。HTTP 是一种简单、无状态的请求/响应协议,它不加密数据。它是 TCP/IP 协议栈中浏览器和服务器之间的应用层协议,与 SSL/TLS 集成后构成 HTTPS。一些 HTTP 请求消息包括:GET,客户端使用 URL 从服务器请求文档;PUT,服务器向客户端发送文档;HEAD,检索 URL 指定的文档信息,而不是文档本身;OPTIONS,检索可用选项信息;POST,客户端向服务器发送信息,例如注释。 DELETE 请求用于删除 URL 指定的文档;TRACE 请求用于回显传入的请求;CONNECT 请求用于缓存。HTTP 消息的第一种类型是请求。客户端浏览器构建并发送消息,例如:一个典型的 HTTP 请求是:GET http://www.labrs.com/index.html HTTP/1.0。第二种类型的消息是响应。Web 服务器构建并发送响应消息。一个典型的 HTTP 响应是:HTTP/1.0 301 Moved Permanently Location http://www.rs.com/lab/index.html。客户端 Web 浏览器与一个或多个服务器通信。浏览器发出请求,服务器以响应作为回应。为了在请求之间保持状态,服务器会生成一个会话令牌。此标识符会随每个请求/响应在浏览器和服务器之间传递。Cookie 是一小段可以随请求/响应传递的数据,例如,作为跟踪 Cookie 来了解每个用户的偏好。. 

HTTP 版本包括:(i) HTTP 1.0 (RFC 1945)。它是一种停止等待协议,每个文件都使用独立的 TCP 连接。每个文件都会建立连接,然后断开连接。其特点是数据包使用效率低下。服务器在等待期间必须维护多个连接。客户端通过 DNS 将服务器名称解析为 IP 地址,并向 Web 服务器的 80 端口发出请求。客户端为每个 URL 建立一个独立的 TCP 连接。一些浏览器会打开多个 TCP 连接(例如,Netscape 默认使用四个连接)。服务器返回 HTML 页面。服务器种类繁多,实现方式也各不相同。Apache 服务器是使用最广泛的服务器,并且可以免费获取。浏览器解析页面并请求嵌入的对象。(ii) HTTP 1.1 (RFC 2068)。它提供了更高的性能,使用持久连接、流水线技术、缓存选项,并支持压缩。持久连接使用同一个 TCP 连接来传输多个文件。它显著减少了数据包流量,但如果服务器负载增加,从客户端的角度来看,性能可能不会提高。流水线技术是指将尽可能多的数据打包到一个数据包中。它需要在 HTTP 头部中包含长度字段。流水线技术可能会减少数据包流量或提高性能,也可能不会。在这种情况下,页面结构至关重要。(b) HTML(超文本标记语言)和 XML(可扩展标记语言)等语言。HTML 是 SGML(标准化通用标记语言)的子集,它提供了一个包含指向其他文档和应用程序的嵌入式链接的环境。HTML 文档使用元素来标识具有不同用途的文本段或显示某些功能,例如粗体文本。标记元素在用户查看页面时是不可见的。文档由浏览器呈现。并非所有 Web 文档都是 HTML,开发人员使用所见即所得 (WYSIWYG) 编辑器来生成 HTML。(c) 使用 URI(统一资源标识符)的命名机制。.

Web资源需要名称/标识符,即URI。资源可以位于互联网上的任何位置。URI是一个抽象概念:它是指向资源的指针,可以通过请求方法生成不同的响应;URI链接到通用应用程序(http、ftp、telnet等)。请求方法例如是搜索或修改对象。URL示例:http://www.abc.com/index.html 包含了协议(http://、ftp://、telnet://、mailto://)。此电子邮件地址已启用反垃圾邮件保护。您需要启用 JavaScript 才能查看。.URI 包含以下信息:HTTP 协议、主机名 seclab.net、端口 80、路径 class、查询 ?name=ITK5 和代码片段 doc6。最常用的 URI 形式是 URL(统一资源定位符);但是,它与其他 URI 形式存在差异(参见 RFC 2396)。URL 是一种 URI,它除了标识资源之外,还通过描述资源的主要访问机制来提供定位资源的方法。URN 标识的是通用服务,而不是特定资源:urn:service:sos.police。Web 的基本结构如下:(i) 客户端使用 Web 浏览器应用程序通过 HTTP/HTTPS 向服务器发送 URI 以请求网页。(ii) 网页使用 HTML、XML 等构建,包含文本、图形、声音、视频和嵌入式文件。(iii) 服务器或缓存以请求的网页或错误消息作为响应。 (iv) 客户端浏览器显示服务器返回的网页。网页使用 HTML/XML 编写,并在浏览器中显示文本、图形、声音和视频以及数据。整个系统基于 TCP/IP 协议运行,例如 IP、TCP、DNS 等。在网络发展的早期,网站由静态网页组成。静态内容显然限制了应用程序与用户的交互。为了克服这一限制,Web 服务器厂商通过实现通用网关接口 (CGI) 机制,允许外部程序运行。这使得用户输入能够被发送到外部程序或脚本进行处理,然后将结果返回给用户。CGI 是当今所有 Web 应用程序框架、脚本语言和 Web 服务的先驱。Web 应用程序使用的一些技术包括 CGI、过滤器、脚本、Web 应用程序框架(例如 Sun 的 J2EE)、PHP、ASP.NET、JSP、JavaScript、Java 和 HTML。一些客户端脚本语言包括 DHTML(HTML、XHTML、HTMLx)、JavaScript、Java(Applet)、VBScript、Flash、ActiveX、XML/XSL 和 CSS。Web 应用程序的开发语言包括 PHP、CSS、AJAX、JavaScript、Apache、SQL、JSON 和 Ruby。Eclipse 是一个免费的开源 Web 应用程序开发环境,支持 Java 和其他语言,并支持自动部署(参见 http://www.eclipse.org/downloads/)。它与 Tomcat 集成(参见 http://www.coreservlets.com/Apache-Tomcat-Tutorial/eclipse.html/)。.


Identification3pSTRIDE/DREAD Web应用程序威胁建模系统。STRIDE
/DREAD威胁建模系统基于:(1) STRIDE,它识别以下威胁类别:(i) 身份欺骗。身份欺骗是拥有众多用户但在应用程序和数据库级别使用单一执行上下文的应用程序中的关键风险。用户不应能够冒充任何其他用户或成为该用户。(ii) 数据篡改。用户可以更改任何传递给他们的数据,因此可以更改客户端验证、GET和POST数据、Cookie、HTTP标头等。应用程序不应向用户发送应用程序自身即可获取的数据,例如利率或期限。

应用程序必须仔细检查从用户处收到的任何数据,以确定其准确性和适用性。(iii) 否认机制。如果用户活动缺乏足够的跟踪/追溯和审计,用户可能会对交易提出异议。例如,如果用户声称“我不会向此外部账户转账”,而无法从应用程序开始到结束跟踪其活动,则该交易很可能需要撤销。应用程序应具备充分的否认控制措施,例如 Web 访问日志、各级审计日志以及自上而下的用户上下文信息。理想情况下,应用程序应以用户身份运行,但许多框架通常无法实现这一点。(iv) 信息泄露。用户对向系统泄露私人信息持谨慎态度。如果攻击者能够以匿名或授权用户身份泄露用户信息,则否认机制将失效。应用程序必须包含强有力的控制措施来防止篡改用户身份,尤其是在使用单个帐户运行整个应用程序的情况下。用户的浏览器也可能泄露信息。并非所有浏览器都能正确实现 HTTP 标头请求的无缓存策略。每个应用程序都有责任尽量减少浏览器存储的信息量,以防信息泄露,攻击者可以利用这些信息了解更多用户信息,甚至冒充用户。(v) 拒绝服务攻击。应用程序应意识到自身可能成为拒绝服务攻击的目标。对于需要身份验证的应用程序,诸如大型文件、复杂计算、强大的搜索或长时间查询等高成本资源应仅供授权用户使用,而非匿名用户。对于无法享受这种资源限制的应用程序,应尽可能减少应用程序各个方面的工作量,使用快速数据库查询(或不使用),并避免暴露大型文件或为每个用户提供唯一链接,以防止简单的拒绝服务攻击。(vi) 权限提升。如果应用程序提供用户和管理员角色,则必须确保用户无法将自己提升到更高的权限角色。具体而言,仅仅不提供用户链接是不够的;所有操作都必须通过授权矩阵进行控制,以确保只有正确的角色才能访问特权功能。(2) DREAD。用于计算风险值,风险值是五个要素的算术平均值:风险 (DREAD) = (损害 + 可复现性 + 可利用性 + 受影响用户 + 可发现性) / 5。它由以下五个要素组成:(i) 损害潜力。衡量威胁实施后造成的损害程度。值为 0 表示无损害,值为 5 表示单个用户的数据受到影响或泄露,值为 10 表示整个系统的数据受到影响。(ii) 可复现性。衡量此威胁的复现难易程度。值为 0 表示即使对于应用程序管理员来说也非常困难或不可能。值为 5 表示如果需要一到两个步骤,则可能需要授权用户。值为 10 表示只需在未登录的情况下访问浏览器地址栏即可。(iii) 可利用性。衡量利用此威胁所需的条件。值为零表示拥有高级的定制攻击工具、网络技能和高级编程能力;值为五表示恶意软件存在或使用标准攻击工具实施攻击;值为十表示仅使用浏览器。(iv) 受影响用户。衡量有多少用户会受到此威胁的影响。值为零表示没有用户受到影响;值为五表示部分用户受到影响;值为十表示所有用户受到影响。(v) 可发现性。衡量发现此威胁的难易程度。值为零表示非常困难或不可能;需要访问系统或源代码;值为五表示可以通过检查网络跟踪来检测到;值为九表示此类漏洞的详细信息是公开的,可以使用高性能搜索引擎(例如 Google、Yahoo 等)找到;值为十表示漏洞信息位于地址栏或表单中。.  

常见网络漏洞。主动安全措施。
我们可以通过以下几个来源识别网络漏洞、威胁和安全风险:(i) OWASP(开放式Web应用程序安全项目)每年发布一份名为“十大可缓解威胁/风险”的文档,该文档基于MITRE CVE的原始数据。(ii) SANS每年发布一份名为“SANS 20大互联网安全攻击目标”的文档。(iii) eEye Digital Security。(iv) Zero-Day Tracker。(v) US-CERT每周更新其信息。IE、Safari等网络浏览器的一个漏洞在于,它们能够自动采取措施来限制网页不一致的影响。例如,如果网页缺少结束标签`</body>`,即使该词被拆分到`<script>`标签内的两行中(一行表示`java`,另一行表示`script`),浏览器也可能正确显示页面或执行JavaScript代码。攻击者会利用此漏洞导致网站故障。关于Web应用程序安全存在诸多误解,例如认为SSL/TLS可以保护网站,传统防火墙可以保护Web应用程序,或者IDS/IPS可以保护Web和数据库服务器。Web应用程序安全不能仅仅依靠杀毒软件、漏洞扫描器、防火墙/DMZ、IDS/IPS、补丁/合规性管理以及服务器安全来解决。它还需要额外的安全措施,例如静态分析(一些静态分析工具供应商包括Veracode、Fortify、Coverity、KlocWork和OunceLabs)和动态分析(一些动态分析工具供应商包括IBM的RationalAppscan、HP的WebInspect、Ntoobjectives的NTOSpider、Cenzic的Hailstorm以及Whitehat Security)、Web应用程序/XML防火墙、代码审查和分析、全面的软件开发生命周期(SDLC)保护以及开发人员培训。

被动应对安全漏洞是远远不够的,会导致危机不断循环,最终往往酿成灾难。因此,主动防护措施至关重要,例如:(i) 在软件开发生命周期 (SDLC) 中集成安全测试。(ii) 如果系统或 Web 应用程序环境发生重大变更,则需要重新测试和认证。(iii) 审查架构并分析潜在漏洞(缺陷)。(iv) 实施集成安全和纵深防御。(v) 使用 XML 防火墙保护 Web 服务,通过 WSDL 验证、XML 模式验证、XML 内容路由等技术,有效缓解 SQL 注入、外部实体攻击、递归有效载荷、模式投毒、拒绝服务攻击、缓冲区溢出等威胁。.

结语
我们的研究团队在Web应用程序的安全综合与分析领域已有二十余年的研究经验。
本文是LEFIS-APTICE项目(由欧盟委员会Socrates基金资助)的一部分研究成果。

作者:Javier Areitio Bertolín 教授、博士 – 电子邮件: 此电子邮件地址已启用反垃圾邮件保护。您需要启用 JavaScript 才能查看。. 工程学院教授,​​网络与系统研究组组长,德乌斯托大学。.

参考文献
- Areitio, J. “信息安全:网络、计算和信息系统”。Cengage Learning-Paraninfo。2010 年。
- Areitio, J. “用于检测、预防和管理攻击/入侵的系统分析新方法”。Conectrónica 杂志。第 123 期。2009 年 1 月。
- Fry, C. 和 Nystrom, M. “安全监控。企业事件检测的成熟方法”。

更多信息或报价