OWASP 发布 Web 应用程序的十大安全风险

  • 张卫滨

2013 年 11 月 27 日

话题:安全语言 & 开发架构

Open Web Application Security Project(OWASP)是世界范围内的非盈利组织,关注于提高软件的安全性。它们的使命是使应用软件更加安全,使企业和组织能够对应用安全风险作出更清晰的决策。目前,OWASP 在全球有超过 140 个分会,其中包括中文分会。该组织从 2003 年开始每隔几年就会发布 Web 应用程序的十大安全风险,针对云计算的安全问题,还提出过云计算十大安全风险,可参考主站中文站的文档。2013 年 6 月,它们发布了最新的 Web 应用十大安全风险。完整的风险列表和多种语言文档可以在该地址进行下载。中国分会也提供了中文版文档的下载服务。该文档基于 Creative Commons Attribution ShareAlike 3.0 license 许可协议。

相对于 2010 版的十大风险,该版本新添加了一类风险, 以涵盖更普遍、更重要的安全漏洞 ; 并基于最新的流行程度数据,对一些风险重新排序。另外,该版本通过创建一类特定风险而引入了“组件安全”风险, 并移除了 2010 年版中的 A6“安全配置错误”风险。

2013 年版的 OWASP 十大风险文档所基于的 8 个数据组由 7 家专业的应用安全公司提供。数据涵盖了来自上百家组织上千个应用, 超过 500,000 个漏洞。根据所有这些相关数据挑选和排序, 并与可利用性、可检测性和影响程度的综合评估产生了排名前十的安全风险列表。

OWASP 十大风险的首要目的是培训开发人员、设计人员、架构师、经理和企业组织, 让他们认识到最严重的 Web 应用程序安全漏洞所产生的后果。文档中提供了防止这些高风险问题的基本方法, 并提供了获得这些方法的来源。

具体来讲,2013 版的十大安全风险为:

A1 –注入(Injection)

注入攻击漏洞, 例如 SQL、OS 以及 LDAP 注入。这些攻击发生在当不可信的数据作为命令或者查询语句的一部分, 被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器, 以执行计划外的命令或者在未被恰当授权时访问数据。

A2-失效的身份认证和会话管理(Broken Authentication and Session Management

与身份认证和会话管理相关的应用程序功能往往得不到正确的实现, 这就导致了攻击者破坏密码、密匙、会话令牌或攻击其他的漏洞去冒充其他用户的身份。

A3-跨站脚本 (Cross-Site ScriptingXSS)

当应用程序收到含有不可信的数据, 在没有进行适当的验证和转义的情况下, 就将它发送给一个网页浏览器, 这就会产生跨站脚本攻击 (简称 XSS)。XSS 允许攻击者在受害者的浏览器上执行脚本, 从而劫持用户会话、危害网站、或者将用户转向至恶意网站。

A4-不安全的直接对象引用(Insecure Direct Object References

当开发人员暴露一个对内部实现对象的引用时, 例如, 一个文件、目录或者数据库密匙, 就会产生一个不安全的直接对象引用。在没有访问控制检测或其他保护时, 攻击者会操控这些引用去访问未授权数据。

A5–安全配置错误(Security Misconfiguration

好的安全需要对应用程序、框架、应用程序服务器、Web 服务器、数据库服务器以及平台定义和执行的安全配置。由于许多设置的默认值并不是安全的, 因此, 必须定义、实施和维护这 些设置。这包含了对所有的软件保持及时地更新, 包括所有应用程序的库文件。

A6 –敏感信息泄漏(Sensitive Data Exposure

许多 Web 应用程序没有正确保护敏感数据, 如信用卡、税务 ID 和身份验证凭据。攻击者可能会窃取或篡改这些弱保护的数据以进行信用卡诈骗、身份窃取或其他犯罪。敏感数据值需额外的保护, 比如在存放或在传输过程中的加密, 以及在与浏览器交换时进行特殊的预防措施。

A7 –功能级访问控制缺失(Missing Function Level Access Control

大多数 Web 应用程序的功能在 UI 中可见以前, 会验证功能级别的访问权限。但是, 应用程序需要在每个功能被访问时在服务器端执行相同的访问控制检查。如果请求没有被验证, 攻击者能够伪造请求从而在未经适当授权时访问功能。

A8 –跨站请求伪造 (Cross-Site Request ForgeryCSRF)

一个跨站请求伪造攻击迫使登录用户的浏览器将伪造的 HTTP 请求, 包括该用户的会话 cookie 和其他认证信息, 发送到一个存在漏洞的 Web 应用程序。这就允许攻击者迫使用户浏览器向存在漏洞的应用程序发送请求, 而这些请求会被应用程序认为是用户的合法请求。

A9 –使用含有已知漏洞的组件(Using Components with Known Vulnerabilities

组件, 比如: 库文件、框架和其他软件模块, 几乎总是以全部的权限运行。如果一个带有漏洞的组件被利用, 这种攻击可以造成更为严重的数据丢失或服务器接管。应用程序使用带有已知漏洞的组件会破坏应用程序防御系统, 并使一系列可能的攻击和影响成为可能。

A10 –未验证的重定向和转发(Unvalidated Redirects and Forwards

Web 应用程序经常将用户重定向和转发到其他网页和网站, 并且利用不可信的数据去判定目的页面。如果没有得到适当验证, 攻击者可以重定向受害用户到钓鱼软件或恶意网站, 或者使用转发去访问未授权的页面。

在 OWASP 的文档中,有各安全风险的案例以及预防办法,除此之外还有丰富的参考文档。不过,该组织也提示我们,不应仅关注这十大风险,正如在《OWASP 开发者指南》《OWASP Cheat Sheet》中所讨论的, 能影响整个 Web 应用程序安全的漏洞成百上千。这些指南是当今 Web 应用程序开发人员的必读资料。而《OWASP 测试指南》《OWASP 代码审查指南》则能够指导人们有效地查找 Web 应用程序中的漏洞。

随着 Web 应用程序积累的用户信息越来越多,越来越敏感,安全问题的重要性也被提升到了前所未有的程度。对比 OWASP 所列出的十大安全风险,我们能够排查出 Web 程序的很多漏洞,从而帮助我们构建更为安全的网络应用,减少终端用户的上网风险。关于 OWASP 所提供的更多安全知识,请参阅其主站和中文分会站点,据了解,为了让更多的中国开发者了解这十大风险,中文分会还会组织相关的培训。

安全语言 & 开发架构