项目介绍
一种通过Shannon编码,基于low-entropy隐藏恶意的shellcode的技术。
熵(Entropy)是对一组数据(shellcode)中随机性的衡量。熵越高,数据的随机性就越大。香农熵(Shannon Entropy)是一种算法,它将产生一个介于0和8之间的结果,其中8意味着数据中没有模式,因此它是非常随机的,0意味着数据遵循一个模式。
请看我的文章,了解我的研究的更多信息:
设置
克隆这个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是如何工作的
这个概念是将数组分成几块,在每块之间插入一个低熵的字节模式。当样本运行时,我们必须在内存中重建原始有效载荷,在这个阶段绕过高熵代码的静态检测。还值得注意的是,要插入的低熵代码可以遵循各种模式,插入的数量也可以不同,因此它可以用来规避静态签名检测。第二步是将高熵的字节块与低熵的字节块相结合。因为毕竟我们需要将被混淆的代码恢复到最初的样子,以便进行去混淆的步骤,第三个任务将通过删除低熵模式来恢复原始的字节阵列。
效果演示
测试结果
注意:以下结果只用CS Shellcode测试。
~ 原始的默认Cobalt Strike shellcode
(高熵)正常:7.062950
(低熵) 编码。4.527140
~ XORed Cobalt Strike shellcode
(高熵)正常:4.583139
(低熵) 编码。3.278284
AV/EDR扫描结果
高熵(左侧)与低熵(右侧)的默认CS Shellcode与Syscalls(Syswhispers2)集成。
劣势
在编码时,shellcode的大小将扩大2倍,使蓝队/恶意软件分析更容易检测到这种编码的shellcode。