论文部分内容阅读
摘 要:互联网技术的发展,使得Web技术得到了日益广泛的应用,越来越多基于Web应用的系统被部署在互联网上以提供各式各样的服务,由于互联网本身的开放性使其时刻面临着潜在恶意攻击,其安全性问题日益突出。在这样的背景下,进行Web应用安全现状与防护技术的研究具有很强的现实意义。本文从目前Web存在的问题及Web应用面临的安全威胁,并从服务器端和客户端二方面对当今Web应用所面临的安全威胁进行了系统地分析,并针对各自面临的常见安全威胁提出了相应的安全防护方案和防护建议。
关键词:Web应用 网络安全 安全威胁 安全防护
0.引言
随着我国国民经济和社会信息化进程的全面加快,互联网已经成為人们工作和生活不可或缺的部分。越来越多的政府机关、银行、企事业等单位为了适应社会的发展,树立自身良好的形象,扩大社会影响,提升工作效率,均建立起自己的门户网站。然而,由于网站是处于互联网这样一个相对开放的环境中,各类网页应用系统的复杂性和多样性导致系统漏洞层出不穷,病毒木马和恶意代码网上肆虐,黑客入侵和篡改网站的安全事件时有发生,甚至有的篡改网站的事件直接升级成政治事件,严重危及国家安全和人民利益。所以Web安全威胁形势日益严峻,Web安全防护该何去何从?如何保证Web应用程序自身的安全性,更好的为用户提供快捷稳定的服务,是我们必须应对的挑战。
传统的网络安全防护体系已无法招架如今的黑客们了。今天,网络罪犯已不仅仅把目光锁定在知名大公司上,每一个存在漏洞的网站都可能成为被攻击的目标。
因此,保障Web应用安全已经成为一个重要的研究课题。
1.目前Web存在的问题
1.1用户对Web技术的不了解
也许浏览器里最突出的一个特点就是大多数使用者完全不懂技术。但自从Web日渐深入人们的生活后,由于门槛极低,所以我们碰到了一个新情况:大多数用户对如何安全上网完全没概念。
很长一段时间以来,工程师们在开发普通的软件时,一般来说是完全不会考虑到使用者的计算机水平的。大多数情况下这样做确实没什么大问题。但这套规律在Web浏览器上却行不通。和其他复杂的软件不同,哪怕使用者连文本编辑器都用不来,但使用浏览器却完全没问题。不用说,在时下林林总总热门Web应用的目标人群中,绝大部分对Web技术是不了解的。
1.2 Web运行环境隔离困难
以往个人电脑时代的传统模式里不太可能发生文本文件窃取电子邮件这种事情,但在Web上却屡见不鲜。因为在浏览器的世界里,文档和代码交织在同一个HTML文件里,完全无关的应用之间最多只能算部分隔离,除了要遵守寥寥几个灵活的浏览器级别的安全控制框架,不同网站之间各种交互都是隐式默许的。
所以实际上,所有的Web应用都曾为不请自来的恶意跨域访问,付出过沉重的代价,最后只能用一些笨拙的方法勉强分离代码和要显示的数据。所有的Web应用都在这个事情上败下阵来,只是时间早晚而已。许多内容相关的安全问题,如跨站脚本或跨域请求伪造在Web领域都很常见,但在专用客户端的架构里,却极少碰到类似的情况。
1.3浏览器中缺乏统一的安全机制
Web完全没有一个通用的整体性安全模型。在浏览器领域里,“同源策略”机制就可算是这类的核心安全范式了,但实际上这套本身就问题多多的机制也仅是跨域交互里一个小的子集而已。
所以结果就是,有诸多这类零零碎碎耍小聪明的调整,但谁都无法担起浏览器的安全大任。由于缺乏正确性,也无从判断单个应用在什么时候结束,新的应用在什么时候开始。在这样的困境之下,到底怎样才算是出现攻击了呢?究竟是需要加载或取消权限许可,还是需要完成某项安全相关的任务呢?我们就很难掌控了。
1.4跨浏览器交互的协同存在问题
当多种浏览器企图彼此交互时,有一系列难以归咎到哪段具体代码上但又非常严重的漏洞。你没法揪出哪个特定产品就是罪魁祸首:它们都不过是在尽责地完成任务而已,唯一问题是,没有为它们定义一个全体浏览器都理应遵守的公共规范。
另一个紧密相关的问题就是,即使浏览器的安全机制表面上看来很相似,实际上却并不兼容,这种情况在Web出现之前很少发生。如果各家浏览器安全模型是不同的,那么某条Web应用开发规范对其中一种浏览器可能是合理的,但对另一种却可能完全不适用且会产生误导。而这些问题程序开发人员往往意识不到,除非他们正好使用了这种受影响的浏览器—即使这样,也往往需要等他们踩上地雷才会意识得到。
1.5 客户端和服务器端界限模糊
Web的起源完全符合常规的“客户端–服务器端”架构,但客户端和服务器端响应的功能边界被迅速模糊了。罪魁就是JavaScript技术,它在浏览器里(也就是“客户端”)代理了HTTP服务器的应用逻辑的执行。但安全问题需要客户端来负责,这显然是不现实的。
在传统的“客户端–服务器”模型里都有用途清晰具体的API,无需考虑客户端就可以非常容易评估服务器的行为,反之亦然。此外,在每个组件里,都可以轻易地隔离出较小的功能区间,确定在此区间内会有什么操作。但Web的全新模型,再加上Web上常见应用API都是既模糊又临时,所以通过以前那些分析手段,理性地推断一个系统的安全性已经完全不可能了。
2.Web应用的安全威胁
由于Web应用程序和服务的增长已超越了程序开发人员所接受的安全培训和安全意识的范围。Web应用系统的安全风险达到了前所未有的高度。
Web应用系统是由操作系统和Web应用程序组成的。许多程序员不知道如何开发安全的应用程序,他们没有经过安全编码的培训。他们的经验也许是开发独立应用程序或企业 Web应用程序,这些应用程序没有考虑到在安全缺陷被利用时可能会出现灾难性后果。 Web应用中的大多数安全威胁问题都是有以下三种情况造成的:
?誗 服务器向公众提供了不应该提供的服务,导致存在安全隐患。
?誗 服务器把本应私有的数据放到了公开访问的区域,导致敏感信息泄露。
?誗 服务器信赖了来自不可信赖数据源的数据,导致受到攻击。
许多Web服务器管理员从来没有从另一个角度来看看他们的服务器,没有对服务器的安全风险进行检查,例如使用端口扫描程序进行系统风险分析等。如果他们曾经这样做了,就不会在自己的系统上运行那么多的服务,而这些服务原本无需在正式提供Web服务的机器上运行,或者这些服务原本无需面向公众开放。另外他们没有修改对外提供服务的应用程序的banner信息,使攻击者容易获取到Web服务器对外提供应用程序的相关版本信息,并根据信息找到相对应的攻击方法和攻击程序。
许多Web应用程序容易受到通过服务器、应用程序和内部已开发的代码进行的攻击。这些攻击行动直接绕过了周边防火墙安全措施,因为端口80或 443(SSL,安全套接字协议层)必须开放,以便让应用程序正常运行。Web应用安全存在非法输入、失效的访问控制、失效的账户和线程管理、跨站脚本攻击、缓冲区溢出、注入攻击、异常错误处理、不安全的存储、拒绝服务攻击、不安全的配置管理等问题。其中最主要的是以下四大攻击:
(1)注入攻击
注入攻击漏洞,例如SQL、OS以及LDAP注入。最主要是SQL注入攻击,SQL注入攻击的主要方式是构造巧妙的SQL语句,和网页提交的内容结合起来进行注入攻击。比较常用的技巧有使用注释符号、恒等式(如1=1)、使用union语句进行联合查询、使用insert或update语句插入或修改數据等。此外还可以利用一些内置函数辅助攻击,如使用phpinfo函数显示基本信息,char函数规避单引号等。
事实证明只要是带有参数的动态网页,且此网页访问了数据库,就有可能存在SQL注入攻击,因此SQL注入攻击潜在的发生概率相对于其他Web攻击要高很多,危害面也更广。其主要危害包括:获取系统控制权、未经授权状况下操作数据库的数据、恶意篡改网页内容、私自添加系统帐号或数据库使用者帐号等。
目前基于数据库的网络应用越来越多。与此同时,用于搜索SQL注入点的软件在网络上随处可见,攻击者只需要具备少量的专业知识就可以利用这些软件寻找目标进行攻击。攻击目标和攻击者的增加使得SQL注入攻击在近几年出现扩大的趋势。
(2)DOS、DDOS攻击
DoS是“拒绝服务”(Denial of Service)的缩写,它是指故意攻击网络协议的缺陷或直接通过野蛮手段耗尽受攻击目标的资源,目的是让目标计算机或网络无法提供正常的服务,甚至系统崩溃。早期的DoS攻击都需要相当大的带宽资源来实现,而以个人为单位的“入侵者”往往没有这样的条件。但是后来攻击者发明了分布式的攻击方式,即利用工具软件集合许多的网络带宽来同时对同一个目标发动大量的攻击请求,这就是DDoS(Distributed Denial Of Service)攻击。简而言之,DDoS攻击是由“入侵者”集中控制、发动的一组DoS攻击的集合,非常难以抵挡。
DOS、DDOS攻击在线业务,造成服务瘫痪,严重影响系统的可用性。
(3)跨站攻击(XSS攻击)
当应用程序收到含有不可信的数据,在没有进行适当的验证和转义的情况下,就将它发送给一个网页浏览器,这就会产生跨站脚本攻击。攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害或者将用户转向至恶意网站。
(4)网站挂马
网站挂马指的是把一个木马程序上传到一个网站里面然后用木马生成器生一个网马,再上传到空间里面,再加代码使得木马在打开网页时运行!作为网站挂马的散布者,其目的是将木马下载到用户本地,并进一步执行,当木马获得执行之后,就意味着会有更多的木马被下载,进一步被执行,进入一个恶性的循环,从而使用户的电脑遭到攻击和控制。
网站挂马导致用户形象被破坏:攻击者通过在正常的页面中(通常是网站的主页)插入一段代码,上网者在打开该页面的时候,这段代码被执行,然后下载并运行某木马的服务器端程序,进而控制上网者的主机。
总之,Web应用攻击之所以与其他攻击不同,是因为它们很难被发现,而且可能来自任何在线用户,甚至是经过验证的用户。Web应用攻击能绕过防火墙和入侵检测产品的防护,企业用户无法发现存在的Web安全问题。
3.Web应用安全防护措施
针对上述Web应用所面临的安全风险,提高Web安全性,建立健全Web防护体系,这里从服务器端和客户端二方面进行防护。
(1)Web服务器的防护
?誗 给Web服务器服务或守护程序配置能够使它正常运行最少的权限。这样,即使攻击者控制了Web 服务器,他们只能获得运行该软件对应的用户账户的权限。这样,攻击计算机或网络上的其他软件可行方案就极为有限了。
?誗 安装最新的安全补丁并时刻关注漏洞的最新动态。
?誗 删除默认示例并避免安装类似的示例。
?誗 通过删除不需要的应用程序,安全配置同一台计算机上的其他网络服务,确保操作系统已安装最新的安全补丁来保证承载Web服务器的计算机的安全。
?誗 确保只给需要执行的脚本单独的目录运行的权限。
?誗 在Web服务器上每个目录中,都提供一个index.html文件,以避免需要目录浏览。
?誗 安装软硬件防火墙。防火墙过滤掉不属于正常 Web会话的流量。所有Web服务器都应配备技术先进的第四代防火墙。第四代防火墙可以区分出普通的Web浏览器合法的流量和攻击者的恶意攻击流量。直接部署在Web服务器上的防火墙软件可以为服务器提供额外的防护。 ?誗 安装Web应用防火墙。Web应用防火墙(Web Application Firewall,简称:WAF )是具有Web流量深度检查功能的设备。WAF能够提供基于内容的攻击的良好保护,因为他们会解析HTTP会话的实际内容,寻找与正常使用模式不匹配的已知错误或异常行为。这些设备可以是非常有效的防范大多数攻击。
?誗 安装病毒防御软件。Web服务器上应该安装防病毒软件。如果攻击者利用安全漏洞企图控制Web 服务器,并且漏洞已知,病毒防御软件能够检测到并阻止。
?誗 基于ISAPI的安全产品。此类产品截取URL请求,过滤掉可能的攻击,如缓冲区溢出。Web服务器供应商通常会免费提供基于ISAPI的安全产品。
?誗 反馈分析软件。反馈分析软件解析Web服务器的响应并与已知的正常网站响应进行比较。如果网站含有恶意代码或者被修改,响应将不匹配原始的已知的正常响应,这样能够检测出未经授权的网站更改。
?誗 入侵检测与防御。入侵检测系统(IDS)一般用于入侵的后期处理,因为系统保留事件的详细记录。而入侵预防系统(IDP)能够阻止某些已知的不良行为。
?誗 漏洞扫描软件。管理员应运行漏洞扫描程序定期来测试Web服务器的安全性,因为假如扫描仪发现了安全漏洞,攻击者很可能也会发现同样的漏洞。有很多免费或商业的漏洞扫描软件。其中有些是基于Web,有些是硬件程序,剩下的是纯软件。
?誗 输入验证。输入验证产品检查提交到Web站点每个数据是否存在异常、SQL注入命令或缓冲区溢出攻击代码。
?誗 安全日志。安全日志可以提供Web服务器攻击入侵的证据。除了存放在 Web 服務器上,还应该将它们存储网络上安全的位置以防止攻击者更改日志或删除记录。
(2)Web客户端的防护
现在网页中的活动内容已被广泛应用,活动内容的不安全性是造成客户端的主要威胁。网页的活动内容是指在静态网页中嵌入的对用户透明的程序,它可以完成一些动作,显示动态图像、下载和播放音乐、视频等。当用户使用浏览器查看带有活动内容的网页时,这些应用程序会自动下载并在客户机上运行,如果这些程序被恶意使用,可以窃取、改变或删除客户机上的信息。主要用到Java、Applet和ActiveX技术。
如何让Web应用程序更加安全?
?誗 改善Web应用程序开发来提高Web应用程序的安全性应该作为任何软件或安全开发生命周期的一部分。在软件开发生命周期(SDLC)方面有很多资源,例如微软以及美国国土安全部网络安全处提供的资源。开放Web应用程序安全项目(OWASP)也提供了开发指南,包括Development Guide 2010,其中讨论了安全Web应用程序开发的方法。作为软件开发生命周期的一部分,用户可能需要定期检查Web应用程序面对的最普遍的威胁,并且定期更新威胁列表。所有这些技巧都可以用于培训开发人员以改善应用程序,确保最小化安全漏洞,更快发现漏洞和更快修复漏洞。
?誗 部署新工具来帮助管理web应用程序安全。这些工具和其他相关的新兴Web防御技术可以成功地阻止web应用程序层攻击以及扫描web应用程序漏洞。如Web应用程序安全扫描仪可以涵盖在你的软件开发生命周期测试阶段,或者作为一个独立的项目,以积极地评估你的web应用程序的安全状态。Web应用程序防火墙能够对攻击Web应用程序的网络流量进行检查,阻止最常见的攻击。但是Web应用程序防火墙和Web应用程序安全扫描仪并不能阻止或者检测所有攻击或者漏洞,这些工具需要不断更新以发现新威胁。
具体的实施可以从以下几方面着手:
(1)查询参数化
有许多针对Web应用程序的攻击可追溯到成功窃取了口令的SQL注入攻击。企业、政府、社交网站都成为这种攻击的受害者,这使其成为一个普遍的问题。虽然许多人认为这个问题是厂商问题,但从根本上讲这属于开发者的编程问题。
网页表单的评论框、数据字段或允许自由输入数据的表单区域,特别是开放性的字符串输入,都会导致这种漏洞。SQL注入攻击甚至可以通过非可见的Web元素(如HTTP的header的值)来传递。恶意的SQL代码的简单插入,有时会导致整个数据库都有可能遭到窃取、清除或篡改,甚至被用来恶意地运行操作系统命令来破坏企业的数据库。
为阻止SQL注入,开发者必须防止非可信的输入被解析为SQL命令的一部分。阻止SQL注入的最佳方法是借助使用参数化查询的编程技术。
(2)安全存储口令
显然,如果SQL注入可被用于窃取口令,就需要我们安全地保存用户口令。保存口令的最糟糕的方法当然就是使用纯文本;但是,加密也不会好很多。原因在于加密是可逆的,还有一个原因就是MD5或者任何其它的哈希算法都是有问题的。当今的黑客们可以访问强大但并非十分昂贵的计算资源,这可以使他们创建甚至购买“彩虹表”,从而可以实时地破译一般强度的密码。如今,黑客们甚至不再使用彩虹表,转而使用高性能的家用计算机去执行高速度的字典攻击。密码加盐技术是一种有助于对付彩虹表攻击和删除口令哈希重复数据的编码技术,但仅有这种技术是不够的。
利用有限的资源,攻击者可以生成GPU破解程序,针对存储口令,它每秒钟可以执行250亿次口令尝试。
为存储口令和防止GPU破解程序和类似的资源暴露口令,我们建议结合三种主要技术:采用单向算法、加盐、有意利用慢速算法。有两个很好的算法,SCRYPT 和 PBKDF2可用来以这种形式安全地存储口令。
(3)输出编码的XSS防御
跨站脚本攻击(XSS)有一个更合适的名字,即JavaScript劫持,它可被用于会话劫持、站点破坏、网络扫描、破坏CSRF防御、站点重定向或钓鱼、远程托管脚本的加载、数据窃取和击键记录等,而且,攻击者还越来越频繁地使用XSS。 輸出编码是一种用于阻止XSS的关键编程技术,这种技术在输出时执行。在你构建用户界面时,这种编码可以在不可信的数据被动态添加到HTML之前的最后时刻执行。
首要的规则是拒绝所有,也就是不要将不可信任的数据放置到HTML文档中,除非满足特殊情况。最重要的是,千万不要接受来自不可信源的JavaScript代码。
(4)内容安全策略
内容安全策略是一种新出现的浏览器标准。其基本理念在于创造一种标准化的框架,实现基于浏览器的保护,从而只需开发者用较少的工作就可以阻止XSS攻击。
为了使内容安全策略有效,嵌入到HTML中的所有JavaScript都需要清除,并部署在一个独立的外部JavaScript文件中。从这一点来看,如果能够理解内容安全策略的浏览器检测到了HTML文档中嵌入的JavaScript(例如,黑客试图插入这种脚本),该操作将被拒绝。这种做法能真正地锁定浏览器,防止许多形式的XSS攻击。
(5)防止跨站脚本请求伪造
一旦用户登录进入了一个安全站点,然后打开了另一个标签并无意中登录了一个恶意网站,该问题站点可能包含有跨站请求,并充分利用用户已经登录进入的事实。然后,该恶意站点可能提交虚假请求,带来重大危害,如欺骗用户将金钱从银行网站转账。
为防止这类攻击,开发者需要考虑部署加密令牌,并要求用户重新进行身份验证才能完成交易,从而防止会话劫持。
(6)多因素认证
许多人认为口令作为一种单一的认证因素已经死亡。更佳的认证方案是双因素或多因素认证。总是要求用户必须携带另一种设备才能验证身份是不现实的,所以这两种认证在过去已经有了很大的普及。虽然MFA的SMS和本地应用并不完美,但确实可以减少风险。许多消费者网站和其它网络服务现在提供多因素认证,如谷歌。
(7)遗忘口令的安全设计
许多网站允许用户用简单的认证就可以请求原有口令或将新口令发送到一个注册的邮件地址。其实,更强健的过程应当是:用安全问题验证身份;通过带外方法(即SMS或令牌)向用户发送一个随机生成的密码;在同样的Web会话中验证代码并增强锁定策略;用户改变口令。
参考文献
[1] 顾建 2005 年公安部计算机信息系统安全专用产品检验情况发布 [J] 信息网络安全,2006
[2] 戴英霞 连一峰 王航 系统安全与入侵检测 北京 清华大学出版社2010
[3] 龚俭,董庆,陆展.网络安全监测实现模型[J].小型微型计算机系统,2008,38(02):27-28.
[4] 董玉格等.网络攻击与防护-网络安全与实用防护技术. 北京:人民邮电出版社,2002.8
[5] Vicka Corey et..Network Forensics Analysis. IEEE Internet Computing. November. December 2004
关键词:Web应用 网络安全 安全威胁 安全防护
0.引言
随着我国国民经济和社会信息化进程的全面加快,互联网已经成為人们工作和生活不可或缺的部分。越来越多的政府机关、银行、企事业等单位为了适应社会的发展,树立自身良好的形象,扩大社会影响,提升工作效率,均建立起自己的门户网站。然而,由于网站是处于互联网这样一个相对开放的环境中,各类网页应用系统的复杂性和多样性导致系统漏洞层出不穷,病毒木马和恶意代码网上肆虐,黑客入侵和篡改网站的安全事件时有发生,甚至有的篡改网站的事件直接升级成政治事件,严重危及国家安全和人民利益。所以Web安全威胁形势日益严峻,Web安全防护该何去何从?如何保证Web应用程序自身的安全性,更好的为用户提供快捷稳定的服务,是我们必须应对的挑战。
传统的网络安全防护体系已无法招架如今的黑客们了。今天,网络罪犯已不仅仅把目光锁定在知名大公司上,每一个存在漏洞的网站都可能成为被攻击的目标。
因此,保障Web应用安全已经成为一个重要的研究课题。
1.目前Web存在的问题
1.1用户对Web技术的不了解
也许浏览器里最突出的一个特点就是大多数使用者完全不懂技术。但自从Web日渐深入人们的生活后,由于门槛极低,所以我们碰到了一个新情况:大多数用户对如何安全上网完全没概念。
很长一段时间以来,工程师们在开发普通的软件时,一般来说是完全不会考虑到使用者的计算机水平的。大多数情况下这样做确实没什么大问题。但这套规律在Web浏览器上却行不通。和其他复杂的软件不同,哪怕使用者连文本编辑器都用不来,但使用浏览器却完全没问题。不用说,在时下林林总总热门Web应用的目标人群中,绝大部分对Web技术是不了解的。
1.2 Web运行环境隔离困难
以往个人电脑时代的传统模式里不太可能发生文本文件窃取电子邮件这种事情,但在Web上却屡见不鲜。因为在浏览器的世界里,文档和代码交织在同一个HTML文件里,完全无关的应用之间最多只能算部分隔离,除了要遵守寥寥几个灵活的浏览器级别的安全控制框架,不同网站之间各种交互都是隐式默许的。
所以实际上,所有的Web应用都曾为不请自来的恶意跨域访问,付出过沉重的代价,最后只能用一些笨拙的方法勉强分离代码和要显示的数据。所有的Web应用都在这个事情上败下阵来,只是时间早晚而已。许多内容相关的安全问题,如跨站脚本或跨域请求伪造在Web领域都很常见,但在专用客户端的架构里,却极少碰到类似的情况。
1.3浏览器中缺乏统一的安全机制
Web完全没有一个通用的整体性安全模型。在浏览器领域里,“同源策略”机制就可算是这类的核心安全范式了,但实际上这套本身就问题多多的机制也仅是跨域交互里一个小的子集而已。
所以结果就是,有诸多这类零零碎碎耍小聪明的调整,但谁都无法担起浏览器的安全大任。由于缺乏正确性,也无从判断单个应用在什么时候结束,新的应用在什么时候开始。在这样的困境之下,到底怎样才算是出现攻击了呢?究竟是需要加载或取消权限许可,还是需要完成某项安全相关的任务呢?我们就很难掌控了。
1.4跨浏览器交互的协同存在问题
当多种浏览器企图彼此交互时,有一系列难以归咎到哪段具体代码上但又非常严重的漏洞。你没法揪出哪个特定产品就是罪魁祸首:它们都不过是在尽责地完成任务而已,唯一问题是,没有为它们定义一个全体浏览器都理应遵守的公共规范。
另一个紧密相关的问题就是,即使浏览器的安全机制表面上看来很相似,实际上却并不兼容,这种情况在Web出现之前很少发生。如果各家浏览器安全模型是不同的,那么某条Web应用开发规范对其中一种浏览器可能是合理的,但对另一种却可能完全不适用且会产生误导。而这些问题程序开发人员往往意识不到,除非他们正好使用了这种受影响的浏览器—即使这样,也往往需要等他们踩上地雷才会意识得到。
1.5 客户端和服务器端界限模糊
Web的起源完全符合常规的“客户端–服务器端”架构,但客户端和服务器端响应的功能边界被迅速模糊了。罪魁就是JavaScript技术,它在浏览器里(也就是“客户端”)代理了HTTP服务器的应用逻辑的执行。但安全问题需要客户端来负责,这显然是不现实的。
在传统的“客户端–服务器”模型里都有用途清晰具体的API,无需考虑客户端就可以非常容易评估服务器的行为,反之亦然。此外,在每个组件里,都可以轻易地隔离出较小的功能区间,确定在此区间内会有什么操作。但Web的全新模型,再加上Web上常见应用API都是既模糊又临时,所以通过以前那些分析手段,理性地推断一个系统的安全性已经完全不可能了。
2.Web应用的安全威胁
由于Web应用程序和服务的增长已超越了程序开发人员所接受的安全培训和安全意识的范围。Web应用系统的安全风险达到了前所未有的高度。
Web应用系统是由操作系统和Web应用程序组成的。许多程序员不知道如何开发安全的应用程序,他们没有经过安全编码的培训。他们的经验也许是开发独立应用程序或企业 Web应用程序,这些应用程序没有考虑到在安全缺陷被利用时可能会出现灾难性后果。 Web应用中的大多数安全威胁问题都是有以下三种情况造成的:
?誗 服务器向公众提供了不应该提供的服务,导致存在安全隐患。
?誗 服务器把本应私有的数据放到了公开访问的区域,导致敏感信息泄露。
?誗 服务器信赖了来自不可信赖数据源的数据,导致受到攻击。
许多Web服务器管理员从来没有从另一个角度来看看他们的服务器,没有对服务器的安全风险进行检查,例如使用端口扫描程序进行系统风险分析等。如果他们曾经这样做了,就不会在自己的系统上运行那么多的服务,而这些服务原本无需在正式提供Web服务的机器上运行,或者这些服务原本无需面向公众开放。另外他们没有修改对外提供服务的应用程序的banner信息,使攻击者容易获取到Web服务器对外提供应用程序的相关版本信息,并根据信息找到相对应的攻击方法和攻击程序。
许多Web应用程序容易受到通过服务器、应用程序和内部已开发的代码进行的攻击。这些攻击行动直接绕过了周边防火墙安全措施,因为端口80或 443(SSL,安全套接字协议层)必须开放,以便让应用程序正常运行。Web应用安全存在非法输入、失效的访问控制、失效的账户和线程管理、跨站脚本攻击、缓冲区溢出、注入攻击、异常错误处理、不安全的存储、拒绝服务攻击、不安全的配置管理等问题。其中最主要的是以下四大攻击:
(1)注入攻击
注入攻击漏洞,例如SQL、OS以及LDAP注入。最主要是SQL注入攻击,SQL注入攻击的主要方式是构造巧妙的SQL语句,和网页提交的内容结合起来进行注入攻击。比较常用的技巧有使用注释符号、恒等式(如1=1)、使用union语句进行联合查询、使用insert或update语句插入或修改數据等。此外还可以利用一些内置函数辅助攻击,如使用phpinfo函数显示基本信息,char函数规避单引号等。
事实证明只要是带有参数的动态网页,且此网页访问了数据库,就有可能存在SQL注入攻击,因此SQL注入攻击潜在的发生概率相对于其他Web攻击要高很多,危害面也更广。其主要危害包括:获取系统控制权、未经授权状况下操作数据库的数据、恶意篡改网页内容、私自添加系统帐号或数据库使用者帐号等。
目前基于数据库的网络应用越来越多。与此同时,用于搜索SQL注入点的软件在网络上随处可见,攻击者只需要具备少量的专业知识就可以利用这些软件寻找目标进行攻击。攻击目标和攻击者的增加使得SQL注入攻击在近几年出现扩大的趋势。
(2)DOS、DDOS攻击
DoS是“拒绝服务”(Denial of Service)的缩写,它是指故意攻击网络协议的缺陷或直接通过野蛮手段耗尽受攻击目标的资源,目的是让目标计算机或网络无法提供正常的服务,甚至系统崩溃。早期的DoS攻击都需要相当大的带宽资源来实现,而以个人为单位的“入侵者”往往没有这样的条件。但是后来攻击者发明了分布式的攻击方式,即利用工具软件集合许多的网络带宽来同时对同一个目标发动大量的攻击请求,这就是DDoS(Distributed Denial Of Service)攻击。简而言之,DDoS攻击是由“入侵者”集中控制、发动的一组DoS攻击的集合,非常难以抵挡。
DOS、DDOS攻击在线业务,造成服务瘫痪,严重影响系统的可用性。
(3)跨站攻击(XSS攻击)
当应用程序收到含有不可信的数据,在没有进行适当的验证和转义的情况下,就将它发送给一个网页浏览器,这就会产生跨站脚本攻击。攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害或者将用户转向至恶意网站。
(4)网站挂马
网站挂马指的是把一个木马程序上传到一个网站里面然后用木马生成器生一个网马,再上传到空间里面,再加代码使得木马在打开网页时运行!作为网站挂马的散布者,其目的是将木马下载到用户本地,并进一步执行,当木马获得执行之后,就意味着会有更多的木马被下载,进一步被执行,进入一个恶性的循环,从而使用户的电脑遭到攻击和控制。
网站挂马导致用户形象被破坏:攻击者通过在正常的页面中(通常是网站的主页)插入一段代码,上网者在打开该页面的时候,这段代码被执行,然后下载并运行某木马的服务器端程序,进而控制上网者的主机。
总之,Web应用攻击之所以与其他攻击不同,是因为它们很难被发现,而且可能来自任何在线用户,甚至是经过验证的用户。Web应用攻击能绕过防火墙和入侵检测产品的防护,企业用户无法发现存在的Web安全问题。
3.Web应用安全防护措施
针对上述Web应用所面临的安全风险,提高Web安全性,建立健全Web防护体系,这里从服务器端和客户端二方面进行防护。
(1)Web服务器的防护
?誗 给Web服务器服务或守护程序配置能够使它正常运行最少的权限。这样,即使攻击者控制了Web 服务器,他们只能获得运行该软件对应的用户账户的权限。这样,攻击计算机或网络上的其他软件可行方案就极为有限了。
?誗 安装最新的安全补丁并时刻关注漏洞的最新动态。
?誗 删除默认示例并避免安装类似的示例。
?誗 通过删除不需要的应用程序,安全配置同一台计算机上的其他网络服务,确保操作系统已安装最新的安全补丁来保证承载Web服务器的计算机的安全。
?誗 确保只给需要执行的脚本单独的目录运行的权限。
?誗 在Web服务器上每个目录中,都提供一个index.html文件,以避免需要目录浏览。
?誗 安装软硬件防火墙。防火墙过滤掉不属于正常 Web会话的流量。所有Web服务器都应配备技术先进的第四代防火墙。第四代防火墙可以区分出普通的Web浏览器合法的流量和攻击者的恶意攻击流量。直接部署在Web服务器上的防火墙软件可以为服务器提供额外的防护。 ?誗 安装Web应用防火墙。Web应用防火墙(Web Application Firewall,简称:WAF )是具有Web流量深度检查功能的设备。WAF能够提供基于内容的攻击的良好保护,因为他们会解析HTTP会话的实际内容,寻找与正常使用模式不匹配的已知错误或异常行为。这些设备可以是非常有效的防范大多数攻击。
?誗 安装病毒防御软件。Web服务器上应该安装防病毒软件。如果攻击者利用安全漏洞企图控制Web 服务器,并且漏洞已知,病毒防御软件能够检测到并阻止。
?誗 基于ISAPI的安全产品。此类产品截取URL请求,过滤掉可能的攻击,如缓冲区溢出。Web服务器供应商通常会免费提供基于ISAPI的安全产品。
?誗 反馈分析软件。反馈分析软件解析Web服务器的响应并与已知的正常网站响应进行比较。如果网站含有恶意代码或者被修改,响应将不匹配原始的已知的正常响应,这样能够检测出未经授权的网站更改。
?誗 入侵检测与防御。入侵检测系统(IDS)一般用于入侵的后期处理,因为系统保留事件的详细记录。而入侵预防系统(IDP)能够阻止某些已知的不良行为。
?誗 漏洞扫描软件。管理员应运行漏洞扫描程序定期来测试Web服务器的安全性,因为假如扫描仪发现了安全漏洞,攻击者很可能也会发现同样的漏洞。有很多免费或商业的漏洞扫描软件。其中有些是基于Web,有些是硬件程序,剩下的是纯软件。
?誗 输入验证。输入验证产品检查提交到Web站点每个数据是否存在异常、SQL注入命令或缓冲区溢出攻击代码。
?誗 安全日志。安全日志可以提供Web服务器攻击入侵的证据。除了存放在 Web 服務器上,还应该将它们存储网络上安全的位置以防止攻击者更改日志或删除记录。
(2)Web客户端的防护
现在网页中的活动内容已被广泛应用,活动内容的不安全性是造成客户端的主要威胁。网页的活动内容是指在静态网页中嵌入的对用户透明的程序,它可以完成一些动作,显示动态图像、下载和播放音乐、视频等。当用户使用浏览器查看带有活动内容的网页时,这些应用程序会自动下载并在客户机上运行,如果这些程序被恶意使用,可以窃取、改变或删除客户机上的信息。主要用到Java、Applet和ActiveX技术。
如何让Web应用程序更加安全?
?誗 改善Web应用程序开发来提高Web应用程序的安全性应该作为任何软件或安全开发生命周期的一部分。在软件开发生命周期(SDLC)方面有很多资源,例如微软以及美国国土安全部网络安全处提供的资源。开放Web应用程序安全项目(OWASP)也提供了开发指南,包括Development Guide 2010,其中讨论了安全Web应用程序开发的方法。作为软件开发生命周期的一部分,用户可能需要定期检查Web应用程序面对的最普遍的威胁,并且定期更新威胁列表。所有这些技巧都可以用于培训开发人员以改善应用程序,确保最小化安全漏洞,更快发现漏洞和更快修复漏洞。
?誗 部署新工具来帮助管理web应用程序安全。这些工具和其他相关的新兴Web防御技术可以成功地阻止web应用程序层攻击以及扫描web应用程序漏洞。如Web应用程序安全扫描仪可以涵盖在你的软件开发生命周期测试阶段,或者作为一个独立的项目,以积极地评估你的web应用程序的安全状态。Web应用程序防火墙能够对攻击Web应用程序的网络流量进行检查,阻止最常见的攻击。但是Web应用程序防火墙和Web应用程序安全扫描仪并不能阻止或者检测所有攻击或者漏洞,这些工具需要不断更新以发现新威胁。
具体的实施可以从以下几方面着手:
(1)查询参数化
有许多针对Web应用程序的攻击可追溯到成功窃取了口令的SQL注入攻击。企业、政府、社交网站都成为这种攻击的受害者,这使其成为一个普遍的问题。虽然许多人认为这个问题是厂商问题,但从根本上讲这属于开发者的编程问题。
网页表单的评论框、数据字段或允许自由输入数据的表单区域,特别是开放性的字符串输入,都会导致这种漏洞。SQL注入攻击甚至可以通过非可见的Web元素(如HTTP的header的值)来传递。恶意的SQL代码的简单插入,有时会导致整个数据库都有可能遭到窃取、清除或篡改,甚至被用来恶意地运行操作系统命令来破坏企业的数据库。
为阻止SQL注入,开发者必须防止非可信的输入被解析为SQL命令的一部分。阻止SQL注入的最佳方法是借助使用参数化查询的编程技术。
(2)安全存储口令
显然,如果SQL注入可被用于窃取口令,就需要我们安全地保存用户口令。保存口令的最糟糕的方法当然就是使用纯文本;但是,加密也不会好很多。原因在于加密是可逆的,还有一个原因就是MD5或者任何其它的哈希算法都是有问题的。当今的黑客们可以访问强大但并非十分昂贵的计算资源,这可以使他们创建甚至购买“彩虹表”,从而可以实时地破译一般强度的密码。如今,黑客们甚至不再使用彩虹表,转而使用高性能的家用计算机去执行高速度的字典攻击。密码加盐技术是一种有助于对付彩虹表攻击和删除口令哈希重复数据的编码技术,但仅有这种技术是不够的。
利用有限的资源,攻击者可以生成GPU破解程序,针对存储口令,它每秒钟可以执行250亿次口令尝试。
为存储口令和防止GPU破解程序和类似的资源暴露口令,我们建议结合三种主要技术:采用单向算法、加盐、有意利用慢速算法。有两个很好的算法,SCRYPT 和 PBKDF2可用来以这种形式安全地存储口令。
(3)输出编码的XSS防御
跨站脚本攻击(XSS)有一个更合适的名字,即JavaScript劫持,它可被用于会话劫持、站点破坏、网络扫描、破坏CSRF防御、站点重定向或钓鱼、远程托管脚本的加载、数据窃取和击键记录等,而且,攻击者还越来越频繁地使用XSS。 輸出编码是一种用于阻止XSS的关键编程技术,这种技术在输出时执行。在你构建用户界面时,这种编码可以在不可信的数据被动态添加到HTML之前的最后时刻执行。
首要的规则是拒绝所有,也就是不要将不可信任的数据放置到HTML文档中,除非满足特殊情况。最重要的是,千万不要接受来自不可信源的JavaScript代码。
(4)内容安全策略
内容安全策略是一种新出现的浏览器标准。其基本理念在于创造一种标准化的框架,实现基于浏览器的保护,从而只需开发者用较少的工作就可以阻止XSS攻击。
为了使内容安全策略有效,嵌入到HTML中的所有JavaScript都需要清除,并部署在一个独立的外部JavaScript文件中。从这一点来看,如果能够理解内容安全策略的浏览器检测到了HTML文档中嵌入的JavaScript(例如,黑客试图插入这种脚本),该操作将被拒绝。这种做法能真正地锁定浏览器,防止许多形式的XSS攻击。
(5)防止跨站脚本请求伪造
一旦用户登录进入了一个安全站点,然后打开了另一个标签并无意中登录了一个恶意网站,该问题站点可能包含有跨站请求,并充分利用用户已经登录进入的事实。然后,该恶意站点可能提交虚假请求,带来重大危害,如欺骗用户将金钱从银行网站转账。
为防止这类攻击,开发者需要考虑部署加密令牌,并要求用户重新进行身份验证才能完成交易,从而防止会话劫持。
(6)多因素认证
许多人认为口令作为一种单一的认证因素已经死亡。更佳的认证方案是双因素或多因素认证。总是要求用户必须携带另一种设备才能验证身份是不现实的,所以这两种认证在过去已经有了很大的普及。虽然MFA的SMS和本地应用并不完美,但确实可以减少风险。许多消费者网站和其它网络服务现在提供多因素认证,如谷歌。
(7)遗忘口令的安全设计
许多网站允许用户用简单的认证就可以请求原有口令或将新口令发送到一个注册的邮件地址。其实,更强健的过程应当是:用安全问题验证身份;通过带外方法(即SMS或令牌)向用户发送一个随机生成的密码;在同样的Web会话中验证代码并增强锁定策略;用户改变口令。
参考文献
[1] 顾建 2005 年公安部计算机信息系统安全专用产品检验情况发布 [J] 信息网络安全,2006
[2] 戴英霞 连一峰 王航 系统安全与入侵检测 北京 清华大学出版社2010
[3] 龚俭,董庆,陆展.网络安全监测实现模型[J].小型微型计算机系统,2008,38(02):27-28.
[4] 董玉格等.网络攻击与防护-网络安全与实用防护技术. 北京:人民邮电出版社,2002.8
[5] Vicka Corey et..Network Forensics Analysis. IEEE Internet Computing. November. December 2004