MemoryEvasion

本文介绍了如何利用MemoryEvasion Loader来规避Moneta, Pe-sieve和Hunt-Sleeping-Beacons的检测。针对Pe-sieve和Moneta,通过修改私有内存保护类型和加密来避免shellcode检测;对BeaconEye,通过创建新堆并hook GetProcessHeap来隐藏配置文件;对于Hunt-Sleeping-Beacons,通过替换sleep函数实现Bypass。该Loader适用于CobaltStrike的http/https Stager/Stagerless,但需要添加shellcode获取方法以增强免杀能力。" 6326059,811662,XML到图片转换,"['XML解析', '图像处理', '数据解码', 'Java开发']
摘要由CSDN通过智能技术生成


前言

CobaltStrike自3.1.2就引入了SleepMask套件,SleepMask套件可以在http/https或dns Beacon进入sleep的时候混淆Beacon和堆。但是泄露的CS SleepMask已经被分析烂了,于是就自己写了个在睡眠状态混淆代码的Loader。


一、Bypass Moneta And Pe-sieve

1.检测原理

Pe-sieve和Moneta对可疑私有内存的检测比较类似,均是使用VirtualQuery或者NtQueryVirtualMemory或者StackWalk获取要检测的内存的信息,通过获取到的信息对内存进行一个判断。
(其中通过StackWalk获取到rip,通过判断rip的值是否在模块的地址范围内,如果在就获取其模块的名称,如果不在则说明可能是shellcode)

Pe-sieve枚举地址是否在模块内
在这里插入图片描述

Moneta对私有内存的检测:
1.判断内存是否为私有类型
2.判断内存是否可执行
3.判断内存是否为image并且起始地址是否没有任何模块内
4.判断线程的起始地址是否没有在任何模块内
在这里插入图片描述
检测原理就不再继续赘述,可以去GitHub下载源码自行查看

2.Bypass方法

私有可疑内存:
知道了他们扫描的原理之后,那么对抗的方法也很清晰了,我们可以使用VirtualQuery枚举当前进程的所有内存的AllocationBase,然后找到内存类型为RWX/RX的私有内存修改其保护类型并加密

ProcessHacker查看未加密的内存:
在这里插入图片描述

ProcessHacker查看加密的内存:
在这里插入图片描述
实现代码:

 		GetSystemInfo(&info);
        CurrentAddr = (DWORD64)info.lpMinimumApplicationAddress;

        while (CurrentAddr < (DWORD64)info.lpMaximumApplicationAddress)
        {
   
            VirtualQuery((LPCVOID)CurrentAddr, &mbi, sizeof(MEMORY_BASIC_INFORMATION));
            if (((mbi.Protect == PAGE_EXECUTE_READWRITE || mbi.Protect == PAGE_EXECUTE_READ) && (mbi.Type & MEM_PRIVATE)) 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值