CVE-2023-24860 拒绝服务攻击

CVE-2023-24860 拒绝服务攻击

relaysec Relay学安全 2025-01-17 09:11

欢迎加入我的知识星球,目前正在更新免杀相关的东西,129/永久,每100人加29,每周更新2-3篇上千字PDF文档。文档中会详细描述。目前已更新101+ PDF文档,《2025年了,人生中最好的投资就是投资自己!!!》

加好友备注(星球)!!!

CVE-2024-24860这个漏洞是用于拒绝服务攻击的漏洞。利用该漏洞可以删除
Windows
事件日志,删除主机上的
VMX
文件,
Web
服务日志,
数据库
等等。

那么该漏洞非常简单,其实就是利用了
EDR
的特性来进行删除的,例如如果我们在
Windows
主机上放置一个恶意文件。那么肯定是会被
Defender
检测到的,那么检测到之后就会被删除。

那么我们在想,
Web
服务器的日志文件又不是恶意文件,
Defender
怎么会删除呢?那么我们是不是可以将其恶意签名写入到
Web
日志文件中,那么
Defender
是不是就删除了?

例如我们将其这个字符串
{\rtf1{\shp{\sp
写入到一个
.txt
文件中。

当我们尝试保存的时候,会发现
Defender
已经阻止我们保存该文件了。

我们可以来看一下
Defender
到底爆的是什么?它其实报的是
CVE-2010-3333.PB
。它会立即删除这个文件。

现在让我们来了解一点前置的知识。

前置知识

恶意签名的最小部分

恶意签名的最小部分指的是构成恶意软件特征的小组最小字节,字符串,或代码片段。这部分内容能够唯一的标识恶意软件。即使文件内容发生一些变化时,这部分内容仍然能够被用来识别恶意文件。

那么我们为什么要找最小部分的恶意签名?恶意软件通常会通过各种方式来躲避检测,比如: 
文件加密或压缩

代码混淆或修改

隐藏或替换某些部分
。那么如果能够找到
最小部分
的恶意签名,就能够更好的应对这些躲避技术。

我们这里举一个例子:

假设一个恶意文件的内容是 
XABCY
,它被反病毒软件检测为恶意文件。
1. 测试删除 
X
 去掉
X
后,文件内容变成
ABCY
。如果这个文件仍然被检测为恶意文件,那么说明
X
不是恶意签名的一部分。

  1. 测试删除
    A
     去掉
    A
    后,文件内容变成
    BCY
    。如果文件不再检测为恶意文件,那么说明
    A
    是恶意软件签名的一部分。

  2. 测试删除
    B
     去掉
    B
    后,文件内容变成
    ACY
    ,如果文件不再检测为恶意文件,那么说明
    B
    是恶意软件签名的一部分。即使
    A
    仍然存在,但是
    B
    的删除会导致文件不再被检测到恶意。也就是说虽然
    A
    还在,删除
    B
    后文件不再恶意,表明
    B
    是恶意签名的一部分。

  3. 测试删除
    C
     去掉
    C
    后,文件内容变成
    ABY
    ,那么说明
    C
    是恶意签名的一部分。

  4. 测试删除
    Y
     去掉
    Y
    后,文件内容变成
    ABC
    ,文件仍然被检测到是恶意文件,说明
    Y
    不是恶意签名的一部分。

其实使用的就是排除法这种。

Windwos Defender签名

首先我们来了解一下
Defender
这个类: 
MSFT_MpThreat
。这个类是
Windows Defender
内部用于定义威胁状态的类。

如下字段:

class MSFT_MpThreat : BaseStatus
{
    string SchemaVersion;    // 定义架构版本,例如 "1.0.0.0"。
    sint64 ThreatID;         // 威胁的唯一标识符。
    string ThreatName;       // 威胁的名称,例如病毒名、恶意软件名等。
    uint8 SeverityID;        // 威胁的严重性级别(低、中、高、严重)。
    uint8 CategoryID;        // 威胁类别,例如病毒、木马、间谍软件等。
    uint8 TypeID;            // 威胁类型 ID,进一步细分类别。
    uint32 RollupStatus;     // 聚合状态,例如是否被检测到多次。
    string Resources[];      // 受威胁影响的资源(如文件、注册表路径等)。
    boolean DidThreatExecute; // 威胁是否执行过,`true` 表示已执行。
    boolean IsActive;         // 是否是活动威胁,`true` 表示威胁仍在。
};

这里我们唯一需要注意的是
ServerityId
这个字段,该字段表示威胁严重性的级别。分为低,中,高,严重。

接下来就是需要查找最小的签名以及出现的次数,如下图:

需要注意的是我们查找的签名必须能够唯一标识恶意行为或软件。签名应在恶意软件经过轻微变异(如混淆或打包处理)时仍然有效。应针对潜在的恶意软件家族设计,覆盖更广泛的变种。

最后该签名是比较合适的: 
{\rtf1{\shp{\sp

当我们将其保存到
.txt
文件中时我们会发现
Defender
检测到了。并且会删除自身。

但是删除自身肯定是没有任何意义的,所以我们需要删除其他的文件才有意义,那么我们可以尝试将其签名写入到其他文件中。

比如我们将其签名写入到其他
.txt
文件中,但是我们会发现是无效的。

攻击的话就很简单了。

使用该脚本即可:

https://github.com/SafeBreach-Labs/EDRaser
python EDRaser.py -attack access_logs -ip 88.88.88.110 -p 80

执行之后。

当我们查看
log
日志文件的时候,当打开文件时会发现被
Defender
检测到了。

如果我们查看该文件,我们会发现该脚本对其在
.txt
文件中插入了很多恶意签名。

参考:

https://i.blackhat.com/Asia-24/Presentations/Asia-24_Bar-EDREraseDataRemotelyReloaded.pdf