杨晨霞 涂风涛
摘 要: 本文主要基于Web程序安全机制的实现方法,探讨几种严重威胁Web程序安全性的漏洞的基本原理,以及相应的漏洞挖掘和防御技术,包括验证机制的安全性、会话管理机制的安全性等。
关键词: Web程序;程序安全;防御机制
Research on Web Program Security and Defense Mechanism
Yang Chenxia Tu Fengtao
YuZhang Normal University Jiangxi Nanchang 330103
Abstract: This paper is mainly based on the implementation method of Web program security mechanism,discusses the basic principles of several vulnerabilities that seriously threaten the security of Web programs,and the corresponding vulnerability mining and defense technologies,including the security of the authentication mechanism,the security of the session management mechanism,and so on.
Key words: Web program;Program security;Defense mechanism
一、绪论
Web程序安全是网络安全研究领域的热点问题之一。因为Internet上的大多数Web站点实际上都是应用程序,它们功能强大,在服务器和浏览器之间进行双向信息传递。用户从Web程序中获取的内容大部分属于私密和高度敏感的信息,因此安全问题至关重要,如果人们认为某个Web程序不够安全,他们就会拒绝使用。
因为Web程序各不相同,所包含的安全问题也不相同,而且许多Web程序常常是由几位开发人员独立开发,但是他们可能根本不了解所编写的代码可能引起的安全问题,这就使得Internet上有相当多的Web程序存在各种各样的安全漏洞。更为严重的是,Web程序为了实现核心功能,通常需要与内部服务器系统建立各种连接,而这些系统往往保存着高度敏感的信息。因此,一个潜在的Web程序漏洞可能造成极其严重的后果,带来巨大的经济损失。
二、Web程序安全问题
由于Web程序无法控制浏览器,用户几乎可以向Web程序提交任意恶意信息。攻击者可以采取的手段包括:
(1)修改浏览器与服务器之间传递的数据,包括请求的参数、Cookie和HTTP报文头部。例如,攻击者可以更改隐藏在HTML表单中产品价格字段,从而以较低的价格购买产品;或是修改在HTTP Cookie中传送的会话令牌,劫持其他用户的会话。
(2)在多阶段交互中,攻击者可以打乱提交请求的顺序,在每个阶段重复提交请求或者不提交参数。他们的操作可能与程序预期的操作完全不同。
(3)攻击者使用多种浏览器访问Web应用程序,或者使用辅助工具协助攻击,自动提交大量普通浏览器无法提交的请求,查找Web程序存在的安全问题。
如果一个Web程序必须接收并且处理未经验证的可疑输入,就会产生核心的安全问题。更为严重的是,以下Web程序开发过程中的各种潜在因素导致该安全问题很难解决。
(1)开发人员缺少Web程序安全意识。虽然大多数IT安全人员掌握了不少网络安全知识,但是他们对Web程序安全有关的许多核心概念还是不太了解,使得对所用编程框架的安全性往往做出错误假设。
(2)基于应用程序框架开发的模式。Internet中存在许多提供现成代码组件的应用程序框架,可以处理各种常见的功能,包括身份验证,页面模板和公告牌等,Web程序员基于这些框架可以快速方便地开发出强大的Web程序。但是这些框架中也可能存在潜在的安全风险。由于许多公司可能会使用相同的框架,因此,只要框架中存在一个安全漏洞,就会影响众多相关的Web程序。
(3)Web程序的安全威胁发展迅速。Web程序的攻击方法层出不穷,新概念和新威胁出现的速度很快,已有的Web防御技术在这些新的攻击面前失去作用。因此,即使在Web程序开发阶段针对已有威胁已经实现了相应的安全防御机制,也可能到部署阶段时会面临许多未知的威胁。
(4)程序开发时间和可用资源十分有限。为了按时完成项目,开发者往往会忽略一些安全问题,程序部署时会存在安全隐患。
另外,Web程序的安全问题同时也改变了目标系统的安全边界,传统的网络防御技术可以在网络边界部署防火墙、IPS、VPN、恶意代码防范等网络安全组件,抵御外部攻击者发起的攻击。但是,当用户访问Web程序时,防火墙必须允许用户通过HTTP或HTTPS协议访问内部服務器,Web程序需要连接后台服务器通信。因此,当Web程序存在漏洞时,Internet的攻击者只击需要从浏览器提交专门设计的输入数据,就可以绕过这些防御组件,直接攻击目标系统的核心后端服务器。例如,攻击者希望攻击某个银行网络,在银行使用Web程序之前,他必须发现某个网络服务中存在的安全漏洞,并利用它进入银行内部某个网络,然后尝试绕过限制其访问关键网络的防火墙,在关键网络上确定重要的服务器,最后监听或破解关键用户的口令以进行登录。但是,如果银行使用存在漏洞的Web程序,那么攻击者很可能只需要修改隐藏在HTML表单字段中的一个帐号,就可以达到相同的目的。
因此,不管是对部署Web程序的组织,还是对访问它们的用户而言,针对Web程序的攻击都是很严重的威胁。
三、核心防御机制
由于Web用户的任意输入都不可信,因此Web程序必须实施大量的安全机制来防御可能的Web攻击。我们主要可以采用以下四个方面的安全机制。
(1)处理用户访问。每个用户只能访问被授权访问的信息。绝大部分Web程序都使用三种相互关联的安全机制处理用户访问,即身份验证、会话管理和访问控制。
①身份验证。身份验证机制是Web程序处理用户访问的最基本机制,绝大部分Web程序程序都采用经典的身份验证模型,即要求用户提交账号和口令。在一些安全性要求很高的Web程序中,往往会结合其他证书,如客户端数字证书、智能卡,或者采取多阶段登录过程来增强身份验证过程。
②会话管理。会话管理机制的安全性取决于令牌的安全性,令牌生成过程中的缺陷有可能使得攻击者可以猜测发布给其他用户的令牌。如果令牌传输过程中没有加密,令牌就可能被攻击者监听并截获。
③访问控制。当Web程序从HTTP请求中正确识别发出请求的用户身份后,访问控制机制需要考虑各种相关领域与不同类型的功能,需要支持各种拥有不同权限的用户角色,限制每位用户只允许访问Web程序的部分数据。
(2)处理用户的输入,防止错误输入造成潜在危险。必须假设所有的用户输入都是恶意的,大量针对Web程序的攻击都与提交恶意输入有关。因此,安全处理用户的输入是保证Web程序安全的一个基本要求。输入确认(Input validation)是防御这些攻击的常用手段。
我们根据输入的多样性,可以采用以下方法。
①白名单。输入确认机制仅接收与白名单匹配的输入。例如,程序在查询用户的身份证号码时,可能会确认其仅包含数字信息,长度必须为18,未通过白名单匹配的输入将会被拒绝。这种方式是处理恶意输入的最有效方法。
②净化。净化(sanitizing)指Web程序把接收到的各种恶意字符删除,只留下已知安全的字符,或者在对输入进行处理之前对恶意字符进行适当编码或转义。例如,对于试图执行非授权目录中的文件操作的恶意输入串“..\\..\\..\\..\\windows\\system32\\cmd.exe”,可以执行净化操作,删除所有的“..\\”字符,净化后的输入串为“windows\\system32\\cmd.exe”,该输入串会因为“指定路径不存在”而被拒绝访问。净化方法十分有效,也是处理恶意输入问题的通用解决办法。
③完全编程。许多时候,使用不安全的编程方式处理用户提交的数据是Web程序存在漏洞的根本原因。只要保证处理过程绝对安全即可避免有关漏洞。例如:在数据库访问过程中正确使用参数化查询,即可有效避免SQL注入攻击;再如,禁止向操作系统直接提交用户输入作为命令执行,即可有效避免命令注入。
④语义检查。在一些Web攻击过程中,攻击者提交的输入与正常用户提交的输入在语法上完全相同,此时只能执行严格的语义检查。例如,攻击者可以修改隐藏的表单字段,提交较低的产品价格,Web程序必须确认所提交的产品价格与存储在数据库中的产品价格是否一致。
(3)防范Web攻击,即使Web程序成为攻击目标时,程序依然可以正常运转。当Web程序成为攻击者的直接攻击目标时,应该能够处理并应对这些攻击,这是Web程序安全机制的一项主要功能。Web程序为处理攻击而采取的措施包括处理错误、维护日志、报警、主动响应。
①错误处理机制。程序部署后,Web程序不应该在页面响应中返回任何系统生成的消息或者其他调试信息。大多数Web开发语言都提供良好的异常处理机制,Web程序应充分利用这些机制处理各种错误。
②维护日志。日志一般会记录每件事情的发生时间、发起主机的IP地址和通过验证的用户账号等。日志文件本身必须受到安全保护,避免被非授权修改和访问。一种有效的方法是将日志保存在一个单独的主机或服务器上,并且只与Web程序进行安全的信息交互。
③报警。报警机制必须即能够准确报告每次真实的攻击,又不能产生过多的虚警,需要在两个相互矛盾的目标之间取得平衡,并且在可能的情况下可以将多个事件进行关联,集中到一个报警中,确定Web程序正在受到的攻击。我们的做法是将报警与Web程序的输入确认机制和其他访问控制方法紧密结合,提供完全自定义的恶意行为报警,一旦防御机制对输入进行检查后发现有任何异常,即可产生报警。
④主动响应。Web程序可以采取自动的响应措施阻止攻击者进行攻击尝试,例如减缓对攻击尝试的页面响应速度或者终止攻击者的会话,这些措施能够阻止很多Internet中的随意攻击行为,并为管理员赢得时间去采取其他进一步的措施。
(4)管理、监控和配置Web程序的行为。任何有用的Web程序都需要管理与维护,它是Web程序安全机制的重要组成部分,用于帮助管理员管理用户账户和角色、应用监控和审计功能、配置Web程序等。
四、总结
几乎所有的Web程序都存在相似的安全問题,采用相同的核心安全机制,只是实现的形式存在巨大的差异。处理用户访问和用户输入的安全机制最为重要,它们是攻击者的主要攻击对象,一旦被攻破,攻击者就可以访问其他用户数据或者执行任意代码。
参考文献:
[1]沈鑫剡.计算机网络安全[M].北京:清华大学出版社,2009.
[2]叮叮.常见十大Web应用安全漏洞[J/OL].http://www.evget.com/article/2014/6/20/21209.html.
[3]汪列军.安全漏洞及分类[J/OL].http://www.2cto.com/article/201405/299140.html.