查看: 1441|回复: 1

SilentTrinity-学习记录3 检测思路

[复制链接]

665

主题

1234

帖子

6576

积分

xdtech

Rank: 5Rank: 5

积分
6576
发表于 2020-3-3 14:22:53 | 显示全部楼层 |阅读模式
本帖最后由 shaoheshaohe 于 2020-3-4 09:01 编辑

SILENTTRINITY 是最近发布的一款基于IronPython和c#的后渗透测试工具。这篇文章将深入探讨它的工作原理和检测技术。 .NET由于其强大的功能、易于开发以及在现代Windows平台上的默认存在的特点,已经成为安全领域中的一个重要组件。由于蓝队检测恶意PowerShell的能力不断增强,它开始取代PowerShell(最初出于类似的原因使用它)。 IronPython本质上是与.NET框架紧密结合的Python。这意味着攻击者能够利用简单的Python脚本与.NET库的强大功能,更轻松地在Windows平台上开发。


前文已经介绍SILENTTRINITY的工作原理,让我们来看看如何检测它。我们将通过发布的Python脚本使用. NET ETW提供程序来跟踪CLR底层使用的行为。

1. 动态装配加载

C#implant实际上是“ST”类型的C#类,它的一个实例是在运行时动态创建的。这可以通过.NET的“Reflection”和“Activator”库来实现,如下面的代码片段所示。

因此,我们可以尝试使用Python脚本跟踪此类函数调用的存在,如下图所示。


如图所示,我们可以观察到“GetType”和“CreateInstance”函数的JIT-Inlining失败,因此表明这些函数至少执行了一次。
但是,我们也看到内存中的程序集负载与实例创建和SILENTTRINITY程序集本身相关:


2. IronPython程序集

C#后门如果想要使用python引擎执行python代码,那么在这之前,它必须首先在运行时导入一组程序集,即:

IronPython.dll
IronPython.Modules.dll
Microsoft.Dynamic.dll
Microsoft.Scripting.dll

这可以通过利用“ResolveAssembly”事件的回调方法来完成(Richter,2010)。下面的代码片段显示了如何实现这一目标。
  
一旦正确加载了程序集,C#后门就能够利用IronPython引擎来执行Python代码,如下面的代码片段所示。


由于上述DLL的加载是SILENTTRINITY的关键部分,我们也可以尝试寻找这些装配负载的证据:


在这个例子中,我们可以通过“DomainModuleDCStart_V1”和“ModuleDCStart_V2”事件来观察正在加载的dll,从而表明IronPython的存在。它们也在内存中加载,没有文件支持。但是,重要的是要注意这些程序集的存在并不表示任何恶意行为本身。使用IronPython引擎的合法.NET应用程序也会加载这些合法情况下,加载行为的更有可能的形态是,从磁盘加载这些文件。但是,在大多数企业环境中,很多应用程序不太可能合法地使用IronPython(什么意思?是不会用IronPython,还是企业环境的用法大都也不是合法形式,或者说,也是远程下载模式?)。与其他IronPython用法的另一个重要区别是,这里涉及的程序集用于SILENTTRINITY使用的IronPython的嵌入式使用。如果IronPython被用作一个独立的python解释器来运行在.net框架上调用的python脚本,那么可以看到ipy.exe独立解释器正在使用(此一段,语义相当混淆)

3. SafetyKatz模块

SILENTTRINITY包含一些后期开发阶段的模块。我们将看看其中一个模块SafetyKatz。这很像同名的GhostPack模块,它会转储lsass的进程内存,然后在内存中加载Mimikatz来提取凭据。下面的代码片段显示了Python中SafetyKatz的实现:

正如在动态语言运行时一节中提到的,可以通过使用.NET ETW提供程序来跟踪JIT和Interop事件来检测这一点。

正如所料,我们能够观察到来自SharpSploit模块的VirtualAlloc和MinDumpWrite函数调用的互操作事件所关注的事件。

4. 流程活动,msbuild

除了查看.NET ETW事件,我们还可以跟踪可疑的流程活动。由于我们在此示例中使用了msbuild stager,因此我们显然会看到msbuild进程执行事件。

由于MSBuild负责执行xml文件,我们可以寻找由MSBuild执行的xml执行的迹象。大多数MSBuild事件遵循术语或父和参数的通用格式,因此在整个企业中,可以基线正常活动和点偏差。我们还可以寻找源自MSBuild的连接。


5. 流量特征
C#后门必须定期连接回C2服务器以检查待处理的操作,如下面的代码所示。


因此,即使没有挂起的作业,c#后门也必须定期与C2通信,或者直到MSBuild进程终止。因此,我们可以搜索流量,如下图所示。   


总体评述
1) SILENTTRINITY 的启动程序本身不包含恶意功能,只是从远程服务器下载文件并利用 IronPython 调用 Python,这是一个完全正常的功能。
2) 启动方式较为隐蔽:上利用了 Windows 系统本身自带的程序 ( 例如 msbuild.exe,powershell.exe,wmic.exe, 也可以扩展成 regsvr32.exe 或 rundll32.exe ) 。
3)  SILENTTRINITY 需要发起网络连接,传输 stage.zip 和 Python 脚本。所以,调用了 IronPython 并发起了网络连接,极有可能是存在风险的行为。


结论

这篇文章提出了几个IOC来检测SILENTTRINITY的存在。一些IOC,例如检测IronPython装配加载,本身是低保真度指标。但,当你将所有活动结合起来时,SILENTRINITY的行为变得越来越具体。在调查期间,维护者通常必须得出一个假设,并且有几个不同的IOC通常可以加强这个假设。例如,如果我们要检测动态程序集加载,结合IronPython程序集加载,结合MSBuild.exe的XML参数和常规网络连接,那么即使在像Safetykatz这样的恶意模块运行之前,我们也有更多的证据 。 我们要感谢byt3bl33d3r创建这样一个令人印象深刻的工具。

参考

https://github.com/byt3bl33d3r/SILENTTRINITY

https://docs.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/dynamic-language-runtime-overview

https://blogs.msdn.microsoft.com/microsoft_press/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition/


回复

使用道具 举报

665

主题

1234

帖子

6576

积分

xdtech

Rank: 5Rank: 5

积分
6576
 楼主| 发表于 2020-3-3 14:23:09 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表