随着SQL注入攻击日益消沉,由于Web业务的代码编写人员不严谨的字符限制而导致的XSS漏洞出现,XSS攻击成为了一种新的安全挑战。
1.什么是XSS(跨站脚本)攻击?
XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。XSS是一种经常出现在Web应用中的计算机安全漏洞,它允许恶意Web用户将代码植入到提供给其它用户使用的页面中,比如HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被骇客用来编写危害性更大的phishing攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击”,而JavaScript是新型的“ShellCode”。
XSS攻击和前段时间甚嚣尘上的SQL注入攻击一样,都是由于Web业务的代码编写人员不严谨的字符限制而导致的:当某个站点允许用户提交java script脚本(这在Web2.0年代非常普遍),而又没有对这些脚本进行严格分析,就有可能存在XSS漏洞。这就决定了XSS漏洞的独特性:任何允许提交脚本的页面都可能存在XSS漏洞,而且这些漏洞可能各不相同。
2.如何防御XSS攻击?
业内对XSS漏洞的防御一般有两种方式。
第一种方式就是代码修改,对用户所有提交内容进行验证,包括URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其它的一律过滤。接下来就是实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。最后一步就是确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。
但这种方法将降低Web业务的交互能力,用户仅能提交少量指定的字符,不适应那些交互性要求较高的业务系统。而且Web业务的编码人员很少有受过正规的安全培训,即便是专业的安全公司,由于侧重点的不同,也很难完全避免XSS攻击:2008年1月,xssed.com的一份报告指出McAfee、Symantec、VeriSign这三家安全公司的官方站点存在约30个XSS漏洞。
第二种方式就是部署专业的防御设备,目前较为流行的有入侵防御产品,利用的就是入侵防御产品对应用层攻击的检测防御能力。用户在选择相应的产品之前,最好先了解一下相关产品的XSS、SQL注入等Web威胁的检测方式,有一些入侵防御产品采用的还是传统的特征匹配方法,如对经典的XSS攻击来说,就是定义“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。这种模式匹配的方法缺点显而易见:通过编码或插入TAB键方式可以轻易躲避,而且还存在极大的误报可能,如“http://www.xxx.com/javascript/kkk.asp?id=2345”这样一个URL,由于包含了关键字“javascript”,也将会触发报警。
比较好的方式是选择那些基于攻击手法或者说基于攻击原理检测的入侵防御产品。启明星辰公司于近期发布天清入侵防御系统的新版本,没有采用传统的特征匹配方式,而是采用了行为特征分析方式,通过分析XSS所有可能的攻击手法,建立一个XSS攻击行为库来分析判断XSS攻击。采用了这种方法的入侵防御产品可以避免传统安全产品在XSS攻击检测上的漏报和误报,实现精确阻断,为面临XSS威胁的广大网络管理员提供一个很好的选择。
【编辑推荐】