andreashappe/cochise
GitHub: andreashappe/cochise
基于大语言模型的Active Directory网络自主渗透测试研究原型,用于评估AI在「假设已突破」场景下执行内网攻击的能力。
Stars: 45 | Forks: 5
# LLM 能否入侵企业网络?
***针对 Active Directory 网络的自主假设违规渗透测试***
简单来说,我使用 LLM 来入侵 Microsoft Active Directory 网络……这能出什么问题呢?
这是我编写的一个原型,用于评估 LLM 针对 Active Directory 网络执行“假设违规” 渗透测试的能力。我使用 [GOAD](https://github.com/Orange-Cyberdefense/GOAD) 测试床来提供目标环境,将 [Kali Linux](https://www.kali.org/) 虚拟机放入该测试床中,然后指挥我的原型 `cochise` 对其进行入侵。
使用 OpenAI 的 o1 或 Google 的 Gemini-2.5-Flash 取得的结果令人印象深刻(或者令人不安,取决于你问谁)。LLM 能够入侵用户、提升权限,甚至在网络内部执行横向移动。更多详情[可在论文中找到](https://arxiv.org/pdf/2502.04227),简而言之,o1 能够完全入侵最多的用户(如下表所示):

使用目前位于 `switch-to-litellm` 分支中的更新版本原型,配合 `gemini-3-flash-preview`,通常能够以不到一美元的成本实现对三个域中两个域的完全入侵,即域控制。这现在开始变得令人不安了。
你可以在 [这个 github 仓库中](https://github.com/andreashappe/cochise/tree/main/examples/screenshots) 找到该工具运行时的许多截图。我的研究论文已被 [TOSEM 期刊](https://dl.acm.org/doi/10.1145/3766895) 录用,当然,我非常欢迎大家引用:
```
@article{10.1145/3766895,
author = {Happe, Andreas and Cito, J\"{u}rgen},
title = {Can LLMs Hack Enterprise Networks? Autonomous Assumed Breach Penetration-Testing Active Directory Networks},
year = {2025},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
issn = {1049-331X},
url = {https://doi.org/10.1145/3766895},
doi = {10.1145/3766895},
note = {Just Accepted},
journal = {ACM Trans. Softw. Eng. Methodol.},
month = sep,
keywords = {Security Capability Evaluation, Large Language Models, Enterprise Networks}
}
```
我们还提供了一份包含安装说明的可复现报告,地址为 https://arxiv.org/abs/2603.01789 。
## 这个原型包含什么?
| 工具 | 描述 |
| ---- | ----------- |
| `src/cochise.py` | 多层级入侵原型,包括高层策略规划和低层攻击执行器。 |
| `src/wintermute.py` | 一个独立的低层攻击执行器,可用于更简单的测试,例如执行单主机权限提升攻击。 |
| `src/cochise-replay.py` | 一个重放工具,允许重放(在屏幕上显示操作,而非执行操作)先前运行的操作。它使用基于 JSON 的日志文件,这些日志文件会在每次测试运行时自动存储在 `logs/` 中。 |
| `src/analyze-json-logs.py` | 一个用于分析一次或多次测试运行的基于 JSON 的日志文件的工具。我在准备论文时用它进行高层运行和成本分析。支持导出 LaTeX 表格。 |
| `src/analyze-json-graphs.py` | 一个基于日志生成图表的简单工具(用于我的论文)。 |
虽然所有分析和重放工具都可以在命令行上开箱即用,但您可能需要修改 `cochise.py` 和 `wintermute.py` 以适应您的环境,或者针对非 GOAD 的不同场景进行调整。这是故意的,因为我想保持代码尽可能简单,并且不想为脚本小子提供现成的工具。
## 如何提供帮助?
- 传播消息?更严重地说,如果您是从事该领域的研究人员,我很乐意交流(并且请引用我)
- 如果您是一名黑客,请随意尝试
- AI 额度/[赞助](https://github.com/sponsors/andreashappe) 也将非常受欢迎……我得自掏腰包支付 OpenAI 的费用
## 背景
我一直在致力于 [hackingBuddyGPT](https://github.com/ipa-lab/hackingBuddyGPT) 的开发,让道德黑客更容易使用 LLM。我的主要关注点是单主机 Linux 系统及其内部的权限提升攻击。
当 OpenAI 在 2025 年 1 月 24 日开放其 o1 模型的 API 访问权限,并且我看到其相对于 GPT-4o 的巨大质量提升时,我最初的想法之一是“这是否可以用于更复杂的渗透测试任务……例如,针对 Active Directory 网络执行‘假设违规’模拟?”
为了评估 LLM 的能力,我搭建了出色的 [GOADv3](https://github.com/Orange-Cyberdefense/GOAD) 测试床,并编写了你现在看到的这个简单原型。这项工作仅旨在针对安全测试床使用,绝不针对真实系统(你知道的,只要我们还不了解 AI 决策是如何发生的,你肯定不想让 LLM 做出潜在的破坏性决定)。
**我希望这项工作(特别是原型,而不是收集的日志和截图)最终能并入 [hackingBuddyGPT](https://github.com/ipa-lab/hackingBuddyGPT) 中。**
## 示例

Cochise 使用 AS-REP Roasting 配合密码破解来入侵 missandei 的密码。
## 如何使用?
### 步骤 1:安装 GOAD
我使用 [GOAD 安装说明](https://orange-cyberdefense.github.io/GOAD/installation/) 以 VirtualBox 为后端安装了 GOAD v3(旁注:我很想有一个基于 KVM 的后端)。
由于我的主机 Linux 内核 6.12 自动加载 KVM,我在启动 VirtualBox 时遇到了问题(而 VirtualBox 只有在 KVM 尚未加载时才能加载)。看起来 Linux KVM 的自动加载行为在 6.12 中发生了变化,你必须将 `kvm.enable_virt_at_load=0` 作为内核启动选项传入。
我们使用的是标准 [GOAD 设置](https://orange-cyberdefense.github.io/GOAD/labs/GOAD/),但其他的应该也不错。默认设置使用 `192.168.56.0/24` 作为测试床。
### 步骤 2:设置 Kali Linux 虚拟机
创建一个新的 Kali Linux 虚拟机并将其放入 GOAD 使用的虚拟网络中。除了标准的 Kali 虚拟机外,我还做了以下更改:
- 将 root 密码设置为 'kali'。这是有史以来最安全的密码,所以请不要在可从外部访问的虚拟机上这样做。
- 通过 SSH 启用 root 访问,并将并行 SSH 连接数增加到 100(均在 `/etc/ssh/sshd_config` 中配置)。
- 移除了 wayland/X11。主要是因为我们的工具不适用于图形用户界面,而且我希望我的攻击者虚拟机进程尽可能少——这使得发现异常进程更容易,并且节省资源等。
我还将目标主机名添加到了 `/etc/hosts`,并通过 `/etc/resolve.conf` 配置了虚拟 AD DNS(另见 https://mayfly277.github.io/posts/GOADv2-pwning_part1/),但没有设置 Kerberos。
### 步骤 3:修复虚拟机
当我开始评估我的原型时,我遇到了***奇怪的***时序问题。“互联网”告诉我尝试以下修复方法:
- 将每个虚拟机的核心数限制为 2
- 为所有虚拟机启用 HPET 定时器(`VBoxManage modifyvm --hpet on`)。
我有没有提过我本来很想用 KVM 而不是 VirtualBox?
### 步骤 4:设置 cochise 及其依赖项
我们遵循 Python 最佳实践,将使用 pip 的可编辑安装和虚拟环境:
```
# 克隆 github repository
$ git@github.com:andreashappe/cochise.git
# 切换到该目录
$ cd cochise
# 创建 venv 环境并安装依赖
$ python -m venv venv
$ source venv/bin/activate
$ pip install -e .
```
设置一个 `.env` 配置文件,包含 SSH kali-vm 和 OpenAI 连接数据:
```
# 你的 openai api key
OPENAI_API_KEY='your-openai-key'
# 连接到你配置的 kali attacker's VM 的连接数据。你至少需要更改 IP
TARGET_HOST=192.168.56.107
TARGET_USERNAME='root'
TARGET_PASSWORD='kali'
```
### 步骤 5:运行它
最简单的方法就是直接启动它……
```
$ python src/cochise.py
```
在运行期间,日志数据将在 `/logs` 中创建。对于每次运行,你都会有一个 `run-.json` 和 `run-.log`。前者包含所有与后续分析相关的 JSON 结构化日志(希望如此)。`log` 版本对人类来说更容易阅读,但未来可能会被移除。
还有另一个工具 `cochise-replay.py`,可用于`重放`(即“输出到控制台”)之前的运行。你用一个 JSON 日志文件调用它,例如:
```
$ python3 src/cochise-replay.py logs/run-20250207-112205.json
```
`src/analysis` 中还有额外的分析脚本,但它们真的很丑。以后得重做。
# 免责声明
请注意并接受所有这些声明。
### 免责声明 1
本项目是一个实验性应用程序,按“原样”提供,不提供任何明示或暗示的保证。使用本软件即表示您同意承担与其使用相关的所有风险,包括但不限于数据丢失、系统故障或可能出现的任何其他问题。
本项目的开发者和贡献者对因使用本软件而可能发生的任何损失、损害或其他后果不承担任何责任。您对基于本项目提供的信息做出的任何决定和采取的任何行动承担全部责任。
**请注意,由于 Token 消耗,使用任何 OpenAI 语言模型都可能非常昂贵。** 使用本项目即表示您确认您有责任监控和管理您自己的 Token 使用量及相关费用。强烈建议您定期检查您的 OpenAI API 使用情况,并设置必要的限制或警报以防止意外收费。
作为一个自主实验,hackingBuddyGPT 可能会生成不符合现实世界最佳实践或法律要求的内容或采取行动。您有责任确保基于本软件输出采取的任何行动或做出的任何决定符合所有适用法律、法规和道德标准。本项目的开发者和贡献者对因使用本软件而产生的任何后果不承担任何责任。
使用 hackingBuddyGPT 即表示您同意赔偿、辩护并使开发者、贡献者和任何相关方免受因您使用本软件或您违反这些条款而引起的任何和所有索赔、损害、损失、责任、成本和费用(包括合理的律师费)的伤害。
### 免责声明 2
未经双方事先同意,使用 hackingBuddyGPT 攻击目标是非法的。最终用户有责任遵守所有适用的地方、州和联邦法律。hackingBuddyGPT 的开发者不承担任何责任,也不对因本程序造成的任何误用或损害负责。仅将其用于教育目的。
标签:Active Directory, AD域安全, AES-256, AI安全, Chat Copilot, Cloudflare, Cochise, DLL 劫持, LLM, MITRE ATT&CK, Modbus, OpenAI o1, Petitpotam, PE 加载器, Plaso, Terraform 安全, Unmanaged PE, Web报告查看器, 企业网络安全, 假设被攻陷, 内存分配, 协议分析, 域控接管, 大语言模型, 数据展示, 权限提升, 模拟器, 横向移动, 漏洞评估, 红队, 编程规范, 网络安全, 网络安全审计, 自动化攻击, 自动化红队演练, 逆向工具, 隐私保护