boku7/spawn
GitHub: boku7/spawn
一个 Cobalt Strike BOF 工具,通过 ACG、BlockDll 和 PPID 欺骗技术生成受保护的牺牲进程并注入执行 shellcode,用于规避 EDR 的用户态挂钩。
Stars: 469 | Forks: 72
## SPAWN - Cobalt Strike BOF
这是一个 Cobalt Strike BOF,它会生成一个牺牲进程,向其注入 shellcode 并执行 payload。该工具通过使用任意代码保护 (ACG)、BlockDll 和 PPID 欺骗来生成牺牲进程,旨在规避 EDR/UserLand 挂钩。
+ 由于 ACG 的限制,这不支持依赖于以下功能的 shellcode:
+ 在 RW/RX 之间切换内存权限。
+ RWX 内存
+ 要将依赖于上述功能的 shellcode 注入到生成的进程中,请参阅 [Hollow BOF 项目](https://github.com/boku7/HOLLOW)
+ 关于 ACG 的精彩解释,请参阅下文 Adam Chestner 的博客。
## 新功能 (08/01/2021)
+ 使用任意代码保护 (ACG) 生成牺牲进程,以防止 EDR 解决方案挂钩到牺牲进程的 DLL 中。
+ 详情请参阅 [Adam Chester 的 "Protecting Your Malware" 博客](https://blog.xpnsec.com/protecting-your-malware/)。该 BOF 的这一部分源自他的工作。
+ 注入并执行 shellcode。
#### 从 ACG 保护的进程中弹出计算器

```
beacon> spawn notepad.exe 6248 /Users/bobby.cooke/git/boku7/SPAWN/popCalc.bin
[*] SPAWN (Bobby Cooke//SpiderLabs|@0xBoku|github.com/boku7)
[+] Opened handle 0x534 to process 6248(PID)
[+] Spawned process: notepad.exe | PID: 8404 | PPID: 6248
[+] Allocated RE memory in remote process 8404 (PID) at: 0x00000177A72C0000
[+] Wrote 280 bytes to memory in remote process 8404 (PID) at 0x00000177A72C0000
[+] APC queued for main thread of 8404 (PID) to shellcode address 0x00000177A72C0000
```
## 新功能 (07/19/2021)
+ CNA Aggressor Script 接口
```
beacon> help
spawn Spawn a process with a spoofed PPID and blockDll
beacon> help spawn
Synopsis: spawn /path/to/exe PPID
beacon> ps
8264 5536 OneDrive.exe x86 1 DESKTOP-KOSR2NO\boku
beacon> spawn cmd.exe 8264
[*] SPAWN (@0xBoku|github.com/boku7)
Opened handle 0x634 to process 8264(PID)
Success! Spawned process: cmd.exe | PID: 5384 | PPID: 8264
```
+ PPID 欺骗
+ 类似 Cobalt Strike 的 `blockdll` 功能
### 使用 x64 MinGW 编译:
```
x86_64-w64-mingw32-gcc -c spawn.x64.c -o spawn.x64.o
```
### 从 Cobalt Strike Beacon 控制台运行
+ 编译后,将 spawn.cna 脚本导入 Cobalt Strike 的 Script Manager
```
beacon> spawn /path/to/exe PPID /local/path/to/shellcode.bin
```
### 待办事项列表
+ ~用于改善最终用户体验的 Aggressor 脚本~

+ ~为了更好的父子进程关系 OPSEC 而进行的 PPID 欺骗~

- 在这里我们可以看到我们的 `cmd.exe` 进程是以 `OneDrive.exe` 作为 PPID 生成的
+ ~实现 Cobalt Strike `blockdll` 功能,以防止非微软签名的 DLL 加载到生成的进程内存中~

- 我们看到了父子进程关系,并且我们生成的进程是在 `Signatures restricted (Microsoft only)` (签名限制:仅限 Microsoft) 模式下创建的
- `Signatures restricted (Microsoft only)` 使得非 Microsoft 签名的 DLL 无法加载到我们生成的进程中
+ ~~当 PE 文件不存在时不要让 beacon 进程崩溃~~

- 不再因进程创建失败而崩溃!
+ ~当新进程生成时将 PID 返回给 Cobalt Strike 控制台~

+ ~构建不同的远程进程注入方法~ (08/01/21)
+ 构建不同的远程进程修补方法
+ NTDLL.DLL 远程进程解挂钩 (Unhooking)
+ ETW 远程进程修补/绕过
+ AMSI 远程进程修补/绕过
+ CLR 加载 & .Net 程序集注入
### 我为什么要构建这个?
##### 1. 为了了解更多关于 Cobalt Strike BOFs 的知识
##### 2. 我想要灵活地选择我的牺牲进程。
+ 对我来说,每次 fork-and-run 都生成相同的进程似乎是糟糕的/可预测的 OPSEC。
+ 可能已经有现成的方法或内置在 CS 中了。不管怎样,我想构建我自己的。
##### 3. 我有很多很酷的 BOF 想法,我想以此为基础进行构建。
### 致谢 / 参考资料
##### PPID 欺骗 & blockDll 功能
+ 致谢/感谢:Adam Chester @\_xpn\_ + @SEKTOR7net + Raphael Mudge
+ 感谢你们所贡献的出色工作。如果没有你们的博客、视频和精彩内容,我无法发布这个项目!
+ PPID 欺骗 & blockdll 的主要参考资料
- https://blog.xpnsec.com/protecting-your-malware/
- https://blog.cobaltstrike.com/2021/01/13/pushing-back-on-userland-hooks-with-cobalt-strike/
- https://institute.sektor7.net/ (Courses)
##### Raphael Mudge - Beacon Object Files - Luser Demo
+ https://www.youtube.com/watch?v=gfYswA_Ronw
##### Cobalt Strike - Beacon Object Files
+ https://www.cobaltstrike.com/help-beacon-object-files
##### BOF 代码参考资料
###### anthemtotheego/InlineExecute-Assembly
+ https://github.com/anthemtotheego/InlineExecute-Assembly/blob/main/inlineExecuteAssembly/inlineExecute-Assembly.cna
###### ajpc500/BOFs
+ https://github.com/ajpc500/BOFs/
###### trustedsec/CS-Situational-Awareness-BOF
+ https://github.com/trustedsec/CS-Situational-Awareness-BOF
##### Sektor7 Malware Dev Essentials 课程 - 学习了如何进行早鸟注入 (early bird injection) 技术
+ https://institute.sektor7.net/red-team-operator-malware-development-essentials
标签:ACG, APC 注入, BlockDLL, BOF, CNA 插件, Cobalt Strike, EDR 规避, Gophish, PPID 伪造, Raspberry Pi, SCP, Shellcode 注入, SSH蜜罐, 二进制安全, 任意代码保护, 内存执行, 客户端加密, 客户端加密, 异步过程调用, 攻击诱捕, 数据展示, 欺骗防御, 牺牲进程, 端点可见性, 红队, 进程注入