
Локальный ИИ-ассистент для red team на телефоне
Автономный агент для пентеста, который полностью работает на смартфоне. Оставьте телефон в сети, уйдите, и он обнаружит хосты, просканирует сервисы, найдёт уязвимости и сформирует отчёт о пентесте — всё без подключения к облаку.
░█▄░█ █ █▀▀ █░█ ▀█▀ █▀▀ █▀█ ▄▀█ █░█░█ █░░ █▀▀ █▀█
░█░▀█ █ █▄█ █▀█ ░█░ █▄▄ █▀▄ █▀█ ▀▄▀▄▀ █▄▄ ██▄ █▀▄ 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
Агент действует как терпеливый человек-пентестер — он ротируется между хостами, выполняет одно небольшое действие за ход и постепенно накапливает знания в течение часов. Это делает его гораздо более сложным для обнаружения, чем традиционные сканеры уязвимостей, которые «бомбардируют» все хосты одновременно.
┌──────────────────────────────────────────────────────────┐
│ 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.
Полный справочник возможностей см. в docs/FEATURES.md.
Весь инференс через OpenCL на GPU Adreno 650:
Примечание: 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-сервер, чтобы вы могли протестировать цикл агента без выполнения реальных сетевых команд.
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)
Агент использует простой, но эффективный цикл:
REASONING: ... COMMAND: ...Модель на 1,2 млрд параметров имеет ~50% успешность выполнения команд (присуще её размеру). Агент компенсирует это:
Панель на :8888 обеспечивает мониторинг и управление в реальном времени:
Панель фильтруется по стелс-принципу: она подделывает заголовки nginx и возвращает пустые 404 для подключений из целевой сети.
По итогам 72+ часов автономной работы в нескольких сетях:
Вклад приветствуется! См. CONTRIBUTING.md для получения рекомендаций.
# Клонирование репозитория
git clone https://github.com/garagehq/nightcrawler.git
cd nightcrawler
# Пробный режим (без реальных команд, без оборудования)
NC_DRY_RUN=1 python3 main.py
# Запуск тестов
python3 -m pytest tests/
Этот инструмент предназначен только для авторизованного тестирования на проникновение. Вы должны иметь письменное разрешение (Правила взаимодействия) от владельца сети перед развёртыванием Nightcrawler. Несанкционированное использование против сетей, которыми вы не владеете или на тестирование которых у вас нет разрешения, является незаконным.
MIT — подробности см. в LICENSE.
Если вам нравится этот проект, вы можете угостить меня кофе ☕:
| Термин | Что означает |
|---|
| Drop box | Устройство, оставленное в целевой сети для автономного тестирования |
| Scope (Область) | Набор сетей/хостов, которые вам разрешено тестировать |
| Правила взаимодействия (ROE) | Юридический документ, определяющий, что вам разрешено делать |
| Стелс | Методы, позволяющие избежать обнаружения сетевым мониторингом (IDS/IPS) |
| MCP | Model Context Protocol — стандартный интерфейс для использования инструментов ИИ |
| C2 | Command and Control — веб-панель для мониторинга и управления агентом |
| Модель | Квантование | Скорость промпта | Скорость генерации |
|---|
| 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 ток/с |