Windows RPC运行时漏洞事后总结

2024-01-11 06:52

本文主要是介绍Windows RPC运行时漏洞事后总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2022年4月前后,Windows RPC运行时被曝出存在远程代码执行漏洞,当时曾引起很多人广泛关注。微软很快做出反应,发布补丁程序进行修补。这次事件中,Windows远程过程调用(RPC)运行时共出现三个关键漏洞:CVE-2022-24492、CVE-2022-24528和CVE-2022-26809。

本文主要将介绍其中两个漏洞的信息,它们所产生的影响和范围,以及可行的缓解措施。

Akamai最近还撰写了一篇有关RPC筛选器的指南,该工具可以限制并阻止Windows计算机之间的RPC流量。虽然我们还未确认RPC筛选器是否可以缓解本文所讨论的漏洞,但建议感兴趣的读者阅读此文,进一步了解该工具的机制。

漏洞及其影响

通过利用这些漏洞,未经授权的远程攻击者将能利用RPC服务特权在存在漏洞的计算机上远程执行代码,当然这还要取决于承载RPC运行时的进程。该漏洞可以从网络外部利用借此入侵网络,此外也可用于网络内部横向移动。

如上表所示,CVE-2022-26809是一种“零点击”漏洞,无需人工介入即可利用。因此它在通用漏洞评分系统(CVSS)中一举得到了9.8分的高分(满分10分)。这意味着该漏洞的严重性极高,并且被攻击者利用的可能性极大。

谁容易受到威胁?

任何Windows计算机,只要445端口被打开且RPC运行时库未安装补丁,都会受到该漏洞威胁。根据Shodan的数据,目前有超过70万台Windows计算机将该端口暴露在互联网上。根据微软的介绍。监听该TCP端口的服务器也会受到潜在威胁。

定位并理解该漏洞

CVE中提到,该漏洞位于Windows RPC运行时中,该运行时是通过库文件rpcrt4.dll实现的。当客户端和服务器进程利用RPC协议进行通信时,双方都会加载这个运行时库。

我们对比了该文件的10.0.22000.434版(2022年3月补丁修补前)和10.0.22000.613版(2022年4月,补丁修补后),发现有如下多个函数产生了变化:

其中OSF_CCALL::ProcessResponse和OSF_SCALL::ProcessReceivedPDU这两个函数引起了我们的注意。这两个函数本质上较为相似,都负责处理RPC数据包,但一个运行在客户端,另一个运行在服务器端(CCALL和SCALL分别代表客户端和服务器端)。我们继续研究OSF_SCALL::ProcessReceivedPDU的变更,并注意到新版本中增加的两个代码块。

查看修补后的代码可以看到,在QUEUE::PutOnQueue之后调用了一个新函数。继续深入这个新函数并查看其代码发现,该函数会检查整数溢出。也就是说,新增的这个函数是为了验证整数变量是否保持在预期值范围内。

继续深入查看OSF_SCALL:GetCoalescedBuffer中有漏洞的代码后发现,这个整数溢出漏洞会导致堆缓冲区溢出,即数据被复制到一个太小而装不下的缓冲区中。这进而会导致数据被写入到缓冲区边界之外的堆中。只要善加利用,这个基元就可能导致远程代码执行。

其他几个函数页增加了类似的,用于检查整数溢出的调用:

  • OSF_CCALL::ProcessResponse
  • OSF_SCALL::GetCoalescedBuffer
  • OSF_CCALL::GetCoalescedBuffer

该整数溢出漏洞和防止此漏洞的函数同时存在于客户端和服务器端的执行流程中。

缓解措施

虽然RPC使用了多种安全控制机制和措施(例如安全回调),但我们依然建议根据微软的说明执行下列缓解措施:

  1. 安装最新安全更新,缓解这些漏洞。
  2. 虽然RPC对系统中的某些服务是必须的,但对企业边界范围外的设备,建议阻止TCP 445端口的通信。
  3. 为了遏制横向移动,建议只对真正需要的计算机(如域控制器、打印服务器、文件服务器等)允许传入的TCP 445端口通信。

Akamai Guardicore Segmentation规则

Akamai Guardicore Segmentation旨在保护用户防范利用这些漏洞发起的攻击。如上文所述,CVE-2022-26809因为完全无需人工介入即可生效,因此CVSS评分极高。这意味着该漏洞被利用时,用户和安全团队可能都无法察觉。通过使用明确的访问控制机制对网络进行微分段,即可防止利用这些漏洞的攻击进入内部网络或在网络中横向移动。

为了应用缓解措施,阻止来自网络外部的SMB流量,请创建如下的分段规则:


这篇关于Windows RPC运行时漏洞事后总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

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

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

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

基于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