
nightcrawler — Updated!
Локальный ИИ-ассистент для red team на телефоне
Nightcrawler
Автономный агент для пентеста, который полностью работает на смартфоне. Оставьте телефон в сети, уйдите, и он обнаружит хосты, просканирует сервисы, найдёт уязвимости и сформирует отчёт о пентесте — всё без подключения к облаку.
░█▄░█ █ █▀▀ █░█ ▀█▀ █▀▀ █▀█ ▄▀█ █░█░█ █░░ █▀▀ █▀█
░█░▀█ █ █▄█ █▀█ ░█░ █▄▄ █▀▄ █▀█ ▀▄▀▄▀ █▄▄ ██▄ █▀▄ v0.1.0
AUTONOMOUS MOBILE PENTEST AGENT
OnePlus 8 · NetHunter · LFM2.5-1.2B · OpenCL GPU
Что это такое?
Тестирование на проникновение (пентест) — это практика проверки безопасности компьютерной сети путём имитации атаки — с явного разрешения владельца сети. Профессиональных пентестеров нанимают, чтобы найти уязвимости до того, как это сделают реальные злоумышленники.
Nightcrawler автоматизирует этот процесс на телефоне. Он использует небольшую ИИ-модель (LFM2.5-1.2B-Instruct-Heretic, 1,2 миллиарда параметров), работающую локально на GPU телефона, чтобы решать, что делать дальше — какой хост исследовать, какой инструмент использовать, что искать. Никакого подключения к интернету или облачных API не требуется.
Демо
▶️ Посмотрите Nightcrawler в действии на Instagram
Как это работает
- Взлом WiFi (опционально) — Если устройство оставлено без WiFi, оно может автономно взламывать сети WPA2 с помощью внешнего USB WiFi-адаптера
- Разведка — Обнаруживает устройства в сети с помощью скрытных сканирований
- Перечисление — Исследует обнаруженные сервисы (веб-серверы, файловые ресурсы, SSH, DNS и т.д.)
- Эксплуатация — Проверяет известные уязвимости и учётные данные по умолчанию
- Формирование отчёта — Создаёт структурированный отчёт о пентесте с находками и рекомендациями по устранению
Агент действует как терпеливый человек-пентестер — он ротируется между хостами, выполняет одно небольшое действие за ход и постепенно накапливает знания в течение часов. Это делает его гораздо более сложным для обнаружения, чем традиционные сканеры уязвимостей, которые «бомбардируют» все хосты одновременно.
Ключевые понятия
| Термин | Что означает |
|---|---|
| Drop box | Устройство, оставленное в целевой сети для автономного тестирования |
| Scope (Область) | Набор сетей/хостов, которые вам разрешено тестировать |
| Правила взаимодействия (ROE) | Юридический документ, определяющий, что вам разрешено делать |
| Стелс | Методы, позволяющие избежать обнаружения сетевым мониторингом (IDS/IPS) |
| MCP | Model Context Protocol — стандартный интерфейс для использования инструментов ИИ |
| C2 | Command and Control — веб-панель для мониторинга и управления агентом |
Архитектура
┌──────────────────────────────────────────────────────────┐
│ 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% локальный инференс — ИИ работает на GPU телефона, облако не требуется
- Ограничение области (scope) — двухуровневая защита предотвращает действия вне области
- Стелс в приоритете — медленные скорости сканирования, ротация хостов, маскирующий трафик, только nmap -T2
- 27 плейбуков эксплуатации — многошаговые цепочки атак, выполняемые автоматически
- База CVE на 24 956 записей — сопоставление уязвимостей с учётом версий
- Веб-панель — мониторинг в реальном времени, управление хостами, элементы управления C2
- Режим взлома WiFi — автономный взлом WPA2 с USB-адаптером (вдохновлено Pwnagotchi)
- Пассивное обнаружение — фоновый захват широковещательного трафика mDNS/NBNS/DHCP/ARP
- Мультисеть — данные изолированы по сетям, переживает смену DHCP благодаря хостам с ключом по MAC
- Самовосстановление — обнаружение мусорных данных, сброс контекста, сторожевые таймеры, обнаружение зависаний
- Захват для обучения — логирует успешные взаимодействия для будущей тонкой настройки модели
- Генерация отчётов — загружаемый отчёт о пентесте с уязвимостями, цепочками эксплуатации и рекомендациями по устранению
Полный справочник возможностей см. в docs/FEATURES.md.
Оборудование
Требуемое
- Android-телефон с Kali NetHunter (протестировано на OnePlus 8, Snapdragon 865)
- Root-доступ через Magisk
- 12 ГБ+ ОЗУ (модель использует ~1,3 ГБ, Android ~4 ГБ, остальное — для инструментов)
Опционально
- USB WiFi-адаптер для автономного режима взлома WiFi (рекомендуется Ralink RT3572)
- Кастомное ядро с MAC80211 для режима монитора (руководство по сборке)
- NVIDIA AGX для выгрузки на более крупную модель через Tailscale
Производительность GPU
Весь инференс через OpenCL на GPU Adreno 650:
| Модель | Квантование | Скорость промпта | Скорость генерации |
|---|---|---|---|
| LFM2.5-1.2B-Instruct-Heretic (продакшн) | Q8_0 | 115 ток/с | 13 ток/с |
| Qwen3.5-0.8B | Q8_0 | 30,5 ток/с | 6,3 ток/с |
| Qwen3.5-4B | Q4_0 | 10,1 ток/с | 2,0 ток/с |
Примечание: Android ограничивает GPU при питании от батареи (замедление в 6 раз). Nightcrawler включает демон управления GPU, который принудительно задаёт максимальную производительность и автоматически снижает её при заряде ≤15%.
Быстрый старт
# 1. Установка (внутри chroot Kali NetHunter)
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. Откройте веб-панель (с любого устройства в вашей сети 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" # Идентификатор вашего задания
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 # API-клиент LLM (llama.cpp / удалённый)
│ ├── db.py # Бэкенд SQLite (хосты, уязвимости, учётные данные)
│ ├── host_memory.py # Наблюдения по хостам + автотегирование
│ ├── cve_db.py # База CVE на 24 956 записей
│ ├── attack_planner.py # Стратегические директивы для фазы эксплуатации
│ ├── output_parser.py # Извлечение структурированных данных из вывода инструментов
│ ├── offline_manager.py # Конечный автомат конвейера взлома WiFi
│ ├── net_detect.py # Автоопределение сети из wlan0
│ ├── cover_traffic.py # Стелс-смешивание с реалистичным веб-трафиком
│ ├── passive_capture.py # Фоновый tcpdump для широковещательного трафика
│ └── ...
│
├── proxy/ # Компоненты ограничения области
│ ├── scope.py # Проверка IP/портов/хостов
│ ├── rate_limiter.py # Ограничение частоты команд + джиттер
│ └── command_filter.py # Блок-лист разрушительных команд
│
├── webui/ # Веб-панель (Flask)
│ ├── server.py # API + стелс-промежуточное ПО
│ └── templates/index.html # Интерфейс панели
│
├── 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,2 млрд параметров имеет ~50% успешность выполнения команд (присуще её размеру). Агент компенсирует это:
- Обнаружением мусорных данных — сброс после 5 повторов с разнообразными примерами few-shot
- Обнаружением дубликатов — принудительное разнообразие инструментов/целей
- Обнаружением зависаний по времени — 5-минутный предохранитель принудительно сбрасывает контекст
- Прямым выполнением плейбуков — многошаговые атаки полностью обходят LLM
Веб-панель
Панель на :8888 обеспечивает мониторинг и управление в реальном времени:
- Живая лента — каждая команда, находка и решение агента
- Карточки хостов — кликабельные карточки с портами, сервисами, уязвимостями
- Карта сети — интерактивный граф с силовым направлением (перетаскивание, масштабирование, панорамирование)
- Детали уязвимостей — теги CVE, цепочки эксплуатации, шаги по устранению
- Элементы управления C2 — избранные/чёрные списки хостов, принудительная фаза, пауза/возобновление, внедрение команд
- Офлайн-режим — интерфейс WiFi-атак в стиле Pwnagotchi с анимированным лицом
Панель фильтруется по стелс-принципу: она подделывает заголовки nginx и возвращает пустые 404 для подключений из целевой сети.
Проверенные результаты
По итогам 72+ часов автономной работы в нескольких сетях:
- 30+ хостов обнаружено в каждой сети
- 2000+ команд выполнено автономно
- 10+ уязвимостей найдено в различных сервисах
- 6+ плейбуков выполнено через прямое исполнение
- Память агента стабильна на уровне 35–50 МБ на протяжении всей работы (без утечек)
Участие в разработке
Вклад приветствуется! См. 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.
Поддержка
Если вам нравится этот проект, вы можете угостить меня кофе ☕:
