最后更新于
最后更新于
本页由 编写!
目前,AV使用不同的方法来检查文件是否恶意,包括静态检测、动态分析,以及更高级的EDR中的行为分析。
静态检测通过在二进制文件或脚本中标记已知的恶意字符串或字节数组,并从文件本身提取信息(例如文件描述、公司名称、数字签名、图标、校验和等)来实现。这意味着使用已知的公共工具可能更容易被发现,因为它们可能已经被分析并标记为恶意。有几种方法可以绕过这种检测:
加密
如果加密二进制文件,则AV无法检测到您的程序,但您需要某种加载程序来解密并在内存中运行程序。
混淆
有时,您只需要更改二进制文件或脚本中的一些字符串,就可以使其通过AV,但这可能是一项耗时的任务,具体取决于您尝试混淆的内容。
自定义工具
如果开发自己的工具,则不会有已知的恶意签名,但这需要大量时间和精力。
检查Windows Defender静态检测的一个好方法是使用。它基本上将文件分成多个段,然后要求Defender逐个扫描每个段,这样,它可以准确告诉您在您的二进制文件中有哪些被标记的字符串或字节。
动态分析是指AV在沙箱中运行您的二进制文件并监视恶意活动(例如尝试解密并读取浏览器密码,对LSASS执行minidump等)。这部分可能会更加棘手,但以下是一些可以用来逃避沙箱的方法。
执行前休眠 根据实现方式,这可能是绕过AV动态分析的好方法。AV有很短的时间来扫描文件,以免打断用户的工作流程,因此使用长时间的休眠可能会干扰二进制文件的分析。问题在于许多AV沙箱可能会根据实现方式跳过休眠。
检查机器资源 通常,沙箱的资源非常有限(例如<2GB RAM),否则可能会减慢用户的机器。您还可以在这里非常有创意,例如通过检查CPU温度甚至风扇转速,不是所有内容都会在沙箱中实现。
特定于机器的检查 如果您想针对加入“contoso.local”域的工作站用户进行定位,可以检查计算机的域,看看是否与您指定的域匹配,如果不匹配,则可以使您的程序退出。
事实证明,Microsoft Defender的沙箱计算机名是HAL9TH,因此,您可以在引爆前检查恶意软件中的计算机名,如果名称与HAL9TH匹配,则意味着您在Defender的沙箱中,因此可以使您的程序退出。
正如我们在本文中之前所说,公共工具最终将被检测到,因此,您应该问自己一个问题:
例如,如果您想转储LSASS,您真的需要使用mimikatz吗?或者您可以使用一个不太知名但也可以转储LSASS的项目。
正确答案可能是后者。以mimikatz为例,它可能是AV和EDR中最被标记的恶意软件之一,虽然项目本身非常酷,但要绕过AV,与其使用它,还不如寻找您尝试实现的目标的替代方案。
在修改用于逃避的有效负载时,请确保在defender中关闭自动样本提交,并且,请认真对待,不要将其上传到VIRUSTOTAL,如果您的目标是长期实现逃避。如果要检查特定AV是否检测到您的有效负载,请在虚拟机上安装它,尝试关闭自动样本提交,并在那里进行测试,直到您对结果满意为止。
在可能的情况下,始终优先使用DLL进行逃避,根据我的经验,DLL文件通常检测和分析要少得多,因此这是一个非常简单的技巧,可用于在某些情况下避免检测(如果您的有效负载有某种方式作为DLL运行)。
正如我们在这张图片中看到的,Havoc的DLL有效负载在antiscan.me中的检测率为4/26,而EXE有效负载的检测率为7/26。
现在我们将展示一些您可以使用DLL文件的技巧,使其更加隐蔽。
DLL 旁路加载 利用加载程序使用的 DLL 搜索顺序,通过将受害应用程序和恶意载荷放置在一起来实现。
这个命令将输出在"C:\Program Files\"目录下易受DLL劫持影响的程序列表,以及它们尝试加载的DLL文件。
我强烈建议你自己探索DLL劫持/侧载程序,这种技术如果做得很隐蔽,是相当有效的,但如果你使用公开已知的DLL侧载程序,可能会很容易被发现。
仅仅通过放置一个恶意DLL并命名为程序期望加载的DLL,并不会加载你的有效负载,因为程序期望在该DLL中有一些特定的函数,为了解决这个问题,我们将使用另一种称为DLL代理/转发的技术。
DLL代理将程序从代理(和恶意)DLL发出的调用转发到原始DLL,从而保留程序的功能并能够处理执行你的有效负载。
以下是我遵循的步骤:
最后一个命令会给我们2个文件:一个DLL源代码模板和原始重命名的DLL。
这些是结果:
Freeze 是一个绕过 EDRs 的 payload 工具包