Nightcrawler v0.1.0 – 스마트폰용 로컬 AI 펜테스팅 에이전트

개요

Nightcrawler v0.1.0는 전체 침투 테스트 워크플로우를 스마트폰에서 로컬 AI 모델로 자율적으로 수행할 수 있음을 보여줍니다. 이를 통해 클라우드 API나 인터넷 연결이 필요하지 않습니다.

Nightcrawler 작동 방식

에이전트는 루프를 돌면서 다음과 같이 동작합니다: 대상 호스트를 선택하고, 과거 관찰에서 컨텍스트를 구축한 뒤, 1.2 B 파라미터 LLM에 다음 행동을 질의합니다. 제안된 명령은 스코프‑강제 프록시를 통해 검증되고, Kali MCP 서버를 통해 실행됩니다. 출력은 파싱되어 호스트 메모리를 업데이트하고, 이 과정을 반복합니다.

아키텍처

Nightcrawler는 OnePlus 8에 Kali NetHunter를 설치해 실행됩니다; LFM2.5‑1.2B‑Instruct‑Heretic 모델은 llama.cpp가 OpenCL을 이용해 Adreno 650 GPU에서 8080 포트로 제공됩니다. 에이전트 루프(main.py)는 모든 명령을 검증하는 스코프 프록시와 통신하고, 실제 도구(nmap, curl, smbclient 등)를 실행하는 Kali MCP 서버에 전달합니다. 8888 포트의 웹 대시보드는 실시간 모니터링 및 제어를 제공하며, SQLite 데이터베이스에 호스트, 취약점, 자격 증명 및 실행된 명령이 저장됩니다.

주요 기능

  • 테스트 중 인간 개입 없이 완전 자율 운영.
  • 100% 로컬 추론; AI 모델이 전화기의 GPU에서 실행됩니다.
  • 두 단계 스코프 강제(스코프 프록시와 명령 필터)로 범위 외 또는 파괴적인 행동을 방지.
  • 스텔스‑우선 스캔: 느린 속도, 호스트 회전, 커버 트래픽, nmap -T2만 사용.
  • 직접 실행 가능한 27개의 다단계 익스플로잇 플레이북 포함.
  • 버전 인식 취약점 매칭을 위한 24,956개의 엔트리를 가진 로컬 CVE 데이터베이스 포함.
  • 실시간 피드, 호스트 카드, 네트워크 맵, 취약점 상세 정보 및 C2 제어를 제공하는 웹 대시보드 제공.
  • 외부 USB 어댑터를 이용한 자동 WPA2 크래킹을 위한 WiFi 침해 모드 지원.
  • mDNS/NBNS/DHCP/ARP 브로드캐스트의 수동 탐지 수행.
  • 네트워크별 데이터 격리 및 MAC 기반 호스트 레코드로 DHCP 변경에도 지속.
  • 자체 복구 메커니즘 구현: 쓰레기 감지, 중복 감지, 시간 기반 정체 감지, 워치독. -ogs.
  • 향후 모델 파인‑튜닝을 위한 성공적인 상호작용 로그 기록.
  • 발견 사항, 익스플로잇 체인 및 대응 방안을 포함한 다운로드 가능한 펜테스트 보고서 생성.

하드웨어 요구 사항

  • 필수: Kali NetHunter가 설치된 Android 폰 (계속)
  • 성공적인 상호작용으로부터 학습 데이터를 캡처하여 모델 파인‑튜닝에 활용 가능.
  • 취약점, 익스플로잇 체인 및 대응 단계 요약 보고서를 구조화된 형태로 생성.

성능 지표

OnePlus 8의 Adreno 650 GPU에서 OpenCL을 사용할 때:

  • LFM2.5‑1.2B‑Instruct‑Heretic (Q8_0)는 초당 약 115 프롬프트 토큰 및 약 13 생성 토큰을 달성합니다.
  • 배터리 사용 시 GPU 거버너 데몬이 최대 성능을 강제하고, 배터리가 15% 이하가 되면 약 6배 느려지는 것을 방지하기 위해 스로틀링합니다. 자율 테스트 중 에이전트는 다음을 입증했습니다:
  • 네트워크당 30개 이상의 호스트 발견.
  • 2,000개 이상의 명령 실행.
  • 서비스당 10개 이상의 취약점 식별.
  • 직접 실행을 통한 6개 이상의 익스플로잇 플레이북 실행.
  • 메모리 누수 없이 35‑50 MB의 안정적인 메모리 사용.

사용 및 배포

  1. 지원되는 Android 기기(OnePlus 8 테스트)에서 Kali NetHunter를 설치하고 Magisk를 통해 루트 권한을 얻습니다.
  2. 최소 12 GB RAM이 사용 가능하도록 합니다.
  3. NetHunter chroot 내부에서 bash INSTALL.sh를 실행합니다.
  4. llama‑server 상태 엔드포인트(curl -s http://127.0.0.1:8080/health)가 {"status":"ok"}를 반환할 때까지 기다립니다.
  5. bash scripts/run-36h.sh로 모든 서비스를 시작합니다.
  6. Tailscale 네트워크에 연결된 어느 장치에서든 https://<your-tailscale-hostname>:8888로 웹 대시보드에 접근합니다. 실제 네트워크 명령을 실행하지 않고 에이전트 루프를 테스트하려면 NC_DRY_RUN=1 python3 main.py로 드라이‑런 모드를 사용할 수 있습니다.

법적 및 윤리적 고려 사항

Nightcrawler는 오직 허가된 침투 테스트를 위해 설계되었습니다. 배포 전에 네트워크 소유자의 서면 허가(Engagement Rules)가 필요합니다. 소유권이 없거나 허가받지 않은 네트워크에 대한 무단 사용은 불법입니다.

커뮤니티 피드백

"실패했을 때 50%는 어떻게 보이나요? 파서가 버리는 쓰레기는 처리하기 쉽지만, 잘못된 호스트를 향한 정상적인 명령이 스코프 검사를 통과하면 보고서를 읽을 때만 알 수 있습니다." — @haeseong

"다음 rant는 소유자/프로젝트에 대한 비난이 아니라… 아이러니하네요. 저는 완전히 결정론적이고 정말 제어 가능한 공격 표면 매핑/펜테스팅 도구를 만들었지만 'dual use' 법적 문제 때문에 공개할 수 없고, llm 기반 도구는 공개 공간에 나타납니다…" — @voodooEntity

"AI가 야생에서 네트워크/디바이스를 공격할 수도 있다는 점을 완전히 잊고 있었습니다. 흥미로운 프로젝트네요." — @kreidema

"왜 전화인가요? 많은 전화기를 배제합니다. 컴퓨터에서는 왜 안 되나요?" — @oquidave

"저는 Nightcrawler를 만들었습니다. 완전 오픈소스 자율 침투 테스트 에이전트로 Android 폰에서 전부 실행됩니다. 이 프로젝트는 다음 질문에서 시작되었습니다: 비교적 오래된 모바일 하드웨어에서 클라우드 모델이나 API에 의존하지 않고 실제 펜테스팅 워크플로우를 얼마나 로컬에서 실행할 수 있을까? Nightcrawler는 OnePlus 8의 Adreno GPU에서 1.2B 파라미터 모델을 로컬로 실행합니다. 모델은 대상과 도구를 선택하고, 별도의 스코프‑강제 프록시가 실행 전 모든 명령을 검증합니다. 시스템은 SQLite에 호스트별 메모리를 유지하고, 대상 간 회전, 로컬 CVE 데이터베이스와 버전 매칭, 다단계 플레이북 실행, 구조화된 보고서 생성을 수행합니다. 몇 가지 흥미로운 구현 세부사항: 로컬 추론은 초당 약 115 프롬프트 토큰 및 13 생성 토큰 속도입니다. 작은 모델은 약 50%의 경우에만 사용 가능한 명령을 생성하므로 복구 로직, 중복 감지, 지속 메모리, 결정론적 플레이북이 핵심입니다. 모든 명령은 모델이 스코프를 유지한다는 신뢰 대신 별도의 스코프 및 안전 레이어를 통과합니다. 프로젝트에는 드라이‑런 모드가 포함되어 있어 실제 네트워크 명령이나 폰 하드웨어 없이 에이전트 루프를 테스트할 수 있습니다. 저는 지난 3개월 동안 집 네트워크에서 중단 없이 실행하고 있습니다" — @NickySlicks (author)

"이것이 아이폰에서도 작동하나요?" — @imranshah10140

"Judas Priest 레퍼런스?" — @aaa_aaa

"조금 unrelated하지만, IG 영상을 보고 앱의 비주얼 디자인이 정말 멋지다고 생각했어요! 스타일에 영감을 준 것이 뭐였나요?" — @baddash

"흥미롭네요. 현재 제 폰은 Asus ROG Phone 3인데 (Snapdragon 865+ + 12GB RAM) 루팅되지 않았습니다. Android 12에서도 이 폰은 제가 필요로 하는 모든 것을 커버하고 있어 교체할 생각이 없어요. 하지만 이것이 ROM을 최신 버전으로 업그레이드하게 할 최종 동기가 될 수도 있겠네요. crDroid 16.0이 이 ROG 변형을 아직 지원한다는 걸 봤어요. Nethunter Rootless 혹은 Magisk 지원 w/root imperative와 함께 작동할까요?" — @vctrnk

Sources