恶意shellcode隐藏技术——Shelltropy

项目介绍

一种通过Shannon编码,基于low-entropy隐藏恶意的shellcode的技术。

熵(Entropy)是对一组数据(shellcode)中随机性的衡量。熵越高,数据的随机性就越大。香农熵(Shannon Entropy)是一种算法,它将产生一个介于0和8之间的结果,其中8意味着数据中没有模式,因此它是非常随机的,0意味着数据遵循一个模式。

请看我的文章,了解我的研究的更多信息:

https://kleiton0x00.github.io/posts/The-more-predictable-you-are-the-less-you-are-able-to-get-detected/

 

设置

克隆这个github

git clone https://github.com/kleiton0x00/Shelltropy.git

 

对于编码器
创建一个新的Visual Studio项目并导入Entropy.h和shannonEncode.cpp,然后简单地构建它。

对于Shellcode Injection PoC
打开位于/Shelltropy/SyscallsExample/SyscallsExample/SyscallsExample.vcxproj的Visual Studio项目文件并简单构建。

对于解码器(可选的,因为它包含在Shellcode Injection PoC上)
创建一个新的Visual Studio项目并导入shannonDecode.cpp并简单地构建它。

 

PoC是如何工作的

这个概念是将数组分成几块,在每块之间插入一个低熵的字节模式。当样本运行时,我们必须在内存中重建原始有效载荷,在这个阶段绕过高熵代码的静态检测。还值得注意的是,要插入的低熵代码可以遵循各种模式,插入的数量也可以不同,因此它可以用来规避静态签名检测。第二步是将高熵的字节块与低熵的字节块相结合。因为毕竟我们需要将被混淆的代码恢复到最初的样子,以便进行去混淆的步骤,第三个任务将通过删除低熵模式来恢复原始的字节阵列。

70dbc89ff334

效果演示

85bd1814e624

 

测试结果

注意:以下结果只用CS Shellcode测试。

~ 原始的默认Cobalt Strike shellcode
(高熵)正常:7.062950
(低熵) 编码。4.527140

~ XORed Cobalt Strike shellcode
(高熵)正常:4.583139
(低熵) 编码。3.278284

 

AV/EDR扫描结果

高熵(左侧)与低熵(右侧)的默认CS Shellcode与Syscalls(Syswhispers2)集成。

333ded25ad46

劣势

在编码时,shellcode的大小将扩大2倍,使蓝队/恶意软件分析更容易检测到这种编码的shellcode。

请登录后发表评论