OWASP Top 10 2021

admin 2022年4月10日00:25:44安全闲碎评论23 views23348字阅读77分49秒阅读模式


OWASP Top 10 已经更新

OWASP Top 10 2021

A01:2021-Broken Access Control从第五位上升;94% 的应用程序都经过了某种形式的破坏访问控制的测试。映射到 Broken Access Control 的 34 个 CWE 在应用程序中出现的次数比任何其他类别都多。

A02:2021-Cryptographic Failures 上移一位至 #2,以前称为敏感数据暴露,这是广泛的症状而不是根本原因。此处重新关注与密码学相关的故障,这些故障通常会导致敏感数据暴露或系统受损。

A03:2021-Injection下滑到第三位。94% 的应用程序都针对某种形式的注入进行了测试,映射到此类别的 33 个 CWE 在应用程序中出现次数第二多。跨站点脚本编写现在是此版本中此类别的一部分。

A04:2021-不安全设计是2021 年的一个新类别,重点关注与设计缺陷相关的风险。如果我们真的想作为一个行业“向左移动”,就需要更多地使用威胁建模、安全设计模式和原则以及参考架构。

A05:2021-安全配置错误从上一版的第 6 位上升;90% 的应用程序都经过了某种形式的错误配置测试。随着更多转向高度可配置的软件,看到这一类别上升也就不足为奇了。XML 外部实体 (XXE) 的前一个类别现在属于此类别。

A06:2021-Vulnerable and Outdated Components之前的标题是 使用具有已知漏洞的组件,在行业调查中排名第二,但也有足够的数据通过数据分析进入前 10 名。该类别从 2017 年的第 9 位上升,是我们难以测试和评估风险的已知问题。它是唯一没有任何 CVE 映射到包含的 CWE 的类别,因此默认的利用和影响权重 5.0 被计入他们的分数。

A07:2021-Identification and Authentication Failures以前是 Broken Authentication并且从第二位下滑,现在包括与识别失败更多相关的 CWE。这个类别仍然是前 10 名的一个组成部分,但标准化框架的可用性增加似乎有所帮助。

A08:2021-软件和数据完整性故障是 2021 年的一个新类别,专注于在不验证完整性的情况下做出与软件更新、关键数据和 CI/CD 管道相关的假设。CVE/CVSS 数据的最高加权影响之一映射到该类别中的 10 个 CWE。2017 年的不安全反序列化现在是这一更大类别的一部分。

A09:2021-安全日志记录和监控失败以前是 日志记录和监控不足,是从行业调查 (#3) 中添加的,从之前的 #10 上升。此类别已扩展为包括更多类型的故障,难以测试,并且在 CVE/CVSS 数据中没有得到很好的体现。但是,此类故障会直接影响可见性、事件警报和取证。

A10:2021-Server-Side Request Forgery是从行业调查 (#1) 中添加的。数据显示发生率相对较低,测试覆盖率高于平均水平,并且利用和影响潜力的评级高于平均水平。此类别代表行业专业人士告诉我们这很重要的场景,即使目前数据中没有说明。

方法

前 10 名的这一部分比以往任何时候都更受数据驱动,但并非盲目地受数据驱动。我们从贡献的数据中选择了十个类别中的八个,从高水平的行业调查中选择了两个类别。我们这样做的根本原因是,查看贡献的数据就是回顾过去。AppSec 研究人员花时间寻找新的漏洞和测试它们的新方法。将这些测试集成到工具和流程中需要时间。当我们能够可靠地大规模测试弱点时,可能已经过去了很多年。为了平衡这种观点,我们使用行业调查来询问一线人员他们认为数据可能尚未显示的基本弱点。

我们采用了一些关键的变化来继续使前 10 名变得成熟。

类别的结构

与上一期的 OWASP 前十名相比,一些类别发生了变化。以下是类别更改的高级摘要。

以前的数据收集工作集中在大约 30 个 CWE 的规定子集上,并有一个要求额外发现的领域。我们了解到,组织将主要关注那 30 个 CWE,很少添加他们看到的其他 CWE。在本次迭代中,我们将其打开并仅询问数据,对 CWE 没有限制。我们询问了给定年份(从 2017 年开始)测试的应用程序数量,以及在测试中发现至少一个 CWE 实例的应用程序数量。这种格式使我们能够跟踪每个 CWE 在应用程序群体中的流行程度。为了我们的目的,我们忽略频率;虽然在其他情况下可能有必要,但它仅隐藏了应用程序群体中的实际流行率。一个应用程序是否有四个 CWE 或 4 个实例,000 个实例不是前 10 名计算的一部分。我们从大约 30 个 CWE 增加到近 400 个 CWE,以在数据集中进行分析。我们计划在未来做额外的数据分析作为补充。CWE 数量的显着增加需要改变类别的结构。

我们花了几个月的时间对 CWE 进行分组和分类,并且本可以再持续几个月。我们不得不在某个时候停下来。CWE有根本原因和症状类型,其中根本原因类型如“加密失败”和“错误配置”,与“敏感数据暴露”和“拒绝服务”等症状类型形成对比 。我们决定尽可能关注根本原因,因为提供识别和补救指导更合乎逻辑。关注根本原因而不是症状并不是一个新概念。前十名是症状和根本原因的混合体。 ; 我们只是更加深思熟虑并大声疾呼。本部分中每个类别平均有 19.6 个 CWE,下限为A10: 2021-服务器端请求伪造 (SSRF) 的1 个 CWE 到A04: 2021-不安全设计中的40 个 CWE 。这种更新的类别结构提供了额外的培训好处,因为公司可以专注于对语言/框架有意义的 CWE。

如何使用数据选择类别

2017 年,我们按发生率选择类别来确定可能性,然后根据数十年的可利用性、可检测性(也是可能性)和技术影响的经验,通过团队讨论对它们进行排名。对于 2021 年,如果可能,我们希望将数据用于可利用性和影响。

我们下载了 OWASP Dependency Check 并提取了 CVSS Exploit 和按相关 CWE 分组的影响分数。由于所有 CVE 都有 CVSSv2 分数,因此需要进行大量研究和努力,但 CVSSv2 中存在 CVSSv3 应该解决的缺陷。在某个时间点之后,所有 CVE 也会被分配一个 CVSSv3 分数。此外,在 CVSSv2 和 CVSSv3 之间更新了评分范围和公式。

在 CVSSv2 中,Exploit 和 Impact 都可以达到 10.0,但公式会将它们降低到 Exploit 的 60% 和 Impact 的 40%。在 CVSSv3 中,Exploit 的理论最大值限制为 6.0,Impact 的理论最大值限制为 4.0。考虑到权重,Impact 得分上升了,在 CVSSv3 中平均下降了近一个半点,而可利用性平均下降了近半个点。

OWASP Dependency Check提取的NVD数据中有125k条CVE映射到CWE的记录,映射到CVE的唯一CWE有241条。62k CWE 地图有一个 CVSSv3 分数,大约是数据集中人口的一半。

对于前十名,我们按以下方式计算平均利用和影响分数。我们按 CWE 将所有具有 CVSS 分数的 CVE 分组,并按具有 CVSSv3 的人口百分比 + 剩余的 CVSSv2 分数对漏洞利用和影响评分进行加权,以获得总体平均值。我们将这些平均值映射到数据集中的 CWE,以用作风险等式另一半的利用和影响评分。

为什么不只是纯粹的统计数据?

数据中的结果主要限于我们可以以自动化方式测试的内容。与经验丰富的 AppSec 专业人士交谈,他们会告诉您他们发现的东西和他们看到的尚未在数据中的趋势。人们需要时间为某些漏洞类型开发测试方法,然后需要更多时间让这些测试自动化并针对大量应用程序运行。我们发现的一切都是回顾过去,可能会遗漏去年的趋势,而这些趋势在数据中并不存在。

因此,我们只从数据中挑选了十个类别中的八个,因为它是不完整的。其他两类来自行业调查。它允许一线从业者投票选出他们认为可能没有在数据中(并且可能永远不会在数据中表达)的最高风险。

为什么是发生率而不是频率?

有三个主要数据来源。我们将它们识别为人工辅助工具 (HaT)、工具辅助人工 (TaH) 和原始工具。

Tooling 和 HaT 是高频查找生成器。工具将寻找特定的漏洞并不知疲倦地尝试找到该漏洞的每个实例,并将为某些漏洞类型生成高发现计数。看看跨站点脚本,它通常是两种风格之一:它要么是更小的、孤立的错误,要么是系统性问题。当这是一个系统性问题时,一个应用程序的发现计数可能会达到数千个。这种高频率淹没了报告或数据中发现的大多数其他漏洞。

另一方面,TaH 会发现更广泛的漏洞类型,但由于时间限制,发现频率要低得多。当人们测试应用程序并看到诸如跨站点脚本之类的东西时,他们通常会找到三四个实例并停止。他们可以确定一个系统性的发现,并用建议将其写下来,以在应用程序范围内进行修复。没有必要(或时间)找到每个实例。

假设我们采用这两个不同的数据集并尝试按频率合并它们。在这种情况下,工具和 HaT 数据将淹没更准确(但更广泛)的 TaH 数据,这也是为什么跨站点脚本之类的东西在许多列表中排名如此之高的原因,而影响通常是低到中等。这是因为发现的数量庞大。(Cross-Site Scripting 也相当容易测试,因此还有更多测试)。

2017 年,我们引入了使用发生率来重新审视数据,并将 Tooling 和 HaT 数据与 TaH 数据干净地合并。发生率询问应用程序群体中至少有一个漏洞类型实例的百分比。我们不在乎它是一次性的还是系统性的。这与我们的目的无关;我们只需要知道有多少应用程序至少有一个实例,这有助于更清晰地了解测试结果,而不会淹没在高频结果中的数据。

你的数据收集和分析过程是怎样的?

我们在 2017 年开放安全峰会上正式确定了 OWASP 前 10 名数据收集流程。 OWASP 前 10 名领导者和社区花了两天时间制定了透明数据收集流程的正式化。2021 版是我们第二次使用这种方法。

我们通过我们可用的社交媒体渠道发布数据征集,包括项目和 OWASP。在OWASP 项目页面上,我们列出了我们正在寻找的数据元素和结构以及如何提交它们。在GitHub 项目中,我们有用作模板的示例文件。我们根据需要与组织合作,以帮助确定结构并映射到 CWE。

我们从按行业测试供应商的组织、漏洞赏金供应商和贡献内部测试数据的组织那里获取数据。获得数据后,我们将其加载在一起,并对 CWE 映射到风险类别的内容进行基本分析。一些 CWE 之间存在重叠,而另一些则非常密切相关(例如加密漏洞)。与提交的原始数据相关的任何决定都被记录和发布,以公开和透明地说明我们如何规范化数据。

我们查看了前 10 名中发生率最高的八个类别。我们还查看了行业调查结果,看看哪些类别可能已经存在于数据中。数据中尚未出现的前两名投票将被选为前 10 名中的其他两个名额。一旦全部 10 个名额都被选中,我们将应用广义的可利用性和影响因素;帮助按顺序排列前 10 名。

数据因素

前 10 个类别中的每一个都列出了数据因素,它们的含义如下:

映射的 CWE:前 10 名团队映射到某个类别的 CWE 数量。

发生率:发生率是该组织当年测试的人群中易受该 CWE 影响的应用程序的百分比。

(测试)覆盖率:所有组织针对给定 CWE 测试的应用程序的百分比。

加权漏洞利用:分配给 CVE 的 CVSSv2 和 CVSSv3 分数中的漏洞利用子分数映射到 CWE,归一化,并放置在 10 分的范围内。

加权影响:分配给 CVE 的 CVSSv2 和 CVSSv3 分数的影响子分数映射到 CWE,归一化,并放置在 10pt 范围内。

Total Occurrences:发现的将 CWE 映射到类别的应用程序总数。

Total CVEs:NVD DB 中映射到 CWEs 的 CVEs 总数,映射到一个类别。

2017 年的品类关系

OWASP Top 10 2021 有很多关于十大风险之间重叠的讨论。根据每个(包括 CWE 列表)的定义,确实没有任何重叠。但是,从概念上讲,可能存在基于更高级别命名的重叠或交互。维恩图多次用于显示这样的重叠。

上面的维恩图代表了 2017 年十大风险类别之间的相互作用。这样做时,几个要点变得明显:

有人可能会争辩说,跨站点脚本最终属于注入,因为它本质上是内容注入。看看 2021 年的数据,XSS 需要进入注入变得更加明显。

重叠仅在一个方向。我们通常会根据最终表现或“症状”而不是(可能很深的)根本原因对漏洞进行分类。例如,“敏感数据暴露”可能是“安全配置错误”的结果;但是,您不会从另一个方向看到它。结果,在交互区域中绘制了箭头以指示它发生的方向。

有时这些图表是用A06:2021 Using Components with known Vulnerabilities 中的所有内容绘制的。虽然其中一些风险类别可能是第三方漏洞的根本原因,但它们的管理方式和责任通常不同。其他类型通常代表第一方风险。

感谢我们的数据贡献者

以下组织(连同一些匿名捐赠者)为超过 500,000 个应用程序捐赠了数据,使其成为最大、最全面的应用程序安全数据集。没有你,这是不可能的。

应用安全实验室

GitLab

微焦点

方格

Cobalt.io

黑客一号

PenTest-工具

代码

对比安全

盐酸技术

探测

白帽 (NTT)

A01:2021 – 损坏的访问控制

映射的 CWE

最大发生率

平均发生率

最大覆盖范围

平均覆盖率

平均加权漏洞利用

平均加权影响

总发生次数

CVE 总数

34

55.97%

3.81%

94.55%

47.72%

6.92

5.93

318,487

19,013

因素

概述

从第五位上升,94% 的应用程序都经过了某种形式的访问控制损坏测试。值得注意的CWE包括CWE-200:将敏感信息暴露给未经授权的参与者、CWE-201:通过发送的数据暴露敏感信息和CWE-352:跨站点请求伪造。

描述

访问控制强制执行策略,使用户不能在其预期权限之外采取行动。故障通常会导致未经授权的信息泄露、修改或破坏所有数据或执行超出用户限制的业务功能。常见的访问控制漏洞包括:

通过修改 URL、内部应用程序状态或 HTML 页面,或仅使用自定义 API 攻击工具来绕过访问控制检查。

允许将主键更改为其他用户的记录,允许查看或编辑其他人的帐户。

特权提升。在未登录的情况下充当用户或以用户身份登录时充当管理员。

元数据操作,例如重放或篡改 JSON Web 令牌 (JWT) 访问控制令牌,或用于提升权限或滥用 JWT 失效的 cookie 或隐藏字段。

CORS 错误配置允许未经授权的 API 访问。

强制以未经身份验证的用户身份浏览经过身份验证的页面或以标准用户身份浏览特权页面。访问 API 时缺少对 POST、PUT 和 DELETE 的访问控制。

如何预防

访问控制仅在受信任的服务器端代码或无服务器 API 中有效,攻击者无法修改访问控制检查或元数据。

除公共资源外,默认拒绝。

实施一次访问控制机制并在整个应用程序中重复使用它们,包括最大限度地减少 CORS 的使用。

模型访问控制应该强制记录所有权,而不是接受用户可以创建、读取、更新或删除任何记录。

独特的应用程序业务限制要求应由领域模型强制执行。

禁用 Web 服务器目录列表并确保文件元数据(例如 .git)和备份文件不在 Web 根目录中。

记录访问控制失败,在适当时提醒管理员(例如,重复失败)。

速率限制 API 和控制器访问,以最大限度地减少自动攻击工具的危害。

注销后,JWT 令牌应在服务器上失效。

开发人员和 QA 人员应包括功能访问控制单元和集成测试。

攻击场景示例

场景 #1:应用程序在访问帐户信息的 SQL 调用中使用未经验证的数据:

pstmt.setString(1, request.getParameter("acct"));

结果集结果 = pstmt.executeQuery();

攻击者只需修改浏览器的“acct”参数即可发送他们想要的任何帐号。如果没有正确验证,攻击者可以访问任何用户的帐户。

https://example.com/app/accountInfo?acct=notmyacct

场景#2:攻击者只是强制浏览到目标 URL。访问管理页面需要管理员权限。

https://example.com/app/getappInfo

https://example.com/app/admin_getappInfo

如果未经身份验证的用户可以访问任一页面,那就是一个缺陷。如果非管理员可以访问管理页面,这是一个缺陷。

参考

OWASP 主动控制:实施访问控制

OWASP 应用安全验证标准:V4 访问控制

OWASP 测试指南:授权测试

OWASP 备忘单:访问控制

PortSwigger:利用 CORS 错误配置

映射的 CWE 列表

CWE-22 对受限目录的路径名限制不当(“路径遍历”)

CWE-23 相对路径遍历

CWE-35 路径遍历:'.../...//'

CWE-59 文件访问前链接解析不当(“链接跟随”)

CWE-200 将敏感信息暴露给未经授权的演员

CWE-201 通过发送数据暴露敏感信息

CWE-219 在 Web Root 下存储带有敏感数据的文件

CWE-264 权限、特权和访问控制(不应再使用)

CWE-275 权限问题

CWE-276 不正确的默认权限

CWE-284 不正确的访问控制

CWE-285 不正确的授权

CWE-352 跨站请求伪造 (CSRF)

CWE-359 将私人个人信息暴露给未经授权的演员

CWE-377 不安全的临时文件

CWE-402 将私有资源传输到新领域(“资源泄漏”)

CWE-425 直接请求(“强制浏览”)

CWE-441 意外代理或中介('困惑的代理')

CWE-497 将敏感系统信息暴露给未经授权的控制领域

CWE-538 将敏感信息插入到外部可访问的文件或目录中

CWE-540 在源代码中包含敏感信息

CWE-548 通过目录列表暴露信息

CWE-552 外部方可访问的文件或目录

CWE-566 通过用户控制的 SQL 主键绕过授权

CWE-601 URL 重定向到不受信任的站点(“打开重定向”)

CWE-639 通过用户控制的密钥绕过授权

CWE-651 暴露包含敏感信息的 WSDL 文件

CWE-668 资源暴露于错误领域

CWE-706 使用错误解析的名称或引用

CWE-862 缺少授权

CWE-863 不正确的授权

CWE-913 动态管理代码资源控制不当

CWE-922 敏感信息的不安全存储

CWE-1275 具有不正确 SameSite 属性的敏感 Cookie

A02:2021 – 加密失败

因素

映射的 CWE

最大发生率

平均发生率

最大覆盖范围

平均覆盖率

平均加权漏洞利用

平均加权影响

总发生次数

CVE 总数

29

46.44%

4.49%

79.33%

34.85%

7.29

6.81

233,788

3,075

概述

上移一个位置到#2,以前称为敏感数据暴露,这更像是一个广泛的症状而不是根本原因,重点是与密码学相关的失败(或缺乏密码学)。这往往会导致敏感数据的暴露。值得注意的CWE包括CWE-259:使用硬编码密码、CWE-327:损坏或风险的加密算法和CWE-331 熵不足。

描述

首先是确定传输中和静止数据的保护需求。例如,密码、信用卡号、健康记录、个人信息和商业秘密需要额外保护,主要是如果该数据属于隐私法(例如欧盟的通用数据保护条例 (GDPR))或法规(例如金融数据保护)例如 PCI 数据安全标准 (PCI DSS)。对于所有此类数据:

是否有任何数据以明文形式传输?这涉及 HTTP、SMTP 和 FTP 等协议。外部互联网流量是危险的。验证所有内部流量,例如,负载平衡器、Web 服务器或后端系统之间的流量。

默认情况下或在较旧的代码中是否使用任何旧的或弱的加密算法?

是否正在使用默认加密密钥、生成或重复使用弱加密密钥,或者是否缺少适当的密钥管理或轮换?

是否未强制执行加密,例如,是否缺少任何用户代理(浏览器)安全指令或标头?

用户代理(例如,应用程序、邮件客户端)是否不验证收到的服务器证书是否有效?

请参阅 ASVS 加密 (V7)、数据保护 (V9) 和 SSL/TLS (V10)

如何预防

至少执行以下操作,并查阅参考资料:

对应用程序处理、存储或传输的数据进行分类。根据隐私法、监管要求或业务需求确定哪些数据是敏感的。

根据分类应用控制。

不要不必要地存储敏感数据。尽快丢弃它或使用符合 PCI DSS 的标记化甚至截断。未保留的数据不能被窃取。

确保加密所有静态敏感数据。

确保拥有最新且强大的标准算法、协议和密钥;使用适当的密钥管理。

使用安全协议(例如具有完美前向保密 (PFS) 密码的 TLS、服务器的密码优先级和安全参数)加密所有传输中的数据。使用 HTTP 严格传输安全 (HSTS) 等指令强制加密。

对包含敏感数据的响应禁用缓存。

使用具有工作因子(延迟因子)的强自适应和加盐散列函数存储密码,例如 Argon2、scrypt、bcrypt 或 PBKDF2。

独立验证配置和设置的有效性。

攻击场景示例

场景#1:应用程序使用自动数据库加密对数据库中的信用卡号进行加密。但是,此数据在检索时会自动解密,从而允许 SQL 注入缺陷以明文形式检索信用卡号。

场景#2:站点不使用或对所有页面强制执行 TLS 或支持弱加密。攻击者监视网络流量(例如,在不安全的无线网络中),将连接从 HTTPS 降级为 HTTP,拦截请求并窃取用户的会话 cookie。然后攻击者重放这个 cookie 并劫持用户的(经过身份验证的)会话,访问或修改用户的私人数据。除了上述之外,他们还可以更改所有传输的数据,例如,汇款的接收者。

场景#3:密码数据库使用未加盐或简单的哈希来存储每个人的密码。文件上传缺陷允许攻击者检索密码数据库。所有未加盐的哈希值都可以通过预先计算的哈希值彩虹表公开。由简单或快速散列函数生成的散列可能会被 GPU 破解,即使它们被加盐。

参考

OWASP 主动控制:保护无处不在的数据

OWASP 应用安全验证标准(V7、9、10)

OWASP 备忘单:传输层保护

OWASP 备忘单:用户隐私保护

OWASP 备忘单:密码和加密存储

OWASP 备忘单:HSTS

OWASP 测试指南:弱密码测试

映射的 CWE 列表

CWE-261 密码弱编码

CWE-296 不正确地遵循证书的信任链

CWE-310 密码问题

CWE-319 敏感信息的明文传输

CWE-321 使用硬编码的加密密钥

无实体认证的 CWE-322 密钥交换

CWE-323 在加密中重用 Nonce、密钥对

CWE-324 使用超过其到期日期的密钥

CWE-325 缺少所需的加密步骤

CWE-326 加密强度不足

CWE-327 使用损坏的或有风险的加密算法

CWE-328 可逆单向哈希

CWE-329 在 CBC 模式下不使用随机 IV

CWE-330 使用不充分的随机值

CWE-331 熵不足

CWE-335 在伪随机数生成器 (PRNG) 中错误使用种子

CWE-336 伪随机数生成器 (PRNG) 中的相同种子

CWE-337 伪随机数生成器 (PRNG) 中的可预测种子

CWE-338 使用加密弱伪随机数生成器 (PRNG)

CWE-340 可预测数字或标识符的生成

CWE-347 密码签名验证不当

CWE-523 无保护的凭证传输

CWE-720 OWASP 2007 年十大 A9 类 - 不安全通信

CWE-757 在协商期间选择不太安全的算法(“算法降级”)

CWE-759 使用无盐的单向哈希

CWE-760 使用具有可预测盐的单向哈希

CWE-780 在没有 OAEP 的情况下使用 RSA 算法

CWE-818 传输层保护不足

CWE-916 在计算工作量不足的情况下使用密码哈希

A03:2021 – 注射

因素

映射的 CWE

最大发生率

平均发生率

最大覆盖范围

平均覆盖率

平均加权漏洞利用

平均加权影响

总发生次数

CVE 总数

33

19.09%

3.37%

94.04%

47.90%

7.25

7.15

274,228

32,078

概述

注射向下滑动到第三个位置。94% 的应用程序都针对某种形式的注入进行了测试。值得注意的CWE包括 CWE-79:跨站点脚本、CWE-89:SQL 注入和CWE-73:文件名或路径的外部控制。

描述

应用程序在以下情况下容易受到攻击:

应用程序不会验证、过滤或清理用户提供的数据。

没有上下文感知转义的动态查询或非参数化调用直接在解释器中使用。

在对象关系映射 (ORM) 搜索参数中使用恶意数据来提取额外的敏感记录。

直接使用或连接恶意数据。SQL 或命令包含动态查询、命令或存储过程中的结构和恶意数据。

一些更常见的注入是 SQL、NoSQL、OS 命令、对象关系映射 (ORM)、LDAP 和表达式语言 (EL) 或对象图导航库 (OGNL) 注入。这个概念在所有口译员中都是相同的。源代码审查是检测应用程序是否容易受到注入攻击的最佳方法。强烈建议对所有参数、标头、URL、cookie、JSON、SOAP 和 XML 数据输入进行自动化测试。组织可以将静态源 (SAST) 和动态应用程序测试 (DAST) 工具包含到 CI/CD 管道中,以在生产部署之前识别引入的注入缺陷。

如何预防

防止注入需要将数据与命令和查询分开。

首选选项是使用安全的 API,它完全避免使用解释器,提供参数化接口,或迁移到对象关系映射工具 (ORM)。

注意:即使在参数化时,如果 PL/SQL 或 T-SQL 连接查询和数据或使用 EXECUTE IMMEDIATE 或 exec() 执行恶意数据,则存储过程仍可能引入 SQL 注入。

使用正面或“白名单”服务器端输入验证。这不是一个完整的防御,因为许多应用程序需要特殊字符,例如文本区域或移动应用程序的 API。

对于任何残留的动态查询,使用该解释器的特定转义语法转义特殊字符。

注意:表名、列名等 SQL 结构不能转义,因此用户提供的结构名是危险的。这是报告编写软件中的常见问题。

在查询中使用 LIMIT 和其他 SQL 控件以防止在 SQL 注入的情况下大量披露记录。

攻击场景示例

场景 #1:应用程序在构建以下易受攻击的 SQL 调用时使用不受信任的数据:

String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'";

场景#2:类似地,应用程序对框架的盲目信任可能会导致查询仍然存在漏洞(例如,Hibernate 查询语言 (HQL)):

Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'");

在这两种情况下,攻击者都会修改浏览器中的 'id' 参数值以发送:' 或 '1'='1。例如:

http://example.com/app/accountView?id=' 或 '1'='1

这将更改两个查询的含义以返回帐户表中的所有记录。更危险的攻击可能会修改或删除数据,甚至调用存储过程。

参考

OWASP 主动控制:安全数据库访问

OWASP ASVS:V5 输入验证和编码

OWASP 测试指南:SQL 注入、 命令注入和 ORM 注入

OWASP 备忘单:注射预防

OWASP 备忘单:SQL 注入预防

OWASP 备忘单:Java 中的注入预防

OWASP 备忘单:查询参数化

OWASP 对 Web 应用程序的自动化威胁 - OAT-014

PortSwigger:服务器端模板注入

映射的 CWE 列表

CWE-20 不正确的输入验证

CWE-74 下游组件使用的输出中特殊元素的不当中和(“注入”)

CWE-75 未能将特殊元素消毒到不同的平面(特殊元素注入)

CWE-77 命令中使用的特殊元素的不当中和(“命令注入”)

CWE-78 操作系统命令中使用的特殊元素的不当中和(“操作系统命令注入”)

CWE-79 网页生成期间输入的不当中和(“跨站点脚本”)

CWE-80 网页中与脚本相关的 HTML 标签的不当中和(基本 XSS)

CWE-83 网页属性中脚本的不当中和

CWE-87 替代 XSS 语法的不当中和

CWE-88 命令中参数定界符的不正确中和(“参数注入”)

CWE-89 SQL 命令中使用的特殊元素的不当中和('SQL 注入')

CWE-90 LDAP 查询中使用的特殊元素的不当中和(“LDAP 注入”)

CWE-91 XML 注入(又名 XPath 盲注入)

CWE-93 CRLF 序列的不当中和('CRLF 注入')

CWE-94 代码生成控制不当(“代码注入”)

CWE-95 动态评估代码中指令的不当中和(“评估注入”)

CWE-96 静态保存代码中指令的不当中和(“静态代码注入”)

CWE-97 网页中服务器端包含 (SSI) 的不当中和

CWE-98 PHP 程序中 Include/Require 语句的文件名控制不当('PHP 远程文件包含')

CWE-99 资源标识符控制不当(“资源注入”)

CWE-100 已弃用:是输入验证问题的全部

CWE-113 HTTP 标头中 CRLF 序列的不当中和(“HTTP 响应拆分”)

CWE-116 不正确的编码或输出转义

CWE-138 特殊元素的不当中和

CWE-184 不允许输入的不完整列表

CWE-470 使用外部控制输入来选择类或代码(“不安全反射”)

CWE-471 假定不可变数据(MAID)的修改

CWE-564 SQL 注入:休眠

CWE-610 对另一个领域资源的外部控制引用

CWE-643 XPath 表达式中的数据中和不当(“XPath 注入”)

CWE-644 脚本语法的 HTTP 标头中和不当

CWE-652 XQuery 表达式中数据的不当中和('XQuery 注入')

CWE-917 表达式语言语句中使用的特殊元素的不当中和(“表达式语言注入”)

A04:2021 – 不安全的设计

因素

映射的 CWE

最大发生率

平均发生率

最大覆盖范围

平均覆盖率

平均加权漏洞利用

平均加权影响

总发生次数

CVE 总数

40

24.19%

3.00%

77.25%

42.51%

6.46

6.78

262,407

2,691

概述

2021 年的新类别侧重于与设计和架构缺陷相关的风险,并呼吁更多地使用威胁建模、安全设计模式和参考架构。值得注意的CWE包括 CWE-209:生成包含敏感信息的错误消息、 CWE-256:未受保护的凭证存储、CWE-501:信任边界违规和CWE-522:受保护的凭证不足。

描述

不安全设计是一个广泛的类别,代表许多不同的弱点,表现为“缺失或无效的控制设计”。缺少不安全的设计是缺少控制的地方。例如,想象一下应该加密敏感数据的代码,但没有方法。无效的不安全设计是可以实现威胁的地方,但域(业务)逻辑验证不足会阻止该操作。例如,假设域逻辑应该根据收入等级处理流行病税收减免,但不验证所有输入都已正确签名并提供比应授予的更重要的减免收益。

安全设计是一种文化和方法,它不断评估威胁并确保代码经过稳健设计和测试,以防止已知的攻击方法。安全设计需要安全的开发生命周期、某种形式的安全设计模式或铺砌道路组件库或工具,以及威胁建模。

如何预防

与 AppSec 专业人员建立并使用安全的开发生命周期,以帮助评估和设计与安全和隐私相关的控制

建立和使用安全设计模式库或准备使用组件的铺好的道路

将威胁建模用于关键身份验证、访问控制、业务逻辑和关键流

编写单元和集成测试以验证所有关键流都能抵抗威胁模型

攻击场景示例

场景 #1:凭证恢复工作流可能包括“问答”,这是 NIST 800-63b、OWASP ASVS 和 OWASP Top 10 所禁止的。 不能将问答作为多个人身份的证据可以知道答案,这就是为什么它们被禁止。此类代码应删除并替换为更安全的设计。

场景#2:连锁影院允许团体预订折扣,并且在要求押金之前最多有 15 名参与者。攻击者可以对该流程进行威胁建模,并测试他们是否可以在几次请求中一次预订 600 个座位和所有电影院,从而造成巨大的收入损失。

场景 #3:零售连锁店的电子商务网站没有针对由黄牛运行的机器人提供保护,这些机器人购买高端显卡转售拍卖网站。这对视频卡制造商和零售连锁店主造成了可怕的宣传,并与无法以任何价格获得这些卡的爱好者之间产生了仇恨。仔细的反机器人设计和域逻辑规则,例如在可用性的几秒钟内进行的购买,可能会识别出不真实的购买并拒绝此类交易。

参考

[OWASP 备忘单:安全设计原则](待定)

NIST – 开发者验证最低标准指南 > 软件> https://www.nist.gov/system/files/documents/2021/07/09/Developer%20Verification%20of%20Software.pdf

映射的 CWE 列表

CWE-73 文件名或路径的外部控制

CWE-183 允许输入的许可列表

CWE-209 生成包含敏感信息的错误消息

CWE-213 由于政策不兼容而暴露敏感信息

CWE-235 额外参数处理不当

CWE-256 未受保护的凭证存储

CWE-257 以可恢复格式存储密码

CWE-266 不正确的权限分配

CWE-269 权限管理不当

CWE-280 权限或特权不足的不当处理

CWE-311 缺少敏感数据的加密

CWE-312 敏感信息的明文存储

CWE-313 文件或磁盘中的明文存储

CWE-316 敏感信息在内存中的明文存储

CWE-419 无保护主信道

CWE-430 部署错误处理程序

CWE-434 无限制上传危险类型文件

CWE-444 HTTP 请求的不一致解释('HTTP 请求走私')

CWE-451 用户界面 (UI) 关键信息的虚假陈述

CWE-472 假定不可变 Web 参数的外部控制

CWE-501 信任边界违规

CWE-522 凭证保护不足

CWE-525 使用包含敏感信息的 Web 浏览器缓存

CWE-539 使用包含敏感信息的持久性 Cookie

CWE-579 J2EE 不良做法:存储在会话中的不可序列化对象

CWE-598 使用带有敏感查询字符串的 GET 请求方法

CWE-602 服务器端安全的客户端强制执行

CWE-642 临界状态数据的外部控制

CWE-646 依赖外部提供文件的文件名或扩展名

CWE-650 信任服务器端的 HTTP 权限方法

CWE-653 分区不足

CWE-656 通过默默无闻依赖安全

CWE-657 违反安全设计原则

CWE-799 交互频率控制不当

CWE-807 在安全决策中依赖不受信任的输入

CWE-840 业务逻辑错误

CWE-841 行为工作流程执行不当

CWE-927 使用隐式意图进行敏感通信

CWE-1021 渲染 UI 层或帧的不当限制

CWE-1173 验证框架使用不当

A05:2021 – 安全配置错误

因素

映射的 CWE

最大发生率

平均发生率

最大覆盖范围

平均覆盖率

平均加权漏洞利用

平均加权影响

总发生次数

CVE 总数

20

19.84%

4.51%

89.58%

44.84%

8.12

6.56

208,387

789

概述

从上一版的第 6 位开始,90% 的应用程序都经过了某种形式的错误配置测试。随着更多转向高度可配置的软件,看到这一类别上升也就不足为奇了。值得注意的CWE包括CWE-16 Configuration和CWE-611 Improper Restriction of XML External Entity Reference。

描述

如果应用程序是:

在应用程序堆栈的任何部分缺少适当的安全强化或对云服务的权限配置不正确。

启用或安装了不必要的功能(例如,不必要的端口、服务、页面、帐户或权限)。

默认帐户及其密码仍处于启用状态且未更改。

错误处理向用户显示堆栈跟踪或其他信息过多的错误消息。

对于升级的系统,最新的安全功能被禁用或未安全配置。

应用程序服务器、应用程序框架(例如,Struts、Spring、ASP.NET)、库、数据库等中的安全设置未设置为安全值。

服务器不发送安全标头或指令,或者它们未设置为安全值。

软件已过时或易受攻击(请参阅 A06:2021-易受攻击和过时的组件)。

如果没有协调一致的、可重复的应用程序安全配置过程,系统将面临更高的风险。

如何预防

应实施安全安装过程,包括:

可重复的强化过程使部署另一个适当锁定的环境变得快速而轻松。开发、QA 和生产环境都应配置相同,在每个环境中使用不同的凭据。这个过程应该是自动化的,以最大限度地减少设置新安全环境所需的工作。

一个没有任何不必要的功能、组件、文档和示例的最小平台。删除或不安装未使用的功能和框架。

作为补丁管理流程的一部分,审查和更新适用于所有安全说明、更新和补丁的配置的任务(请参阅 A06:2021-易受攻击和过时的组件)。查看云存储权限(例如,S3 存储桶权限)。

分段应用程序架构通过分段、容器化或云安全组 (ACL) 在组件或租户之间提供有效且安全的分离。

向客户端发送安全指令,例如,安全标头。

验证配置和设置在所有环境中的有效性的自动化过程。

攻击场景示例

场景#1:应用程序服务器带有未从生产服务器中删除的示例应用程序。这些示例应用程序具有攻击者用来破坏服务器的已知安全漏洞。假设这些应用程序之一是管理控制台,并且默认帐户未更改。在这种情况下,攻击者使用默认密码登录并接管。

场景#2:服务器上没有禁用目录列表。攻击者发现他们可以简单地列出目录。攻击者找到并下载已编译的 Java 类,对其进行反编译和逆向工程以查看代码。然后攻击者发现应用程序中存在严重的访问控制缺陷。

场景#3:应用服务器的配置允许将详细的错误消息(例如堆栈跟踪)返回给用户。这可能会暴露敏感信息或潜在缺陷,例如已知易受攻击的组件版本。

场景#4:云服务提供商拥有其他 CSP 用户对 Internet 开放的默认共享权限。这允许访问存储在云存储中的敏感数据。

参考

OWASP 测试指南:配置管理

OWASP 测试指南:错误代码测试

应用安全验证标准V19配置

NIST 通用服务器强化指南

CIS 安全配置指南/基准

Amazon S3 存储桶发现和枚举

映射的 CWE 列表

CWE-2 配置

CWE-11 ASP.NET 错误配置:创建调试二进制文件

CWE-13 ASP.NET 配置错误:配置文件中的密码

CWE-15 系统或配置设置的外部控制

CWE-16 配置

配置文件中的 CWE-260 密码

CWE-315 Cookie 中敏感信息的明文存储

CWE-520 .NET 配置错误:使用模拟

CWE-526 通过环境变量暴露敏感信息

CWE-537 Java 运行时错误消息包含敏感信息

CWE-541 在包含文件中包含敏感信息

CWE-547 使用硬编码、与安全相关的常量

CWE-611 XML 外部实体引用的不当限制

CWE-614 HTTPS 会话中的敏感 Cookie 没有“安全”属性

CWE-756 缺少自定义错误页面

CWE-776 DTD 中递归实体引用的不当限制(“XML 实体扩展”)

CWE-942 过于宽松的跨域白名单

CWE-1004 没有“HttpOnly”标志的敏感 Cookie

CWE-1032 OWASP Top 10 2017 Category A6 - 安全配置错误

CWE-1174 ASP.NET 配置错误:模型验证不正确

A06:2021 – 易受攻击和过时的组件

因素

映射的 CWE

最大发生率

平均发生率

最大覆盖范围

平均覆盖率

平均加权漏洞利用

平均加权影响

总发生次数

CVE 总数

3

27.96%

8.77%

51.78%

22.47%

5.00

5.00

30,457

0

概述

它在行业调查中排名第二,但也有足够的数据通过数据进入前 10 名。易受攻击的组件是我们难以测试和评估风险的已知问题,并且是唯一没有任何 CVE 映射到包含的 CWE 的类别,因此使用默认的漏洞利用/影响权重 5.0。值得注意的CWE包括CWE-1104:使用未维护的第三方组件和来自 2013 年和 2017 年前 10 名的两个 CWE。

描述

你可能很脆弱:

如果您不知道您使用的所有组件的版本(客户端和服务器端)。这包括您直接使用的组件以及嵌套的依赖项。

如果软件易受攻击、不受支持或已过期。这包括操作系统、Web/应用程序服务器、数据库管理系统 (DBMS)、应用程序、API 和所有组件、运行时环境和库。

如果您不定期扫描漏洞并订阅与您使用的组件相关的安全公告。

如果您没有以基于风险的方式及时修复或升级底层平台、框架和依赖项。这通常发生在修补是变更控制下的每月或每季度任务的环境中,使组织面临数天或数月不必要地暴露于固定漏洞的风险。

如果软件开发人员不测试更新、升级或修补的库的兼容性。

如果您不保护组件的配置(请参阅 A05:2021-安全配置错误)。

如何预防

应该有一个补丁管理流程来:

删除未使用的依赖项、不必要的功能、组件、文件和文档。

使用版本、OWASP Dependency Check、retire.js 等工具持续清点客户端和服务器端组件(例如框架、库)及其依赖项的版本。成分。使用软件组合分析工具来自动化该过程。订阅与您使用的组件相关的安全漏洞的电子邮件警报。

仅通过安全链接从官方来源获取组件。首选签名包以减少包含修改后的恶意组件的机会(请参阅 A08:2021-软件和数据完整性故障)。

监视未维护或未为旧版本创建安全补丁的库和组件。如果无法打补丁,请考虑部署虚拟补丁来监控、检测或防止发现的问题。

每个组织都必须确保在应用程序或产品组合的生命周期内制定持续的监控、分类和应用更新或配置更改的计划。

攻击场景示例

场景#1:组件通常以与应用程序本身相同的权限运行,因此任何组件中的缺陷都可能导致严重影响。此类缺陷可能是偶然的(例如,编码错误)或有意的(例如,组件中的后门)。发现的一些可利用组件漏洞的示例是:

CVE-2017-5638 是一个 Struts 2 远程代码执行漏洞,可以在服务器上执行任意代码,已被归咎于重大漏洞。

虽然物联网 (IoT) 通常很难或不可能修补,但修补它们的重要性可能很大(例如,生物医学设备)。

有一些自动化工具可以帮助攻击者找到未打补丁或配置错误的系统。例如,Shodan IoT 搜索引擎可以帮助您找到仍然存在 2014 年 4 月修补的 Heartbleed 漏洞的设备。

参考

OWASP 应用安全验证标准:V1 架构、设计和威胁建模

OWASP 依赖性检查(针对 Java 和 .NET 库)

OWASP 测试指南 - 地图应用架构 (OTG-INFO-010)

OWASP 虚拟补丁最佳实践

不安全图书馆的不幸现实

MITRE 常见漏洞和暴露 (CVE) 搜索

国家漏洞数据库 (NVD)

Retire.js 用于检测已知的易受攻击的 JavaScript 库

节点库安全建议

Ruby 库安全咨询数据库和工具

https://safecode.org/publication/SAFECode_Software_Integrity_Controls0610.pdf

映射的 CWE 列表

CWE-937 OWASP Top 10 2013:使用具有已知漏洞的组件

CWE-1035 2017 Top 10 A9:使用具有已知漏洞的组件

CWE-1104 使用未维护的第三方组件

A07:2021 – 识别和认证失败

因素

映射的 CWE

最大发生率

平均发生率

最大覆盖范围

平均覆盖率

平均加权漏洞利用

平均加权影响

总发生次数

CVE 总数

22

14.84%

2.55%

79.51%

45.72%

7.40

6.50

132,195

3,897

概述

以前称为Broken Authentication,此类别从第二位下滑,现在包括与识别失败相关的 CWE。包括的值得注意的CWE包括CWE-297:不正确的证书验证与主机不匹配、CWE-287:不正确的身份验证和 CWE-384:会话固定。

描述

确认用户的身份、身份验证和会话管理对于防止与身份验证相关的攻击至关重要。如果应用程序存在以下情况,则可能存在身份验证漏洞:

允许自动攻击,例如撞库,其中攻击者拥有有效用户名和密码的列表。

允许蛮力或其他自动攻击。

允许使用默认密码、弱密码或众所周知的密码,例如“Password1”或“admin/admin”。

使用弱或无效的凭据恢复和忘记密码流程,例如无法确保安全的“基于知识的答案”。

使用纯文本、加密或弱散列密码(请参阅 A3:2017-敏感数据暴露)。

缺少或无效的多因素身份验证。

在 URL 中公开会话 ID(例如,URL 重写)。

成功登录后不要轮换会话 ID。

不会正确地使会话 ID 无效。用户会话或身份验证令牌(主要是单点登录 (SSO) 令牌)在注销或一段时间不活动期间未正确失效。

如何预防

在可能的情况下,实施多因素身份验证以防止自动凭证填充、暴力破解和被盗凭证重用攻击。

不要使用任何默认凭据进行交付或部署,尤其是对于管理员用户。

实施弱密码检查,例如针对前 10,000 个最差密码列表测试新密码或更改的密码。

将密码长度、复杂性和轮换策略与 NIST 800-63b 的第 5.1.1 节中关于记忆秘密的指南或其他现代的、基于证据的密码策略保持一致。

通过对所有结果使用相同的消息,确保注册、凭据恢复和 API 路径能够抵御帐户枚举攻击。

限制或增加延迟失败的登录尝试。当检测到凭证填充、暴力破解或其他攻击时,记录所有故障并提醒管理员。

使用服务器端、安全、内置的会话管理器,在登录后生成新的高熵随机会话 ID。会话 ID 不应在 URL 中,安全存储,并在注销、空闲和绝对超时后失效。

攻击场景示例

场景#1:凭证填充(使用已知密码列表)是一种常见的攻击。假设应用程序没有实施自动化威胁或凭证填充保护。在这种情况下,应用程序可以用作密码预言机来确定凭证是否有效。

场景#2:大多数身份验证攻击是由于继续使用密码作为唯一因素而发生的。一经考虑,最佳实践、密码轮换和复杂性要求会鼓励用户使用和重复使用弱密码。建议组织按照 NIST 800-63 停止这些做法并使用多因素身份验证。

场景 #3:应用程序会话超时设置不正确。用户使用公共计算机访问应用程序。用户没有选择“注销”,而是简单地关闭浏览器选项卡并走开。攻击者在一个小时后使用同一个浏览器,而用户仍然通过身份验证。

参考

OWASP 主动控制:实施数字身份

OWASP应用安全验证标准:V2认证

OWASP 应用安全验证标准:V3 Session Management

OWASP 测试指南:身份、身份验证

OWASP 备忘单:身份验证

OWASP 备忘单:凭证填充

OWASP 备忘单:忘记密码

OWASP 备忘单:会话管理

OWASP 自动化威胁手册

NIST 800-63b:5.1.1 记忆的秘密

映射的 CWE 列表

CWE-255 凭证管理错误

CWE-259 使用硬编码密码

CWE-287 不正确的认证

使用备用路径或通道的 CWE-288 身份验证绕过

CWE-290 通过欺骗绕过身份验证

CWE-294 通过捕获重放绕过身份验证

CWE-295 不正确的证书验证

CWE-297 主机不匹配的证书验证不正确

非端点可访问的 CWE-300 通道

CWE-302 通过假定不可变数据绕过身份验证

CWE-304 身份验证中缺少关键步骤

CWE-306 缺少关键功能的身份验证

CWE-307 对过度身份验证尝试的不当限制

CWE-346 来源验证错误

CWE-384 会话固定

CWE-521 弱密码要求

CWE-613 会话过期不足

CWE-620 未经验证的密码更改

CWE-640 忘记密码的弱密码恢复机制

CWE-798 使用硬编码凭证

CWE-940 通信通道源验证不当

CWE-1216 锁定机制错误

A08:2021 – 软件和数据完整性故障

因素

映射的 CWE

最大发生率

平均发生率

最大覆盖范围

平均覆盖率

平均加权漏洞利用

平均加权影响

总发生次数

CVE 总数

10

16.67%

2.05%

75.04%

45.35%

6.94

7.94

47,972

1,152

概述

2021 年的新类别侧重于在不验证完整性的情况下做出与软件更新、关键数据和 CI/CD 管道相关的假设。来自 CVE/CVSS 数据的最高加权影响之一。著名的CWE包括CWE-502:不可信数据的反序列化、 CWE-829:包含不受信任的控制领域的功能和 CWE-494:下载没有完整性检查的代码。

描述

软件和数据完整性故障与不能防止完整性违规的代码和基础设施有关。例如,在对象或数据被编码或序列化为攻击者可以看到和修改的结构的情况下,很容易受到不安全的反序列化的影响。另一种形式是应用程序依赖来自不受信任的来源、存储库和内容交付网络 (CDN) 的插件、库或模块。不安全的 CI/CD 管道可能会导致未经授权的访问、恶意代码或系统受损。最后,许多应用程序现在包括自动更新功能,其中更新在没有充分完整性验证的情况下被下载并应用于以前受信任的应用程序。攻击者可能会上传自己的更新以分发并在所有安装上运行。

如何预防

确保未签名或未加密的序列化数据不会在没有某种形式的完整性检查或数字签名的情况下发送到不受信任的客户端,以检测序列化数据的篡改或重放

通过签名或类似机制验证软件或数据来自预期来源

确保库和依赖项(例如 npm 或 Maven)使用受信任的存储库

确保使用软件供应链安全工具(例如 OWASP Dependency Check 或 OWASP CycloneDX)来验证组件不包含已知漏洞

确保您的 CI/CD 管道具有正确的配置和访问控制,以确保流经构建和部署过程的代码的完整性。

攻击场景示例

场景 #1 不安全的反序列化: React 应用程序调用一组 Spring Boot 微服务。作为函数式程序员,他们试图确保他们的代码是不可变的。他们提出的解决方案是序列化用户状态并在每个请求中来回传递它。攻击者注意到“R00”Java 对象签名并使用 Java Serial Killer 工具在应用服务器上获取远程代码执行权。

场景 #2 无需签名即可更新:许多家用路由器、机顶盒、设备固件和其他固件不通过签名固件验证更新。未签名固件是攻击者越来越多的目标,预计只会变得更糟。这是一个主要问题,因为很多时候除了在未来版本中修复并等待以前的版本过时之外,没有任何补救机制。

场景#3 SolarWinds 恶意更新:众所周知,国家会攻击更新机制,最近的一次著名攻击是 SolarWinds Orion 攻击。开发该软件的公司拥有安全的构建和更新完整性流程。尽管如此,这些还是能够被破坏,几个月来,该公司向 18,000 多个组织分发了一个高度针对性的恶意更新,其中大约 100 个组织受到了影响。这是历史上此类性质最深远、最重大的违规行为之一。

参考

[OWASP 备忘单:反序列化]( https://www.owasp.org/index.php/Deserialization_Cheat_Sheet )

[OWASP 备忘单:软件供应链安全]()

[OWASP 备忘单:安全构建和部署]()

[SAFECode 软件完整性控制]( https://safecode.org/publication/SAFECode_Software_Integrity_Controls0610.pdf)

[“最糟糕的噩梦”网络攻击:SolarWinds Hack 的不为人知的故事]( https://www.npr.org/2021/04/16/985439655/a-worst-nightmare-cyberattack-the-untold-story-of -the-solarwinds-hack )

https://www.manning.com/books/securing-devops

映射的 CWE 列表

CWE-345 数据真实性验证不足

CWE-353 缺少对完整性检查的支持

CWE-426 不受信任的搜索路径

CWE-494 没有完整性检查的代码下载

CWE-502 不可信数据的反序列化

CWE-565 在没有验证和完整性检查的情况下依赖 Cookie

CWE-784 在安全决策中没有验证和完整性检查就依赖 Cookie

CWE-829 包含来自不受信任控制领域的功能

CWE-830 包含来自不受信任来源的 Web 功能

CWE-915 对动态确定的对象属性的不当控制修改

A09:2021 – 安全日志记录和监控失败

因素

映射的 CWE

最大发生率

平均发生率

最大覆盖范围

平均覆盖率

平均加权漏洞利用

平均加权影响

总发生次数

CVE 总数

4

19.23%

6.51%

53.67%

39.97%

6.87

4.99

53,615

242

概述

安全日志记录和监控来自行业调查(#3),比 OWASP 2017 年 10 强中的第十位略有上升。 日志记录和监控可能难以测试,通常涉及采访或询问是否在渗透测试期间检测到攻击。此类别的 CVE/CVSS 数据不多,但检测和响应漏洞至关重要。尽管如此,它对于可见性、事件警报和取证仍然非常有影响力。此类别扩展到CWE-778 日志记录不足之外,包括CWE-117 日志的不当输出中和、CWE-223 安全相关信息的遗漏和 CWE-532 将敏感信息插入日志文件。

描述

回到 2021 年 OWASP 前 10 名,该类别旨在帮助检测、升级和响应主动违规行为。如果没有日志记录和监控,就无法检测到漏洞。任何时候都会发生日志记录、检测、监控和主动响应不足的情况:

不记录可审计的事件,例如登录、失败登录和高价值交易。

警告和错误不会生成、不充分或不清楚的日志消息。

不会监控应用程序和 API 的日志是否存在可疑活动。

日志仅存储在本地。

适当的警报阈值和响应升级流程没有到位或有效。

DAST 工具(例如 OWASP ZAP)的渗透测试和扫描不会触发警报。

应用程序无法实时或接近实时地检测、升级或警告主动攻击。

通过使用户或攻击者可以看到日志记录和警报事件,您很容易受到信息泄漏的影响(请参阅 A01:2021 – 损坏的访问控制)。

如何预防

开发人员应实施以下部分或全部控制措施,具体取决于应用程序的风险:

确保所有登录、访问控制和服务器端输入验证失败都可以用足够的用户上下文来记录,以识别可疑或恶意帐户,并保留足够的时间以允许延迟取证分析。

确保以日志管理解决方案可以轻松使用的格式生成日志。

确保日志数据编码正确,以防止对日志或监控系统的注入或攻击。

确保高价值交易具有带有完整性控制的审计跟踪,以防止篡改或删除,例如仅追加数据库表或类似的。

DevSecOps 团队应该建立有效的监控和警报,以便快速检测和响应可疑活动。

制定或采用事件响应和恢复计划,例如 NIST 800-61r2 或更高版本。

有商业和开源应用程序保护框架(例如 OWASP ModSecurity 核心规则集)和开源日志关联软件(例如 ELK 堆栈)具有自定义仪表板和警报功能。

攻击场景示例

场景#1:由于缺乏监控和日志记录,一家儿童健康计划提供商的网站运营商无法检测到违规行为。外部方通知健康计划提供者,攻击者访问并修改了超过 350 万儿童的数千份敏感健康记录。事后审查发现网站开发人员没有解决重大漏洞。由于没有对系统进行日志记录或监控,数据泄露可能自 2013 年以来一直在进行,时间超过七年。

场景#2:印度一家大型航空公司发生数据泄露事件,涉及数百万乘客十多年的个人数据,包括护照和信用卡数据。数据泄露发生在第三方云托管服务提供商处,该提供商在一段时间后将泄露事件通知了航空公司。

场景 #3:一家主要的欧洲航空公司遭遇了 GDPR 可报告的违规行为。据报道,该漏洞是由攻击者利用的支付应用程序安全漏洞引起的,他们收集了超过 400,000 条客户支付记录。该航空公司因此被隐私监管机构罚款 2000 万英镑。

参考

OWASP 主动控制:实施日志记录和监控

OWASP 应用安全验证标准:V8 Logging and Monitoring

OWASP 测试指南:测试详细错误代码

OWASP 备忘单:日志记录

数据完整性:从勒索软件和其他破坏性事件中恢复

数据完整性:识别和保护资产免受勒索软件和其他破坏性事件的影响

数据完整性:检测和响应勒索软件和其他破坏性事件

映射的 CWE 列表

CWE-117 不正确的日志输出中和

CWE-223 安全相关信息的遗漏

CWE-532 将敏感信息插入日志文件

CWE-778 记录不足

A10:2021 – 服务器端请求伪造 (SSRF)

因素

映射的 CWE

最大发生率

平均发生率

最大覆盖范围

平均覆盖率

平均加权漏洞利用

平均加权影响

总发生次数

CVE 总数

1

2.72%

2.72%

67.72%

67.72%

8.28

6.72

9,503

385

概述

此类别是从行业调查 (#1) 中添加的。数据显示发生率相对较低,测试覆盖率高于平均水平,利用和影响潜力评级高于平均水平。由于新条目可能是用于关注和意识的单个或一小部分 CWE,因此希望它们受到关注,并且可以在未来版本中纳入更大的类别。

描述

每当 Web 应用程序在未验证用户提供的 URL 的情况下获取远程资源时,就会出现 SSRF 缺陷。它允许攻击者强制应用程序将精心设计的请求发送到意外目的地,即使受到防火墙、VPN 或其他类型的网络 ACL 的保护也是如此。

随着现代 Web 应用程序为最终用户提供方便的功能,获取 URL 成为一种常见情况。因此,SSRF 的发病率正在增加。此外,由于云服务和架构的复杂性,SSRF 的严重性越来越高。

如何预防

开发人员可以通过实施以下部分或全部深度防御控制来防止 SSRF:

从网络层

在单独的网络中分段远程资源访问功能以减少 SSRF 的影响

强制执行“默认拒绝”防火墙策略或网络访问控制规则,以阻止除基本 Intranet 流量之外的所有流量

从应用层:

清理和验证所有客户端提供的输入数据

使用肯定的允许列表强制执行 URL 架构、端口和目标

不要向客户端发送原始响应

禁用 HTTP 重定向

注意 URL 一致性,以避免 DNS 重新绑定和“检查时间、使用时间”(TOCTOU) 竞争条件等攻击

不要通过使用拒绝列表或正则表达式来缓解 SSRF。攻击者拥有有效负载列表、工具和技能来绕过拒绝列表。

攻击场景示例

攻击者可以使用 SSRF 攻击受 Web 应用程序防火墙、防火墙或网络 ACL 保护的系统,使用的场景包括:

场景#1:端口扫描内部服务器。如果网络架构是未分段的,攻击者可以绘制内部网络,并根据连接结果或连接或拒绝 SSRF 负载连接所用的时间来确定内部服务器上的端口是打开还是关闭。

场景#2:敏感数据暴露。攻击者可以访问本地文件,例如 或内部服务以获取敏感信息。

场景#3:访问云服务的元数据存储。大多数云提供商都有元数据存储,例如http://169.254.169.254/。攻击者可以读取元数据来获取敏感信息。

场景#4:破坏内部服务——攻击者可以滥用内部服务进行进一步的攻击,例如远程代码执行 (RCE) 或拒绝服务 (DoS)。

参考

OWASP - 服务器端请求伪造预防备忘单

PortSwigger - 服务器端请求伪造 (SSRF)

Acunetix - 什么是服务器端请求伪造 (SSRF)?

SSRF 圣经

SSRF 的新时代 - 利用趋势编程语言中的 URL 解析器!

映射的 CWE 列表

CWE-918 服务器端请求伪造 (SSRF)



更多推荐

业务安全漏洞挖掘——用户输入合规性(上)

业务安全漏洞挖掘——用户输入合规性(中)

业务安全漏洞挖掘——用户输入合规性(下)

密码找回漏洞—用户凭证暴力破解和url返回验证码及token

密码找回漏洞—邮箱弱token

密码找回漏洞——用户凭证有效性

密码找回漏洞——重新绑定

服务器验证

用户身份验证

本地验证

原文始发于微信公众号(LSCteam):OWASP Top 10 2021

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月10日00:25:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  OWASP Top 10 2021 http://cn-sec.com/archives/740442.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: