
स्थानीय रूप से होस्ट किया गया, एयर-गैप्ड VAPT प्लेटफ़ॉर्म जो 8 समानांतर स्कैनिंग मॉड्यूल चलाता है, CVSS v3.1 के साथ निष्कर्षों को नियतात्मक रूप से स्कोर करता है, और स्थानीय LLM के माध्यम से वैकल्पिक AI-जनित रिमेडिएशन के साथ PDF रिपोर्ट तैयार करता है।
maverickaayush द्वारा निर्मित।
एक स्थानीय रूप से होस्ट किया गया, air-gapped VAPT टूल: इसे किसी अधिकृत लक्ष्य डोमेन पर लक्षित करें और यह 8 स्कैनिंग मॉड्यूल समानांतर रूप से चलाता है, हर निष्कर्ष को नियतात्मक रूप से स्कोर करता है (CVSS v3.1), वैकल्पिक रूप से स्थानीय LLM के माध्यम से AI-जनित सरल अंग्रेज़ी विवरण जोड़ता है, और एक PDF रिपोर्ट तथा एक लाइव वेब डैशबोर्ड तैयार करता है। कोई बाहरी API कॉल नहीं - सब कुछ आपके अपने नेटवर्क पर चलता है।
ONUS चलाने के दो तरीके:
- स्व-होस्टेड (यह रिपॉज़िटरी):
docker compose up→ एक डोमेन दर्ज करें → प्राधिकरण बॉक्स पर टिक करें → स्कैन करें। कोई खाता नहीं, कोई साइन-इन नहीं, कोई ईमेल सत्यापन नहीं - यह डिज़ाइन से single-operator है, और नीचे दी गई सभी जानकारी इसी मार्ग को कवर करती है।- होस्टेड: एक प्रबंधित इंस्टेंस tryonus.tech पर लाइव है। यह केवल प्रोडक्शन-विशिष्ट सुविधाएँ (खाते / 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
छह परतें: 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, worker और फ्रंटएंड इसके साथ चलते हैं।ऊपर दी गई पूर्वापेक्षाएँ देखें: ~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 डिफ़ॉल्ट रूप से single-operator है - डैशबोर्ड खोलने और स्कैन करने के बीच कोई खाता चरण नहीं है।
यह बिना किसी 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 केवल मुफ्त/सार्वजनिक स्रोतों के साथ चलता है। सबडोमेन एन्यूमरेशन को गहरा करने के लिए, आप शुरू करने से पहले उस फ़ाइल में दो मुफ्त-स्तरीय कुंजियाँ जोड़ सकते हैं: एक GitHub personal access token और एक 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
curl http://localhost:11434/api/tagsdocker compose restart backend workerकंपोज़ फ़ाइल 12 जानबूझकर-संवेदनशील अभ्यास ऐप्स (Juice Shop, DVWA, bWAPP, Mutillidae, NodeGoat, ModSecurity WAF के पीछे DVWP/WordPress, Metasploitable2, WebGoat) भी परिभाषित करती है, ताकि आप अपने स्वयं के अधिकृत लक्ष्य की आवश्यकता के बिना स्कैनर को आज़मा सकें। वे एक Compose प्रोफ़ाइल के पीछे गेट किए गए हैं, इसलिए वे डिफ़ॉल्ट रूप से कभी बिल्ड/स्टार्ट नहीं होते:
docker compose --profile targets up -d
चेतावनी: ये जानबूझकर-संवेदनशील, कुछ वास्तव में backdoored, सेवाएँ हैं (Metasploitable2 एक लाइव vsftpd बैकडोर के साथ आता है)। targets प्रोफ़ाइल केवल उस मशीन पर चलाएँ जो इंटरनेट या साझा नेटवर्क से पहुँच योग्य नहीं है - कभी भी सार्वजनिक क्लाउड इंस्टेंस या खुले होस्ट पर नहीं।
इनमें से अधिकांश पूर्व-निर्मित इमेज से चलते हैं और उन्हें किसी अतिरिक्त चीज़ की आवश्यकता नहीं होती। दो - nodegoat और dvwp-wordpress - ऐसे स्रोत से बिल्ड होते हैं जो इस रिपॉज़िटरी में vendored नहीं है और उन्हें पहले क्लोन किया जाना चाहिए:
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 से पहुँच योग्य), क्योंकि यह वास्तविक backdoored/unauthenticated नेटवर्क सेवाएँ उजागर करता है।
Env वेरिएबल, .env के माध्यम से सेट (.env.example से कॉपी किए गए):
ऊपर दिए गए POSTGRES_PASSWORD/SECRET_KEY डिफ़ॉल्ट केवल प्रदर्शन-उद्देश्य हैं - वे स्थानीय/व्यक्तिगत इंस्टेंस के लिए ठीक हैं, लेकिन किसी और के लिए पहुँच योग्य कहीं भी तैनात करने से पहले दोनों बदलें। यह अब लागू किया गया है, केवल सलाह नहीं: ONUS_ENV=production सेट करें (या होस्टेड प्रमाणीकरण चालू करें) और जब तक इनमें से कोई भी डिफ़ॉल्ट/प्लेसहोल्डर है, बैकएंड शुरू करने से इनकार कर देता है। मज़बूत कुंजी उत्पन्न करें: python -c "import secrets; print(secrets.token_urlsafe(48))"।
होस्टेड-केवल सुविधाएँ डिफ़ॉल्ट रूप से बंद हैं। REQUIRE_AUTH (खाते / OAuth साइन-इन) और HOSTED_QUEUE_ENABLED (स्कैन कतार) दोनों डिफ़ॉल्ट रूप से false हैं और docker-compose.yml में सेट नहीं हैं, इसलिए स्व-होस्टेड ONUS आपको कभी भी लॉगिन या कतार के पीछे नहीं रोकता। जब तक आप जानबूझकर एक बहु-उपयोगकर्ता होस्टेड तैनाती नहीं बना रहे हैं, उन्हें बंद रखें - प्रबंधित tryonus.tech इंस्टेंस वह है जो उन्हें चालू करता है।
ONUS में डिफ़ॉल्ट रूप से कोई एनालिटिक्स नहीं है - कुछ भी लोड नहीं होता और कोई डेटा ब्राउज़र से बाहर नहीं जाता। अपनी तैनाती पर गुमनाम उत्पाद-उपयोग मेट्रिक्स एकत्र करने के लिए, एक Google Analytics 4 Measurement ID सेट करें:
NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX
यह एक फ्रंटएंड build-time वेरिएबल है, इसलिए इसे फ्रंटएंड बिल्ड वातावरण में सेट करें (एक Vercel/होस्ट env वेरिएबल, या स्थानीय npm run build के लिए frontend/.env.local)। सेट होने पर, GA केवल प्रोडक्शन बिल्ड्स में लोड होता है और पेज व्यू के साथ-साथ कुछ उत्पाद ईवेंट ट्रैक करता है (जैसे scan_started, scan_completed, report_downloaded)। कस्टम ईवेंट frontend/lib/analytics.ts में टाइप किए गए हेल्पर से गुजरते हैं - trackEvent('scan_started')।
गोपनीयता: केवल गुमनाम, निम्न-कार्डिनैलिटी उपयोग ईवेंट भेजे जाते हैं - कभी भी स्कैन किए गए डोमेन, स्कैन परिणाम, निष्कर्ष, रिपोर्ट सामग्री, प्राधिकरण स्थिति, या कोई व्यक्तिगत डेटा नहीं। NEXT_PUBLIC_GA_ID को अनसेट छोड़ दें और ONUS बिल्कुल पहले जैसा व्यवहार करता है; एनालिटिक्स पूरी तरह से opt-in है।
FastAPI इंटरैक्टिव Swagger दस्तावेज़ मुफ्त में उत्पन्न करता है - एक बार बैकएंड चलने पर, http://localhost:8000/docs खोलें।
docker compose down
docker compose logs -f backend worker
pip install -r backend/requirements-dev.txt
pytest backend/tests
इस लेखन के समय 655 स्वचालित बैकएंड परीक्षण। यूनिट/इंटीग्रेशन सूट के अलावा, विकास के दौरान टूल का अंत-से-अंत परीक्षण किया गया है: नौ जानबूझकर-संवेदनशील अभ्यास अनुप्रयोगों (DVWA, Juice Shop, Mutillidae, NodeGoat, bWAPP, WebGoat, Metasploitable2, WAF के पीछे DVWP/WordPress) के साथ-साथ एक अधिकृत सार्वजनिक लक्ष्य (testphp.vulnweb.com) के विरुद्ध 79 वास्तविक स्कैन निष्पादित किए गए और 124 PDF रिपोर्ट उत्पन्न की गईं - ये काल्पनिक संख्याएँ नहीं हैं। केवल उन्हीं लक्ष्यों को स्कैन करें जिन्हें आप स्पष्ट रूप से परीक्षण करने के लिए अधिकृत हैं - विकास के दौरान उपयोग किए गए अभ्यास लक्ष्यों के लिए docs/test_findings.md देखें।
ARCHITECTURE.md - पूर्ण आर्किटेक्चर, स्कीमा, और वे अनुबंध जिन्हें कोई परिवर्तन कभी नहीं तोड़ना चाहिए। कोई भी गैर-तुच्छ परिवर्तन करने से पहले इसे पढ़ें।docs/QUICK_REF.md - कमांड चलाएँ, फ़ोल्डर ज़िम्मेदारियाँ, "यह परिवर्तन मुझे कहाँ करना है।"docs/scanners.md - प्रत्येक स्कैनिंग मॉड्यूल के टाइमिंग/फ़्लैग डिज़ाइन के पीछे का तर्क।docs/ai.md - Ollama टाइमआउट/कॉन्टेक्स्ट ट्यूनिंग, स्कोरिंग पूरी तरह से LLM से क्यों हटाई गई।docs/docker.md - Docker विचलन नोट और बिल्ड समस्याएँ।docs/troubleshooting.md - किसी भी मॉड्यूल/चरण को अलगाव में मैन्युअल रूप से कैसे परीक्षण करें।docs/roadmap.md - ऐतिहासिक बिल्ड अनुक्रम (बिल्ड पूर्ण है)।CONTRIBUTING.md - डेव सेटअप, परीक्षण, PR अपेक्षाएँ।MIT - LICENSE देखें।
स्पष्ट लिखित प्राधिकरण के बिना लक्ष्यों को स्कैन करना IT Act 2000 (भारत) और समकक्ष अंतर्राष्ट्रीय क़ानूनों के तहत अवैध है। यह टूल प्रत्येक स्कैन पर प्राधिकरण पुष्टि की आवश्यकता देता है और जवाबदेही के लिए ऑपरेटर + टाइमस्टैम्प लॉग करता है।
| स्व-होस्टेड (यह रिपॉज़िटरी) | होस्टेड (tryonus.tech) |
|---|
| सेटअप | docker compose up | कोई नहीं - बस साइट खोलें |
| साइन-इन | कोई नहीं - single operator | खाता / Google / GitHub OAuth |
| स्कैन प्रवाह | डोमेन → प्राधिकरण बॉक्स → स्कैन | वही, साइन-इन के बाद |
| अतिरिक्त | - | स्कैन कतार, प्रति-उपयोगकर्ता इतिहास, होस्टेड ईमेल |
| चलता है | आपके अपने नेटवर्क पर, air-gapped | प्रबंधित क्लाउड |
| वेरिएबल | डिफ़ॉल्ट | उद्देश्य |
|---|
POSTGRES_PASSWORD | vapt_secure_2025 | डेटाबेस पासवर्ड |
SECRET_KEY | change_me_to_a_long_random_string | बैकएंड गुप्त कुंजी |
ALLOWED_HOSTS | localhost,127.0.0.1 | FastAPI अनुमत होस्ट |
OLLAMA_URL | http://host.docker.internal:11434 | backend/worker Ollama तक कहाँ पहुँचते हैं |
SCAN_TIMEOUT_MULTIPLIER | 1.5 | प्रत्येक मॉड्यूल के टूल/Celery टाइमआउट को स्केल करता है - वास्तविक दुनिया के लक्ष्य प्रयोगशाला लक्ष्यों से धीमे होते हैं; प्रयोगशाला-ट्यून टाइमिंग के लिए 1.0 पर लाएँ |
MAX_CONCURRENT_SCANS | 3 | समवर्ती-स्कैन सीमा (संसाधन-क्षरण / लक्ष्य-शिष्टाचार रक्षक, DB कनेक्शन पूल को भी आकार देता है) |
ONUS_ENV | development | development (स्व-होस्टेड localhost — कमज़ोर सीक्रेट केवल चेतावनी देते हैं) या production (कमज़ोर SECRET_KEY/Postgres पासवर्ड कठोर बूट विफलता बन जाता है) |