具有内存逃避功能的 Cobaltstrike UDRL

admin 2024年6月6日08:45:04评论13 views字数 998阅读3分19秒阅读模式

Cobaltstrike UDRL

特征:

  • 通过调用堆栈制作重定向所有 WININET 调用

  • 在睡眠期间加密信标

  • 在睡眠期间加密信标堆

  • 加载程序自删除

调用堆栈示例:

创建线程:

具有内存逃避功能的 Cobaltstrike UDRL

互联网开放A:

具有内存逃避功能的 Cobaltstrike UDRL

等待单个对象:

具有内存逃避功能的 Cobaltstrike UDRL

加载程序的执行

1-创建用于信标的堆

2 - 使用信标大小 + UDRL 大小分配 RWX 区域

3 - 将 UDRL 复制到分配区域中信标的末尾

| 0x00 | beacon | 0xBEACON_SIZE | UDRL | 0xEND_Alloc

4 - 将 ODIN 结构(堆句柄、信标地址、分配大小)复制到分配区域的开头(不存在 pe 标头)

5 - 复制信标部

6 - 解决信标导入和修补 IAT(也设置钩子)

7 – 补丁重定位表

8 - 初始化信标

9 - 在 TpReleaseCleanupGroupMembers+0x450 上创建线程来欺骗线程启动地址和信标运行

10 - 自行删除加载程序

信标 RUN

  • 所有 WININET 函数都被挂钩,并使用调用堆栈来处理所有 wininet 调用

  • 睡眠已上钩:

1-对堆进行异或(每次睡眠的随机密钥)

2 - 使用 KrakenMask (ropchain、rwx->rw、encrypt、sleep、rw->rwx) 加密信标 + udrl(记住这是在信标末尾复制的)

3 - 对堆进行异或

  • ExitThread 被挂钩:

1-销毁信标堆

2-使用信标释放内存区域

3-退出线程

如何使用

编译loader并加载cna脚本(odin.cna

关于 cna,您需要编辑第 11 行和第 38 行的变量 $loader_path 的路径

需要 COBALTSTRIKE 简介

http-beacon {    set library "wininet";

}

stage {  set smartinject "false";  set sleep_mask "false";}

警告

这是 POC,使用此 UDRL 时要小心

如果您碰巧遇到崩溃,您可以在 Twitter 上发送 dm 或打开 github 问题,请发送:

- Cobaltstrike profil

- Debugger screen with callstack

你需要在 Windows 机器上安装 Python,并且需要使用 post-ex build 来运行 Python 脚本。

Python脚本使用两个库:sys和pefile

内存扫描仪

Moneta:

具有内存逃避功能的 Cobaltstrike UDRL

Pe-Sieve:

具有内存逃避功能的 Cobaltstrike UDRL

搜寻睡眠信标:

具有内存逃避功能的 Cobaltstrike UDRL

https://github.com/RtlDallas/OdinLdr

原文始发于微信公众号(Ots安全):具有内存逃避功能的 Cobaltstrike UDRL

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月6日08:45:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   具有内存逃避功能的 Cobaltstrike UDRLhttps://cn-sec.com/archives/2818621.html

发表评论

匿名网友 填写信息