Introduction

欢迎来到 AV 简介 防病毒 (AV) 软件是基于主机的基本安全解决方案之一,可用于检测和防止最终用户计算机内的恶意软件攻击。 反病毒软件由不同的模块、功能和检测技术组成,这些将在本房间中讨论。 作为红队成员或渗透测试人员,熟悉并了解 AV 软件及其检测技术的工作原理至关重要。 一旦获得了这些知识,就可以更轻松地研究 AV 规避技术。

学习目标

  • 什么是防病毒软件?
  • 防病毒检测方法
  • 枚举目标机器中安装的AV软件
  • 在模拟环境中进行测试

房间先决条件

  • 基于主机的检测解决方案的一般知识; 查看 The Lay of the Land 房间了解更多信息。
  • 哈希加密的一般经验; 查看 Hashing - Crypto 101 房间以获取更多信息。
  • Yara规则的基础知识; 查看 THM Yara 房间了解更多信息。

Antivirus Software

什么是AV软件?

防病毒 (AV) 软件是额外的安全层,旨在检测并防止目标操作系统中恶意文件的执行和传播。

它是一个基于主机的应用程序,实时(在后台)运行以监视和检查当前和新下载的文件。 反病毒软件使用不同的技术检查并确定文件是否是恶意的,本会议室稍后将介绍这些技术。

有趣的是,第一个防病毒软件的设计目的只是为了检测和删除计算机病毒。 如今,情况已经改变了; 现代防病毒应用程序可以检测并删除计算机病毒以及其他有害文件和威胁。

AV 软件寻找什么?

传统的反病毒软件会寻找具有预定义恶意模式或签名的恶意软件。 恶意软件是有害软件,其主要目标是对目标计算机造成损害,包括但不限于:

  • 获得对目标机器的完全访问权限。
  • 窃取密码等敏感信息。
  • 加密文件并导致文件损坏。
  • 注入其他恶意软件或不需要的广告。
  • 使用受感染的机器执行进一步的攻击,例如僵尸网络攻击。

AV 与其他安全产品

除了 AV 软件之外,其他基于主机的安全解决方案也为端点设备提供实时保护。 端点检测和响应 (EDR) 是一种安全解决方案,可提供基于行为分析的实时保护。 防病毒应用程序执行扫描、检测和删除恶意文件。 另一方面,EDR监视目标机器中的各种安全检查,包括文件活动、内存、网络连接、Windows注册表、进程等。

现代防病毒产品旨在将传统防病毒功能和其他高级功能(类似于 EDR 功能)集成到一款产品中,以提供针对数字威胁的全面保护。 有关基于主机的安全解决方案的更多信息,我们建议访问 THM 房间:The Lay of the Land

AV软件的过去和现在

McAfee Associates, Inc. 于 1987 年开始实施第一个 AV 软件。它被称为“VirusScan”,当时的主要目标是删除感染 John McAfee 计算机的名为“Brain”的病毒。 随后,其他公司也加入到与病毒的战斗中。 反病毒软件被称为扫描仪,它们是搜索文件中恶意模式的命令行软件。

从那时起,事情发生了变化。 如今,反病毒软件使用图形用户界面 (GUI) 来执行恶意文件扫描和其他任务。 恶意软件程序的范围也扩大了,现在以 Windows 和其他操作系统上的受害者为目标。 现代 AV 软件支持大多数设备和平台,包括 Windows、Linux、macOS、Android 和 iOS。 现代反病毒软件已经得到改进,变得更加智能和复杂,因为它们包含了一系列多功能功能,包括防病毒、防漏洞利用、防火墙、加密工具等。

我们将在下一个任务中讨论一些 AV 功能。

Antivirus Features

防病毒引擎

AV 引擎负责查找并删除恶意代码和文件。 好的反病毒软件实现了有效且可靠的反病毒核心,可以准确、快速地分析恶意文件。 此外,它应该处理和支持各种文件类型,包括存档文件,它可以自解压和检查所有压缩文件。

大多数AV产品具有相同的共同功能,但实现方式不同,包括但不限于:

Scanner

Detection techniques

Compressors and Archives

Unpackers

Emulators

扫描器

大多数 AV 产品都包含扫描仪功能:AV 软件实时或按需运行和扫描。 此功能可在 GUI 中或通过命令提示符使用。 用户可以在需要检查文件或目录时使用它。 扫描功能必须支持最知名的恶意文件类型才能检测和消除威胁。 此外,根据反病毒软件的不同,它还可能支持其他类型的扫描,包括漏洞、电子邮件、Windows内存和Windows注册表。

检测技术

AV检测技术搜索并检测恶意文件; AV 引擎中可以使用不同的检测技术,包括:

 基于签名的检测是传统的反病毒技术,可在文件中查找预定义的恶意模式和签名。
 启发式检测是一种更先进的技术,包括分析可疑文件的各种行为方法。
 动态检测是一种包括监控系统调用和 API 以及在隔离环境中进行测试和分析的技术。

我们将在下一个任务中介绍这些技术。 良好的反病毒引擎能够准确、快速地检测恶意文件,并减少误报结果。 我们将展示几种提供不准确结果并对文件进行错误分类的 AV 产品。

压缩机和档案

“压缩器和档案”功能应该包含在任何 AV 软件中。 它必须支持并能够处理各种系统文件类型,包括压缩或存档文件:ZIP、TGZ、7z、XAR、RAR 等。恶意代码通常试图通过隐藏在压缩文件中来逃避基于主机的安全解决方案。 因此,在用户打开存档中的文件之前,反病毒软件必须解压缩并扫描所有文件。

PE(可移植可执行文件)解析和解包程序

恶意软件通过在有效负载中压缩和加密其恶意代码来隐藏和打包其恶意代码。 它在运行时自行解压缩和解密,使静态分析变得更加困难。 因此,反病毒软件必须能够在运行时进行静态分析之前检测并解压大多数已知的加壳程序(UPX、Armadillo、ASPack 等)。

恶意软件开发人员使用各种技术(例如打包)来缩小恶意文件的大小并更改其结构。 打包会压缩原始可执行文件以使其更难以分析。 因此,反病毒软件必须具有解包功能,将受保护或压缩的可执行文件解包为原始代码。

AV 软件必须具备的另一个功能是 Windows 可移植可执行文件 (PE) 标头解析器。 解析可执行文件的PE有助于区分恶意软件和合法软件(.exe文件)。 Windows(32 位和 64 位)中的 PE 文件格式包含各种信息和资源,例如目标代码、DLL、图标文件、字体文件和核心转储。

模拟器

模拟器是一种防病毒功能,可对可疑文件进行进一步分析。 一旦模拟器收到请求,模拟器就会在虚拟化和受控环境中运行可疑文件(exe、DLL、PDF 等)。 它监视可执行文件在执行过程中的行为,包括 Windows API 调用、注册表和其他 Windows 文件。 以下是模拟器可能收集的工件的示例:

 API调用
 内存转储
 文件系统修改
 记录事件
 正在运行的进程
 网络请求

当收集到足够的工件来检测恶意软件时,模拟器会停止文件的执行。

其他共同特征

以下是 AV 产品的一些常见功能:

 自我保护驱动程序,可防止恶意软件攻击实际的反病毒软件。
 防火墙和网络检查功能。
 命令行和图形界面工具。
 守护进程或服务。
 管理控制台。

AV Static Detection

一般来说,AV检测可以分为三种主要方法:

  1. 静态检测
  2. 动态检测
  3. 启发式和行为检测

静态检测

静态检测技术是最简单的防病毒检测类型,它基于恶意文件的预定义签名。 简而言之,它在检测中使用模式匹配技术,例如查找唯一字符串、CRC(校验和)、字节码/十六进制值序列和加密哈希(MD5、SHA1 等)。

然后,它在操作系统内的现有文件与签名数据库之间执行一组比较。 如果数据库中存在该签名,则认为该签名是恶意的。 此方法对静态恶意软件有效。

在此任务中,我们将使用基于签名的检测方法来了解防病毒产品如何检测恶意文件。 值得注意的是,该技术仅适用于具有数据库中预先生成的签名的已知恶意文件。 因此,数据库需要不时更新。

我们将使用 ClamAV 防病毒软件来演示基于签名的检测如何识别恶意文件。 ClamAV软件预装在提供的VM中,我们可以通过以下路径访问它:c:\Program Files\ClamAV\clamscan.exe。 我们还将扫描一些恶意软件样本,这些样本可以在桌面上找到。 恶意软件样本文件夹包含以下文件:

  1. EICAR 是一个包含 ASCII 字符串的测试文件,用于测试 AV 软件的有效性,而不是可能损坏您机器的真正恶意软件。 如需了解更多信息,您可以访问 EICAR 官方网站,此处
  2. Backdoor 1是一个C#程序,它使用众所周知的技术来建立反向连接,包括创建进程和执行Metasploit Framework shellcode。
  3. Backdoor 2 是一个 C# 程序,它使用进程注入和加密来建立反向连接,包括将 Metasploit shellcode 注入现有和正在运行的进程中。
  4. AV-Check 是一个 C# 程序,用于枚举目标计算机中的 AV 软件。 请注意,该文件不是恶意的。 我们将在任务 6 中更详细地讨论该工具。
  5. notes.txt 是一个包含命令行的文本文件。 请注意,该文件不是恶意的。

ClamAV自带数据库,在安装过程中,我们需要下载最近更新的版本。 让我们尝试使用 clamscan.exe 二进制文件扫描恶意软件示例文件夹,并检查 ClamAV 对这些示例的执行情况。

命令提示符

			c:\>"c:\Program Files\ClamAV\clamscan.exe" c:\Users\thm\Desktop\Samples
Loading: 22s, ETA: 0s [========================>] 8.61M/8.61M sigs
Compiling: 4s, ETA: 0s [========================>] 41/41 tasks

C:\Users\thm\Desktop\Samples\AV-Check.exe: OK
C:\Users\thm\Desktop\Samples\backdoor1.exe: Win.Malware.Swrort-9872015-0 FOUND
C:\Users\thm\Desktop\Samples\backdoor2.exe: OK
C:\Users\thm\Desktop\Samples\eicar.com: Win.Test.EICAR_HDB-1 FOUND
C:\Users\thm\Desktop\Samples\notes.txt: OK

aboe 输出显示 ClamAV 软件正确分析了我们测试的两个文件(EICAR、backdoor1、AV-Check 和notes.txt)并将其标记为恶意文件。 然而,它错误地将后门2识别为非恶意的。

您可以运行 clamscan.exe –debug ,您将看到扫描期间加载和使用的所有模块。 例如,它使用解包方法来分割文件并查找预定义的恶意字节码值序列,这就是它能够检测到C#后门1的方式。后门1中使用的Metasploit shellcode的字节码值之前是 识别并添加到 ClamAV 的数据库中。

然而,后门 2 对 Metasploit shellcode 使用加密技术 (XOR),导致产生在 ClamAV 数据库中找不到的不同字节码值序列。

虽然 ClamAV 能够使用基于 md5 签名的技术将 EICAR.COM 测试文件检测为恶意文件。 为了确认这一点,我们可以在调试模式(–debug)下再次重新扫描 EICAR.COM 测试文件。 在输出中的某个时刻,您将看到以下消息:

LibClamAV debug: FP SIGNATURE: 44d88612fea8a8f36de82e1278abb02f:68:Win.Test.EICAR_HDB-1  # Name: eicar.com, Type: CL_TYPE_TEXT_ASCII

现在,如果 EICAR.COM 的 md5 值与我们在输出中看到的上一条消息中看到的值相匹配,则生成该值。 我们将为此使用 sigtool:

命令提示符

			c:\>"c:\Program Files\ClamAV\sigtool.exe" --md5 c:\Users\thm\Desktop\Samples\eicar.com
44d88612fea8a8f36de82e1278abb02f:68:eicar.com

如果仔细检查生成的 MD5 值 44d88612fea8a8f36de82e1278abb02f,它是匹配的。

创建您自己的签名数据库

ClamAV 的功能之一是创建您自己的数据库,允许您包含官方 ClamAV 数据库中未找到的项目。 让我们尝试为 ClamAV 已经错过的 Backdoor 2 创建签名,并将其添加到数据库中。 以下是所需的步骤:

  1. 为文件生成MD5签名。
  2. 将生成的签名添加到扩展名为“.hdb”的数据库中。
  3. 使用我们的新数据库针对文件重新扫描 ClamAV。

首先,我们将使用 ClamAV 套件中包含的 sigtool 工具,通过 –md5 参数生成 backdoor2.exe 的 MD5 哈希值。

生成 MD5 哈希值

			C:\Users\thm\Desktop\Samples>"c:\Program Files\ClamAV\sigtool.exe" --md5 backdoor2.exe
75047189991b1d119fdb477fef333ceb:6144:backdoor2.exe

如输出所示,生成的哈希字符串包含以下结构:Hash:Size-in-byte:FileName。 请注意,ClamAV 在扫描期间的比较中使用生成的值。

现在我们有了 MD5 哈希值,现在让我们创建自己的数据库。 我们将使用 sigtool 工具并使用 > thm.hdb 将输出保存到文件中,如下所示,

生成我们的新数据库

C:\Users\thm\Desktop\Samples>"c:\Program Files\ClamAV\sigtool.exe" --md5 backdoor2.exe > thm.hdb

结果,将在执行该命令的当前目录中创建一个 thm.hdb 文件。

我们已经知道ClamAV没有使用官方数据库检测到backdoor2.exe! 现在,让我们使用我们创建的数据库 thm.hdb 重新扫描它,并查看结果!

使用新数据库重新扫描backdoor2.exe!

			C:\Users\thm\Desktop\Samples>"c:\Program Files\ClamAV\clamscan.exe" -d thm.hdb backdoor2.exe
Loading: 0s, ETA: 0s [========================>] 1/1 sigs
Compiling: 0s, ETA: 0s [========================>] 10/10 tasks

C:\Users\thm\Desktop\Samples\backdoor2.exe: backdoor2.exe.UNOFFICIAL FOUND

正如我们预期的那样,ClamAV 工具根据我们提供的数据库将 backdoor2.exe 二进制文件标记为恶意文件。 作为实践,将 AV-Check.exe 的 MD5 签名添加到我们已创建的同一数据库中,然后检查 ClamAV 是否可以将 AV-Check.exe 标记为恶意。

Yara 静态检测规则

有助于静态检测的工具之一是 Yara。 Yara 是一款允许恶意软件工程师分类和检测恶意软件的工具。 Yara 使用基于规则的检测,因此为了检测新的恶意软件,我们需要创建新规则。 ClamAV 还可以处理 Yara 规则来检测恶意文件。 该规则与上一节中我们的数据库中的规则相同。

为了创建规则,我们需要检查和分析恶意软件; 根据调查结果,我们编写了一条规则。 我们以AV-Check.exe为例,为其编写一条规则。

首先,让我们分析该文件并使用字符串工具列出二进制文件中所有人类可读的字符串。 结果,我们将看到所有函数、变量和无意义的字符串。 但是,如果您仔细观察,我们可以在将来使用规则中的一些唯一字符串来检测此文件。 AV-Check使用程序数据库(.pdb),其中包含程序在编译过程中的类型和符号调试信息。

命令提示符

			C:\Users\thm\Desktop\Samples>strings AV-Check.exe | findstr pdb
C:\Users\thm\source\repos\AV-Check\AV-Check\obj\Debug\AV-Check.pdb

我们将使用上一个命令输出中的路径作为我们将创建的 Yara 规则中的唯一字符串示例。 签名可能是现实世界中的其他东西,例如注册表项、命令等。以下是我们将在检测中使用的 Yara 规则:

rule thm_demo_rule {
meta:
author = "THM: Intro-to-AV-Room"
description = "Look at how the Yara rule works with ClamAV"
strings:
$a = "C:\\Users\\thm\\source\\repos\\AV-Check\\AV-Check\\obj\\Debug\\AV-Check.pdb"
condition:
$a
}

让我们进一步解释一下 Yara 规则。

  • 规则以规则 thm_demo_rule 开头,这是我们规则的名称。 如果规则匹配,ClamAV 将使用此名称。
  • 元数据部分是一般信息,包含用户可以填写的作者和描述。
  • 字符串部分包含我们正在查找的字符串或字节码。 在本例中,我们使用 C# 程序的数据库路径。 请注意,我们在该路径中添加了一个额外的 \ 来转义特殊字符,因此它不会违反规则。
  • 在条件部分,我们指定是否在字符串部分中找到定义的字符串,然后标记该文件。

请注意,Yara 规则必须存储在 .yara 扩展名文件中,以便 ClamAV 进行处理。 让我们使用我们创建的 Yara 规则再次重新扫描 c:\Users\thm\Desktop\Samples 文件夹。 您可以在桌面上的 c:\Users\thm\Desktop\Files\thm-demo-1.yara 中找到 Yara 规则的副本。

使用 Yara 规则扫描

			C:\Users\thm>"c:\Program Files\ClamAV\clamscan.exe" -d Desktop\Files\thm-demo-1.yara Desktop\Samples
Loading: 0s, ETA: 0s [========================>] 1/1 sigs
Compiling: 0s, ETA: 0s [========================>] 40/40 tasks

C:\Users\thm\Desktop\Samples\AV-Check.exe: YARA.thm_demo_rule.UNOFFICIAL FOUND
C:\Users\thm\Desktop\Samples\backdoor1.exe: OK
C:\Users\thm\Desktop\Samples\backdoor2.exe: OK
C:\Users\thm\Desktop\Samples\eicar.com: OK
C:\Users\thm\Desktop\Samples\notes.txt: YARA.thm_demo_rule.UNOFFICIAL FOUND

因此,ClamAV 可以根据我们提供的 Yara 规则将 AV-Check.exe 二进制文件检测为恶意文件。 然而,ClamAV 给出了误报结果,它将notes.txt 文件标记为恶意文件。 如果我们打开notes.txt文件,我们可以看到文本包含我们在规则中指定的相同路径。

让我们改进 Yara 规则以减少误报结果。 我们将在规则中指定文件类型。 通常,可以使用幻数(二进制文件的前两个字节)来识别文件的类型。 例如,可执行文件 (.exe) 始终以 ASCII“MZ”值或十六进制的“4D 5A”开头。

为了确认这一点,让我们使用 HxD 应用程序(一个免费的十六进制编辑器)来检查 AV-Check.exe 二进制文件并查看前两个字节 。 请注意,HxD 已在提供的 VM 中可用。

HxD Application

了解这一点将有助于改进检测,让我们将其包含在 Yara 规则中,以仅将包含我们签名字符串的 .exe 文件标记为恶意文件。 以下是改进后的Yara规则:

rule thm_demo_rule {
meta:
author = "THM: Intro-to-AV-Room"
description = "Look at how the Yara rule works with ClamAV"
strings:
$a = "C:\\Users\\thm\\source\\repos\\AV-Check\\AV-Check\\obj\\Debug\\AV-Check.pdb"
$b = "MZ"
condition:
$b at 0 and $a
}

在新的 Yara 规则中,我们定义了一个等于 MZ 的唯一字符串 ($b) 作为 .exe 文件类型的标识符。 我们还更新了条件部分,现在包括以下条件:

  1. 如果在 0 位置找到字符串“MZ”,则该文件位于文件开头。
  2. 如果唯一字符串(路径)出现在二进制文件中。
  3. 在条件部分,我们使用 AND 运算符查找 1 和 2 中的两个定义,然后我们就得到了匹配。

您可以在 Desktop\Files\thm-demo-2.yara 中找到更新的规则。 现在我们已经更新了 Yara 规则,现在让我们再试一次。

使用 Yara 规则扫描

			C:\Users\thm>"c:\Program Files\ClamAV\clamscan.exe" -d Desktop\Files\thm-demo-2.yara Desktop\Samples
Loading: 0s, ETA: 0s [========================>] 1/1 sigs
Compiling: 0s, ETA: 0s [========================>] 40/40 tasks

C:\Users\thm\Desktop\Samples\AV-Check.exe: YARA.thm_demo_rule.UNOFFICIAL FOUND
C:\Users\thm\Desktop\Samples\backdoor1.exe: OK
C:\Users\thm\Desktop\Samples\backdoor2.exe: OK
C:\Users\thm\Desktop\Samples\eicar.com: OK
C:\Users\thm\Desktop\Samples\notes.txt: OK

输出显示我们改进了 Yara 规则以减少误报结果。 这是反病毒软件如何工作的一个简单示例。 因此,反病毒软件供应商努力对抗恶意软件并改进其产品和数据库,以提高结果的性能和准确性。

基于签名的检测的缺点是,如果二进制文件被修改,文件将具有不同的哈希值。 因此,如果有人知道反病毒软件寻找什么以及如何分析二进制文件,那么他们很容易绕过基于签名的检测技术,如后面的房间所示。

Other Detection Techniques

静态检测的概念相对简单。 在本节中,我们将讨论不同类型的检测技术。

动态检测

动态检测方法比静态检测更先进、更复杂。 动态检测更侧重于使用不同方法在运行时检查文件。 下图为动态检测扫描流程:

第一种方法是通过监视 Windows API。 检测引擎使用 Windows Hooks 检查 Windows 应用程序调用并监视 Windows API 调用。

另一种动态检测方法是沙盒。 沙箱是一种虚拟化环境,用于运行与主机分离的恶意文件。 这通常是在隔离环境中完成的,主要目标是分析恶意软件在系统中的行为方式。 一旦恶意软件被确认,将根据二进制文件的特征创建唯一的签名和规则。 最后,新的更新将被推送到云数据库中以供将来使用。

这种类型的检测也有缺点,因为它需要在虚拟环境中执行和运行恶意软件一段有限的时间以保护系统资源。 与其他检测技术一样,可以绕过动态检测。 恶意软件开发人员将其软件设置为不在虚拟或模拟环境中运行,以避免动态分析。 例如,他们在运行恶意活动之前检查系统是否生成执行软件的真实进程,或者让软件在执行前等待一段时间。

有关沙盒规避的更多信息,建议查看 THM 房间:Sandbox Evasion

启发式和行为检测

启发式和行为检测在当今的现代 AV 产品中已变得至关重要。 现代反病毒软件依靠这种类型的检测来检测恶意软件。 启发式分析使用各种技术,包括静态和动态启发式方法:

  1. 静态启发式分析是反编译(如果可能)并提取恶意软件源代码的过程。 然后,将提取的源代码与其他众所周知的病毒源代码进行比较。 这些源代码是先前已知的并在启发式数据库中预定义。 如果匹配达到或超过阈值百分比,则该代码将被标记为恶意代码。
  2. 动态启发式分析基于预定义的行为规则。 安全研究人员在隔离和安全的环境中分析可疑软件。 根据他们的发现,他们将该软件标记为恶意软件。 然后,创建行为规则以匹配目标计算机内软件的恶意活动。

以下是行为规则的示例:

  • 如果进程尝试与包含用户 NTLM 哈希值、Kerberos 票证等的 LSASS.exe 进程交互
  • 如果进程打开侦听端口并等待接收来自命令和控制 (C2) 服务器的命令

下图显示了启发式和行为检测扫描流程:

检测方法总结

让我们总结一下现代反病毒软件如何作为一个单元(包括所有组件)工作,并结合各种功能和检测技术来实现其反病毒引擎。 以下是防病毒引擎的组件示例:

在图中,您可以看到可疑的 Foobar.zip 文件被传递到 AV 软件进行扫描。 AV 软件识别出这是一个压缩文件 (.zip)。 由于该软件支持 .zip 文件,因此它应用取消存档功能来提取文件 (Foobar.exe)。 接下来,它识别文件类型以了解要使用哪个模块,然后执行 PE 解析操作以提取二进制文件的信息和其他特征。 接下来,它检查文件是否被加壳; 如果是,它会解压代码。 最后,它将收集到的信息和二进制文件传递给反病毒引擎,在那里它尝试检测它是否是恶意的并给我们结果。

AV Testing and Fingerprinting

AV Vendors

市场上许多反病毒供应商主要专注于为家庭或企业用户实施安全产品。 现代反病毒软件已得到改进,现在将防病毒功能与其他安全功能(如防火墙、加密、反垃圾邮件、EDR、漏洞扫描、VPN 等)相结合。

需要注意的是,很难推荐哪种 AV 软件最好。 这一切都取决于用户的偏好和体验。 如今,AV 供应商除了关注最终用户安全外,还关注业务安全。 我们建议检查AV比较网站以了解有关企业AV供应商的更多详细信息。

AV测试环境

AV 测试环境是检查可疑或恶意文件的好地方。 您可以上传文件以针对各种反病毒软件供应商进行扫描。 此外,VirusTotal 等平台使用各种技术并在几秒钟内提供结果。 作为红队成员或渗透测试人员,我们必须针对最知名的反病毒应用程序测试有效负载,以检查旁路技术的有效性。

VirusTotal

VirusTotal 是一个著名的基于网络的扫描平台,用于检查可疑文件。 它允许用户上传要使用 70 多个防病毒检测引擎进行扫描的文件。 VirusTotal 将上传的文件传递给防病毒引擎进行检查,返回结果,并报告是否是恶意的。 应用了许多检查点,包括检查列入黑名单的 URL 或服务、签名、二进制分析、行为分析以及检查 API 调用。 此外,二进制文件将在模拟和隔离的环境中运行和检查,以获得更好的结果。 如需了解更多信息并检查其他功能,您可以访问 VirusTotal 网站。

VirusTotal alternatives

重要提示: VirusTotal 是一个方便的扫描平台,具有强大的功能,但它有一个共享政策。 所有扫描结果都将传递并与防病毒供应商共享,以改进他们的产品并更新已知恶意软件的数据库。 作为红队队员,这会烧毁您在交战中使用的投掷器或有效载荷。 因此,可以使用替代解决方案来针对不同的安全产品供应商进行测试,最重要的优点是它们没有共享策略。 然而,还有其他限制。 您每天要扫描的文件数量有限; 否则,需要订阅才能进行无限制的测试。 出于这些原因,我们建议您仅在不共享信息的网站上测试您的恶意软件,例如:

指纹AV软件

作为红队成员,一旦我们获得了对目标机器的初始访问权限,我们就不知道有哪些反病毒软件。 因此,查找并识别安装了哪些基于主机的安全产品(包括 AV 软件)非常重要。 AV 指纹识别是确定存在哪个 AV 供应商的重要过程。 了解安装了哪些反病毒软件对于创建相同的环境来测试绕过技术也非常有帮助。

本节介绍基于静态工件(包括服务名称、进程名称、域名、注册表项和文件系统)查看和识别防病毒软件的不同方法。

下表列出了知名且常用的反病毒软件。

Antivirus Name Service Name Process Name
Microsoft Defender WinDefend MSMpEng.exe
Trend Micro TMBMSRV TMBMSRV.exe
Avira AntivirService, Avira.ServiceHost avguard.exe, Avira.ServiceHost.exe
Bitdefender VSSERV bdagent.exe, vsserv.exe
Kaspersky AVP<Version #> avp.exe, ksde.exe
AVG AVG Antivirus AVGSvc.exe
Norton Norton Security NortonSecurity.exe
McAfee McAPExe, Mfemms MCAPExe.exe, mfemms.exe
Panda PavPrSvr PavPrSvr.exe
Avast Avast Antivirus afwServ.exe, AvastSvc.exe

SharpEDRChecker

对 AV 进行指纹识别的一种方法是使用公共工具,例如 SharpEDRChecker。 它用 C# 编写,在目标机器上执行各种检查,包括检查 AV 软件,如运行进程、文件元数据、加载的 DLL 文件、注册表项、服务

img

编译完成后,我们可以在输出部分找到编译版本的路径,如步骤 3 中突出显示的那样。我们还在 C:\Users\thm\Desktop\Files 目录中添加了编译版本的副本。 现在我们尝试运行一下,看看结果如下:

Command Prompt! C:\> SharpEDRChecker.exe SharpEDRChecker’s Summary [!] Directory Summary: [-] C:\Program Files\Windows Defender : defender [-] C:\Program Files\Windows Defender Advanced Threat Protection : defender, threat [-] C:\Program Files (x86)\Windows Defender : defender [!] Service Summary: [-] PsShutdownSvc : sysinternal [-] Sense : defender, threat [-] WdNisSvc : defender, nissrv [-] WinDefend : antimalware, defender, malware, msmpeng [-] wscsvc : antivirus

因此,Windows Defender 是根据文件夹和服务找到的。 请注意,该程序可能会被 AV 软件标记为恶意程序,因为它会执行各种检查和 API 调用。

C# 指纹检查

枚举 AV 软件的另一种方法是编写我们自己的程序。 我们在提供的Windows 10 Pro VM中准备了一个C#程序,因此我们可以做一些动手实验! 您可以在桌面上找到该项目的图标 (AV-Check),然后双击它以使用 Microsoft Visual Studio 2022 打开它。

以下 C# 代码很简单,其主要目标是根据已知的 AV 应用程序的预定义列表确定是否安装了 AV 软件。

using System;
using System.Management;

internal class Program
{
static void Main(string[] args)
{
var status = false;
Console.WriteLine("[+] Antivirus check is running .. ");
string[] AV_Check = {
"MsMpEng.exe", "AdAwareService.exe", "afwServ.exe", "avguard.exe", "AVGSvc.exe",
"bdagent.exe", "BullGuardCore.exe", "ekrn.exe", "fshoster32.exe", "GDScan.exe",
"avp.exe", "K7CrvSvc.exe", "McAPExe.exe", "NortonSecurity.exe", "PavFnSvr.exe",
"SavService.exe", "EnterpriseService.exe", "WRSA.exe", "ZAPrivacyService.exe"
};
var searcher = new ManagementObjectSearcher("select * from win32_process");
var processList = searcher.Get();
int i = 0;
foreach (var process in processList)
{
int _index = Array.IndexOf(AV_Check, process["Name"].ToString());
if (_index > -1)
{
Console.WriteLine("--AV Found: {0}", process["Name"].ToString());
status = true;
}
i++;
}
if (!status) { Console.WriteLine("--AV software is not found!"); }
}
}

让我们进一步解释一下代码。 我们在代码中的 AV_Check 数组中预定义了一个众所周知的 AV 应用程序列表,该列表取自上一节,我们讨论了指纹识别 AV 软件(上表)。 然后,我们使用 Windows Management Instrumentation 命令行 (WMIC) 查询(select * from win32_process)列出目标计算机中当前正在运行的所有进程,并将它们存储在 processList 变量中。 接下来,我们检查当前正在运行的进程并比较它们是否存在于预定义数组中。 如果找到匹配项,那么我们就安装了 AV 软件。

C# 程序利用 WMIC 对象列出当前正在运行的进程,这些进程可由 AV 软件监控。 如果 AV 软件在监控 WMIC 查询或 Windows API 方面实施不当,则可能会在扫描我们的 C# 程序时导致误报结果。

让我们编译一个 x86 版本的 C# 程序,将其上传到 VirusTotal 网站,然后检查结果! 要在 Microsoft Visual Studio 2022 中编译 C# 程序,请从栏菜单中选择“构建”,然后选择“构建解决方案”选项。 然后,如果编译正确,您可以在输出部分找到编译版本的路径,如下面屏幕截图中步骤 3 中突出显示的那样。

Compiling the C# project

如果我们将AV-Check程序上传到VirusTotal网站并检查结果,令人惊讶的是,VirusTotal显示有两个AV供应商(MaxSecure和SecureAge APEX) 将我们的程序标记为恶意! 因此,这是一个误报结果,它错误地将文件识别为恶意文件,而实际上并非恶意文件。 可能的原因之一是这些反病毒供应商的软件使用了机器学习分类器或基于规则的检测方法,但实施效果不佳。 有关实际提交报告的更多详细信息,请参阅此处。 有四个主要部分:检测、详细信息、行为和社区。 如果我们检查“行为”部分,我们可以看到 Windows API、注册表项、模块和 WMIC 查询的所有调用。

VirusTotal check

在“检测”部分,有 Sigma 规则,如果执行期间的系统事件匹配(在沙箱环境中),则认为该文件是恶意的。 这个结果很可能是基于规则的; VirusTotal由于进程重影技术 标记了我们的程序,如以下屏幕截图所示。

VirusTotal check

现在,让我们使用 x64 CPU 重新编译 C# 程序,并检查检查引擎的行为是否有所不同。 在我们这次提交尝试中,三个AV供应商的软件(Cyren AV 已添加到列表中)将该文件标记为恶意文件。 有关实际提交报告的更多详细信息,请查看此处

VirusTotal check

注意: 如果您尝试向 VirusTotal 网站提交文件,可能会得到不同的结果。 请记住,VirusTotal 与防病毒供应商共享提交报告,以改进他们的 AV 检测引擎,包括误报结果。