Segurança da Informação
OWASP
Desenvolvimento Seguro
LGPD
Gestão de Riscos

应用程序漏洞:为何持续存在以及如何领导防御

应用程序中的漏洞很少是缺乏技术知识,而是缺乏优先级和流程。

大多数成为新闻的安全事件都没有利用复杂的、新颖的缺陷。它利用了多年来已知的、有记录的、有可用修复的东西,但只是尚未得到解决。该漏洞并未被隐藏。它在待办事项清单上,没有人优先考虑。

承认这一点令人不舒服,但对于领导者来说,这是最重要的事实。应用程序漏洞类别非常稳定。 OWASP 是应用程序安全领域的全球参考,二十多年来一直在发布最常见风险的相同列表(略有变化)。如果问题已知并且解决方案存在,为什么它们仍然存在?

答案不是技术性的。这是管理。应用程序安全失败较少是因为缺乏知识,更多的是因为缺乏优先级、流程和文化。本文就是为那些决定团队将时间花在哪里的人而写的,而不仅仅是为那些编写代码的人而写的。

什么是漏洞,无需神秘化

漏洞是系统中的一个弱点,可被利用来造成损害:泄漏数据、更改信息、关闭服务、夺取控制权。它不需要邪恶的天才来探索。大多数都是由自动化工具发现的,这些工具会扫描整个互联网,寻找完全相同的重复错误。

这就是为什么“没有人会对我们的应用程序感兴趣”是一个危险的短语。扫描是自动且不加区别的。决定你是否成为目标的不是你的业务的相关性,而是缺陷的存在。

漏洞被利用的代价远远超出了技术层面。在巴西,当涉及个人数据时,会出现服务中断、信任丧失、声誉受损等问题,甚至会面临 [LGPD0]。未经处理的漏洞是一种商业责任,而不仅仅是一个错误。

OWASP Top 10 作为优先级地图

OWASP Top 10 对于任何组织来说都是最明智的起点。它不是一个完整的安全清单,但它是社区对出现最多、造成最大损害的风险的共识。值得了解其主要类别,并将其翻译成决策者的语言。

访问控制损坏

最常见的类别。当系统没有正确检查谁可以做什么时,就会发生这种情况。用户通过更改 URL 中的数字来访问他人的数据;普通人执行应由管理员执行的操作。这是“门是为懂得推的人打开的”失败。

加密缺陷

敏感数据的传输或存储没有足够的保护,密码可逆存储,连接没有[加密1]。在 LGPD 的背景下,这一点尤其严重:由于缺乏加密或执行不当的加密而暴露的个人数据是法律所要求的失败。

注射

当用户发送的数据被系统解释为命令时。典型的案例是 SQL 注入,其中表单字段成为[数据库2.这是最古老且仍然最常被利用的错误之一,因为它仍在继续犯下。

不安全的设计

一个更新且重要的类别:缺陷不在代码中,而在设计中。您可以无缝地实现设计上不安全的架构。安全性需要在绘图板上,而不仅仅是在最终审查中。

安全配置错误

具有默认配置的服务器、公开的管理面板、揭示内部详细信息的错误消息、过于广泛的权限。往往没有错误的代码,有配置不好的环境,这同样危险。

易受攻击和过时的组件

几乎所有现代软件都是构建在第三方库之上的。当这些依赖项之一存在已知缺陷且未更新时,您的应用程序就会继承该问题。维护库存和更新这些零件是持续的工作,而不是偶尔的工作。

其余类别包括识别和身份验证失败、数据和软件完整性失败、日志记录和监视失败以及服务器端请求伪造。重点不是要记住十个。据了解,有一张最有可能风险的公开地图,忽略它是一种选择。

论文:安全是一项管理决策,而不是项目结束时的任务

我的立场是,大多数应用程序的最大弱点不是技术,而是组织。一般来说,开发人员知道什么是注入和损坏的访问控制。缺少的是时间、优先级和使安全成为工作一部分的流程,而不是“在可能的情况下”可以做的额外事情。

当安全被视为项目结束时的一个步骤,即启动前的仓促审核时,它就会失败。最后期限的压力总是胜过没有明确所有者的护理。代价高昂的失败是那些众所周知的、被忽视的失败,而不是那些没有人看到的失败。

认真对待安全的技术领导并不要求团队英雄主义。构建一个以最简单的方式做正确的事情的系统:以安全眼光进行代码审查、捕获常见缺陷的自动化测试、例行更新依赖项,以及明确提供不安全的服务并不是提供服务。

如何在实践中减少漏洞

有效的防御是由习惯组成的,而不是一个宏伟的项目。将安全视为开发周期的一部分,而不是孤立的事件,是成熟组织的独特之处。

有些做法会带来不成比例的回报。验证所有用户输入并将其视为不受信任,可以消除整个类的注入。应用最小权限原则,仅向系统的每个部分提供其所需的访问权限,从而限制出现故障时造成的损害。保持依赖项处于最新状态可以消除已知缺陷。记录和监控使您可以在数小时而不是数月内发现事件。

还值得在开发流程本身中采用自动扫描,以便在投入生产之前识别常见缺陷。自动化并不能取代思维,但它消除了寻找已分类错误的重复工作。

对于公共部门常见的处理公民数据的系统,这直接与 [LGPD5 和服务连续性相关。那里的失败不仅是技术风险,而且是技术风险。这是法律和公众信任风险。

限制和陷阱

老实说,绝对的安全并不存在。目标不是使应用程序防篡改,而是使其成本足够高以应对攻击,并且具有足够的弹性以在出现问题时检测和响应。

最常见的陷阱是安全剧场:大量的政策、合规文件和昂贵的工具,给人一种保护的感觉,却没有降低真正的风险。纸面上的合规性并不等于实践中的安全性。保护的是实施和测试的内容,而不是编写的内容。

另一个陷阱是将安全视为专家或孤立区域的专属责任。当安全成为“安全人员的问题”时,团队的其他成员就失去了责任。真正的防御是分布式的:每个编写或配置某些内容的人都有自己的角色。

已知和被忽视的漏洞是一个决定,而不是一个意外

值得记住的一句话很简单:几乎每个被利用的漏洞都是已知的并且是可以避免的。这很可怕,但也令人解放,因为这意味着大部分风险都在我们的控制范围内。我们并不依赖于预测前所未有的攻击。我们依赖于治疗我们已知的东西。

本质上,领先的应用程序安全是领先的优先事项。它决定提供保险是交付的一部分,更新依赖关系不是浪费时间,已知和被忽视的失败是某人做出响应的决定。 OWASP 为我们提供了地图。几乎总是缺少的是遵循它的意愿。

如果您的组织将安全视为最后一步而不是持续的实践,则值得在下一次事件为您执行此操作之前检查此过程。我的博客上还有关于安全、[LGPD6 和安全开发] 的其他文本,我可以与构建该前沿的任何人交谈。

另请阅读

  • [Web 应用程序的安全性:任何人都不能忽视的基础知识7
  • [攻击预防-小团队框架8
  • [网络应用程序的安全性:为初学者解释的架构9
  • [授权和权限:防止未经授权的访问的最佳实践10
  • [后量子证书和 PKI:公共管理者现在应该计划什么11
  • 【数据加密:如何在日常开发中应用12