
nightcrawler — 已更新!
本地AI驱动的红队工具,运行于手机上
Nightcrawler
一个完全在智能手机上运行的自主渗透测试代理。把手机丢到网络上,然后走开,它就能发现主机、映射服务、查找漏洞并生成渗透测试报告——全程无需云连接。
░█▄░█ █ █▀▀ █░█ ▀█▀ █▀▀ █▀█ ▄▀█ █░█░█ █░░ █▀▀ █▀█
░█░▀█ █ █▄█ █▀█ ░█░ █▄▄ █▀▄ █▀█ ▀▄▀▄▀ █▄▄ ██▄ █▀▄ v0.1.0
AUTONOMOUS MOBILE PENTEST AGENT
OnePlus 8 · NetHunter · LFM2.5-1.2B · OpenCL GPU
这是什么?
渗透测试(Pentesting)是一种通过模拟攻击来测试计算机网络安全性的实践——前提是获得网络所有者的明确许可。专业渗透测试人员受雇于在真正的攻击者之前发现漏洞。
Nightcrawler 在手机上自动化了这一过程。它使用一个在手机 GPU 上本地运行的小型 AI 模型(LFM2.5-1.2B-Instruct-Heretic,12 亿参数)来决定下一步做什么——探测哪台主机、使用哪个工具、查找什么内容。无需互联网连接或云 API。
演示
▶️ 在 Instagram 上观看 Nightcrawler 的实际运行
工作原理
- WiFi 破解(可选)——如果未连接 WiFi,它可以使用外部 USB WiFi 适配器自主破解 WPA2 网络
- 侦察——使用隐蔽扫描发现网络上的设备
- 枚举——探测已发现的服务(Web 服务器、文件共享、SSH、DNS 等)
- 漏洞利用——测试已知漏洞和默认凭据
- 报告生成——生成结构化的渗透测试报告,包含发现结果和修复建议
该代理的运行方式类似于一位耐心的人类渗透测试人员——它在主机之间轮换,每轮只执行一个小操作,并在数小时内逐步积累知识。这使得它比那些同时向所有主机发起扫描的传统漏洞扫描器更难被检测到。
关键概念
| 术语 | 含义 |
|---|---|
| Drop box | 留在目标网络上自主执行测试的设备 |
| Scope(范围) | 你被授权测试的网络/主机集合 |
| Rules of Engagement(交战规则,ROE) | 规定你可以做什么的法律文件 |
| Stealth(隐蔽性) | 避免被网络监控(IDS/IPS)检测到的技术 |
| MCP | Model Context Protocol——AI 工具使用的标准接口 |
| C2 | Command and Control——用于监控和操控代理的 Web 仪表盘 |
架构
┌──────────────────────────────────────────────────────────┐
│ PHONE (OnePlus 8) │
│ │
│ ┌─────────────┐ ┌──────────────────┐ │
│ │ LFM2.5 │ │ Agent Loop │ │
│ │ 1.2B model │◄───►│ (main.py) │ │
│ │ on GPU │ │ Decides what │ │
│ │ (:8080) │ │ to do next │ │
│ └─────────────┘ └────────┬─────────┘ │
│ │ │
│ ┌────────▼─────────┐ │
│ │ Scope Proxy │ ← Safety layer │
│ │ Validates every │ Blocks out- │
│ │ command before │ of-scope │
│ │ execution │ actions │
│ └────────┬─────────┘ │
│ │ │
│ ┌────────▼─────────┐ │
│ │ Kali MCP Server │ ← Runs the │
│ │ nmap, curl, │ actual │
│ │ smbclient, ... │ commands │
│ └──────────────────┘ │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Web Dashboard │ │ SQLite DB │ │
│ │ (:8888) │ │ Hosts, vulns, │ │
│ │ Monitor & steer │ │ creds, commands │ │
│ └──────────────────┘ └──────────────────┘ │
└──────────────────────────────────────────────────────────┘
完整的系统设计请参阅 docs/ARCHITECTURE.md。
功能特性
- 完全自主——运行期间无需人工介入
- 100% 本地推理——AI 在手机 GPU 上运行,无需云端
- 范围强制——两层防御机制防止越界操作
- 隐蔽优先——慢速扫描、主机轮换、掩护流量、仅使用 nmap -T2
- 27 个漏洞利用剧本——自动执行的多步骤攻击链
- 24,956 条 CVE 数据库——基于版本的漏洞匹配
- Web 仪表盘——实时监控、主机管理、C2 控制
- WiFi 破解模式——使用 USB 适配器自主破解 WPA2(灵感来自 Pwnagotchi)
- 被动发现——后台捕获 mDNS/NBNS/DHCP/ARP 广播
- 多网络支持——每个网络的数据相互隔离,通过 MAC 键控主机在 DHCP 变化后依然存活
- 自愈能力——垃圾检测、上下文重置、看门狗、卡死检测
- 训练数据采集——记录成功交互以供未来模型微调
- 报告生成——可下载的渗透测试报告,包含漏洞、利用链和修复建议
完整功能参考请参阅 docs/FEATURES.md。
硬件要求
必需
- 安装了 Kali NetHunter 的 Android 手机(已在 OnePlus 8、Snapdragon 865 上测试)
- 通过 Magisk 获得 Root 权限
- 12GB+ 内存(模型占用约 1.3GB,Android 占用约 4GB,其余供工具使用)
可选
- 用于离线 WiFi 破解模式的 USB WiFi 适配器(推荐 Ralink RT3572)
- 支持监听模式的 自定义内核(带 MAC80211)(构建指南)
- 用于通过 Tailscale 将更大模型卸载到外部设备的 NVIDIA AGX
GPU 性能
所有推理均通过 Adreno 650 GPU 上的 OpenCL 进行:
| 模型 | 量化 | 提示速度 | 生成速度 |
|---|---|---|---|
| LFM2.5-1.2B-Instruct-Heretic(生产环境) | Q8_0 | 115 tok/s | 13 tok/s |
| Qwen3.5-0.8B | Q8_0 | 30.5 tok/s | 6.3 tok/s |
| Qwen3.5-4B | Q4_0 | 10.1 tok/s | 2.0 tok/s |
注意: Android 在电池供电时会限制 GPU 性能(6 倍降速)。Nightcrawler 包含一个 GPU 调速守护进程,可强制最大性能并在电量 ≤15% 时自动降速。
快速开始
# 1. 安装(在 Kali NetHunter chroot 内)
bash INSTALL.sh
# 2. 等待 llama-server 启动(开机后约 5 分钟)
curl -s http://127.0.0.1:8080/health # 应返回 {"status":"ok"}
# 3. 启动所有服务
bash scripts/run-36h.sh
# 4. 打开 Web 仪表盘(从 Tailscale 网络中的任何设备访问)
# https://<your-tailscale-hostname>:8888
试运行(不执行真实命令)
NC_DRY_RUN=1 python3 main.py
这会使用一个模拟 Kali 服务器,让你无需执行真实网络命令即可测试代理循环。
手动启动(如果不使用 tmux 启动器)
kali-server-mcp --port 5000 &
python3 scope_proxy.py --config config.yaml --port 8800 --upstream http://127.0.0.1:5000 &
bash scripts/webui-daemon.sh start
python3 main.py &
配置
部署前编辑 config.yaml:
mission:
id: "CLIENT-YYYY-XXX" # 你的任务 ID
scope:
networks: ["auto"] # "auto" = 启动时从 wlan0 自动检测
excluded_hosts: ["auto"] # "auto" = 网关 + 自身 IP
excluded_ports: [502, 503] # 永不触碰的 SCADA/ICS 端口
authorization: "ROE-YYYY-XXX.pdf"
max_runtime_hours: 0 # 0 = 无限制
model:
local:
ctx_size: 8192
port: 8080
动态范围检测意味着在不同网络之间切换时无需修改任何配置——代理会在启动时从 wlan0 读取当前子网。
项目结构
nightcrawler/
├── main.py # 入口点
├── config.yaml # 任务范围 + 模型配置
├── scope_proxy.py # 范围强制代理
├── INSTALL.sh # 安装脚本
│
├── agent/ # 核心代理逻辑
│ ├── loop.py # 决策循环 + 错误恢复
│ ├── planner.py # 阶段状态机(侦察 → 漏洞利用)
│ ├── llm_client.py # LLM API 客户端(llama.cpp / 远程)
│ ├── db.py # SQLite 后端(主机、漏洞、凭据)
│ ├── host_memory.py # 每主机观察记录 + 自动标记
│ ├── cve_db.py # 24,956 条 CVE 数据库
│ ├── attack_planner.py # 漏洞利用阶段的战略指令
│ ├── output_parser.py # 从工具输出中提取结构化数据
│ ├── offline_manager.py # WiFi 破解流水线状态机
│ ├── net_detect.py # 从 wlan0 自动检测网络
│ ├── cover_traffic.py # 与真实 Web 流量混合的隐蔽技术
│ ├── passive_capture.py # 后台 tcpdump 捕获广播流量
│ └── ...
│
├── proxy/ # 范围强制组件
│ ├── scope.py # IP/端口/主机验证
│ ├── rate_limiter.py # 命令速率限制 + 抖动
│ └── command_filter.py # 破坏性命令黑名单
│
├── webui/ # Web 仪表盘(Flask)
│ ├── server.py # API + 隐蔽中间件
│ └── templates/index.html # 仪表盘 UI
│
├── data/ # 静态数据文件
│ ├── cve_exploits.json # CVE→利用命令映射
│ └── playbooks.json # 27 个多步骤攻击剧本
│
├── prompts/ # LLM 提示模板(支持热重载)
├── scripts/ # 运维脚本(启动、停止、看门狗)
├── tests/ # 测试套件(API、UI、离线模式)
├── kernels/ # WiFi 驱动模块 + 内核文档
├── simulation/ # 试运行模拟服务器
├── docs/ # 架构、GPU 设置、功能文档
├── logs/ # 运行时数据(gitignored)
└── models/ # 模型文件(gitignored)
代理的思考方式
代理使用一个简单但有效的循环:
- 选择目标——加权随机选择(70% 选择已知端口的主机,30% 进行新发现)
- 构建上下文——将主机记忆、网络观察、阶段指导注入提示
- 询问 LLM——模型生成
REASONING: ... COMMAND: ... - 验证——范围代理检查命令是否在范围内且不具有破坏性
- 执行——通过 Kali MCP 服务器运行命令
- 学习——输出解析器提取发现结果,更新主机记忆
- 重置上下文——清除对话,保留持久记忆,重复循环
1.2B 模型约有 50% 的命令成功率(这是其规模固有的限制)。代理通过以下方式弥补:
- 垃圾检测——5 次连续失败后使用多样化的 few-shot 示例重置
- 重复检测——强制工具/目标多样化
- 基于时间的卡死检测——5 分钟兜底机制强制重置上下文
- 直接剧本执行——多步骤攻击完全绕过 LLM
Web 仪表盘
位于 :8888 的仪表盘提供实时监控和控制:
- 实时信息流——每条命令、发现结果和代理决策
- 主机卡片——可点击的卡片,显示端口、服务、漏洞
- 网络地图——交互式力导向图(可拖拽、缩放、平移)
- 漏洞详情——CVE 标签、利用链、修复步骤
- C2 控制——标记/拉黑主机、强制阶段、暂停/恢复、注入命令
- 离线模式——灵感来自 Pwnagotchi 的 WiFi 攻击 UI,带动画表情
仪表盘经过隐蔽过滤:它伪装 nginx 头,并对来自目标网络的连接返回空 404。
测试结果
来自跨多个网络 72+ 小时的自主运行:
- 每个网络发现 30+ 台主机
- 自主执行 2,000+ 条命令
- 在多个服务中发现 10+ 个漏洞
- 通过直接执行运行了 6+ 个剧本
- 代理内存全程稳定在 35-50MB(无泄漏)
贡献
欢迎贡献!指南请参阅 CONTRIBUTING.md。
需要帮助的领域
- 模型微调——将命令格式合规率从约 50% 提升到 85%+
- 新剧本——为更多服务添加利用链
- CVE 数据库——将覆盖范围扩展到当前的 24,956 条之外
- 适配器支持——在更多 USB WiFi 芯片组上测试
- 文档——针对不同手机的教程和设置指南
- 测试——更多测试覆盖,尤其是边缘情况
开发环境设置
# 克隆仓库
git clone https://github.com/garagehq/nightcrawler.git
cd nightcrawler
# 试运行模式(无需真实命令,无需硬件)
NC_DRY_RUN=1 python3 main.py
# 运行测试
python3 -m pytest tests/
法律声明
此工具仅用于授权的渗透测试。 在部署 Nightcrawler 之前,你必须获得网络所有者的书面许可(交战规则)。未经授权对你不拥有或未被许可测试的网络使用此工具是违法的。
许可证
MIT——详情请参阅 LICENSE。
支持
如果你喜欢这个项目,可以请我喝杯咖啡 ☕:
