当前位置: 首页 > news >正文

【cobalt strike手册0x06】Sleep Mask

Sleep Mask

Sleep Mask默认执行以下操作

  • 在睡眠时混淆内存中的Beacon
  • 使用BeaconGate的代理WinAPI
  • 特定情况清理内存

https://github.com/Cobalt-Strike/sleepmask-vs

混淆Beacon

  • 使用名为ALLOCATED_MEMORY的数据结构定义Beacon PE各节区在内存中的位置
  • 代码会根据每个节区的信息进行内存数据的掩码/解掩码操作

内存保护属性配置

  1. stage.userwx设为true时:
    • 所有PE节区设置为RWX(可读可写可执行)权限
    • 支持直接进行掩码/解掩码操作
  1. stage.userwx设为false时:
    • 除".text"代码节区外均设为RW(可读可写)权限
    • ".text"节区设为RX(可读可执行)权限
    • 对".text"节区操作时需临时修改权限:
      • 掩码前通过VirtualProtectAPI改为RW
      • 解掩码后恢复为RX

堆内存处理

  • 通过BEACON_INFO数据结构提供堆内存位置信息
  • 以连续的HEAP_RECORD结构块形式传递
  • 内存块以全零的HEAP_RECORD条目作为结束标记

UDRL特殊情况

  • 使用用户定义反射加载器(UDRL)时
  • 节区内存权限完全由UDRL代码定义
  • 不受stage.userwx设置约束

注:此机制自4.10版本成为默认睡眠掩码功能,早期版本可通过Arsenal Kit实现。

代理WinAPI

代理调用执行流程

  1. 内存混淆阶段:首先执行混淆逻辑对Beacon进行内存掩码
  2. API调用阶段:执行目标Windows API调用
  3. 内存恢复阶段:执行解混淆逻辑恢复Beacon内存

特殊注意事项

  • 交互模式豁免:当Beacon被设置为交互模式(任务间隔<3秒)时,将自动禁用内存掩码/解掩码操作,以避免CPU使用率异常波动
  • 性能优化:该设计确保高频交互时不会因重复加解密操作影响系统性能

技术实现特点

此机制通过BeaconGate实现API调用的安全封装,在保证隐蔽性的同时维持操作稳定性,特别考虑了交互场景下的性能表现。

退出机制说明

当满足以下配置时,Beacon会话通过exit命令终止时会调用睡sleep mask函数:

  1. 退出方法设置为ExitThread
  2. 未配置模块踩踏(module stomping)
  3. Beacon Gate配置为AllCleanupExitThread

清理流程

  1. API调用:Beacon将通过BeaconGate调用ExitThread Windows API
  2. 内存释放:在执行ExitThread前,睡眠掩码函数会:
    • 调用特定清理函数
    • 释放ALLOCATED_MEMORY数据结构中定义的内存

特殊内存处理

  • ALLOCATED_MEMORY_PURPOSE字段
    • 当设置为PURPOSE_SLEEPMASK_MEMORY时,该内存不会被释放
    • 原因:无法安全释放当前正在执行的内存,除非使用定时器等自定义方法

例外情况

退出方法设置为ExitProcess时:

  • 直接终止整个进程
  • 操作系统会自动释放所有内存
  • 无需调用睡眠掩码函数

注:此机制确保Beacon退出时能安全清理内存痕迹,同时处理了不同退出方法的特殊情况。

http://www.lryc.cn/news/590597.html

相关文章:

  • JAVA进阶 项目实战:汽车租聘系统
  • 关于squareLineStudio软件使用步骤教程(LVGL软件组件编程)
  • Linux应急Rootkit后门查杀病毒查杀软件
  • 0系统与软件工程-标准体系
  • 1软件工程概念及其基本要素-思考题
  • 基于paddleDetect的半监督目标检测实战
  • 【论文阅读】A Survey on Knowledge-Oriented Retrieval-Augmented Generation(4)
  • 基于C#开发solidworks图库中文件(SLDPRT,SLDASM,SLDDRW等)转换为HTML和PDF,提供批量和实时转换
  • 【论文阅读 | IF 2025 | COMO:用于多模态目标检测的跨 Mamba 交互与偏移引导融合】
  • 【论文阅读 | CVPR 2023 |CDDFuse:基于相关性驱动的双分支特征分解的多模态图像融合】
  • Python+Tkinter制作音频格式转换器
  • 使用token调用Spring OAuth2 Resource Server接口错误 insufficient_scope
  • Scrapy无缝集成Splash:轻量级动态渲染爬虫终极解决方案
  • Oracle 数据库常见等待事件参数详解
  • 16路串口光纤通信FPGA项目实现指南 - 第二部分(上)
  • FPGA基础 -- Verilog 访问寄存器数组的指定位示例
  • 从函数调用到进程通信:Linux下的多语言协作实践
  • 识别装甲板
  • 【Jupyter】个人开发常见命令
  • HugeGraph 【图数据库】JAVA调用SDK
  • ByteToMessageDecoder详解
  • Spring AI快速入门
  • VisualVM监控远程Linux的java进程
  • 【SpringBoot】实战-开发接口-用户-注册
  • matlab的伯德图为何从360度显示?应如何修改解决?
  • 基于大数据的网络文学推荐分析系统的设计与实现【海量书籍、自动爬虫】
  • Redis1:高并发与微服务中的键值存储利器
  • mongodb操作巨鹿
  • DHTMLX Suite 9.2 重磅发布:支持历史记录、类Excel交互、剪贴板、拖放增强等多项升级
  • Qt小组件 - 6 异步运行函数