网盾科技IT教育,只培训技术精英
全国免费咨询电话: 15827351614
红队安全研发系列之免杀原理和绕过研究——静态查杀实现与绕过

前言

这篇文章我们将介绍一款开源杀毒软件Clamav,通过学习开源杀毒软件病毒查杀原理来绕过其查杀技术。

 

环境配置

1.下载Clamav,建议下载portable版本。

2.运行下列命令配置Clamav。

 

cd "解压的目录\clamav"

copy .\conf_examples\freshclam.conf.sample .\freshclam.conf

copy .\conf_examples\clamd.conf.sample .\clamd.conf

write.exe .\freshclam.conf,删除Example一行

write.exe .\clamd.conf,删除Example一行

 

开始实战

该实战通过两个示例,查杀已知病毒和查杀未知病毒,让读者了解病毒查杀的基本原理。

 

查杀已知病毒

制作病毒

 写一个包含了下列文本的txt。保存为file1.txt文件。我们将其作为病毒文件。它有明显的特征,hideDir(“c:\”)函数。正常程序不会把C盘隐藏。

 

this is virus;

hideDir("c:\");

 

写一个包含了下列文本的txt。保存为file2.txt文件。

 

abcdthis is virusefg。

 

写一个包含了下列文本的txt。保存为file3.txt文件。

 

12345this is virus6789。

将上述三个文件放置在同一个目录。

 

编写Yara规则

 

首先通过分析病毒文件,发现病毒文件包含了hideDir(“c:\”),编写一个简单的规则,其含义为只要包含了hideDir(“c:\”)函数的的则是病毒。然后将其保存为文件。

 

rule virus

{

    strings:

        $flag = "hideDir(\"c:\\\")"

    condition:

        $flag

}

执行查杀

 

执行以下命令

clamscan -d 规则目录 病毒存放目录

其中-d标志表示使用自定义规则

执行结果如下图所示

 

凄凄切切.jpg

其中file1.txt包含了特征,被表示为YARA.virus.UNOFFICIAL FOUND,说明发现病毒。而其余两个文件没包含,则显示OK,表示没有包含病毒。

 

查杀未知病毒

制作病毒

 写一个包含了下列文本的txt。保存为file1.txt文件。原始病毒文件。

this is virus;

hideDir("c:\");

写一个包含了下列文本的txt。保存为file2.txt文件。该文件是file1的变种,由于作者发现被查杀后。更换了hideDir函数为hideDirEx。 

this is virus version 2;

hideDirEx("c:\");

写一个包含了下列文本的txt。保存为file3.txt文件。该文件是file2的变种,由于作者发现被查杀后。又更改了隐藏盘符的实现方式!

 this is virus version 3;

changDirAttribute("c","display=no");

将上述文件放置在同一个目录。

 

编写Yara规则

 

通过分析上述例子,我们发现,对于单一的特征码形式的查杀,我们都是属于发现病毒,编写规则。那么我们也可以很明显发现特征,这三个病毒都会调用和目录相关的函数,并且都设置为隐藏。那么我们就可以提取出特征,既隐藏盘符的特征码。我们通过查阅计算机接口文档,发现还有一函数hideAllDir()。那么我们提前将其纳入到规则中。

 

rule virus

{

    strings:

        $flag = "hideDir"

        $flag2 = "hideDirEx"

        $flag3 = "changDirAttribute"

        $flag4 = "hideAllDir"

    condition:

        $flag or $flag2 or $flag3 or $flag4

}

运行后,发现file1原始病毒和变种file2,file3都能查杀。

凄凄切切.jpg

 

伪造未知变种

那么上述我们通过已获取到的样本,编写好了规则,并且将一个还未发现的病毒file4类型也纳入了规则中。那么我们现在尝试是否会监测到新添加进去的样本。结果如下图。

凄凄切切.jpg

可以看到,在我们建立好启发规则后,新病毒也被监测到了。

 

总结

特征码和启发式查杀在免杀制作过程中,需要非常注意的是启发式查杀,因为启发式查杀对壳一类的查杀非常厉害。或者数组中包含PE文件,也会直接被定为为病毒。这就导致了你需要尽量模仿正常PE文件才能绕过查杀。具体会在静态查杀绕过一章介绍方法。

 

绕过

通过前面章节的静态查杀原理学习,我们知道要绕过静态查杀需要绕过两种查杀方式,一种为指定特征码查杀,一种为启发式查杀。

 

 

 

环境配置

1.虚拟机安装Kaspersky Endpoint Security 11

 

开始实战

特征码查杀绕过

制作病毒

接下来我们使用Mimikatz作为测试工具,从Mimikatz Release下载处下载Mimikatz,将Mimikatz.exe放入kas中。

 

绕过方式

那么接下来我们则使用Github上开源的加密工具来加密。从该地址文件加密工具下载,使用FileCryptAES.exe -e 1234 mimikatz.exe加密后。得到一个加密文件,我们将其放到KAS进行扫描,发现成功绕过。之后使用内存加载,解密执行即可。

2.jpg

                            

特征码查杀绕过总结

对文件反复加密,加密方式可以自选,之后内存解密加载即可。

内存加载方式可以使用下列几个项目:

1.https://github.com/aaaddress1/RunPE-In-Memory

2.https://github.com/nettitude/SimplePELoader

3.https://github.com/BenjaminSoelberg/ReflectivePELoader

4.https://github.com/hasherezade/pe_to_shellcode

4.https://github.com/hasherezade/pe_to_shellcode

5.https://github.com/fancycode/MemoryModule

6.https://github.com/Scavanger/MemoryModule.net

 

注意:

1.这里仅仅是绕过了静态特征码查杀,内存加载后会被动态查杀,具体绕过方式将会在动态一章介绍。

2.对于Xor或base64等加密后特征一致的算法需要多次加密。

 

 

启发式查杀绕过

制作病毒

 

下面我们来制作一个最小体积程序。使用Visualstudio创建Win32程序。删除所有资源和窗口。仅仅留下一句MessageBox。看看是否会被查杀。

  

#include "stdafx.h"

#include "KasHeuristicBypass.h"

 

int APIENTRY _tWinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPTSTR    lpCmdLine,

                     int       nCmdShow)

{

    MessageBox(NULL, TEXT("title"), TEXT("123"), MB_OK);

    return (int) 0;

}

当删除所有资源后。项目工程如下图所示:

4.jpg

之后我们将其拷贝到安装了Kas的虚拟机中。发现会报如下病毒,HEUR:trojan.win32.generic。HEUR指的是启发式查杀,而后面指的是病毒类型,我们的病毒被是被为一个常见的WIN32病毒。

3.jpg

绕过方式

还记得我们之前删除的资源和其他的窗体文件吗?将其还原即可,既给我们的病毒程序增加窗体和资源文件。既像正常程序该有的我们都有,就很难被启发式查杀了。

 

启发式绕过总结

模仿正常PE特征。

 

总结

无论是特征码还是启发式,只要不是加载器都可以使用反复加密,内存加载执行来绕过静态查杀。