
Nimbus Vestige — Updated!
क्लाउड और पहचान घटना प्रतिक्रिया के लिए एक फोरेंसिक पुनर्निर्माण इंजन।
Nimbus Vestige (NV)
क्लाउड और पहचान घटना प्रतिक्रिया के लिए एक फोरेंसिक पुनर्निर्माण इंजन।
खंडित क्लाउड, SaaS और पहचान टेलीमेट्री को देखते हुए — कंट्रोल-प्लेन लॉग, साइन-इन इवेंट, टोकन और सहमति गतिविधि — NV पुनर्निर्माण करता है कि एक घुसपैठ सबसे अधिक संभावित रूप से खातों और सेवाओं के बीच कैसे आगे बढ़ी, उन अन्य सबसे-संभावित पथों की गणना करता है जिन्हें वह ले सकती थी, और प्रत्येक चरण को अंशांकित, व्याख्या-योग्य विश्वास के साथ रिपोर्ट करता है। यह उस बात को प्रमाणित करने से इनकार करता है जिसे साक्ष्य समर्थन नहीं दे सकते।
डिटेक्शन आपको बताता है कि कुछ हुआ। Nimbus Vestige आपको बताता है कैसे — और क्या-क्या।
यह क्यों मौजूद है
आधुनिक घुसपैठें "अंदर नहीं घुसतीं।" वे लॉग इन करती हैं। पहचान अब प्राथमिक हमला वाहन है, जो क्लाउड IR जांचों के बड़े बहुमत में शामिल है, और अधिकांश घुसपैठें कई सतहों तक फैली होती हैं — पहचान प्लस क्लाउड प्लस SaaS प्लस एंडपॉइंट। उन्हें रिकॉर्ड करने वाली टेलीमेट्री खंडित और असंगत है, जो पहले से ही प्रतिक्रियाकर्ताओं को अधूरे डेटा से कहानी को हाथ से पुनर्निर्मित करने के लिए मजबूर करती है।
वह मैन्युअल पुनर्निर्माण धीमा है, और यह एक पूर्वानुमानित तरीके से विफल होता है: प्रतिक्रियाकर्ता पहले प्रशंसनीय वर्णन पर अड़ जाता है और वास्तविक वर्णन को चूक जाता है। NV पुनर्निर्माण को स्वचालित करता है और उस विफलता मोड पर सीधे हमला करता है, हमेशा प्रशंसनीय पथों के क्रमबद्ध स्थान को प्रस्तुत करके, न कि एक एकल कहानी।
महत्वपूर्ण बात यह है कि NV यह ईमानदारी को उत्पाद के रूप में करता है। बाजार का घोषित दुश्मन ब्लैक-बॉक्स विश्वास है — एक उपकरण जो बिना अपना काम दिखाए निष्कर्ष प्रस्तुत करता है। NV जो भी संख्या उत्पन्न करता है, वह उस विशिष्ट साक्ष्य से जुड़ी होती है जिसने उसे अर्जित किया, और जो कुछ वह समर्थन नहीं कर सकता, उसे अनुमान लगाने के बजाय रोक दिया जाता है।
यह क्या है — और क्या नहीं
NV नहीं है एक डिटेक्टर, स्कैनर, ऑडिटर, या अटैक-रनर। वे उपकरण आपको बताते हैं कि कुछ हुआ और उसे मापते हैं। NV उल्टे काम करता है — खंडित पहचान परिदृश्य में पैटर्न से तंत्र का अब्डक्टिव पुनर्निर्माण।
- डिटेक्टर नहीं — यह गतिविधि पर अलर्ट नहीं भेजता; यह समझाता है कि गतिविधि एक साथ कैसे फिट होती है।
- SIEM नहीं — यह एक संकीर्ण प्रवेश बिंदु (घटना-पश्चात कथा पुनर्निर्माण) से प्रवेश करता है, लॉग प्लेटफॉर्म के रूप में नहीं।
- नियम इंजन नहीं — जब कुछ भी किसी ज्ञात पैटर्न से मेल नहीं खाता, तब भी यह पुनर्निर्माण करता है, अंधा होने के बजाय शालीनतापूर्वक क्षमता घटाता है।
यह दीर्घकालिक रूप से मान्य क्यों है
-
ब्लू टीम पुनः उत्पन्न होती है; रेड टीम कमोडिटी बन जाती है। आक्रामक टूलिंग छिद्रों का एक सीमित, पैच-योग्य सेट ढूंढती है और स्वचालित CI/CD सुरक्षा पाइपलाइनों में समाहित हो रही है। यह पुनर्निर्माण करना कि घुसपैठ कैसे हुई, कभी समाप्त नहीं होता — हमलावर लगातार नए आविष्कार करते रहते हैं, इसलिए आवश्यकता स्थायी और स्व-नवीकरणीय है।
-
इंजन सब्सट्रेट-स्वतंत्र है। मूल तर्क — पैटर्न से तंत्र का पुनर्निर्माण, अंशांकित विश्वास और एक स्टॉप रेल के साथ — पहले क्लाउड/पहचान के लिए प्रतिबद्ध है, लेकिन बाद में नेटवर्क, एंडपॉइंट और OT पर स्थानांतरित होता है। थीसिस को फिर से लिखे बिना लक्ष्य बदल सकता है।
-
पुनर्निर्माण हार्डनिंग को सक्षम बनाता है। एक बार जब आप जान जाते हैं कि वे अंदर कैसे आए — और कौन से अन्य दरवाजे खुले थे — तो आप सुरक्षा का निर्माण करते हैं। वे पथ जो नहीं लिए गए लेकिन संभावित हैं, हार्डनिंग बैकलॉग होते हैं, जो अक्सर स्वयं पुनर्निर्माण से अधिक मूल्यवान होते हैं, क्योंकि अधिकांश उल्लंघन रोके जा सकने वाले जोखिम का शोषण करते हैं, न कि नवीन तकनीक का।
-
यह नई घुसपैठ पर शालीनतापूर्वक क्षमता घटाता है — वही घटना जो सबसे अधिक मायने रखती है। एक सिग्नेचर/नियम इंजन zero-day पर अंधा हो जाता है; NV का अब्डक्टिव कोर अभी भी एक सबसे-संभावित पथ उत्पन्न करता है, जिसे ईमानदारी से निम्न-विश्वास के रूप में चिह्नित किया जाता है।
-
ईमानदारी एक खाई है। अंशांकित, केस-आधारित विश्वास और क्रमबद्ध विकल्पों के साथ, यह वही है जो बाजार कहता है कि वह चाहता है और जो ब्लैक-बॉक्स प्रतियोगी रीडिज़ाइन के बिना संरचनात्मक रूप से पेश नहीं कर सकते।
आर्किटेक्चर
कच्चे प्रदाता लॉग → सामान्यीकृत इवेंट/एंटिटी ग्राफ → पुनर्निर्माण इंजन → JSON → GUI.``` O365 / Entra audit logs nv_extract_identity_events.py AWS CloudTrail (IAM/STS/S3) nv_extract_cloudtrail_events.py (ingest + normalize) ▼ normalized identity events (JSONL) ← one event model, any substrate │ nv/graph.py (typed per-actor timelines) ▼ reconstruction engine ├─ nv/patterns.py known layer: ATT&CK identity pattern library ├─ nv/providers.py provider packs: per-substrate op→ATT&CK vocab (Entra + AWS) ├─ nv/validation.py Phase 3: provenance + integrity gate on every pattern ├─ nv/feeds.py live ATT&CK STIX / TAXII / Sigma clients + scheduler ├─ nv/confidence.py evidence-corroboration scorer (calibratable weights) ├─ nv/calibration.py fit + measure confidence against labeled ground truth ├─ nv/reconstruct.py most-likely chain + ranked competing paths + trust floor └─ nv/scope.py authorized-scope gate (refuses unauthorized tenants/accounts) │ run_nv.py ▼ reconstruction.json ──► nv_gui.html (embedding canvas + two-column view + trust slider)
GUI एक **शुद्ध दृश्य परत** है — यह इंजन आउटपुट प्रस्तुत करती है और विश्लेषक को विश्वास स्तर बदलने
देती है। इसमें अपना कोई पुनर्निर्माण तर्क नहीं होता।
---
## विश्वास मॉडल (संपूर्ण उत्पाद की विश्वसनीयता)
प्रत्येक चरण [0, 1] में एक विश्वास रखता है, जो **साक्ष्य पुष्टिकरण** द्वारा निर्मित होता है:```
confidence = per-technique base rate
+ bonus for each independent corroborating signal
(source IP, device, successful outcome, temporal adjacency, broad-consent flags)
− penalty for missing signals (e.g. no source IP to corroborate origin)
- सत्यापित — आत्मविश्वास ≥ 0.70 और दो या अधिक स्वतंत्र संकेत सहमत हों।
- केवल-पैटर्न — विश्वास सीमा से ऊपर लेकिन कमज़ोर या एकल रूप से समर्थित।
- रोका गया — विश्वास सीमा से नीचे; धुंधला दिखाया गया, कभी भी चुपचाप अनुमानित या छिपाया नहीं जाता।
पथ स्कोर अपनी कड़ियों को ज्यामितीय माध्य से संयोजित करते हैं, इसलिए एक कमज़ोर कड़ी ईमानदारी से पथ को नीचे खींचती है, न कि औसत में विलीन हो जाती है।
ऊपर दिया गया हर भार — प्रति-तकनीक आधार दरें, प्रति-संकेत बोनस, लापता दंड — एक ही PARAMS तालिका में nv/confidence.py में रहता है। ये NV के v1 पूर्व मान हैं, और वे कैलिब्रेट करने योग्य हैं: nv/calibration.py उन्हें लेबल किए गए ग्राउंड ट्रुथ के विरुद्ध पुनः फिट कर सकता है, और इंजन परिणाम लोड करेगा, जब कोई कैलिब्रेशन न दिया गया हो तो v1 पूर्व मानों पर वापस आ जाएगा (नीचे देखें)।
विश्वास सीमा
रोकने का नियम, इंजन के आउटपुट अनुबंध में अंतर्निहित है — केवल UI में नहीं। सीमा से नीचे, एक चरण रोक दिया जाता है। सीमा को खींचना ईमानदारी-बनाम-कवरेज व्यापार-अप को मूर्त रूप देना है: ऊपर सख्त/उच्च-विश्वास के लिए, नीचे उदार/उच्च-कवरेज के लिए। डिफ़ॉल्ट सीमा एक संपादकीय निर्णय है कि विश्लेषक के छूने से पहले NV कहाँ स्थित है।
ग्राउंड ट्रुथ के विरुद्ध आत्मविश्वास कैलिब्रेट करना
v1 भार बचाव योग्य हैं, लेकिन वे पूर्व मान हैं। nv/calibration.py उन्हें लेबल किए गए ग्राउंड ट्रुथ के विरुद्ध ट्यून करता है — ऐसी घटनाएँ जहाँ हम जानते हैं कि कौन सी घुसपैठ का हिस्सा थीं और कौन सी हानिरहित थीं — और, महत्वपूर्ण रूप से, मापता है कि ट्यूनिंग ने वास्तव में मदद की या नहीं, इसलिए कैलिब्रेशन तभी अपनाया जाता है जब वह कैलिब्रेशन त्रुटि को कम करता है, न कि केवल संख्याओं को इधर-उधर करता है।
कैलिब्रेटेड आत्मविश्वास का एक ही अर्थ है: किसी चरण के लिए NV का आत्मविश्वास उस संभावना के बराबर होना चाहिए कि वह चरण वास्तव में हमले के पथ पर था। इसलिए प्रत्येक लेबल किए गए इवेंट के आत्मविश्वास को एक भविष्यवाणित संभावना के रूप में माना जाता है, और हार्नेस यह फिट करता है:
- प्रति-ऑपरेशन आधार दरें — उस ऑपरेशन के लिए अनुभवजन्य हिट दर, Bayesian रूप से v1 पूर्व मान की ओर संकुचित, जिससे छोटे नमूने ओवरफिट न हों; और
- प्रति-संकेत बोनस और दो दंड — बाउंडेड कोऑर्डिनेट डिसेंट द्वारा, जो Brier स्कोर को v1 मानों की ओर L2 खिंचाव के साथ न्यूनतम करता है।
सत्यापित/रोके-गए थ्रेशोल्ड नीति हैं, कैलिब्रेशन नहीं, और उन्हें यथावत छोड़ दिया जाता है।
यह Brier स्कोर, log-loss, ECE, AUC, एक विश्वसनीयता तालिका, और एक विश्वास-सीमा स्वीप (प्रत्येक सीमा पर सही-चरण रिकॉल बनाम हानिरहित गलत-सकारात्मक दर) पहले और बाद में रिपोर्ट करता है — ताकि ईमानदारी-बनाम-कवरेज व्यापार-अप एक एकल संख्या के बजाय स्पष्ट हो।```bash
calibrate against a real, labeled BadZure / MAAD-AF run
python3 calibrate.py --labeled run_labeled.jsonl --origin live
--run-label "badzure-2026-07 tenant-x" --out calibration.json
demonstrate on the bundled documented-shape proxy corpus
python3 calibrate.py --out calibration.json
run the engine on calibrated weights (opt-in; v1 priors are the default)
python3 run_nv.py events.jsonl out.json --authorize t.onmicrosoft.com
--calibration calibration.json
**ग्राउंड ट्रुथ स्रोत।** ईमानदार इनपुट एक वास्तविक टेनेंट में BadZure / MAAD-AF रन से प्राप्त टेलीमेट्री है, जिसे यूनिफाइड ऑडिट लॉग को हमले के टूल के स्वयं के गतिविधि रिकॉर्ड के साथ जोड़कर लेबल किया गया है (टूल के कारण हुई हर घटना ऑन-चेन है; बाकी सब कुछ सौम्य है — देखें `nv/calibration.py` में `LABELED_SCHEMA`)। जब तक आप इसे किसी वास्तविक रन की ओर इंगित नहीं करते, `eval/calibration_cases.py` एक प्रलेखित-आकार **प्रॉक्सी** कॉर्पस प्रदान करता है, और इससे फिट किया गया प्रत्येक आर्टिफैक्ट अपनी प्रोवेनेंस में `source="proxy"` के रूप में स्टैम्प्ड होता है, ताकि प्रॉक्सी फिट को कभी भी लाइव फिट समझने की भूल न हो। `calibration.proxy.json` वह बंडल किया गया प्रॉक्सी आर्टिफैक्ट है।
बंडल किए गए प्रॉक्सी कॉर्पस पर फिट स्पष्ट रूप से बेहतर है — Brier 0.398 → 0.045, ECE 0.576 → 0.081, AUC 0.81 → 0.91, और 0.60 फ्लोर पर सौम्य झूठी-सकारात्मक दर 0.69 से घटकर 0.00 हो जाती है (v1 प्रायर सौम्य गतिविधि पर बुरी तरह अति-आत्मविश्वासी थे)। प्रॉक्सी जानबूझकर रूढ़िवादी है; एक लाइव-टेनेंट रन ही वह है जो वज़न उत्पन्न करता है जिन्हें आपको वास्तव में तैनात करना चाहिए।
## विश्वास अखंडता (चरण 3)
दो प्रथम-श्रेणी नियंत्रण पुनर्निर्माण को खराब इनपुट से सुरक्षित रखते हैं:
- **अधिकृत-दायरा गेट** (`nv/scope.py`) — NV किसी भी ऐसी एस्टेट पर चलने से इनकार करता है जो अधिकृत सूची में नहीं है। प्रत्येक एस्टेट के लिए `--authorize <tenant-domain>` के साथ चलाएँ जिसकी जाँच करने की आपको अनुमति है।
- **पैटर्न-स्रोत सत्यापन** (`nv/validation.py`) — कोई भी पैटर्न इन्हें पारित किए बिना लाइब्रेरी में प्रवेश नहीं करता: (1) विश्वसनीय-स्रोत अनुमतिसूची, (2) सामग्री चेकसम / टैम्पर जाँच, (3) स्कीमा सु-गठनता, (4) मान्य ATT&CK-शैली तकनीक आईडी। प्रत्येक स्वीकृत पैटर्न एक ऑडिट रिकॉर्ड बनाए रखता है; अस्वीकृत पैटर्न कारण सहित लॉग किए जाते हैं। एक विषाक्त या विकृत फ़ीड ऊपरी प्रवाह में ही रोक दी जाती है, इससे पहले कि वह झूठा पुनर्निर्माण निर्मित कर सके। यह वही संदेहवाद है जो इंजन साक्ष्य पर लागू करता है, जिसे अब पैटर्नों पर ही स्थानांतरित कर दिया गया है।
---
## ज्ञान को अद्यतन रखना (हमलावर के विकास से आगे रहना)
एक पुनर्निर्माण इंजन उतना ही अद्यतन होता है जितनी उसकी पैटर्न लाइब्रेरी और उन चीज़ों को संभालने की उसकी क्षमता जो लाइब्रेरी ने कभी नहीं देखीं। NV अप्रचलन को डिज़ाइन के अनुसार **दो स्वतंत्र मोर्चों** पर संबोधित करता है:
### 1. ज्ञात परत एक सत्यापित अद्यतन पाइपलाइन के माध्यम से ताज़ा रहती है
लाइब्रेरी हार्डकोडेड नहीं है — `nv/patterns.py` हर पैटर्न (बिल्टिन सेट सहित) को `nv/validation.py` के माध्यम से लोड करता है, इसलिए बाहरी फ़ीड उसी विश्वसनीय मार्ग से प्रवेश करती हैं। ये लाइव नेटवर्क क्लाइंट जो इन फ़ीड को एक अनुसूची पर खींचते हैं, `nv/feeds.py` में कार्यान्वित हैं और `update_feeds.py` द्वारा संचालित होते हैं। स्रोत, विश्वास स्तरों में:
- **MITRE ATT&CK (STIX)** — प्राधिकृत तकनीक वर्गीकरण। कनेक्टर ATT&CK STIX इंडेक्स पढ़ता है, नवीनतम एंटरप्राइज़ रिलीज़ खींचता है, और हर उस ऑपरेशन के लिए प्राधिकृत तकनीक नाम और रणनीति को ताज़ा करता है जिस पर NV तर्क करता है — ऐसे किसी भी ऑपरेशन को हटाते हुए जिसकी तकनीक ATT&CK ने तब से रद्द या अप्रचलित कर दी है। NV ऑपरेशन→तकनीक बाइंडिंग और बेस-रेट प्रायर का स्वामित्व रखता है; ATT&CK वर्गीकरण का स्वामित्व रखता है।
- **TAXII 2.1 के माध्यम से जाँची गई CTI** — एक पूर्ण discovery → api-root → collection → objects क्लाइंट। एक जाँचे गए CTI संग्रह से STIX attack-pattern ऑब्जेक्ट खींचता है और NV द्वारा ट्रैक की गई तकनीकों को ताज़ा करता है। ATT&CK से नीचे भारित।
- **Sigma सामुदायिक नियमसेट** — एक git आर्काइव के रूप में खींचा जाता है; प्रत्येक क्लाउड/आइडेंटिटी नियम जो O365/Entra ऑपरेशन का नाम देता है और `attack.tXXXX` टैग रखता है, एक ऑपरेशन→तकनीक उम्मीदवार बन जाता है, जिसकी बेस रेट नियम के स्वयं के गंभीरता `level` से व्युत्पन्न होती है और फिर सामुदायिक स्रोत भार द्वारा घटाई जाती है। जो नियम मैप नहीं होते उन्हें कारण सहित छोड़ दिया जाता है, कभी अनुमान नहीं लगाया जाता।
ऑपरेशन टकराव पर, कमिट से पहले संघ को आरोही विश्वास द्वारा क्रमबद्ध किया जाता है, इसलिए एक प्राधिकृत ATT&CK बाइंडिंग हमेशा सामुदायिक बाइंडिंग पर जीतती है; निचले-स्तर की सामग्री अभी भी स्वीकार की जाती है और पुष्टि के रूप में ऑडिट में दर्ज की जाती है। `update_library(candidates)` पूरे सेट को सत्यापन के माध्यम से पुनः-अंतर्ग्रहण करता है और लाइब्रेरी को परमाणु रूप से पुनर्निर्मित करता है, इसलिए एक विषाक्त फ़ीड लाइब्रेरी को कभी भी आधा-अद्यतन नहीं छोड़ सकती।
**दो अनुमतिसूचियाँ, एक नहीं।** सत्यापन पहले से ही स्रोत टैग पर गेट करता है; कनेक्टर एक नेटवर्क-परत *होस्ट* अनुमतिसूची जोड़ते हैं, इसलिए एक कनेक्टर केवल TLS पर एक विश्वसनीय होस्ट से ही ला सकता है — स्रोत अनुमतिसूची के परिवहन समतुल्य, और अपहृत या गलत-टाइप किए गए फ़ीड URL के विरुद्ध एक सुरक्षा। प्रत्येक फ़ेच कच्चे-पेलोड sha256, URL और समय को प्रोवेनेंस के रूप में दर्ज करता है, ताकि बाद में पुनः-खींचने से ऊपरी प्रवाह में हुए परिवर्तन का पता लग सके।
**फ़ीड बढ़ने पर सत्यापन परत अधिक महत्वपूर्ण क्यों है:** जितना अधिक आप अद्यतनों को स्वचालित करते हैं, उतना ही एक स्वचालित-अद्यतन पाइपलाइन भेष में विश्वास जोखिम बन जाती है — एक गलत या विषाक्त फ़ीड झूठे पैटर्न इंजेक्ट करती है और झूठे पुनर्निर्माण निर्मित करती है। NV अंतर्ग्रहण को प्रतिकूल के रूप में मानता है: हर पैटर्न, हर अद्यतन पर अनुमतिसूची, चेकसम, स्कीमा और ऑडिट ट्रेल।
### 2. अपडक्टिव परत उसे कवर करती है जिसे अभी तक किसी फ़ीड ने नामित नहीं किया है
फ़ीड हमेशा नवीनतम ट्रेडक्राफ्ट से पीछे रहती हैं। अपडक्टिव कोर ही बचाव है: जब कोई देखा गया ऑपरेशन **किसी भी** लाइब्रेरी पैटर्न से मेल नहीं खाता, NV उसे छोड़ता नहीं है — यह पहले सिद्धांतों से सबसे-संभावित पथ का पुनर्निर्माण करता है और उसे कम विश्वास के साथ `no known match` के रूप में चिह्नित करता है। यह eval सूट (`eval/ground_truth_cases.py`) में मान्य किया गया है, जहाँ एक जानबूझकर-अज्ञात प्रबंधित-आइडेंटिटी टोकन-चोरी चरण पकड़ा जाता है, सही ढंग से अनुक्रमित किया जाता है, और ईमानदारी से विश्वास फ्लोर से नीचे भारित किया जाता है।
साथ में इनका अर्थ है कि NV कभी भी पूरी तरह अप्रचलित नहीं होता: ज्ञात परत एक विषाक्तता-प्रतिरोधी पाइपलाइन के माध्यम से प्रकाशित सीमा को ट्रैक करती है, और अपडक्टिव परत टूल को उस घुसपैठ पर अंधा होने से बचाए रखती है जिसे सीमा अभी तक पकड़ नहीं पाई है।
### सुझाई गई अद्यतन आवृत्ति
`nv/feeds.py` एक प्रति-फ़ीड आवृत्ति रखता है और `update_feeds.py` केवल वही खींचता है जो देय है, इसलिए इसे सीधे cron या systemd टाइमर में डाला जा सकता है:
- ATT&CK STIX — 90 दिन (एक वर्ष में कुछ आधिकारिक रिलीज़)।
- CTI/TAXII — 7 दिन (जैसे ही फ़ीड प्रकाशित हो), हमेशा सत्यापन के माध्यम से।
- Sigma — 30 दिन।```bash
# run whatever is due, keeping state under ./.nv_feeds (cron-friendly)
python3 update_feeds.py
# force all feeds now but only report what would change
python3 update_feeds.py --force --dry-run
# run fully offline against captured fixtures (no network)
python3 update_feeds.py --offline eval/fixtures --force
किसी भी लाइब्रेरी परिवर्तन के बाद, eval/run_eval.py दोबारा चलाएँ ताकि पुष्टि हो सके कि ज्ञात हमले के रूप अब भी
पुनर्निर्मित होते हैं, eval/validation_cases.py चलाकर पुष्टि करें कि गेट अब भी अमान्य इनपुट अस्वीकार करता है, और
eval/feeds_offline_test.py चलाकर पुष्टि करें कि फ़ीड पथ अंत-से-अंत तक सही बना हुआ है।
डेमो डेटा पर एक नोट
nv_gui.html में दिखाया गया पुनर्निर्माण एक सार्वजनिक शोध डेटासेट से बनाया गया है
— invictus-ir Office 365 यूनिफाइड ऑडिट लॉग कॉर्पस — किसी भी कंपनी के लाइव
टेनेंट से नहीं। यह इसलिए मौजूद है ताकि इंजन को बिना किसी के सहयोग के अंत-से-अंत प्रदर्शित और डॉगफूड किया जा सके।
NV को वास्तविक रूप से उपयोग करने के लिए, एक संगठन अपने स्वयं के Entra/M365 ऑडिट डेटा को जोड़ता है,
जैसा कि नीचे वर्णित है। इस परियोजना में कहीं भी कोई स्वामित्व या ग्राहक डेटा
शामिल नहीं है।
अपना डेटा कनेक्ट करना
NV जहाँ भी आप इसे चलाते हैं, वहीं चलता है; आपके लॉग को कभी भी आपके वातावरण से बाहर नहीं जाना पड़ता। चार चरण:
1 — अपने ऑडिट लॉग निर्यात करें। NV Microsoft 365 यूनिफाइड ऑडिट लॉग पढ़ता है। इसे
Microsoft Purview (ऑडिट खोज → CSV निर्यात), Search-UnifiedAuditLog
Exchange Online PowerShell cmdlet, Microsoft Graph auditLogs / signIns
एंडपॉइंट, या OfficeActivity और SigninLogs के Sentinel/SIEM निर्यात से प्राप्त करें।
2 — इसे सामान्य करें उस इवेंट मॉडल में जिस पर NV तर्क करता है:```bash python3 nv_extract_identity_events.py your_audit_export.csv your_events.jsonl
यह साइन-इन, सहमति अनुदान (consent grants), सेवा-प्रिंसिपल (service-principal) और भूमिका परिवर्तन, तथा मेलबॉक्स एक्सेस को रखता है — जिसमें वे पहचान संचालन (identity operations) भी शामिल हैं जिन्हें NV ने कभी नामित नहीं किया है, ताकि वे फिर भी अपहरणात्मक परत (abductive layer) तक पहुँचें — और बाकी को हटा देता है। यह एक CSV पढ़ता है जिसमें मानक `AuditData` कॉलम होता है, या JSON/JSONL जहाँ प्रत्येक रिकॉर्ड एक `AuditData` ऑब्जेक्ट होता है (जिस रूप में invictus-ir शोध कोष वितरित किया जाता है)।
**3 — पुनर्निर्माण, स्कोप-गेटेड।** इंजन उस टेनेंट पर चलने से इनकार कर देता है जिसे आपने स्पष्ट रूप से अधिकृत नहीं किया है:```bash
python3 run_nv.py your_events.jsonl reconstruction.json \
--authorize yourtenant.onmicrosoft.com
4 — दृश्य। nv_gui.html खोलें और ⤒ load reconstruction.json पर क्लिक करके उसे
इंजन द्वारा अभी उत्पन्न की गई फ़ाइल की ओर इंगित करें — उसी स्क्रीन पर आपकी घटना, आपकी
संस्थाएँ, और आपके विश्वास बैंड दिखाई देते हैं। एम्बेडिंग कैनवास पर हर बिंदु क्लिक करने पर उस संस्था के लिए पुनर्निर्माण को फिर से चलाता है।
AWS CloudTrail का विश्लेषण करने के लिए
इंजन सब्सट्रेट-स्वतंत्र है — केवल ऑपरेशन शब्दावली प्रदाता-विशिष्ट है
(nv/providers.py)। AWS पथ CloudTrail के विरुद्ध वही तीन चरण हैं:```bash
python3 nv_extract_cloudtrail_events.py cloudtrail.json aws_events.jsonl
python3 run_nv.py aws_events.jsonl reconstruction.json --authorize aws:123456789012
The ingest IAM/STS/साइन-इन इवेंट्स (नए IAM ऑपरेशन सहित, ताकि वे अब्डक्टिव परत तक पहुँचें) और S3 ऑब्जेक्ट रीड्स को बनाए रखता है, और AWS **खाते** पर स्कोप-गेट करता है, न कि टेनेंट डोमेन पर। वही अब्डक्टिव कोर, कॉन्फिडेंस मॉडल, और ट्रस्ट फ्लोर बिना बदलाव लागू रहते हैं।
GUI में एक **डेमो-डेटा बैनर** और एक इन-ऐप "अपना डेटा कनेक्ट करें" गाइड भी है, ताकि इसे खोलने वाला कोई भी समझ ले कि जब तक वे अपना डेटा नहीं जोड़ते, पुनर्निर्माण सार्वजनिक नमूना डेटा है।
## प्रोजेक्ट लेआउट```
run_nv.py reconstruction engine entrypoint (scope-gated)
nv_extract_identity_events.py ingest: M365/Entra unified audit log -> event model
nv_extract_cloudtrail_events.py ingest: AWS CloudTrail -> event model [iteration 3]
update_feeds.py pull + validate threat-intel feeds on a cadence [iteration 1]
calibrate.py fit confidence weights from labeled ground truth [iteration 2]
nv/ the engine package
graph.py patterns.py validation.py confidence.py reconstruct.py scope.py
providers.py per-substrate op->ATT&CK vocabulary packs (Entra + AWS) [iteration 3]
feeds.py ATT&CK STIX / TAXII 2.1 / Sigma clients + scheduler [iteration 1]
calibration.py metrics + parameter fit [iteration 2]
eval/ evals + offline fixtures (no network, no tenant)
nv_gui.html pure view layer (loads engine reconstruction.json)
calibration.proxy.json bundled proxy calibration artifact [iteration 2]
सब कुछ प्रोजेक्ट रूट से चलाएँ ताकि nv पैकेज इम्पोर्ट किया जा सके।
इसे चलाना```bash
1. normalize raw O365/Entra audit logs into the event model
python3 nv_extract_identity_events.py auditrecords.csv nv_identity_events.jsonl
2. reconstruct (scope-gated; add --calibration calibration.json to use fitted weights)
python3 run_nv.py nv_identity_events.jsonl reconstruction.json
--trust-floor 0.6 --authorize your-tenant.onmicrosoft.com
3. view — open nv_gui.html (renders reconstruction.json)
पैटर्न लाइब्रेरी को अद्यतन रखें और कॉन्फ़िडेंस ट्यून करें:```bash
python3 update_feeds.py # pull + validate feeds that are due
python3 calibrate.py --labeled run.jsonl --origin live --out calibration.json
मूल्यांकन```bash
python3 eval/run_eval.py # attack shapes reconstruct correctly python3 eval/validation_cases.py # poisoned patterns are rejected python3 eval/feeds_offline_test.py # feed connectors + scheduler (offline) python3 eval/providers_aws_test.py # AWS chain reconstructs through the same engine python3 calibrate.py # calibration harness on the bundled proxy corpus
---
## स्थिति
**वास्तविक डेटा पर एंड-टू-एंड कार्यशील** (invictus-ir O365 डेटासेट), पूरी योजना में:
| चरण | आइटम | स्थिति |
|---|---|---|
| 1 | सामान्यीकृत इवेंट/एंटिटी मॉडल | पूर्ण |
| 1 | इन्जेस्ट + सामान्यीकरण (Entra/M365 बीचहेड) | पूर्ण |
| 2 | ज्ञात परत (ATT&CK पैटर्न लाइब्रेरी) | पूर्ण |
| 2 | साक्ष्य-पुष्टिकरण विश्वास मॉडल | पूर्ण |
| 2 | आउटपुट अनुबंध में विश्वास की निचली सीमा | पूर्ण |
| 2 | एबडक्टिव कोर (अज्ञात परत) | पूर्ण, मूल्यांकन-सिद्ध |
| 2 | क्रमबद्ध प्रतिस्पर्धी परिकल्पनाएँ | पूर्ण |
| 3 | पैटर्न-स्रोत सत्यापन परत | पूर्ण |
| 3 | अधिकृत-दायरा नियंत्रण | पूर्ण |
| 3 | लाइव फ़ीड कनेक्टर (ATT&CK STIX / TAXII / Sigma) + शेड्यूलर | पूर्ण |
| 4 | वास्तविक इंजन आउटपुट पर दो-स्तंभ स्क्रीन | पूर्ण |
| 4 | एम्बेडिंग / समानता कैनवास | पूर्ण |
| 4 | कैनवास-संचालित प्रति-एंटिटी पुनर्निर्माण (क्लिक श्रृंखला को फिर से चलाता है) | पूर्ण |
| 4 | GUI इंजन `reconstruction.json` लोड करता है (इसे अपनी फ़ाइल पर इंगित करें) | पूर्ण |
| 4 | बहु-प्रदाता सब्सट्रेट (AWS CloudTrail, मूल्यांकन-सिद्ध) | पूर्ण |
| 5 | सौंदर्य / थीमिंग | पूर्ण |
| 5 | विश्वास-अंशांकन हार्नेस + इंजन एकीकरण | पूर्ण |
### ईमानदार ज्ञात अंतराल (अगले पुनरावृत्तियाँ)
- **लाइव-टेनेंट अंशांकन संख्याएँ।** अंशांकन *हार्नेस* पूर्ण है और इंटरफ़ेस सिद्ध है, लेकिन शिप किया गया `calibration.proxy.json` दस्तावेजित-आकार के प्रॉक्सी डेटा पर फिट किया गया है। तैनाती योग्य वज़न के लिए हार्नेस को वास्तविक BadZure / MAAD-AF रन के विरुद्ध चलाना आवश्यक है — यह अपनाने वाले के लिए एक परिचालन कदम है।
- **फ़ीड-संचालित शब्दावली वृद्धि।** कनेक्टर उन ऑपरेशनों को ताज़ा करते हैं जिन पर NV पहले से तर्क करता है; किसी फ़ीड को नया ऑपरेशन *पेश* करने देना (और उसे प्रारंभिक/पिवट/संग्रह वर्गीकरण में जोड़ना) भविष्य का कार्य है।
- **दूसरे प्रदाता की गहराई।** AWS सब्सट्रेट-स्वतंत्रता के प्रमाण के रूप में शामिल है (पैक + इन्जेस्ट + मूल्यांकन), लेकिन केवल IAM/STS/S3। AWS पैक को व्यापक बनाना, प्रदाता-विशिष्ट फ़ीड कनेक्टर जोड़ना, और तीसरा सब्सट्रेट (GCP, Okta) अगले चरण हैं।
---
## लाइसेंस
Nimbus Vestige **PolyForm Noncommercial License 1.0.0** के अंतर्गत **स्रोत-उपलब्ध** है ([LICENSE](https://gitlab.com/dobybaxter127/nimbus-vestige/-/blob/main/LICENSE) देखें)। पूरा उपकरण — पुनर्निर्माण इंजन, दोनों प्रदाता इन्जेस्ट, GUI, और मूल्यांकन हार्नेस — किसी भी **गैर-वाणिज्यिक** उद्देश्य के लिए निरीक्षण, चलाने और उपयोग करने के लिए स्वतंत्र है: व्यक्तिगत परियोजनाएँ, शोध, शिक्षा, गैर-लाभकारी संगठन, और मूल्यांकन। निर्णय लेने से पहले हर पंक्ति पढ़ें।
**वाणिज्यिक उपयोग के लिए सशुल्क लाइसेंस आवश्यक है** — इसे किसी ऐसे उत्पाद या सेवा में उपयोग करना जिसे आप बेचते हैं या होस्ट करते हैं, किसी लाभ-केंद्रित कंपनी के उत्पादन या आंतरिक सिस्टम में, या सशुल्क घटना-प्रतिक्रिया या ग्राहक कार्यों पर। [COMMERCIAL-LICENSE.md](https://gitlab.com/dobybaxter127/nimbus-vestige/-/blob/main/COMMERCIAL-LICENSE.md) देखें।
---
### लेखक
Doby Baxter 2026