利用 Windows CryptoAPI 中的关键欺骗漏洞

2024-08-25 09:04

本文主要是介绍利用 Windows CryptoAPI 中的关键欺骗漏洞,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

三个月前,在我们 2022 年 10 月补丁星期二分析中,我们分享了 Windows CryptoAPI 中一个严重欺骗漏洞 CVE-2022-34689 的基本描述。据微软称,此漏洞允许攻击者“欺骗其身份并以目标证书的身份执行身份验证或代码签名等操作”。

CryptoAPI 是 Windows 中用于处理与加密相关的任何内容的实际 API。具体来说,它处理证书 — 从读取和解析证书到根据经过验证的证书颁发机构 (CA) 进行验证。浏览器还使用 CryptoAPI 进行 TLS 证书验证 — 此过程会显示锁定图标,每个人都被教导要检查该图标。

然而,证书验证并非浏览器独有的,其他 TLS 客户端也会使用证书验证,例如 PowerShell Web 身份验证、curl、wget、FTP 管理器、EDR 和许多其他应用程序。此外,代码签名证书会在可执行文件和库上进行验证,驱动程序签名证书会在加载驱动程序时进行验证。可以想象,证书验证过程中的漏洞对攻击者来说非常有利可图,因为它允许他们掩盖身份并绕过关键的安全保护。

这并不是美国国家安全局第一次披露 CryptoAPI 中的漏洞。2020 年,他们发现并披露了 CurveBall (CVE-2020-0601)。利用 CurveBall 或 CVE-2022-34689 都会导致身份欺骗;但虽然 CurveBall 影响了许多应用程序,但 CVE-2022-34689 具有更多先决条件,因此易受攻击的目标范围更有限。

漏洞详细信息

为了分析漏洞,我们首先尝试找到修补的代码。我们使用 BinDiff(一种流行的二进制差异工具)来观察 CryptoAPI 的各种代码更改。在 crypt32.dll 中,只有一个函数发生了变化: CreateChainContextFromPathGraph。作为此函数的一部分,会比较两个证书:一个作为输入接收,另一个驻留在接收应用程序的证书缓存中(稍后将详细介绍此缓存)。

检查变化后发现, 在两个位置向该函数添加了memcmp检查(图 1)。

图 1:补丁中添加到 CreateChainContextFromPathGraph 的代码(突出显示)

补丁之前,该函数仅根据 MD5 指纹确定收到的证书是否已在缓存中(并因此进行验证)。补丁之后,memcmp添加要求两个证书的实际内容完全匹配。

此时,我们推测,如果攻击者可以提供一个恶意证书,其 MD5 与受害者证书缓存中已有的证书相冲突,他们就能够绕过易受攻击的检查,并使他们的恶意证书受到信任(图 2)。

CryptoAPI 的证书缓存

CryptoAPI 可以使用缓存来存储接收到的终端证书,以提高性能和效率。默认情况下,此机制处于禁用状态。要启用它,应用程序开发人员需要将某些参数传递给CertGetCertificateChain,这是最终导致存在漏洞的代码的 Windows API 函数(图 3)。

图3:CertGetCertificateChain函数声明

CertGetCertif

这篇关于利用 Windows CryptoAPI 中的关键欺骗漏洞的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105122

相关文章

修复已被利用的高危漏洞! macOS Sequoia 15.6.1发布

《修复已被利用的高危漏洞!macOSSequoia15.6.1发布》苹果公司于今日发布了macOSSequoia15.6.1更新,这是去年9月推出的macOSSequoia操作... MACOS Sequoia 15.6.1 正式发布!此次更新修复了一个已被黑客利用的严重安全漏洞,并解决了部分中文用户反馈的

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压