Show HN: Nightcrawler – 一款在智能手机上运行的本地AI渗透测试代理
摘要
Nightcrawler 是一个完全在智能手机上运行的自主渗透测试代理,利用手机GPU上的本地1.2B AI模型来发现主机、映射服务并生成渗透测试报告,无需云连接。
查看缓存全文
缓存时间: 2026/08/03 13:32
garagehq/nightcrawler
来源:https://github.com/garagehq/nightcrawler
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 的实际运行(https://www.instagram.com/p/DYNXFvVN0c_/)
工作原理
- 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 │ Block 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。
硬件
必需
- Android 手机,装有 Kali NetHunter(https://www.kali.org/docs/nethunter/)(已在 OnePlus 8、Snapdragon 865 上测试)
- 通过 Magisk(https://github.com/topjohnwu/Magisk)获取 Root 权限
- 12GB 以上内存(模型约占 1.3GB,Android 约占 4GB,其余用于工具)
可选
- USB WiFi 适配器,用于离线 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 governor 守护进程,可强制最大化性能,并在电量 ≤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://<phone-ip>: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/ # 运行时数据(gitignore)
└── models/ # 模型文件(gitignore)
代理如何思考
代理使用一个简单但有效的循环:
- 选择目标 — 加权随机选择(70% 已知端口的主机,30% 新发现)
- 构建上下文 — 将主机记忆、网络观察、阶段指导注入提示词
- 询问 LLM — 模型输出
REASONING: ... COMMAND: ... - 验证 — 范围代理检查命令是否在范围内且不具破坏性
- 执行 — 命令通过 Kali MCP 服务器运行
- 学习 — 输出解析器提取发现,更新主机记忆
- 重置上下文 — 清空对话,保持持久记忆,重复
1.2B 模型的命令成功率约为 50%(这是其规模固有的)。代理通过以下方式弥补:
- 垃圾检测 — 连续 5 次异常时重置,并更换多样化的少样本示例
- 重复检测 — 强制工具/目标多样化
- 基于时间的卡死检测 — 5 分钟后备机制强制重置上下文
- 直接执行剧本 — 多步骤攻击完全绕过 LLM
Web 仪表盘
位于 :8888 的仪表盘提供实时监控和控制:
- 实时流 — 每条命令、发现和代理决策
- 主机卡片 — 可点击的卡片,显示端口、服务、漏洞
- 网络地图 — 交互式力导向图(拖拽、缩放、平移)
- 漏洞详情 — CVE 标签、利用链、修复步骤
- C2 控制 — 星标/黑名单主机、强制阶段、暂停/恢复、注入命令
- 离线模式 — 受 Pwnagotchi 启发的 WiFi 攻击界面,带有动画表情
仪表盘具有隐蔽过滤功能:它会伪装 nginx 头信息,并对来自目标网络的连接返回空白 404。
测试结果
来自跨多个网络 72 小时以上的自主运行:
- 每个网络发现 30+ 台主机
- 自主执行 2,000+ 条命令
- 在多个服务中发现 10+ 个漏洞
- 通过直接执行完成 6+ 个剧本
- 代理内存始终稳定在 35-50MB(无泄漏)
贡献
欢迎贡献!指南请参阅 CONTRIBUTING.md。
需要帮助的领域
- 模型微调 — 将命令格式符合率从约 50% 提升到 85% 以上
- 新剧本 — 为更多服务添加利用链
- CVE 数据库 — 将覆盖范围扩展到当前 24
相似文章
@hetmehtaa: 本地AI用于渗透测试与研究 https://projectblack.io/blog/local-ai-for-cyber-security/…
一篇博客文章对四种方法(Semgrep、搭载Strix的GLM 5.1、具备代码审查技能的云端SOTA、以及使用自定义工具的本地AI)在PHPIPAM中发现已知LFI漏洞的表现进行了基准测试,结果显示采用定制化方案的本地AI工具优于其他方法。
Show HN: 我们后训练了一个可进行渗透测试而非拒绝的模型
ArgusRed 是一个 CLI 工具,使用后训练的 AI 模型对代码库进行安全扫描和渗透测试,输出详细的 Markdown 报告。它提供两种模式:安全扫描(只读)和渗透测试(主动利用),并可选择性地进行利用验证。
@Dinosn: 我尝试了一个本地AI模型(Qwen 3.6 27b)进行安全研究,效果出奇地好。
作者测试了一个本地AI模型(Qwen 3.6 27b)进行安全研究,发现其效果出奇地好,在发现PHPIPAM LFI漏洞方面优于Semgrep和云端AI代理等其他方法。
Launch HN:Traceforce (YC S26) – 面向AI应用的全面企业安全监控
Traceforce 提供对所有设备上AI应用(如ChatGPT和Claude)的全公司可见性和控制,通过MCP发现使用情况和连接,并包含一个开源的MCP渗透测试工具。
展示 HN: 我用 Qwen 在 Raspberry Pi 上制作了一个本地汽车 AI
一个 Raspberry Pi 5 运行本地的 Qwen 模型,作为汽车中的 AI 助手,提供语音交互、行车记录仪监控和行程摘要,无需互联网连接。