软件安全技术
上QQ阅读APP看书,第一时间看更新

4.2 Web漏洞概述

随着Web 2.0的推广,基于Web环境的面向普通终端用户的互联网应用越来越广泛。Web业务的迅速发展把越来越多的个人和企业的敏感数据通过Web展现给用户,但同时也带来了很多安全隐患。

Web应用安全漏洞是Web应用程序在需求、设计、实现、配置、维护和使用等过程中,有意或无意产生的缺陷,这些缺陷一旦被攻击者所利用,就会造成对网站或用户的安全损害,从而影响构建于Web应用之上正常服务的运行,危害网站或用户的安全属性。

1.Web安全漏洞分类工作

为了研究Web安全漏洞,一些安全组织对Web安全漏洞做了分类工作,介绍如下。

1)开放式Web应用程序安全项目(Open Web Application Security Project,OWASP)组织对Web应用的安全漏洞进行定期的统计分析。从2004年开始,OWASP大约每3年就会公布几年中著名的Web应用或环境十大威胁(漏洞)清单,网址为https://www.owasp.org/index.php/ Category:OWASP_Top_Ten_Project。

美国联邦贸易委员会(FTC)强烈建议企业遵循OWASP发布的十大Web漏洞防护守则。美国国防部亦将其列为最佳实践,国际信用卡资料安全技术PCI标准也将其列入其中。

2)与OWASP一样,在Web安全领域同样非常著名的有通用漏洞披露(CVE)和一般弱点列举(CWE),本书已经在2.2节做了介绍。

3)Wiki上也有最新的Web安全攻击与防范技术,可以与OWASP上的工作相互借鉴,这样就可以更全面地知道每个攻击是如何进行的,以及如何进行有效防范,网址为http://en.wikipedia.org/wiki/Category:Web_security_exploits。

2.Web安全十大漏洞

由于本书完成时OWASP还没有正式发布2017年最终版,下面仍然介绍2013年发布的Web安全十大威胁(漏洞),如图4-2所示。

图4-2中涉及的注入(Injection)、跨站脚本(CrossSiteScripting,XSS)和跨站请求伪造(CrossSiteRequestForgery,CSRF)这几类典型的Web安全漏洞的原理、利用及开发人员防护措施将分别在本章的4.3~4.5节中介绍。下面介绍其余的七大Web安全漏洞的原理、利用及开发人员防护措施。

(1)失效的身份认证与会话管理(Broken Authentication and Session Management)

失效的身份认证和会话管理漏洞是指,应用程序的权限管理和会话管理模块在处理用户登入登出、密码管理和用户登录信息本地存储等方面,存在认证被绕过或者身份信息被截获破解的可能。

图4-2 Web安全十大漏洞及威胁程度

该类漏洞利用方式举例如下。

●某应用程序在用户遗忘密码,提供重置功能并将该密码发送至用户注册邮箱时,由于缺乏对用户ID、用户名和邮箱一致性的校验,或者仅在客户端做校验,导致恶意用户可以通过工具修改发送至服务器的ID、用户名和邮箱信息,获得合法用户的登录凭证。

●用户在服务器登录进行身份验证后,与服务器之间的会话没有会话超时限制,这为攻击者提供了在线上使用暴力破解用户口令的可能性。

●用户使用公共计算机浏览网站,登录验证身份之后,离开时没有退出账户而是选择直接关闭浏览器,使得下一个用户使用该浏览器可以看到继续原用户的会话(Session)。

开发人员防范的基本方法如下。

●始终生成新的会话。如用户登录成功生成新ID。

●防止用户操纵会话标识。具体措施如下:注重用户密码强度,普通用户密码要求6位以上,重要密码要求8位以上,极其重要的密码使用多种验证方式;不应使用简单或可预期的密码恢复问题;登录出错时不应提供太多的提示,应使用统一的出错提示;登录验证成功后更换Session ID;第一次登录时强制修改密码;对多次登录失败的账号进行短时锁定;设置会话闲置超时;提供用户注销退出功能,用户关闭浏览器或者注销时,删除用户Session;使用128位以上具备随机性的Session ID,不应在URL中显示Session ID。

●保护Cookie,如在应用程序中为Cookie设置安全属性:Secure flag和HttpOnly flag。

(2)不安全的直接对象引用(Insecure Direct Object Reference)

不安全的直接对象引用漏洞是指,应用程序没有检查用户是否具备访问权限而让其能够直接调用系统的资源(如文件、数据库记录),或者是修改URL表单的参数。

该类漏洞利用方式举例如下。

某网站的新闻检索功能可搜索指定日期的新闻,但其返回的URL中包含了指定日期新闻页面的文件名,如http://example.com/online/getnews.asp?item=20July2017.html。攻击者可以尝试不同的目录层次来获得系统文件win.ini,如http://example.com/online/getnews.asp? item=../../winnt/win.ini。

开发人员防范的基本方法如下。

●避免在URL或网页中直接引用内部文件名或数据库关键字。可使用自定义的映射名称来取代直接对象名,防止将重要的关键字和文件名泄露给用户。例如对于上例中的URL可以修改为http://example.com/online/getnews.asp?item=11。

●应根据最小权限原则,配置应用程序的访问权限,应禁止访问Web目录之外的文件。

●任何来自不可信源的直接对象引用都必须通过访问控制检测,确保该用户对请求的对象有访问权限。

●验证用户输入和URL请求,拒绝包含./或../或者是转码的类“.%2f..%2f”请求。

(3)错误的安全配置(Security Misconfiguration)

错误的安全配置漏洞是指,由于操作系统、应用服务器、数据库服务器、应用程序、中间件及相关应用程序所使用的框架的不安全配置,造成恶意用户能够利用系统默认账户或默认配置页面(操作系统、Web服务器、数据库服务器和中间件漏洞),对应用系统进行攻击,如窃取系统敏感信息、尝试控制服务器。

该类漏洞利用方式举例如下。

●服务器上的文件夹没有设置足够权限要求,允许匿名用户写入文件。

●Web应用直接以SQL SA账号进行连接,而且SA账号使用默认密码。恶意用户通过默认账户登录系统,获取系统机密信息,甚至操纵整个服务器。

开发人员防范的基本方法如下。

●采用能在组件之间提供有效的分离和安全性的应用程序架构。

●实施漏洞扫描和审计以对安全配置情况进行检测。例如,检查文件目录访问权限是否符合最小化原则;检查所有与验证和权限有关的设定;是否在Web/数据库服务器上运行其他服务;主机、数据库、Web服务器和中间件是否保持自动更新等。

(4)敏感数据泄露(Sensitive Data Exposure)

敏感数据泄露漏洞是指,对敏感数据未进行加密处理或加密强度不够,或者没有安全的存储加密数据,导致攻击者获得敏感信息。

该类漏洞利用方式举例如下。

●攻击者破解程序员使用的自己编写的加密算法,或是MD5、SHA-1等低强度的哈希算法,导致资料外泄。

●由于加密信息和密钥存放在一起,被攻击者获取,导致敏感数据泄露。

开发人员防范的基本方法如下。

●对所有重要信息进行加密。使用足够强度的加密算法,如AES、RSA等。存储密码时,用SHA-256等健壮哈希算法进行处理。

●产生的密钥不应与加密信息一起存放。

●严格控制对加密存储的访问等。

●禁用自动完成以防止敏感数据收集,禁用包含敏感数据的缓存页面。

(5)缺失功能级访问控制(Missing Function Level Access Control)

缺失功能级访问控制漏洞是指,大部分Web应用都会在客户端检查访问权限,但是在服务器端没有执行相应的访问控制。

该类漏洞利用方式:如攻击者伪造请求访问未经授权的功能。

开发人员防范的基本方法如下。

●对于每个功能的访问,需要明确授予特定角色的访问权限。

●如果某个功能参与了工作流程,检查并确保授权访问此功能的合适状态。

(6)使用有漏洞的组件(Using Components with Known Vulnerabilities)

组件,如库文件、框架和其他软件模块,如果存在以全部权限运行等漏洞,会降低Web应用的整体安全性。

该类漏洞利用方式:如一个带有漏洞的组件被利用,可能造成Web应用中敏感数据丢失或服务器被接管。

开发人员防范的基本方法如下。

●建立组件使用的安全策略,如通过安全性测试和可以接受的授权许可。

●增加对组件的安全封装,去掉不使用的功能和组件易受攻击的部分。

●注意漏洞公告,及时打漏洞补丁和更新组件,使用最新版的组件。

(7)未验证的重定向和转发(Unvalidated Redirects and Forwards)

未验证的重定向和转发是指,系统在进行页面转发和重定向时,重定向或者转发的页面不是系统可信页面,并且重定向或转发前未经安全验证。

该类漏洞利用方式:如攻击者仿造链接进行攻击,前面是正常的URL,后面会重定向、跳转或转发到另一个预先设计好的钓鱼网站的URL或获得非法访问权限链接的URL。

开发人员防范攻击的基本方法如下。

●应用程序应该尽量避免用户直接指定重定向或跳转的URL,输入数据中不应直接包含表示重定向或跳转的URL,而以映射的代码表示URL。

●检查重定向或跳转的目标URL是否为本系统URL。

●当重定向或跳转的内容中包含输入数据时,应对输入数据做严格检查,检查/过滤输入数据中的特殊字符,如\r\n和\n\n。

●即使是本站的地址,用户的所有URL子访问请求都要进行合法性身份验证。

请读者完成本章思考与实践第3题,分析OWASP最新发布的Web安全十大威胁报告。

接下来,本章选择其中危害大、流行广泛的几类漏洞作为研究对象,包括SQL注入、跨站脚本攻击、跨站伪造请求、文件包含及命令执行漏洞等。