
휴대폰에서 실행되는 로컬 AI 기반 레드팀 도구
스마트폰에서 완전히 실행되는 자율 침투 테스트 에이전트입니다. 네트워크에 폰을 놓아두고 떠나면, 호스트를 발견하고 서비스를 매핑하며 취약점을 찾고 침투 테스트 보고서를 생성합니다 — 클라우드 연결 없이 말이죠.
░█▄░█ █ █▀▀ █░█ ▀█▀ █▀▀ █▀█ ▄▀█ █░█░█ █░░ █▀▀ █▀█
░█░▀█ █ █▄█ █▀█ ░█░ █▄▄ █▀▄ █▀█ ▀▄▀▄▀ █▄▄ ██▄ █▀▄ 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가 필요 없습니다.
▶️ 인스타그램에서 Nightcrawler 작동 영상 보기
이 에이전트는 인내심 있는 인간 침투 테스터처럼 작동합니다 — 호스트를 순회하며, 턴마다 작은 작업 하나를 수행하고, 수시간에 걸쳐 점진적으로 지식을 쌓습니다. 이는 모든 호스트를 한 번에 공격하는 기존 취약점 스캐너보다 훨씬 탐지하기 어렵게 만듭니다.
┌──────────────────────────────────────────────────────────┐
│ 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를 참조하세요.
모든 추론은 Adreno 650 GPU에서 OpenCL을 통해 실행됩니다:
참고: Android는 배터리 전원에서 GPU를 제한합니다(6배 느려짐). Nightcrawler에는 최대 성능을 강제하고 배터리가 ≤15%일 때 자동으로 제한하는 GPU 거버너 데몬이 포함되어 있습니다.
# 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. 웹 대시보드 열기 (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" # Your engagement ID
scope:
networks: ["auto"] # "auto" = detect from wlan0 at startup
excluded_hosts: ["auto"] # "auto" = gateway + self IP
excluded_ports: [502, 503] # SCADA/ICS ports to never touch
authorization: "ROE-YYYY-XXX.pdf"
max_runtime_hours: 0 # 0 = no limit
model:
local:
ctx_size: 8192
port: 8080
동적 범위 감지는 네트워크 간 이동 시 설정 변경이 필요 없음을 의미합니다 — 에이전트는 시작 시 wlan0에서 현재 서브넷을 읽습니다.
nightcrawler/
├── main.py # Entry point
├── config.yaml # Mission scope + model config
├── scope_proxy.py # Scope enforcement proxy
├── INSTALL.sh # Installer
│
├── agent/ # Core agent logic
│ ├── loop.py # Decision loop + error recovery
│ ├── planner.py # Phase state machine (recon → exploit)
│ ├── llm_client.py # LLM API client (llama.cpp / remote)
│ ├── db.py # SQLite backend (hosts, vulns, creds)
│ ├── host_memory.py # Per-host observations + auto-tagging
│ ├── cve_db.py # 24,956-entry CVE database
│ ├── attack_planner.py # Strategic directives for exploit phase
│ ├── output_parser.py # Extract structured data from tool output
│ ├── offline_manager.py # WiFi breach pipeline state machine
│ ├── net_detect.py # Auto-detect network from wlan0
│ ├── cover_traffic.py # Stealth blending with realistic web traffic
│ ├── passive_capture.py # Background tcpdump for broadcast traffic
│ └── ...
│
├── proxy/ # Scope enforcement components
│ ├── scope.py # IP/port/host validation
│ ├── rate_limiter.py # Command rate limiting + jitter
│ └── command_filter.py # Destructive command blocklist
│
├── webui/ # Web dashboard (Flask)
│ ├── server.py # API + stealth middleware
│ └── templates/index.html # Dashboard UI
│
├── data/ # Static data files
│ ├── cve_exploits.json # CVE→exploit command mappings
│ └── playbooks.json # 27 multi-step attack playbooks
│
├── prompts/ # LLM prompt templates (hot-reloadable)
├── scripts/ # Operational scripts (start, stop, watchdogs)
├── tests/ # Test suites (API, UI, offline mode)
├── kernels/ # WiFi driver modules + kernel docs
├── simulation/ # Dry-run mock server
├── docs/ # Architecture, GPU setup, features
├── logs/ # Runtime data (gitignored)
└── models/ # Model files (gitignored)
에이전트는 간단하지만 효과적인 루프를 사용합니다:
REASONING: ... COMMAND: ... 생성1.2B 모델은 약 50%의 명령 성공률을 가집니다(크기 고유의 특성). 에이전트는 다음으로 이를 보완합니다:
:8888의 대시보드는 실시간 모니터링과 제어를 제공합니다:
대시보드는 스텔스 필터링됩니다: nginx 헤더를 스푸핑하고 대상 네트워크의 연결에 빈 404를 반환합니다.
여러 네트워크에서 72시간 이상의 자율 작동 결과:
기여를 환영합니다! 지침은 CONTRIBUTING.md를 참조하세요.
# Clone the repo
git clone https://github.com/garagehq/nightcrawler.git
cd nightcrawler
# Dry-run mode (no real commands, no hardware needed)
NC_DRY_RUN=1 python3 main.py
# Run tests
python3 -m pytest tests/
이 도구는 승인된 침투 테스트 전용입니다. Nightcrawler를 배포하기 전에 네트워크 소유자의 서면 허가(교전 규칙)가 있어야 합니다. 소유하지 않았거나 테스트 허가가 없는 네트워크에 대한 무단 사용은 불법입니다.
MIT — 자세한 내용은 LICENSE를 참조하세요.
이 프로젝트가 마음에 드신다면 커피 한 잔을 사주실 수 있습니다 ☕:
| 용어 | 의미 |
|---|
| 드롭 박스(Drop box) | 테스트를 자율적으로 수행하기 위해 대상 네트워크에 남겨진 장치 |
| 범위(Scope) | 테스트가 승인된 네트워크/호스트의 집합 |
| 교전 규칙(ROE) | 수행 가능한 작업을 명시하는 법적 문서 |
| 스텔스(Stealth) | 네트워크 모니터링(IDS/IPS) 탐지를 피하는 기술 |
| MCP | Model Context Protocol — AI 도구 사용을 위한 표준 인터페이스 |
| C2 | Command and Control — 에이전트를 모니터링하고 제어하는 웹 대시보드 |
| 모델 | 양자화 | 프롬프트 속도 | 생성 속도 |
|---|
| 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 |