欢迎访问Sunbet官网(www.sunbet.us),Allbet欧博官网(www.ALLbetgame.us)!

首页Sunbet_安全防护正文

Cobalt Strike的blockdlls应用剖析

b9e08c31ae1faa592019-12-1174技术

0x00 媒介

Cobalt Strike 3.14添加了blockdlls功用,限定子历程只能加载带有Microsoft署名的dll。

这个功用可以阻挠第三方平安软件向子历程注入dll,也就没法对子历程举行hook,终究起到庇护子历程的结果。

XPN在他的博客中也引见了相干内容,地点以下:

https://blog.xpnsec.com/protecting-your-malware/

本文将要扩大blockdlls的应用要领,离别引见检察历程是不是开启blockdlls和修正当前历程开启blockdlls的要领,比较Win8和Win10体系在运用上的区分,开源c代码,分享剧本编写的细节。

0x01 简介

本文将要引见以下内容:

· Cobalt Strike中的blockdlls

· 检察历程是不是开启blockdlls的要领

· 修正当前历程,开启blockdlls的要领

· Win8和Win10体系在运用上的区分

· 应用剖析

0x02 Cobalt Strike中的blockdlls

Cobalt Strike中的blockdlls将会建立一个子历程并开启blockdlls功用。

XPN在博客中分享了完成一样功用的c代码,地点以下:

https://blog.xpnsec.com/protecting-your-malware/

代码以下:

#include <Windows.h>

int main()
{
    STARTUPINFOEXA si;
    PROCESS_INFORMATION pi;
    SIZE_T size = 0;
    BOOL ret;

    // Required for a STARTUPINFOEXA
    ZeroMemory(&si, sizeof(si));
    si.StartupInfo.cb = sizeof(STARTUPINFOEXA);
    si.StartupInfo.dwFlags = EXTENDED_STARTUPINFO_PRESENT;

    // Get the size of our PROC_THREAD_ATTRIBUTE_LIST to be allocated
    InitializeProcThreadAttributeList(NULL, 1, 0, &size);

    // Allocate memory for PROC_THREAD_ATTRIBUTE_LIST
    si.lpAttributeList = (LPPROC_THREAD_ATTRIBUTE_LIST)HeapAlloc(
        GetProcessHeap(),
        0,
        size
    );

    // Initialise our list 
    InitializeProcThreadAttributeList(si.lpAttributeList, 1, 0, &size);

    // Enable blocking of non-Microsoft signed DLLs
    DWORD64 policy = PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON;

    // Assign our attribute
    UpdateProcThreadAttribute(si.lpAttributeList, 0, PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY, &policy, sizeof(policy), NULL, NULL);

    // Finally, create the process
    ret = CreateProcessA(
        NULL,
        (LPSTR)"C:\\Windows\\System32\\cmd.exe",
        NULL,
        NULL,
        true,
        EXTENDED_STARTUPINFO_PRESENT,
        NULL,
        NULL,
        reinterpret_cast<LPSTARTUPINFOA>(&si),
        &pi
    );
}

经由过程STARTUPINFOEX构造体指定了要建立子历程的平安战略(开启PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON),这个平安战略起到了阻挠加载非Microsoft署名dll的作用。

生成子历程后,运用ProcessHacker可以看到开启blockdlls功用的提醒,以下图:

Cobalt Strike的blockdlls应用剖析  技术 第1张

开启blockdlls功用后,尝试对这个历程举行dll注入,注入的代码可参考:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/NtCreateThreadEx %2B LdrLoadDll.cpp

注入时报错,提醒以下图:

Cobalt Strike的blockdlls应用剖析  技术 第2张

胜利复现Cobalt Strike中blockdlls的功用。

接来下,须要找到这个功用相干的细节。

经由一些搜刮,找到了相干API GetProcessMitigationPolicy(),可以用来读取历程的平安战略。

材料以下:

https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-getprocessmitigationpolicy

署名战略对应的构造体为PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY,材料以下:

https://docs.microsoft.com/zh-cn/windows/win32/api/winnt/ns-winnt-process_mitigation_binary_signature_policy

材料显现该API支撑的最低体系为Win8,这里猜想API GetProcessMitigationPolicy()同blockdlls支撑的操作体系版本应当雷同。

经由测试,发明Cobalt Strike中blockdlls支撑的体系最低为Win8。

0x03 检察历程是不是开启blockdlls的要领

开启blockdlls等同于历程开启了平安战略ProcessSignaturePolicy(启用MicrosoftSignedOnly功用)。

可以运用API GetProcessMitigationPolicy()猎取历程的平安战略,推断是不是开启blockdlls功用。

运用API GetProcessMitigationPolicy()可以查询历程的多个平安战略,参考材料:

https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-getprocessmitigationpolicy

根据API的挪用花样尝试编写代码,代码已上传至github,地点以下:

卡巴斯基:APT组织2019行为大盘点(下) 一些新面孔 ShaggyPanther工具集 2018年1月,我们在报告“ShaggyPanther – Chinese-speaking cluster of activity in APAC”中介绍了ShaggyPather,它是一个针对台湾和马来西亚的恶意软件和入侵工具集。相关的组件和活动可以追溯到十多年前,类似的代码可以根据时间戳追溯到2004年。此后在另外几个地方也检测到了shaggypanther活动。最近的一次发生在7月份印度尼西亚的服务器上,3月份在叙利亚的服务器上也发现了该活动。2018年和2019年后门代码存在新的混淆功能,不再有明文C2字符串。自最初发布以来,研究人员使用sinochopper/chinachopper从攻击者上识别出了一个初始的服务器端感染载体。sinochopper不仅用于主机识别和

https://github.com/3gstudent/Homework-of-C-Language/blob/master/GetProcessMitigationPolicyForWin10.cpp

代码可以查询指定历程的一切平安战略。

在Win10体系测试没有问题,以下图:

Cobalt Strike的blockdlls应用剖析  技术 第3张

在Win8体系(Server2012也一样)测试,没法取得平安战略ProcessSignaturePolicy的信息,而ProcessHacker在Win8体系不存在这个问题

经由过程检察ProcessHacker的源码,找到解决要领:

这里须要经由过程NtQueryInformationProcess()完成。

Win8体系下可用的完全代码已上传至github,地点以下:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/GetProcessMitigationPolicyForWin8.cpp

代码可以查询Win8体系下指定历程的一切平安战略,须要注重的是Win8体系不支撑以下平安战略:

· ControlFlowGuardPolicy

· FontDisablePolicy

· ImageLoadPolicy

· SystemCallFilterPolicy

· PayloadRestrictionPolicy

· ChildProcessPolicy

· SideChannelIsolationPolicy

在Win8体系测试没有问题,以下图:

Cobalt Strike的blockdlls应用剖析  技术 第4张

0x04 修正当前历程,开启blockdlls的要领

修正当前历程开启blockdlls等同于修正当前历程的平安战略ProcessSignaturePolicy(启用MicrosoftSignedOnly功用)。

可以先运用API GetProcessMitigationPolicy()猎取历程的平安战略,再经由过程API SetProcessMitigationPolicy()修正平安战略ProcessSignaturePolicy(启用MicrosoftSignedOnly功用)。

根据API的挪用花样尝试编写代码,代码已上传至github,地点以下:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/SetProcessMitigationPolicy(Signature)ForWin10_CurrentProcess.cpp

代码可以修正当前历程的平安战略,启用MicrosoftSignedOnly功用。

在Win10体系测试没有问题

在Win8体系(Server2012也一样)测试,出现问题,没法修正。

解决要领同上:

经由过程NtSetInformationProcess()完成。

Win8体系下可用的完全代码已上传至github,地点以下:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/SetProcessMitigationPolicy(Signature)ForWin8_CurrentProcess.cpp

代码可以修正Win8体系下当前历程的平安战略,开启blockdlls。

0x05 应用剖析

开启blockdlls等同于历程开启平安战略ProcessSignaturePolicy(启用MicrosoftSignedOnly功用),不仅可以应用到子历程,还可以应用到当前历程。

支撑体系:Win8-Win10

开启blockdlls后,可以阻挠第三方平安软件向此历程注入dll,也就没法对历程举行hook,终究起到庇护历程的结果。

在Win8体系,须要运用NtQueryInformationProcess()和NtSetInformationProcess()举行检察和修正平安战略。

没法运用NtSetInformationProcess()修正长途历程的平安战略,报错提醒c000000d(STATUS_ILLEGAL_INSTRUCTION)。

没法经由过程Authenticode署名捏造——PE文件的署名捏造与署名考证挟制 和Catalog署名捏造——Long UNC文件名诳骗绕过blockdlls的庇护。

0x06 小结

本文扩大了blockdlls的应用要领,离别引见检察历程是不是开启blockdlls和修正当前历程开启blockdlls的要领,比较Win8和Win10体系在运用上的区分,开源c代码,分享剧本编写的细节,总结应用思绪。

原文地点: https://www.4hou.com/technology/22043.html

网友评论