25 网站应用攻击与防御

Posted water___Wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了25 网站应用攻击与防御相关的知识,希望对你有一定的参考价值。


从互联网诞生起,安全威胁就一直伴随着网站的发展,各种Web攻击和信息泄露也从未停止。2011年中国互联网领域爆出两桩比较大的安全事故,一桩是新浪微博遭XSS 攻击,另一桩是以CSDN为代表的多个网站泄露用户密码和个人信息。特别是后者,因 为影响人群广泛,部分受影响网站涉及用户实体资产和交易安全,一时成为舆论焦点。

让我们先回顾一下这两起事故。

2011年6月28日,许多微博用户发现自己“中毒”,自动关注了一个叫hellosamy的 用户,并发布含有病毒的微博,粉丝点击后微博再度扩散,短时间内大量用户中招,数 小时后新浪微博修复漏洞。

2011年12月,网上有人发布消息称CSDN网站600万用户资料和密码被泄露,很快 该消息得到CSDN官方承认,紧接着,天涯社区、人人网等多个重要网站被报告泄露用 户数据。
那么新浪微博是如何被攻击的? CSDN的密码为何会泄露?如何防护网站免遭攻击, 保护好用户的敏感信息呢?有没有百毒不侵、固若金汤的网站呢?

攻击新浪微博的手段被称作XSS攻击,它和SQL注入攻击构成网站应用攻击最主要 的两种手段,全球大约70%的Web应用攻击都来自XSS攻击和SQL注入攻击。此外, 常用的Web应用还包括CSRF. Session劫持等手段。


1 XSS 攻击

XSS攻击即跨站点脚本攻击(Cross Site Script),指黑客通过篡改网页,注入恶意html脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。

常见的XSS攻击类型有两种,一种是反射型,攻击者诱使用户点击一个嵌入恶意脚 本的链接,达到攻击的目的,如图8.1所示。上文提到的新浪微博攻击就是一种反射型 XSS攻击。攻击者发布的微博中有一个含有恶意脚本的URL (在实际应用中,该脚本在 攻击者自己的服务器www.2kt.cn, URL中包含脚本的链接),用户点击该URL,脚本会 自动关注攻击者的新浪微博ID,发布含有恶意脚本URL的微博,攻击就被扩散了。

这次攻击还只是一次恶作剧而已,现实中,攻击者可以采用XSS攻击,偷取用户Cookie,密码等重要数据,进而伪造交易。盗取用户财产,窃取情报。

另外一种XSS攻击是持久型XSS攻击,黑客提交含有恶意脚本的请求,保存在被攻击的Web站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击的目的,如图8.2所示。此种攻击经常使用在论坛,博客等Web应用中。

XSS攻击相对而言是一种“古老”的攻击手段,却又历久弥新,不断变化出新的攻 击花样,许多以前认为不可能用来攻击的漏洞也逐渐被攻击者利用。因此XSS防攻击也 是非常复杂的。主要手段有如下两种。

消毒

XSS攻击者一般都是通过在请求中嵌入恶意脚本达到攻击的目的,这些脚本是一般 用户输入中不使用的,如果进行过滤和消毒处理,即对某些html危险字符转义,如 转义为“&gt”、"V”转义为“&lt”等,就可以防止大部分攻击。为了避免对不必要的内 容错误转义,如“3<5”中的“V”需要进行文本匹配后再转义,如“vimg src=”这样的上下文中的才转义。事实上,消毒几乎是所有网站最必备的XSS防攻击手段。

HttpOnly

最早由微软提出,即浏览器禁止页面javascript访问带有HttpOnly属性的Cookie0 HttpOnly并不是直接对抗XSS攻击的,而是防止XSS攻击者窃取Cookie。对于存放敏感 信息的Cookie,如用户认证信息等,可通过对该Cookie添加HttpOnly属性,避免被攻击 脚本窃取。


2 注入攻击

注入攻击主要有两种形式,SQL注入攻击和OS注入攻击。SQL注入攻击的原理如图8.3所示。攻击者在HTTP请求中注入恶意SQL命令(drop table users;),服务器用请 求参数构造数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。

SQL注入攻击需要攻击者对数据库结构有所了解才能进行,攻击者获取数据库表结构信息的手段有如下几种。

开源

如果网站采用开源软件搭建,如用Discuz!搭建论坛网站,那么网站数据库结构就是 公开的,攻击者可以直接获得。

错误回显

如果网站开启错误回显,即服务器内部500错误会显示到浏览器上。攻击者通过故 意构造非法参数,使服务端异常信息输出到浏览器端,为攻击猜测数据库表结构提供了 便利。

盲注

网站关闭错误回显,攻击者根据页面变化情况判断SQL语句的执行情况,据此猜测 数据库表结构,此种方式攻击难度较大。

防御SQL注入攻击首先要避免被攻击者猜测到表名等数据库表结构信息,此外还可
以采用如下方式。

消毒

和防XSS攻击一样,请求参数消毒是一种比较简单粗暴又有效的手段。通过正则匹 配,过滤请求数据中可能注入的SQL,如“drop table ”" \\b(?:update\\b.?\\bset |delete\\b\\W?\\bfom)\\b, 等。

参数绑定

使用预编译手段,绑定参数是最好的防SQL注入方法。目前许多数据访问层框架, 如IBatis, Hibernate等,都实现SQL预编译和参数绑定,攻击者的恶意SQL会被当做SQL 的参数,而不是SQL命令被执行。

除了 SQL注入,攻击者还根据具体应用,注入OS命令、编程语言代码等,利用程 序漏洞,达到攻击目的。


3 CSRF 攻击

CSRF ( Cross Site Request Forgery,跨站点请求伪造),攻击者通过跨站请求,以合法 用户的身份进行非法操作,如转账交易、发表评论等,如图8.4所示。CSRF的主要手法 是利用跨站请求,在用户不知情的情况下,以用户的身份伪造请求。其核心是利用了浏 览器Cookie或服务器Session策略,盗取用户身份。

相应地,CSRF的防御手段主要是识别请求者身份。主要有下面几种方法。

表单Token

CSRF是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以。表单Token通过在请求参数中增加随机数的办法来阻止攻击者获得所有请求参数:在页面表单中增加一个随机数作为Token,每次响应页面的Token都不相同,从正常页面提交的请求 会包含该Token值,而伪造的请求无法获得该值,服务器检查请求参数中Token的值是否 存在并且正确以确定请求提交者是否合法。

验证码

相对说来,验证码则更加简单有效,即请求提交时,需要用户输入验证码,以避免 在用户不知情的情况下被攻击者伪造请求。但是输入验证码是一个糟糕的用户体验,所 以请在必要时使用,如支付交易等关键页面。

Referer check

HTTP请求头的Referer域中记录着请求来源,可通过检查请求来源,验证其是否合 法。很多网站使用这个功能实现图片防盗链(如果图片访问的页面来源不是来自自己网 站的网页就拒绝)o


4其他攻击和漏洞

除了上面提到的常见攻击,还有一些漏洞也常被黑客利用。

Error Code

也称作错误回显,许多Web服务器默认是打开异常信息输出的,即服务器端未处理 的异常堆栈信息会直接输出到客户端浏览器,这种方式虽然对程序调试和错误报告有好 处,但同时也给黑客造成可乘之机。通过故意制造非法输入,使系统运行时岀错,获得 异常信息,从而寻找系统漏洞进行攻击。防御手段也很简单,通过配置Web服务器参数, 跳转500页面(HTTP响应码500表示服务器内部错误)到专门的错误页面即可,Web 应用常用的MVC框架也有这个功能。

HTML注释

为调试程序方便或其他不恰当的原因,有时程序开发人员会在php、JSP等服务器页面程序中使用HTML注释语法进行程序注释,这些HTML注释就会显示在客户端浏览器,给黑客造成供给便利。程序最终发布前需要进行代码review或自动扫描,避免HTML注释漏洞。

文件上传

一般网站都会有文件上传功能,设置头像、分享视频、上传附件等。如果上传的是 可执行的程序,并通过该程序获得服务器端命令执行能力,那么攻击者几乎可以在服务 器上为所欲为,并以此为跳板攻击集群环境的其他机器。最有效的防御手段是设置上传 文件白名单,只允许上传可靠的文件类型。此外还可以修改文件名、使用专门的存储等 手段,保护服务器免受上传文件攻击。

路径遍历

攻击者在请求的URL中使用相对路径,遍历系统未开放的目录和文件。防御方法主 要是将JS、CSS等资源文件部署在独立服务器、使用独立域名,其他文件不使用静态URL 访问,动态参数不包含文件路径信息。


5 Web应用防火墙

网站面临的安全问题复杂多样,各种攻击手段日新月异,新型漏洞不断被报告。如 果有一款产品能够统一拦截请求,过滤恶意参数,自动消毒、添加Token,并且能够根据 最新攻击和漏洞情报,不断升级对策,处理掉大多数令人头痛的网站攻击,就是一件很 美妙的事了。

非常幸运,真的有这样的产品 ModSecurity0

ModSecurity是一个开源的Web应用防火墙,探测攻击并保护Web应用程序,既可 以嵌入到Web应用服务器中,也可以作为一个独立的应用程序启动。ModSecurity最早只 是Apache的一个模块,现在已经有Java、.NET多个版本,并支持nginxo

ModSecurity采用处理逻辑与攻击规则集合分离的架构模式。处理逻辑(执行引擎) 负责请求和响应的拦截过滤,规则加载执行等功能。而攻击规则集合则负责描述对具体攻 击的规则定义、模式识别、防御策略等功能(可以通过文本方式进行描述)。处理逻辑比较 稳定,规则集合需要不断针对漏洞进行升级,这是一种可扩展的架构设计,如图8.5所示。

除了开源的ModeSecurity,还有一些商业产品也实现Web应用防火墙功能,如NEC的 SiteShelL


6 网站安全漏洞扫描

和计算机安全漏洞扫描一样,网站也需要安全漏洞扫描。

网站安全漏洞扫描工具是根据内置规则,构造具有攻击性的URL请求,模拟黑客攻 击行为,用以发现网站安全漏洞的工具。许多大型网站的安全团队都有自己开发的漏洞 扫描工具,不定期地对网站的服务器进行扫描,查漏补缺。市场上也有很多商用的网站 安全漏洞扫描平台。

以上是关于25 网站应用攻击与防御的主要内容,如果未能解决你的问题,请参考以下文章

25 网站应用攻击与防御

PHP之防御sql注入攻击的方式

DDOS攻击网站能不能被防御呢?

DDOS攻击网站能不能被防御呢

大型网站技术架构 | 应用服务器安全防御

CSRFXSSclickjackingSQL 的攻击与防御