
로컬 호스팅, 에어갭(air-gapped) 환경의 VAPT 플랫폼으로, 8개의 병렬 스캐닝 모듈을 실행하고, 발견 항목을 CVSS v3.1로 결정론적으로 점수화하며, 로컬 LLM을 통한 선택적 AI 생성 해결 방안과 함께 PDF 보고서를 생성합니다.
maverickaayush가 제작했습니다.
로컬 호스팅, 에어갭(air-gapped) 방식의 VAPT 도구: 승인된 대상 도메인을 지정하면 8개의 스캐닝 모듈을 병렬로 실행하고, 모든 발견 항목을 결정론적으로(CVSS v3.1) 점수화하며, 로컬 LLM을 통해 선택적으로 AI 생성 평이한 영어 설명을 추가하고, PDF 보고서와 실시간 웹 대시보드를 생성합니다. 외부 API 호출 없음 - 모든 것이 자체 네트워크에서 실행됩니다.
ONUS 실행 방법은 두 가지입니다:
- 자체 호스팅(이 저장소):
docker compose up→ 도메인 입력 → 인증 확인란 체크 → 스캔. 계정, 로그인, 이메일 인증 불필요 - 설계상 단일 운영자용이며, 아래의 모든 내용은 이 경로를 기준으로 합니다.- 호스팅: 관리형 인스턴스가 **tryonus.tech**에서 운영 중입니다. 계정/OAuth 로그인, 스캔 큐, 사용자별 기록과 같은 프로덕션 전용 기능을 추가로 제공하며, 이러한 기능은 이 저장소에서 기본적으로 꺼져 있어 자체 호스팅이 단순하게 유지됩니다. 자체 호스팅 vs 호스팅을 참조하세요.
| 자체 호스팅(이 저장소) | 호스팅(tryonus.tech) | |
|---|---|---|
| 설정 | docker compose up | 없음 - 사이트만 열면 됨 |
| 로그인 | 없음 - 단일 운영자 | 계정 / Google / GitHub OAuth |
| 스캔 흐름 | 도메인 → 인증 확인란 → 스캔 | 로그인 후 동일 |
| 추가 기능 | - | 스캔 큐, 사용자별 기록, 호스팅 이메일 |
| 실행 환경 | 자체 네트워크, 에어갭 | 관리형 클라우드 |
자체 호스팅 기본 경로는 의도적으로 단순하게 설계되었습니다: 가입 없음, 이메일 인증 없음, OAuth 없음. 호스팅 전용 기능(인증, 스캔 큐)은 기본적으로 꺼진 구성 플래그(REQUIRE_AUTH=false, HOSTED_QUEUE_ENABLED=false; 구성 참조) 뒤에 있으며 docker-compose.yml에는 설정되어 있지 않으므로 ONUS를 로컬에서 실행할 때 로그인을 요구하지 않습니다. 설정이 전혀 필요 없으신가요? **tryonus.tech**의 호스팅 사이트를 사용하세요.
| 새 스캔 | 실시간 스캔 상태 |
|---|---|
![]() | ![]() |
| 보고서 대시보드 | 스캔 탐색 |
|---|---|
![]() | ![]() |
domain → [recon | webscan | ssl_tls | headers | owasp | tech_fingerprint | nuclei | enumeration] (parallel, Celery)
→ any module failed/timed out? → pause for operator retry/continue/cancel
→ aggregator (dedup + OWASP-map + sort)
→ confidence verification (passive re-observation)
→ deterministic CVSS scoring
→ Ollama (Qwen 2.5 7B) AI analysis
→ WeasyPrint PDF + PostgreSQL
→ dashboard / PDF download
6개 계층: Next.js 프론트엔드 → FastAPI → Celery/Redis → 8개의 병렬 스캐닝 모듈 → Ollama (Qwen 2.5 7B) → WeasyPrint PDF + 대시보드. 전체 세부 사항은 ARCHITECTURE.md(스키마, 계약, 가드레일)와 docs/QUICK_REF.md(일반적인 변경 사항 빠른 조회)에서 확인할 수 있습니다.
mem_limit: 4g), Postgres, Redis, API, 워커, 프론트엔드가 그와 함께 실행됩니다.위의 사전 요구 사항을 확인하세요: 약 8GB 디스크와 약 6GB RAM이 필요하며, 첫 빌드는 10-15분이 소요됩니다.
cp .env.example .env
cp backend/subfinder-config/provider-config.yaml.example backend/subfinder-config/provider-config.yaml
docker compose up -d
docker compose ps # wait for zap to report healthy (~2 min)
**http://localhost:3000**을 열고 도메인을 입력한 뒤 인증 확인란을 체크하고 스캔을 시작하세요.
로그인, 가입, 이메일 인증이 없습니다. 자체 호스팅 ONUS는 기본적으로 단일 운영자용입니다 - 대시보드를 열고 스캔하는 사이에 계정 단계가 없습니다.
Ollama 설치 없이도 작동합니다. CVSS/심각도/우선순위 점수화는 항상 결정론적입니다(analysis/cvss_scorer.py) - Ollama가 실행되지 않으면 발견 항목은 AI 생성 문구 대신 규칙 기반 설명 템플릿이 적용됩니다. 활성화하려면 아래의 "선택 사항: AI 생성 설명 활성화"를 참조하세요.
이 도구를 실행하는 데 API 키가 전혀 필요 없습니다. 이 도구가 감싸는 모든 스캐닝 도구(nmap, ZAP, Nikto, testssl.sh, Nuclei, Amass, Naabu, httpx, WhatWeb, WAFW00F, FFUF)와 Ollama 자체는 키 없이도 완전히 작동합니다. 위의 subfinder 구성 복사 단계가 유일한 선택적 예외입니다 - 빈 템플릿으로 두어도 괜찮으며, subfinder는 무료/공개 소스만 사용하여 실행됩니다. 서브도메인 열거를 강화하려면 시작 전에 해당 파일에 최대 2개의 무료 티어 키를 추가할 수 있습니다: GitHub 개인 액세스 토큰과 ProjectDiscovery Chaos API 키 - provider-config.yaml.example 내부의 주석을 참조하세요.
Ollama는 호스트에서 네이티브로 실행되므로(Docker가 아님) 호스트의 GPU를 직접 사용할 수 있습니다; 컨테이너는 host.docker.internal을 통해 접근합니다.
ollama pull qwen2.5:7b127.0.0.1 전용으로,
Docker의 브리지 네트워크는 접근할 수 없음):
sudo systemctl edit ollama
[Service] 아래에 추가:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
저장한 다음:
sudo systemctl daemon-reload && sudo systemctl restart ollama
참고: 이렇게 하면 Docker뿐만 아니라 로컬 네트워크에서도 Ollama에 접근할 수 있게 됩니다 -
개인 머신에서는 문제없지만, 공유 머신에서는 방화벽 규칙을 추가할 만합니다.curl http://localhost:11434/api/tagsdocker compose restart backend workercompose 파일은 또한 자체 승인 대상 없이 스캐너를 시험해 볼 수 있도록 12개의 의도적으로 취약한 연습용 앱(Juice Shop, DVWA, bWAPP, Mutillidae, NodeGoat, ModSecurity WAF 뒤의 DVWP/WordPress, Metasploitable2, WebGoat)을 정의합니다. 이들은 Compose 프로필 뒤에 게이트되어 있어 기본적으로 빌드/시작되지 않습니다:
docker compose --profile targets up -d
경고: 이들은 의도적으로 취약하며 일부는 실제 백도어가 포함된 서비스입니다 (Metasploitable2는 활성 vsftpd 백도어를 탑재합니다). targets 프로필은 인터넷이나 공유 네트워크에서 접근할 수 없는 머신에서만 실행하세요 - 공개 클라우드 인스턴스나 노출된 호스트에서는 절대 실행하지 마세요.
대부분은 사전 빌드된 이미지로 실행되며 추가로 필요한 것이 없습니다. 두 개(nodegoat와 dvwp-wordpress)는 이 저장소에 포함되지 않은 소스에서 빌드되므로 먼저 클론해야 합니다:
git clone https://github.com/OWASP/NodeGoat nodegoat-src
git clone https://github.com/vavkamil/dvwp dvwp-src
실행 시 게시되는 포트: Juice Shop :3001, DVWA :8081, bWAPP :8083, Mutillidae :8084, NodeGoat :8085, DVWP(WAF, TLS 경유) :8444, WebGoat :8082. Metasploitable2는 실제 백도어/인증 없는 네트워크 서비스를 노출하므로 호스트 포트를 게시하지 않습니다(Docker 내부 네트워크를 통해 backend/worker에서만 접근 가능).
.env(.env.example에서 복사)를 통해 설정하는 환경 변수: