Cobaltstrike UDRL
特征:
调用堆栈示例:
创建线程:
互联网开放A:
等待单个对象:
加载程序的执行
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-退出线程
如何使用
关于 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
内存扫描仪
Pe-Sieve:
搜寻睡眠信标:
https:
//github.com/RtlDallas/OdinLdr
原文始发于微信公众号(Ots安全):具有内存逃避功能的 Cobaltstrike UDRL
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论