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