Show HN: Nightcrawler – 一款在智能手机上运行的本地AI渗透测试代理

Hacker News Top 工具

摘要

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_/)

工作原理

  1. WiFi 破解(可选)——如果放置在没有 WiFi 的环境中,它可以使用外接 USB WiFi 适配器自主破解 WPA2 网络
  2. 侦察——使用隐蔽扫描发现网络上的设备
  3. 枚举——探测已发现的服务(Web 服务器、文件共享、SSH、DNS 等)
  4. 利用——测试已知漏洞和默认凭据
  5. 报告——生成结构化的渗透测试报告,包含发现和修复建议

该代理像一位耐心的人类渗透测试人员一样运作——它在主机之间轮换,每轮执行一个小操作,并在数小时内逐步积累知识。这使得它比那些同时扫描所有主机的传统漏洞扫描器更难被发现。

关键概念

术语含义
Drop box留在目标网络上自主执行测试的设备
Scope你被授权测试的网络/主机集合
Rules of Engagement (ROE)规定允许行为的法律文件
Stealth避免被网络监控(IDS/IPS)发现的技术
MCPModel Context Protocol — 用于 AI 工具使用的标准接口
C2Command 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_0115 tok/s13 tok/s
Qwen3.5-0.8BQ8_030.5 tok/s6.3 tok/s
Qwen3.5-4BQ4_010.1 tok/s2.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)

代理如何思考

代理使用一个简单但有效的循环:

  1. 选择目标 — 加权随机选择(70% 已知端口的主机,30% 新发现)
  2. 构建上下文 — 将主机记忆、网络观察、阶段指导注入提示词
  3. 询问 LLM — 模型输出 REASONING: ... COMMAND: ...
  4. 验证 — 范围代理检查命令是否在范围内且不具破坏性
  5. 执行 — 命令通过 Kali MCP 服务器运行
  6. 学习 — 输出解析器提取发现,更新主机记忆
  7. 重置上下文 — 清空对话,保持持久记忆,重复

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

相似文章