欢迎访问本站!

首页科技正文

基于 CLR 的远程代码 loading 手艺以及响应的 SOC 检测方式

admin2021-09-2920技术

皇冠管理端登3手机www.22223388.com)实时更新发布最新最快最有效的皇冠管理端登3手机网址,包括新2登3手机网址,新2登3备用网址,皇冠《guan》登3最新网址,新2足球登3网址,新2网址大全。
皇冠正网 基于 CLR 的远程代码 loading 手艺以及响应的 SOC 检测方式 技术 第1张


险些所有现代攻击都市使用 Mimikatz、SharpHound、SeatBelt、Rubeus、GhostPack 和其他社区可用的工具集。这种所谓的 githubification 正在降低攻击者的成本,并将重点从恶意软件开发转向逃避平安机制。当攻击者可以通过简朴地重“zhong”用现有工具并学习若何使用它们执行攻击来获得更多收益时,确立一个可以被 EPP 解决方案检测到的工具有什么意义?

无文件和无恶意软件攻击、LOLBAS 列表的大量使用、运行时加密、下载程序、打包程序,以及旧的、重新行使的和全新的手艺来逃避种种平安工具和控制,所有这些都被攻击者起劲使用。没有人会对 InstallUtil.exe 中嵌入的 Mimikatz 感应惊讶。我们将在本文中形貌一种可用于在内存中隐藏攻击性流动的逃避手艺,即若何从内存中删除指标。然后,我们将为你提供一些可能对检测此手艺有用的工具和方式。我们将『jiang』回首运行在或使用CLR(公共语言运行时)环境中的应用程序,如PowerShell、许多LOLBAS工具和多个c,适用程序。

若是你已经熟悉 CLR,则可以直接转到 CLR 中的检测逃避。

CLR

CLR一样平常指公共语言运行库。公共语言运行库 (common language runtime,CLR) 是托管代码执行焦点中〖zhong〗的引擎。运行库为托管代码提供种种服务,如跨语言集成、代码接见平安性、工具生计期治理、调试和剖析支持。

当你编译用 C, 编写的源代码时,编译器不会给你一个准备运行的 PE 文件,而是一个程序集。这主要是一组语句(CIL 代码),供运行时环境在此程序集执行时代天生本机代码(依次执行)。在运行时从程序集确立本机代码的历程称为 JIT 编译。


编译应用程序天生的程序集将包罗以下数据:

程序集中的类、接口、类型、方式和字段的元信息,CLR 需要这些数据来处置编写的代码:加载它、引用它、从另一个代码运行一个代码以及转达输入和输出数据,读取和应用这些数据的历程称为反射。

代码自己,在模块中界说,若是没有在CLR中处置,它就无法启动。

包罗有关平安性、版本、依赖项和程序集元素的数据的程序集清单。清单界说‘shuo’了执行代码所需的内容。例如,若是你的代码需要启动 https://github.com/JamesNK/Newtonsoft.Json,它将在清单中界说。

所有类型的文件和数据,它们可以包罗在程序集自己中,也可以作为单独的文件存储。

程序集的加载和执行是一个庞大的历程,接下来就让我们仔细看看它是若何事情的。

历程启动

ETW CLR Runtime Provider (GUID e13c0d23-ccbc-4e12-931b-d9cc2eee27e4)提供了一个使用托管代码启动历程的指示。


CLR 启动

Microsoft 将 CLR 实现为 DLL 内的 COM 服务器,这意味着〖zhuo〗尺度的 COM 接口用于 CLR 环境,并为该接口和 COM 服务器分配了一个 GUID。当你安装 .NET Framework 时,代表 CLR 的 COM 服务器就像任何其他 COM 服务器一样在 Windows 注册表中注册。任何 Windows 应用程序都可以托管 CLR 环境。这种托管会天生带有CLR激活信息的事{shi}宜187,并包罗COM激活数据:StartupMode、包罗有关若何加载 CLR 的有用信息的 ComObjectGUID 字段,这在 COM 激活的情形下尤其有趣。

若是你需要有关此主题的分外信息,请参阅随 .NET Framework SDK 提供的 MetaHost.h C++ 标头文【wen】件。此标头文件指定 GUID 标识符和非托管 ICLRMetaHost 接口的界说。你将学习若何使用任何语言运行 CLR:C++、Python 等。

应用程序域加载

事宜156泛起。将应用程序域加载到CLR中。当CLR COM服务器初始化时,它确立一个应用程序域。AppDomain 示意一组通常实现应用程序的程序集的逻辑容器。此外,应用程序域是在 CLR 中实现的一种机制,它允许你将一组应用程序作为单个历程运行,以确保它们的相对隔离,同时允许它们更快地相互交互。在一个历程中可以有多个应用程序域。第一个应用程序域将在 CLR 环境初始化时确立。它被称为默认应用程序域,只有『you』在 Windows 历程终止时才会被销毁。

在一个应用程序域中确立的工具不能被另一个应用程序域中的代码直接接见,当应用程序域代码确立一个工具时,该工具“属于”此应用程序域。此外,工具(包罗工件)的存在时间不得跨越其代码确立它的应用程序域的生命周期。其他应用程序域中的代码只能通过编组(数据传输)、引用或值接见其他应用程序域中的工具。这确保了清晰的星散和界限,由于一个应用程序域中的代码不能直接引用由其他应用程序域中的代码确立的工具。这种隔离使得从历程中卸载应用程序域变得容易,而不会影响在其他应用程序域中运行的代码。这正是允许卸载应用程序域的缘故原由。 CLR 不支持从 AppDomain 卸载【zai】单个程序集的功效。然则,你可以下令 CLR 卸载整个 AppDomain,这将卸载它当前包罗的所有程序集。

每个在自己的地址空间中运行的〖de〗应用程序都是一个很棒的功效,它确保了一个应用程序的代码不能接见另一个应用程序使用的代码或数据。历程隔离可防止平安破绽、数据损坏和其他不能展望的操作,使 Windows 及其上运行的应用程序可靠。不幸的是,在 Windows 中确立历程异常耗时。Win32 CreateProcess 函数异常慢,Windows 需要大量内存来虚拟化历程地址空间。

然则,若是应用程序完全由可靠平安的托管代码组成,而且不挪用非托管代码,那么在统一个Windows历程中运行多个托管应用程序就没有问题。应用程序域提供了珍爱、设置和终止每个应用程序所必须的隔离。CLR中代码的隔离单元是应用程序域,而不是历程。我们可以说,凭证一些假设,在WinAPI语义中启动的历程等同于应用程序域的确立。对于SOC剖析师来说,最好将应用程序域载荷和历程启动事宜视为功效{xiao}相同。

对于可以在单个Windows历程中运行的应用程序域的数目没有硬编码限制,与IIS服务器站点一样,每个站点都是一个单独的应用程序域,具有自己的隔离性,可以从服务器卸载而不影响其他站点。


Assembly load

接下来,若是要在应用程序域之间共享程序集,则需要将程序集加载到应用程序域或共享域中,我们不会 hui[在本文中讨论它们。程序集为它所包罗的代码确定一组规则,为 CLR(和其他代码)提供有关程序集中界说的类型和类的信息。

模块加载

带有CIL代码的模块被加载到程序集中,CIL代码进入JIT编译,凭证清单天生可执行的内陆代码。注重,我们需要卸载整个应用程序域,以便删除模块中界说或泛起在所形貌的历程中的工件。

该图显示了运行单个 CLR COM 服务器的单个 Windows 历程。此 CLR 环境当前治理着两个 AppDomain。两个 AppDomain 都有自己的加载器堆,每个堆都维护着自 AppDomain 确立以来可用的类型的纪录。每个加载器堆都有一个方式表,若是该方式至少执行了一次,则方式表中的每个条目都指向 JIT 编译的本机代码。


通过c, J. Rihter实现CLR

CLR 中的检测逃避

首先,让我们看看何时以及若何检测到攻击。为此,我们将使用 Covenant 框架剖析攻击。

在单个应用程‘cheng’序域中运行 Covenant

首先让我们看看 Covenant 框架是若何事情的,通过启动 Grunt 署理并执行典型的攻击流动,我们可以网络有关当前用户、AutoStart 和 AutoRun 条目、加载到当前用‘yong’户会话中的 Kerberos 票据以及浏览器历史纪录的信息。因此,我们可以看到多个程序集加载到我们的应用程序域中:Seatbelt AutoRuns、Seatbelt ChromeHistory、Rubeus klist 等。


Rubeus 和Seatbelt的加载组件

一组具有差异功效的程序集被加载到统一个「ge」应用程序域和一个历程中。这些程序集可以很容易地被带有署名剖析的经典平安工具检测到,由于代码和执行效果中存在大量指标。而卸载它们也是不能能的,由于它们与实现与 C2 交互的代码链接到相同的应用程序域。

历程启动和注入

攻击者若何逃避呢?他们可能会使用经典的代码拆分方式,即代码注入或出于恶意目的启动新历程。然而,这并不总是可能的:事实上,在某些情形下,注入和启动新历程对于平安监控工具来说都太显眼了。此外,并非总是可以关闭包罗指示器的历程,例如,若是攻击者使用了系统历程。为了说明这一点,我们可以确立《li》 Mimikatz shellcode (Donut) 并使用从 Covenant 的 Grunt 启动的历程注入将其注入历程(我选择了 PowerShell)。此外,我们可以看到注入器历程的启动和注入。我们可以使用 Sy *** on 和 SwiftOnSecurity 的“默认”设置来监控这些流动。

2022世界杯南美区赛www.x2w888.com)实时更新发布最新最快的2020世界杯南美区赛、2022世界杯会员线路、2022世界杯备用登录网址、2022世界杯手机管理端、2022世界杯手机版登录网址、2022世界杯皇冠登录网址。


上传注入器应用程序


启动注入器并注入shellcode

Grunt 在受害者主机上使用以下下令行(glist 中的 b64 编码的 shellcode)执行 ProcessInjection.exe:


Sy *** on 显示了许多可疑流动,如下所示{shi}。


使用 AV/EPP/EDR 是无法完〖wan〗成执行链的,由于它是众所周知的攻击者流动模式,以是运行/天生/注入代码的旧方式异常引人注目。

基于 COM 的 CLR 署理

接下来,我将要形貌一种通过在 Explorer 历程中激活 COM 服务器来使远程机械下载和运行代码的方式。

让我们用以下输入将COM服务器注册为MSCOREE库(在Windows中实现CLR功效):程序集名称和具有服务器实现的类。因此,我们指示 CLR 在激活时从指定的【de】类加载实现服务器的代码。


可以仔细考察一下 CodeBase 项,它允许我们使用 COM 服务器而无需在全局程序集缓存中注册我们的程序集,并代表用户界说 COM 服务器(GAC 注册需要治理权限)。这个参数需要一个URI,有点不寻常。主机历程从网络下载包罗 COM 服务器的程序集并启动它。 COM 服务器注册也可以通过网络举行,我们只需要更改系统注册表来界说它。

CLR的设置方式和参数有多种,设置文件和全局环境变量。此外,另有一个特殊参数允许或阻止(默认情形下阻止)从远程源加载程序集。然则,默认情形下允许在 Explorer 主机历程中使用 COM 服务器激活 CLR(可以从远程源下载程序集)。通过剖析这不是破绽,而是某种特其余功效。

演示攻击:使检测庞大化

虽然可以检测到单个应用程序域(在单个应用程序域中运行 Covenant)和项目确立/注入(历程启动和注入)可以检测到差异水平的难度,但主要是高调、可见的流动。我们还展示了若何设置远程代码加载到 CLR。现在让我们看看在一个基于com的CLR署理的演示中,检测义务是若何变得庞大的。我们将在远程主机上的Explorer历程上下文中运行通俗的Mimikatz,并在Mimikatz执行后整理工〖gong〗件。这次演示攻击是在我们已经接见过的主机上举行的。详细视频可以点击这里。

我们有来自 Mimikatz 存储库的 Yara 扫描仪和 Yara 规则作为我们扫描内存的首选 EPP。 Inveigh 和 Mimikatz 已经安装在受害者的主机上。首先,让我们检查 Yara 规则是否匹配。


现在让我们看一下 explorer.exe 历程(PID 3896)并确认内里没有 Mimikatz 的迹象。接下来,我们重新启动 explorer.exe 以再次显示它是清洁的而且不包罗任何 CLR 程序集。


接下来,我们移动到攻击者的主机(01:40)。 Explorer 处置程序被添加到受害者主机的注册表中。当受害者启动 explorer.exe 时,将加载来自远程(攻击者)主机的程序集以供执行。


返回到受害者的主机(02:30),我们通过重新启动 explorer.exe 来模拟用户登录。


现在 explorer.exe 已经加载了 .NET 程序集,而且历程中仍然没有可疑的工件。在加载并执行 KatzAssembly 之前不会有任何内容。发现在我们的目的历程中发生的空的(现在)应用程序域。


在03:50我们执行Mimikatz,它在内存中确立可检测的组件。


在Mimikatz操作完成之后,我们卸载(04:18)为这个Mimikatz会话天生的应用程序域。


这个想法很容易理论上很容易实现,但由于内存扫描的性能,卸载应用程序的扫描等缘故原由很难实践。


CLR内存祛除检测

你若何检测 CLR 内存祛除?你需要亲热关注卸载应用程序域的频率。


该图显示了 ETW 事宜的顺序:应用程序域确立、程序集加载以及程序集和应用程序域卸载。你可以使【shi】用差其余工具(例如 SilkETW)对此举行纪录。


你可以聚合应用程序域加载和卸载的事宜,并确定最常加载和卸载应用程序域的历程。


AMSI 接口在加载时代扫描程序集,但在卸载时代扫描程序集内存和资源也很有用,只管显然不是出于预防目的。固然,这种分外的扫描也会对性能发生负面影响。

检测 CLR 环境的 COM 激活和远程程序集加载

若是你在事宜 187 中监控激活参数(startupMode 和 COMObjectGUID),则可以检测到通过 COM 服务器在 Explorer 历程中激活下载远程代码的技巧。


此外,应监控具有包罗 URL 地址的 [HKEY_CLASSES_ROOT\CLSID\{GUID}\InprocServer32\CodeBase] 值的任何新 COM 服务器的注册事宜(在系统注册表中)以及来自%AppData%\Local\assembly\dl3\([0-9A-Z]{8}.[0-9A-Z]{3}\\\){2}.*\Assemb.dll的 Explorer 历程。

本文翻译自:https://securelist.com/detection-evasion-in-clr-and-tips-on-how-to-detect-such-attacks/104226/

欧博亚洲网址www.aLLbetgame.us)是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

网友评论