前言
这篇文章我们将介绍一款开源杀毒软件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。
将上述三个文件放置在同一个目录。
首先通过分析病毒文件,发现病毒文件包含了hideDir(“c:\”),编写一个简单的规则,其含义为只要包含了hideDir(“c:\”)函数的的则是病毒。然后将其保存为文件。
rule virus
{
strings:
$flag = "hideDir(\"c:\\\")"
condition:
$flag
}
执行以下命令
clamscan -d 规则目录 病毒存放目录
其中-d标志表示使用自定义规则
执行结果如下图所示
其中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");
将上述文件放置在同一个目录。
通过分析上述例子,我们发现,对于单一的特征码形式的查杀,我们都是属于发现病毒,编写规则。那么我们也可以很明显发现特征,这三个病毒都会调用和目录相关的函数,并且都设置为隐藏。那么我们就可以提取出特征,既隐藏盘符的特征码。我们通过查阅计算机接口文档,发现还有一函数hideAllDir()。那么我们提前将其纳入到规则中。
rule virus
{
strings:
$flag = "hideDir"
$flag2 = "hideDirEx"
$flag3 = "changDirAttribute"
$flag4 = "hideAllDir"
condition:
$flag or $flag2 or $flag3 or $flag4
}
运行后,发现file1原始病毒和变种file2,file3都能查杀。
那么上述我们通过已获取到的样本,编写好了规则,并且将一个还未发现的病毒file4类型也纳入了规则中。那么我们现在尝试是否会监测到新添加进去的样本。结果如下图。
可以看到,在我们建立好启发规则后,新病毒也被监测到了。
总结
特征码和启发式查杀在免杀制作过程中,需要非常注意的是启发式查杀,因为启发式查杀对壳一类的查杀非常厉害。或者数组中包含PE文件,也会直接被定为为病毒。这就导致了你需要尽量模仿正常PE文件才能绕过查杀。具体会在静态查杀绕过一章介绍方法。
绕过
通过前面章节的静态查杀原理学习,我们知道要绕过静态查杀需要绕过两种查杀方式,一种为指定特征码查杀,一种为启发式查杀。
环境配置
1.虚拟机安装Kaspersky Endpoint Security 11
开始实战
特征码查杀绕过
接下来我们使用Mimikatz作为测试工具,从Mimikatz Release下载处下载Mimikatz,将Mimikatz.exe放入kas中。
如上述所示,会被Kas查杀。
那么接下来我们则使用Github上开源的加密工具来加密。从该地址文件加密工具下载,使用FileCryptAES.exe -e 1234 mimikatz.exe加密后。得到一个加密文件,我们将其放到KAS进行扫描,发现成功绕过。之后使用内存加载,解密执行即可。
对文件反复加密,加密方式可以自选,之后内存解密加载即可。
内存加载方式可以使用下列几个项目:
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;
}
当删除所有资源后。项目工程如下图所示:
之后我们将其拷贝到安装了Kas的虚拟机中。发现会报如下病毒,HEUR:trojan.win32.generic。HEUR指的是启发式查杀,而后面指的是病毒类型,我们的病毒被是被为一个常见的WIN32病毒。
绕过方式
还记得我们之前删除的资源和其他的窗体文件吗?将其还原即可,既给我们的病毒程序增加窗体和资源文件。既像正常程序该有的我们都有,就很难被启发式查杀了。
启发式绕过总结
模仿正常PE特征。
总结
无论是特征码还是启发式,只要不是加载器都可以使用反复加密,内存加载执行来绕过静态查杀。