WEB安全评估与防护
随着用户对客户端便利性的要求,加上服务提供方对减少客户端开发成本和维护成本的期望,越来越多的应用已经转为B/S(浏览器/服务器)结构。由于用户对页面展现效果和易用性的要求越来越高,Web 2.0技术的
随着用户对客户端便利性的要求,加上服务提供方对减少客户端开发成本和维护成本的期望,越来越多的应用已经转为B/S(浏览器/服务器)结构。由于用户对页面展现效果和易用性的要求越来越高,Web 2.0技术的应用越来越广泛,这样不但促进了Web 应用的快速发展,同时也使Web 应用中所存在的安全问题越来越明显的暴露出来。
根据X-Force 的2008年年度报告,Web 安全事件数量增长迅猛:
2008 年Web 安全事件增长
在这种背景条件下,除了越来越多的站点因安全问题而被攻击者攻陷,导致重要信息泄漏,甚至成为傀儡主机,大量傀儡主机被攻击者利用发动DDOS (分布式拒绝服务攻击)。客户端也面临着很多安全问题,恶意页面的垃圾信息传播、网页挂马导致的恶意程序的传播等等。
一. 概述
1.1 什么是Web 安全评估
Web 安全评估主要在客户的Web 平台上,针对目前流行的Web 安全问题分别从外部和内部进行黑盒和白盒安全评估。
根据Web 多层面组成的特性,通过对Web 的每一个层面进行评估和综合的关联分析,从而查找Web 站点中可能存在的安全问题和安全隐患。
1.2 Web安全评估与传统评估服务的区别
与传统的系统层面的评估不同,Web 站点的安全评估更加注重“关联性”。
在传统的系统层评估中,评估方向以系统自身安全性和策略的完善程度作为主要的评估方向,目标仅在于揭露系统配置上的缺陷。
而在Web 站点评估中,除了需要关注系统层面的安全问题外,还需要关注系统组件及第三方应用程序设计的安全性。而在Web 站点中,安全问题也不再像系统安全问题那样只具备单一的层面,而是多个层面叠加产生,因此Web 安全评估还需要更加注重各个层面安全问题的关联性,将这些问题进行必要的关联分析后来确认Web 站点整体的风险。
从这方面来说,Web 安全评估从人力到技术等各个方面的投入都要大于传统的系统安全评估,而其所能发掘的问题也是多层面的。
1.3 评估流程
二. 面临的威胁
2.1 跨站脚本
跨站脚本攻击全称为Cross Site Script,一般缩写为XSS 。此漏洞是由于应用程序在服务器端获取用户提交的数据时,没有对内容进行验证。使得攻击者精心构造的恶意脚本在普通用户的浏览器中得到执行,除了可以窃取其他用户、管理员的Cookie 外,还可以进行挂马,使得更多的访问者感染恶意代码。在Web 2.0技术流行的今天,跨站脚本漏洞还有可能被蠕虫利用,进行大规模的攻击,危害很大。
此类漏洞的根本原因是,开发人员在编写应用程序时,对用户提交的数据过滤的不够严格,或者未过滤。
由于考虑在实际开发中需要过滤的内容比较多,可能会有遗漏,因此我
,们建议开发人员在对用户输入的变量进行检查时,使用白名单方式,即,检查用户传入的变量是否是系统允许的类型,如果不是,就提示错误,直到用户传入合法的数据。
2.2 注入攻击
注入攻击中最常见的是SQL 注入,此攻击类型是由于应用程序在服务器端获取用户提交的数据时,没有对内容进行严格验证,就拼接到SQL 语句中执行。攻击者可以精心构造特定的SQL 语句使服务器执行,从而进行未授权的数据修改,甚至在数据库服务器上执行系统命令,对Web 站点的安全造成严重威胁。
此类漏洞的根本原因是,开发人员在编写应用程序时,未使用安全的方式执行SQL 查询,而使用了拼接的方式将变量输入到SQL 语句中。防范SQL 注入的最好方法是,修改应用程序代码,使用安全的方式执行SQL 查询,例如:使用PreparedStatement 方式。
2.3 越权操作
越权操作通常是由于应用程序在编写时,对身份验证部分考虑的不全面。越权操作可以分为水平和垂直两个方面:
水平越权是指:部分页面未对访问者的角色进行严格检查,A 用户可能利用应用程序的漏洞,可以访问到B 用户的数据,进行越权查看,修改,甚至删除。此类越权操作可能导致用户信息泄漏,或者被恶意篡改,严重影响网站的形象。如果发生在存放有重要数据的系统中,可能会导致直接或间接经济损失,甚至引发法律纠纷。
垂直越权是指:部分页面未对访问者的角色进行严格区分,普通用户可能利用应用程序的漏洞,将自己提升到高一级用户的权限,例如管理员权限。此类越权操作可能导致管理员权限泄漏,攻击者用管理员权限进行一些非法操作,严重影响数据的安全性。如果管理员后台合并有其他漏洞,例如:图片上传漏洞,攻击者可以向系统中上传webshell ,进一步提升权限,最终获得网站服务器的管理员权限,危害很大。
2.4 文件上传
文件上传漏洞指:开发人员编写应用程序时,未对用户上传的文件的扩展名进行严格的检查,从而导致攻击者上传webshell ,获取到网站的权限。文件上传大多数是由于开发人员的疏忽或者对安全的理解不深引发的。例如:开发人员只过滤了asp 扩展名的文件,而未过滤asa 、cer 扩展名的文件,而asa 、cer 扩展名的文件也会被asp.dll 解析,从而导致webshell 被上传。
建议开发人员在对用户上传的文件进行操作时,严格检查扩展名,与防范XSS 的方法类似,也使用白名单方式,例如:只允许用户上传jpg 、gif 、bmp 、zip 、rar 扩展名的文件,其余扩展名的文件禁止上传。
2.5 信息泄露
,信息泄漏大致分为两类:一类是由于应用程序编写时对错误处理方便考虑不全面,使得用户提交非法数据时应用程序报错,在错误信息中可能包含大量操作系统版本、Web 服务器版本、网站在服务器上的绝对路径等敏感信息。此类型漏洞攻击者可能无法直接利用,但和其他漏洞结合起来,就会对成功入侵起到很大的帮助。
还有一类是由于网站维护人员的疏忽,或者管理不规范,使得一些测试页面或者备份页面未及时删除,或者网页源代码中的注释过于详细,都可以不同程度的泄漏网站的信息。为攻击者获取网站权限创造便利条件。
2.6 第三方应用程序安全性
由于互联网已经发展的很成熟,很多开发人员在开发某些模块时可能会上网搜索一些现成的代码,将其加入到自己的程序中,但由于网络上开发人员的水平层次不齐,很多代码的安全性很差,而开发人员将这些程序嵌入到自己的程序中,会导致安全问题产生,如
fckeditor 、ewebeditor 等应用程序在历史上就发现过很多漏洞,成为很多攻击者的突破口。
建议在系统上线前,要严格检测每一个模块的安全性,开发人员尽量不随便使用网络上的不成熟的代码,如果使用,使用前需要进行严格的安全检查。
类似的需要引起注意的是,很多网站的首页都嵌入了一些应用,而这些应用由第三方厂商提供,例如:XXX 客服系统,我们的网站在引用这些应用时,需要在我们的首页中嵌入一些代码,如果第三方厂商的网站出现了安全问题,那么就会直接影响到我们的网站的安全性。
建议在使用此类第三方应用程序时,一定要确认厂商的规模及资质,尽量少嵌入第三方厂商的程序,以降低风险。
三. 评估方式
3.1 外部评估
外部评估是指测试人员由外部发起的、针对服务器和应用服务的远程评估工作,主要模拟来自外部的恶意扫描等行为,以此发现暴露于网络上的安全问题。
3.1.1 操作系统及应用服务安全性
操作系统及应用服务器的安全性主要通过使用远程安全评估系统对操作系统和应用服务层面进行远程的安全测试,例如:极光远程安全评估系统等商业产品,测试中包含了常见的安全问题:
远程缓冲区溢出漏洞
远程拒绝服务漏洞
,远程信息泄漏漏洞
远程身份验证漏洞
......
3.1.2 Web服务安全性
Web 服务的外部安全性主要通过使用远程Web 评估系统对站点进行远程的安全测试,测试中包含了常见的Web 安全问题:
跨站脚本漏洞
文件包含漏洞
命令执行漏洞
目录遍历漏洞
信息泄漏漏洞
暴力破解漏洞
„„„„
此部分工作也主要使用Web 安全评估系统进行,由于网站上页面数量和连接数量较多,使用自动化工具可以明显提高工作效率,防止遗漏。而且Web 安全评估系统都内置了大量的插件,对已知的Web 安全漏洞可以快速发现。
除了使用Web 安全评估系统外,还需要人工进行辅助分析,一方面需要确认自动化工具扫描结果的准确性,是否误报;另一方面需要对一些工具无法检查的地方进行补充,最大化的发现网站存在的问题。
3.2 内部评估
内部评估是指从内部发起针对服务器配置、策略及代码本身的安全检查。相对外部安全的黑盒测试方式来讲,内部评估更近似于白盒测试,注重功能性及安全性的检查,从根源上发现安全隐患。
3.2.1 系统安全策略检查
针对操作系统层面,使用安全策略检查工具进行检查,需要检查的内容如下: 用户管理:是否有多余用户,例如:开发用户,测试用户
,口令策略:是否设置口令策略,强制用户使用强壮的密码
不必要服务:是否存在不需要的网络服务,例如:DHCP 、DNS 、FrontPage 扩展
共享连接:是否存在不需要的共享连接:例如:windows 默认共享,unix 的NFS 共享 文件系统:是否使用可靠的文件系统,例如:NTFS 文件系统
权限设置:是否对网络服务的配置文件进行了正确的设置,防止非法用户篡改,提权 访问控制:是否对访问者的IP 地址进行了限制
审计设置:是否对网络服务启用了审计,审计日志的权限是否进行了正确的设置
3.2.2 Web服务配置检查
除了操作系统外,还需要对Web 服务的配置进行检测,需要检查的内容如下: Web 服务是否安装了不必要的组件
Web 服务的运行身份是否正确设置
Web 服务的版本信息是否隐藏
Web 服务的目录遍历功能是否启用
Web 服务是否设置了必要的ACL
Web 服务是否对隐秘页面使用SSL 传输加密
Web 服务是否加强了日志记录内容
Web 服务是否进行了严格的权限设置
3.2.3 数据库安全检查
网站评估中对数据库权限进行检测,是为了查看数据库中权限是否得到了正确的设置,一方面保护数据库中数据的安全,防止未授权用户访问;另一方面防止数据库出现安全问题后,进一步影响数据库服务器操作系统的安全,需要检查的内容如下:
数据库是否为应用程序建立了单独的帐号,避免应用程序使用数据库管理员等高权限的用户访问数据库
数据库是否为各个用户划分了角色,使不同的用户访问数据库对象时权限有所区分
,对不用的用户和角色赋予权限时,是否只赋予了最低的权限
是否启用了访问控制列表ACL ,防止无关用户连接数据库端口
3.2.4 代码安全性检查
3.2.4.1 挂马检测
攻击者在发现网站存在漏洞,进行利用,获得一定权限后,向动态网页文件或数据库中添加特定的字符串,正常用户在访问该网页后,执行恶意代码,可能导致感染病毒。在网站评估中需要网站的所有页面进行检测,确认是否有特定的恶意字符串被插入。
此类检查可以使用一些网络安全产品完成,如:绿盟科技Web 应用防火墙,或者绿盟科技极光远程安全评估系统的Web 扫描。
3.2.4.2 WebShell检测
WebShell 是站长用于管理服务器的一种asp/aspx/php/jsp等应用程序,可以进行在线编辑文件、上传下载文件、查看数据库、执行任意程序命令等操作。如果被攻击者利用,可以控制服务器。通常攻击者在发现应用程序有漏洞时,会尝试上传WebShell ,因此在网站安全评估中需要对网站所在目录中可能存在的WebShell 进行检测。
此类检查可以使用一些网络安全产品完成,如:绿盟科技Web 应用防火墙,或者绿盟科技极光远程安全评估系统的Web 扫描。
3.2.4.3 代码审计
代码审计在安全开发中是很重要的一个环节,远程漏洞扫描和渗透测试只是黑盒测试,对很多漏洞可能无法检测。目前国内大多数企业的测试部门由于对安全的理解不深,在传统软件质量测试中无法发现代码中存在的安全问题。
进行一次成功的代码审计不仅可以发现应用程序编写时产生的安全漏洞及不规范的代码,督促开发人员及时修正。同时也能提高开发人员的素质,从而提升应用程序的质量。
四. 防护策略
作为信息系统的一个典型应用,网站的安全防护与信息系统一样,涉及的层面比较多,可分为网络层面、系统层面、一般服务组件如数据库、通用软件、常用软件等、特定应用,对于前三类防护手段是通用的,我们使用的是传统的防护技术。如下图:
,对网络、通信协议、操作系统、数据库等层面上的防护可以认为是通用的,传统的边界安全设备,如防火墙、安全网关、IDS /IPS、审计产品、终端防护产品等,作为网站整体安全策略中不可缺少的重要模块,其防护效果是比较有效的。
但在对WEB 站点采用传统技术手段进行安全防护的同时,也要充分考虑如何针对用户特定应用的应用层面脆弱性及威胁进行安全保障。由于WEB 应用程序本身具备个性化的特点,因此如果需要减少WEB 应用程序本身所面临的威胁,仅仅依靠通用产品就显得多少有些力不从心了。
因此,对WEB 应用程序的防护并不能单单考虑被动的、通用的防护方式,而需要以更为主动的方式进行,如,在程序的设计过程中的功能安全性的考虑,在开发过程中的安全测试及上线前的代码审计等工作。通过这样一系列工作将安全渗透到每一个环节中,增加安全的主动性,以此达到应用程序安全、稳定。