
Движок криминалистической реконструкции для реагирования на инциденты в облаке и инциденты, связанные с идентификацией.
Механизм форензической реконструкции для реагирования на инциденты в облаке и с идентификационными системами.
На основе фрагментированной телеметрии облака, SaaS и идентификационных систем — журналов плоскости управления, событий входа, активности токенов и согласий — NV реконструирует, как вторжение с наибольшей вероятностью перемещалось между учётными записями и сервисами, перечисляет другие наиболее вероятные пути, которыми оно могло пойти, и сообщает о каждом шаге с калиброванной, объяснимой уверенностью. Он отказывается утверждать то, что не подтверждено доказательствами.
Обнаружение говорит вам, что что-то произошло. Nimbus Vestige говорит вам, как — и что ещё.
Современные вторжения не «взламывают». Они входят в систему. Идентификация теперь является основным вектором атак, фигурируя в подавляющем большинстве расследований инцидентов в облаке, и большинство вторжений охватывают несколько поверхностей — идентификация плюс облако плюс SaaS плюс конечные точки. Телеметрия, которая их фиксирует, фрагментирована и противоречива, что уже вынуждает реагирующих восстанавливать картину вручную из неполных данных.
Такая ручная реконструкция медленна и сбоит предсказуемым образом: реагирующий зацикливается на первом правдоподобном сценарии и упускает настоящий. NV автоматизирует реконструкцию и напрямую борется с этим видом сбоя, всегда представляя ранжированное пространство правдоподобных путей, а не единственную историю.
Ключевое: NV делает это с честностью как продуктом. Заявленный враг рынка — уверенность из «чёрного ящика» — инструмент, который утверждает вывод, не показывая свою работу. Каждое число, которое выдаёт NV, прослеживается до конкретного доказательства, которое его заработало, и всё, что он не может подтвердить, опускается, а не угадывается.
NV — это не детектор, не сканер, не аудитор и не симулятор атак. Эти инструменты говорят вам, что что-то произошло, и измеряют это. NV работает в обратную сторону — абдуктивная реконструкция механизма из паттернов, в рамках фрагментированной идентификационной инфраструктуры.
Синяя команда воспроизводится; красная команда коммодитизируется. Наступательные инструменты находят конечный, исправляемый набор дыр и встраиваются в автоматизированные CI/CD конвейеры безопасности. Реконструкция того, как произошло вторжение, никогда не завершается — атакующие продолжают изобретать, поэтому потребность постоянна и самовозобновляема.
Движок не зависит от инфраструктуры. Базовая логика — реконструировать механизм из паттернов, с калиброванной уверенностью и стоп-границей — сначала применяется к облаку/идентификации, но позже переносится на сеть, конечные точки и ОТ. Цель может меняться без переписывания тезиса.
Реконструкция обеспечивает укрепление защиты. Как только вы знаете, как они проникли — и какие ещё двери были открыты — вы строите защиту. Неиспользованные, но правдоподобные пути — это бэклог для укрепления, часто более ценный, чем сама реконструкция, потому что большинство взломов эксплуатируют предотвратимую уязвимость, а не новую тактику.
Он плавно деградирует на новом вторжении — именно на том инциденте, который важнее всего. Сигнатурный/правиловой движок слепнет на 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)
Графический интерфейс — это **чистый уровень представления** — он отображает выходные данные движка и позволяет аналитику перемещать нижнюю границу доверия. Он не содержит собственной логики реконструкции.
---
## Модель уверенности (достоверность всего продукта)
Каждый шаг несёт показатель уверенности в [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)
Оценки путей объединяют составляющие их связи через геометрическое среднее, поэтому одно слабое звено честно тянет путь вниз, а не сглаживается усреднением.
Все веса выше — базовые частоты по техникам, бонусы по сигналам, штрафы за отсутствие — находятся в единой таблице PARAMS в nv/confidence.py. Это априорные значения NV версии v1, и они калибруемы: nv/calibration.py может перенастроить их по размеченным эталонным данным, и движок загрузит результат, возвращаясь к априорным значениям v1, когда калибровка не предоставлена (см. ниже).
Правило удержания, вшитое в контракт вывода движка, а не только в UI. Ниже порога шаг удерживается. Сдвиг порога — это компромисс честности и покрытия, обретший физическую форму: вверх — для строгого/высокодоверительного режима, вниз — для разрешительного/высокопокрывающего. Порог по умолчанию — это редакторское решение о том, где находится NV, прежде чем аналитик коснётся его.
Веса v1 обоснованны, но это априорные значения. nv/calibration.py настраивает их по размеченным эталонным данным — событиям, о которых мы знаем, какие из них были частью вторжения, а какие безвредными, — и, что крайне важно, измеряет, помогла ли настройка на самом деле, поэтому калибровка принимается только если она снижает ошибку калибровки, а не просто передвигает числа.