2019 年最危险的软件错误:历史重演的又一铁证

本文最初发表于 Information Security Buzz,后被多家媒体转载。本文已针对联合发布进行了更新。
去年年底,MITRE 社区发布了 2019 年全球最危险的 25 类软件错误(CWE Top 25)。这份榜单并非基于主观臆断,而是结合了 NIST 等机构的研究成果以及公开的“通用漏洞披露”(CVE)数据,经过多维度分析得出的结果。为了确定“最危险”的漏洞,榜单根据漏洞的严重程度、可利用性以及在当前软件中的普遍性进行了评分。显而易见,这绝不是一份令人引以为傲的榜单。
然而,与大多数年度总结不同,榜单上的许多“常客”已经出现过多次……甚至是反复出现。如果这是“公告牌百强单曲榜”(Billboard Hot 100),那就像是布兰妮的《Baby One More Time》和后街男孩的《I Want It That Way》自发布以来年年上榜一样。我为什么要选这两首歌呢?因为它们大约有二十年的历史了(是不是感觉自己老了?),就像这些几十年前就被发现、却至今仍困扰着我们的危险软件错误一样。
为什么陈旧的漏洞依然如此危险?难道我们不知道如何修复它们吗?
MITRE 当前榜单上的第六名是 CWE-89,即众所周知的 SQL 注入(SQLi)。SQLi 漏洞最早发现于 1998 年,那时我们许多人还在用 Ask Jeeves 搜索问题,而不是 Google。尽管修复方案很快就公布了,但它在 2019 年依然是最常用的黑客攻击手段之一。Akamai 的《互联网现状》报告显示,SQLi 是三分之二所有 Web 应用攻击的罪魁祸首。
从复杂程度来看,SQL 注入远非什么高深莫测的漏洞。对于 Web 开发人员来说,修复它非常简单,而且我们确实清楚如何防止这种漏洞将宝贵的数据暴露给攻击者……问题在于,即使在今天,对许多开发人员而言,安全仍不是首要任务。二十年前或许还能勉强应付,但面对当今及未来海量的软件开发需求,这种情况绝不能再继续下去了。
开发人员(大多数时候)是在一个破碎的系统中工作。
坐而论道,指责开发人员交付“糟糕”的代码实在太容易了。事实是,他们的优先级与安全团队截然不同。普通的开发团队被要求尽可能快地交付美观且功能完备的软件。社会对软件的渴求使得开发团队早已不堪重负,安全往往不是首要考虑因素;毕竟,这不正是应用安全(AppSec)专家的职责吗?软件工程师习惯了与安全团队保持一种微妙的疏离感——只有在出现问题时才会听到他们的声音,而这些问题往往会阻碍他们辛苦工作的成果上线。
另一方面,应用安全专家也厌倦了反复修复那些在每次扫描和代码审查中都会出现的陈旧错误。这些专家既昂贵又稀缺,他们的时间本应花在解决复杂的安全漏洞上,而不是一遍又一遍地修补那些众所周知的漏洞。
这些团队之间存在一种心照不宣的相互指责文化,但他们拥有(或者说应该拥有)共同的目标:构建安全的软件。开发人员所处的环境很少能为他们提供安全编码的最佳条件;高等教育中很少教授安全最佳实践,而入职培训往往频率过低或完全无效。由于缺乏对安全意识和深入、相关教育的重视,导致修复已提交代码中陈旧漏洞的成本高得惊人,更不用说还要面临可能毁掉声誉的数据泄露威胁。
人为因素,即“为什么这些工具没能让我们的数据更安全?”
另一个常见问题是,企业往往用大量的安全工具来代替培训,试图在软件发布前发现问题。各种应用扫描和保护工具(SAST/DAST/RASP/IAST)确实有助于生产安全的软件,但它们自身也存在问题。完全依赖这些工具并不能保证安全,因为:
- 没有“单一”工具能扫描出所有框架、所有用例中的每一个漏洞
- 它们可能运行缓慢,尤其是在同时进行静态和动态代码分析时
- 误报依然是个问题;这往往会中断生产,并需要进行不必要的人工代码审查来核实警报
- 它们会制造一种虚假的安全感,导致安全编码被边缘化,因为人们预期这些工具能发现所有问题。
这些工具确实能挖掘出可以修补的安全漏洞,但它们能发现所有问题吗?100% 的检出率是不可能保证的,而攻击者只需要留下一扇未关的门,就能长驱直入,让你陷入大麻烦。
值得庆幸的是,许多组织开始意识到软件漏洞背后的人为因素。大多数开发人员没有接受过足够的安全编码培训,整体安全意识薄弱。然而,他们处于软件开发生命周期的最前端,是阻止漏洞进入代码库的关键防线。如果他们从一开始就进行安全编码,他们将成为抵御每年造成数十亿美元损失的毁灭性网络攻击的第一道防线。
开发人员需要获得成长的机会,通过他们听得懂、与工作相关且能激发安全热情的培训来提升自己。编写无漏洞的代码应该成为一种自豪感,就像构建出功能强大的产品能赢得同行尊重一样。
现代安全计划应当成为企业的优先事项。
开发团队无法仅凭一己之力在全公司范围内建立积极的安全意识。他们需要合适的工具、知识和支持,才能从软件开发流程的最初阶段就将安全融入其中。
如果 MITRE 的榜单上依然充斥着大量陈旧的安全漏洞,那么显而易见,传统的培训方法已经失效了。是时候尝试新方案了,请寻找具备以下特点的培训解决方案:
- 实操性强:开发者更喜欢“在实践中学习”,而不是观看视频中枯燥的讲解。
- 相关性高:如果开发者每天都在使用 Java,就不要让他们去学习 C#。
- 参与感强:碎片化学习易于吸收,能让开发者在已有知识的基础上不断进步。
- 可衡量:不要只为了完成任务而培训。要确保培训切实有效,并为持续改进创造路径。
- 趣味性:探索如何通过培训提升安全意识,同时营造积极的安全文化,从而打造更具凝聚力的团队环境。
安全应当是组织内每个人首要关注的重点。CISO 应保持透明,让各层级都能看到为保障数据安全所做的努力。毕竟,谁想一直听陈词滥调呢?是时候认真起来,彻底根除那些老旧漏洞了。
在 AI 驱动的开发成果发布前实现有效治理
评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。
探索更多博客
获取有关安全编码、人工智能治理和软件风险管理的专家内容。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
在产品发布前确保 AI 驱动的开发安全
洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。



.avif)