thijsvos/crackswarm
GitHub: thijsvos/crackswarm
一款基于 Rust 的分布式 hashcat 编排工具,提供加密传输、实时 TUI 监控和多阶段活动支持,用于高效协调多 GPU 密码破解任务。
Stars: 0 | Forks: 0
# crackswarm
[](LICENSE)
[](https://github.com/thijsvos/crackswarm/actions/workflows/ci.yml)
[](https://github.com/thijsvos/crackswarm/releases)
分布式 hashcat 编排工具。通过加密传输、实时 TUI 仪表板和多阶段活动支持,将破解工作分配给多个 GPU worker。

## 目录
- [功能](#features)
- [架构](#architecture)
- [快速开始](#quick-start)
- [TUI 仪表板](#tui-dashboard)
- [活动](#campaigns)
- [命令](#commands)
- [安全性](#security)
- [工作原理](#how-it-works)
- [更新日志](CHANGELOG.md)
- [贡献](#contributing)
- [许可证](#license)
## 功能
- **分布式破解** -- 在单一仪表板中协调多个 GPU worker 上的 hashcat
- **多种攻击模式** -- 暴力破解/掩码、字典,以及字典+规则攻击
- **内置规则** -- 包含 [OneRuleToRuleThemStill](https://github.com/stealthsploit/OneRuleToRuleThemStill)(由 [Will Hunt](https://github.com/stealthsploit) 编写的 4.8 万条规则,MIT 许可证)
- **Noise IK 加密** -- 所有 worker 流量均为端到端加密(WireGuard 级别,通过 `snow` 实现)
- **实时 TUI 仪表板** -- 协调器和 agent 上均提供带有 vim 键绑定的实时进度显示
- **多阶段活动** -- 将攻击阶段链接在一起;未破解的哈希将自动转入下一阶段
- **模式分析器** -- 检查已破解的密码,为后续阶段生成针对性的掩码
- **自适应分块** -- 根据 worker 的 GPU 速度调整分块大小(每个分块目标用时约 10 分钟)
- **基于 Token 的注册** -- 使用单个命令即可接入新的 worker,无需手动交换密钥
- **自动故障转移** -- 心跳监控,在 worker 断开连接时自动重新分配分块
## 架构
```
crackctl (CLI)
|
REST API (127.0.0.1)
|
┌───────────────────┴───────────────────┐
│ crack-coord │
│ │
│ ┌───────────┐ ┌────────┐ ┌─────────┐ │
│ │ Scheduler │ │ SQLite │ │ TUI │ │
│ └───────────┘ └────────┘ └─────────┘ │
│ │
│ Noise IK encrypted TCP │
└──────────┬───────────────┬────────────┘
│ │
┌───────┴───────┐ ┌─────┴─────────┐
│ crack-agent │ │ crack-agent │ ...
│ hashcat │ │ hashcat │
│ GPU(s) │ │ GPU(s) │
└───────────────┘ └───────────────┘
```
| 二进制文件 | 角色 |
|--------|------|
| `crack-coord` | 带有 TUI 仪表板的协调器服务器 |
| `crack-agent` | Worker agent -- 运行 hashcat,报告结果 |
| `crackctl` | 用于任务/worker/活动管理的操作员 CLI |
## 快速开始
### 前置条件
- **Rust 工具链** -- 通过 [rustup](https://rustup.rs/) 安装
- **hashcat** -- 已安装并在 PATH 中 ([hashcat.net](https://hashcat.net/hashcat/))
- 适合您硬件的 GPU 驱动程序(NVIDIA、AMD 等)
### 构建
```
cargo build --release
```
二进制文件位于 `target/release/` 中:`crack-coord`、`crack-agent`、`crackctl`。
适用于 Linux、macOS 和 Windows 的预编译二进制文件可在 [发布页面](https://github.com/thijsvos/crackswarm/releases) 获取。
### 单机设置
最快的入门方式 -- 协调器和 agent 在同一台机器上:
```
# 使用内置本地 agent 启动 coordinator
crack-coord run --with-agent
# 上传 hash 文件
crackctl file upload hashes.txt
# 创建 brute-force 任务
crackctl task create \
--name "NTLM brute" \
--hash-mode 1000 \
--hash-file \
--mask '?a?a?a?a?a?a'
```
协调器 TUI 将通过五个选项卡显示实时进度:Tasks、Workers、Results、Audit Log 和 Campaigns。
### 多机设置
**在协调器上:**
```
# 启动 coordinator
crack-coord run --bind 0.0.0.0:8443
# 为新 worker 生成 enrollment token
crackctl worker enroll --name "gpu-server-1"
```
**在每个 worker 上:**
```
# 使用 token 进行 enroll(server 地址已嵌入其中)
crack-agent enroll --token ''
# 在后续运行中,agent 会自动重新连接
crack-agent run --server :8443
```
如果连接断开,worker 会以指数退避(1 秒到 60 秒)的方式自动重新连接。
### 字典攻击
上传词表并创建字典任务:
```
# 上传 wordlist
crackctl file upload rockyou.txt --type wordlist
# Dictionary attack (hashcat -a 0)
crackctl task create --name "Dict attack" --hash-mode 1000 \
--hash-file --wordlist
```
### 带规则的字典攻击
`rules/` 目录包含 [OneRuleToRuleThemStill](https://github.com/stealthsploit/OneRuleToRuleThemStill) -- 这是一个由 [Will Hunt (@stealthsploit)](https://github.com/stealthsploit) 编写、包含 48,439 条规则的优化规则集,采用 MIT 许可证。上传它并与词表结合使用:
```
# 上传 rules 文件
crackctl file upload rules/OneRuleToRuleThemStill.rule --type rules
# Dictionary + rules attack
crackctl task create --name "Dict+OTRTS" --hash-mode 1000 \
--hash-file --wordlist --rules-file
```
词表和规则文件通过加密的 Noise 通道传输给 worker 并在本地缓存。文件以约 40KB 的分块发送,且每个 worker 仅传输一次。
## TUI 仪表板
### 协调器
协调器 TUI 有五个带有 vim 风格导航的选项卡:
| 选项卡 | 内容 |
|-----|---------|
| **Tasks** | 带有进度条、速度、预计剩余时间、分块明细的任务列表 |
| **Workers** | Worker 状态、GPU 设备、hashcat 版本、最后在线时间 |
| **Results** | 已破解的哈希及明文、worker 归属、时间戳 |
| **Audit Log** | 系统事件:连接、完成、错误 |
| **Campaigns** | 活动进度及各阶段状态 |
**按键绑定:**
| 按键 | 操作 |
|-----|--------|
| `1`-`5` | 跳转到选项卡 |
| `j`/`k` | 向上/向下导航 |
| `g`/`G` | 跳转到顶部/底部 |
| `Ctrl+d`/`Ctrl+u` | 向下/向上翻页 |
| `Tab` | 切换面板焦点 |
| `/` | 搜索/过滤当前列表 |
| `:` | 命令模式 (`:cancel`、`:start`、`:delete`、`:quit`) |
| `?` | 切换帮助覆盖层 |
| `q` | 退出 |
当 worker 连接/断开、任务完成以及哈希被破解时,会弹出 Toast 通知。使用 `--headless` 可仅输出日志(无 TUI)。
### Agent
agent 显示一个单屏仪表板,包含连接状态、带有速度/预计剩余时间的当前分块进度、最近的破解结果(最近 10 个)以及会话统计信息。使用 `--headless` 可仅输出日志。
## 活动
活动将多个攻击阶段链接在一起。未破解的哈希会在阶段之间自动转入。
```
# 从内置模板创建 campaign(仅包含 mask-only)
crackctl campaign create \
--name "Full NTLM audit" \
--hash-mode 1000 \
--hash-file-path ntds_hashes.txt \
--template ntlm-standard \
--auto-start
# 创建包含 dictionary + rules 阶段的 campaign
crackctl campaign create \
--name "Full NTLM audit" \
--hash-mode 1000 \
--hash-file-path ntds_hashes.txt \
--template ntlm-standard \
--wordlist \
--rules-file \
--auto-start
# 列出可用模板
crackctl campaign templates
# 监控进度
crackctl campaign show
```
如果提供了 `--wordlist`,模板将在流水线早期包含一个字典(+规则)阶段。如果未提供,字典阶段将被自动跳过。
### 内置模板
| 模板 | 哈希模式 | 阶段 | 描述 |
|----------|-----------|--------|-------------|
| `ntlm-standard` | 1000 (NTLM) | 7 | PIN 扫描、字典+规则、常见掩码、模式分析、最多 8 个字符的暴力破解 |
| `wpa-quick` | 22000 (WPA) | 4 | 8 位 PIN、字典+规则、常见 8 字符掩码、模式分析 |
| `generic-quick` | 任意 | 6 | PIN 扫描、字典+规则、常见掩码、模式分析、最多 7 个字符的暴力破解 |
### 阶段类型
- **StaticMask** -- 单个掩码攻击
- **MultiMask** -- 掩码的顺序列表,自动依次推进
- **ExpandingBrute** -- 具有递增长度的暴力破解(例如,`?a` 长度从 1 到 8)
- **Dictionary** -- 带有可选规则文件的词表攻击(如果未提供词表则跳过)
- **AutoGenerated** -- 模式分析器检查已破解的密码,并为下一轮生成针对性的掩码
### 模式分析器
`AutoGenerated` 阶段类型是最显著的功能。它检查在早期阶段破解的密码,以推断结构模式:
1. 将每个破解的密码转换为骨架(例如,`Password1!` 变为 `Ullllllld s`)
2. 根据已破解集合中的频率对骨架进行排名
3. 根据排名靠前的模式生成掩码,包括自定义字符集缩窄和后缀锚定变体
4. 过滤掉在先前阶段中已尝试过的掩码
这创建了一个反馈循环:每一轮破解都为下一轮提供信息,从而瞄准最有可能的剩余密码结构。
## 命令
### crackctl
```
crackctl [--api-url ] Override API URL (default: http://127.0.0.1:9443)
env: CRACKCTL_API_URL
Tasks:
task create Create a cracking task
--name Task name (required)
--hash-mode Hashcat hash mode (required)
--hash-file Hash file ID (required)
--mask Attack mask for brute-force (mutually exclusive with --wordlist)
--wordlist Wordlist file ID for dictionary attacks
--rules-file Rules file ID (requires --wordlist)
--charset1..4 Custom charsets for ?1..?4
--priority <1-10> Task priority (default: 5)
--extra-args Additional hashcat arguments
task list List all tasks
task show Show task details with chunks
task results Show cracked hashes for a task
task cancel Cancel a running task
task delete Delete a task
Files:
file upload Upload a hash file
--type File type (default: hash)
file list List uploaded files
Workers:
worker list List all workers
worker authorize Pre-authorize a worker by public key
--pubkey Worker's base64 public key (required)
--name Worker name (required)
worker enroll Generate an enrollment token
--name Worker name (required)
--expires-minutes Token TTL (default: 60)
Campaigns:
campaign create Create a multi-phase campaign
--name Campaign name (required)
--hash-mode Hashcat hash mode (required)
--hash-file-path Hash file path (auto-uploads)
--template Use a built-in template
--wordlist Wordlist file ID for dictionary phases in templates
--rules-file Rules file ID for dictionary+rules phases in templates
--auto-start Start immediately after creation
--priority <1-10> Task priority (default: 5)
campaign list List all campaigns
campaign show Show campaign with phases
campaign start Start a draft campaign
campaign results Show all cracked hashes
campaign cancel Cancel a running campaign
campaign delete Delete a campaign
campaign templates List built-in templates
Potfile:
potfile stats Show potfile statistics
potfile export Export cracked plaintexts
--output Write to file instead of stdout
System:
status System overview
```
### crack-coord
```
crack-coord init Initialize coordinator (generate keys)
--data-dir Data directory (default: platform data dir)
crack-coord run Start the coordinator
--bind Worker transport address (default: 0.0.0.0:8443)
--api-bind REST API address (default: 127.0.0.1:9443)
--data-dir Data directory
--with-agent Run a local worker agent in the same process
--headless No TUI, log output only
--hashcat-path Path to hashcat binary (default: hashcat)
```
环境变量:`CRACK_COORD_DATA_DIR`、`CRACK_COORD_BIND`、`CRACK_COORD_API_BIND`
### crack-agent
```
crack-agent init Initialize agent (generate keys)
--coord-key Coordinator's base64 public key (required)
--data-dir Data directory (default: platform data dir)
crack-agent enroll Enroll via token from coordinator
--token Enrollment token (required)
--server Override server address from token
--data-dir Data directory
--hashcat-path Path to hashcat binary
crack-agent run Connect and process work
--server Coordinator address (required)
--name Worker name (default: hostname)
--data-dir Data directory
--headless No TUI, log output only
--hashcat-path Path to hashcat binary (default: hashcat)
```
环境变量:`CRACK_AGENT_DATA_DIR`、`CRACK_AGENT_SERVER`
## 安全性
- **Noise IK 协议**(通过 `snow`)用于所有 worker 与协调器之间的流量 -- 使用 Curve25519 静态密钥进行相互身份验证,ChaCha20-Poly1305 加密,前向保密,无明文降级
- **REST API 默认绑定到 127.0.0.1** -- 仅限本机访问,无身份验证。如果您将 `--api-bind` 覆盖为非环回地址,API 将在没有身份验证的情况下暴露
- **基于 Token 的注册** -- 有时间限制的 Token(默认 60 分钟),其中嵌入了协调器公钥和服务器地址
- **私钥保护** -- 密钥以 0600 权限存储(Unix),在释放时从内存中清零
- **采用 WAL 模式的 SQLite** -- 嵌入式,无网络暴露的数据库
- **心跳监控** -- 15 秒间隔,60 秒超时;断开连接的 worker 的分块将自动重新分配
## 工作原理
1. **哈希文件上传** -- 操作员通过 `crackctl` 上传哈希,存储在协调器磁盘上并通过加密通道传输给 agent
2. **任务/活动创建** -- 定义哈希模式、攻击掩码、优先级和可选的自定义字符集
3. **Keyspace 计算** -- 协调器运行 `hashcat --keyspace` 以确定总工作量
4. **自适应分块** -- 根据基准测试速度针对每个 worker 调整分块大小(目标约 10 分钟),并进行公平共享上限设定,以免单个 worker 垄断 keyspace
5. **分块分发** -- 协调器通过 Noise 加密通道将分块分配给空闲的 worker
6. **Hashcat 执行** -- agent 使用 `--status-json` 运行 hashcat,实时将进度和速度流式传输回协调器
7. **结果收集** -- 每个分块使用独立的每分块 potfile 和 outfile,以防止 worker 之间发生干扰。破解的哈希在找到时会通过 Noise 通道实时发送到协调器(而不是在结束时批量发送)。协调器将所有结果存储在 SQLite 中,该数据库充当集中的 potfile。临时 potfile 和 outfile 在每个分块完成后会被清理
8. **活动推进** -- 当某个阶段耗尽其 keyspace 时,未破解的哈希将转入下一阶段。`AutoGenerated` 阶段会分析破解的密码以生成新的针对性掩码
## 贡献
欢迎贡献。请在提交 pull request 之前开一个 issue 来讨论建议的更改。
有关安全漏洞,请参阅 [SECURITY.md](SECURITY.md)。
## 许可证
[MIT](LICENSE)
标签:Bitdefender, Cryptography, DOS头擦除, Hashcat, Hash cracking, Noise协议, PoC, Red team, Rust, TUI, VEH, 分布式系统, 分布式计算, 加密传输, 可视化界面, 响应大小分析, 多阶段任务, 字典攻击, 密码破解, 异常处理, 提示注入, 暴力破解, 终端用户界面, 网络安全, 网络流量审计, 通知系统, 隐私保护, 集群管理