diff --git a/README.md b/README.md index 7ba59eb..7b6940b 100755 --- a/README.md +++ b/README.md @@ -82,8 +82,13 @@ Security Analytics + Forensics для ролей `executive`, `manager`, `securi Демо-материалы: - [сценарий Pilot v1 demo](docs/PILOT_DEMO_SCENARIO_RU.md); +- [сценарий руководителя](docs/demo/DEMO_SCENARIO_EXECUTIVE_RU.md); +- [сценарий ИБ](docs/demo/DEMO_SCENARIO_SECURITY_RU.md); +- [сценарий расследований](docs/demo/DEMO_SCENARIO_FORENSICS_RU.md); - [demo seed data](docs/fixtures/pilot-v1-demo/demo-seed-data.json); - [demo evidence pack](docs/fixtures/pilot-v1-demo/evidence-pack/); +- [пример итогового demo-отчета](docs/DEMO_REPORT_EXAMPLE_RU.md); +- [ценность пилота для заказчика](docs/PILOT_VALUE_PROPOSITION_RU.md); - [преддемо-runbook](docs/DEMO_RUNBOOK_RU.md). Границы показа: @@ -195,6 +200,11 @@ collectors. - [Пакет пилота для заказчика](docs/CUSTOMER_PILOT_PACK_RU.md) - [Pilot v1.0](docs/PILOT_V1_RU.md) - [Pilot v1 demo](docs/PILOT_DEMO_SCENARIO_RU.md) +- [Demo scenario: руководитель](docs/demo/DEMO_SCENARIO_EXECUTIVE_RU.md) +- [Demo scenario: ИБ](docs/demo/DEMO_SCENARIO_SECURITY_RU.md) +- [Demo scenario: расследования](docs/demo/DEMO_SCENARIO_FORENSICS_RU.md) +- [Demo report example](docs/DEMO_REPORT_EXAMPLE_RU.md) +- [Pilot value proposition](docs/PILOT_VALUE_PROPOSITION_RU.md) - [Pilot v1.0 acceptance checklist](docs/PILOT_V1_ACCEPTANCE_CHECKLIST_RU.md) - [Pilot v1.0 evidence](docs/PILOT_V1_EVIDENCE_RU.md) - [Production readiness портала](docs/PRODUCTION_READINESS_RU.md) diff --git a/docs/CUSTOMER_DEMO_SCENARIO_RU.md b/docs/CUSTOMER_DEMO_SCENARIO_RU.md index 119607a..0bbae7e 100644 --- a/docs/CUSTOMER_DEMO_SCENARIO_RU.md +++ b/docs/CUSTOMER_DEMO_SCENARIO_RU.md @@ -11,6 +11,14 @@ 2. Выполнить обязательный преддемо-прогрев. 3. Убедиться, что smoke-тест прошел успешно. 4. Открыть портал на `/portal`. +5. Держать рядом [PILOT_VALUE_PROPOSITION_RU.md](PILOT_VALUE_PROPOSITION_RU.md) + и [DEMO_REPORT_EXAMPLE_RU.md](DEMO_REPORT_EXAMPLE_RU.md). + +Ролевые подсказки: + +- [Руководитель](demo/DEMO_SCENARIO_EXECUTIVE_RU.md); +- [ИБ](demo/DEMO_SCENARIO_SECURITY_RU.md); +- [Расследования](demo/DEMO_SCENARIO_FORENSICS_RU.md). ## Показ diff --git a/docs/DEMO_REPORT_EXAMPLE_RU.md b/docs/DEMO_REPORT_EXAMPLE_RU.md new file mode 100644 index 0000000..8087927 --- /dev/null +++ b/docs/DEMO_REPORT_EXAMPLE_RU.md @@ -0,0 +1,89 @@ +# Demo Report Example + +Пример итогового Markdown-отчета для демонстрации AWatch-rus Pilot v1. + +Источник: синтетический dataset +`docs/fixtures/pilot-v1-demo/demo-seed-data.json`. + +Границы: отчет не содержит реальных сотрудников, IP-адресов, hostname, логинов, +доменов, подразделений заказчика или событий безопасности. Все идентификаторы +демонстрационные. + +## Главный вывод + +В демонстрационном периоде зафиксирован рост операционного риска: снижение +активности в одном подразделении совпало с ростом удаленных сессий, повышенным +UEBA Score v1 и неполным покрытием агентами. + +Вывод требует ручной проверки ответственными ролями. Система не выполняет +автоматическую блокировку, не меняет политики и не выносит окончательный +вердикт. + +## KPI + +| Показатель | Значение | Интерпретация | +| --- | --- | --- | +| Workforce KPI | `64%` | Ниже целевого уровня, требуется управленческий разбор. | +| Confidence | `medium` | Данные пригодны для показа, но есть ограничение по покрытию. | +| Agent coverage | `67%` | Ниже целевого уровня; один агент stale, один отсутствует. | +| Remote sessions growth | `+200%` | Удаленные сессии выше демонстрационной базы. | +| UEBA Score v1 | `82 / critical` | Кандидат требует ручной проверки ИБ. | + +## Explainable KPI + +| Фактор | Вклад | Объяснение | +| --- | --- | --- | +| Полезная активность | `+28` | Рабочие приложения присутствуют в дневном периоде. | +| Простой | `-9` | Есть периоды низкой активности в рабочее время. | +| Удаленные сессии | `-11` | Число удаленных сессий выросло относительно демонстрационной базы. | +| Полнота данных | `-7` | Покрытие агентами ниже целевого уровня. | + +Индекс активности не является автоматической оценкой сотрудника. Он показывает +управленческий сигнал, который нужно интерпретировать вместе с покрытием данных +и контекстом подразделения. + +## Risk Narrative + +Уровень риска: `high`. + +Risk score: `78`. + +Почему система так считает: + +- Workforce KPI ниже целевого уровня; +- есть рост удаленных сессий; +- UEBA Score v1 повышен до `critical` на демонстрационном кандидате; +- покрытие агентами ниже целевого уровня; +- есть incident candidate для ручной проверки. + +Ограничения: + +- Risk Narrative является rule-based выводом; +- UEBA Score v1 не использует ML/LLM; +- pfSense readiness остается `contract_only`; +- demo dataset не является production ingestion. + +## Recommended Actions + +| Priority | Action | Owner role | Deadline | Reason codes | +| --- | --- | --- | --- | --- | +| `high` | Проверить подразделение с низким индексом активности | `manager` | `24h` | `LOW_WORKFORCE_KPI`, `HIGH_REMOTE_ACTIVITY` | +| `high` | Передать кандидата в контур ИБ | `security` | `24h` | `HIGH_UEBA`, `INCIDENT_CANDIDATE` | +| `high` | Проверить покрытие агентами | `admin` | `24h` | `LOW_COVERAGE` | + +## Evidence + +- Demo dataset: + `docs/fixtures/pilot-v1-demo/demo-seed-data.json`. +- Executive summary: + `docs/fixtures/pilot-v1-demo/evidence-pack/executive-summary.md`. +- Security technical summary: + `docs/fixtures/pilot-v1-demo/evidence-pack/security-technical-summary.md`. +- Investigation report: + `docs/fixtures/pilot-v1-demo/evidence-pack/investigation-report.md`. + +## Итог + +AWatch-rus показывает руководителю главный риск, ИБ - объяснимого кандидата на +проверку, расследованиям - evidence package, эксплуатации - проблему покрытия +данных. Все выводы требуют ручного подтверждения ответственными ролями. diff --git a/docs/DEMO_RUNBOOK_RU.md b/docs/DEMO_RUNBOOK_RU.md index 7509d01..6502e7e 100644 --- a/docs/DEMO_RUNBOOK_RU.md +++ b/docs/DEMO_RUNBOOK_RU.md @@ -6,6 +6,12 @@ Полный ролевой сценарий Pilot v1 demo: [PILOT_DEMO_SCENARIO_RU.md](PILOT_DEMO_SCENARIO_RU.md). +Ролевые сценарии demo-pack: + +- [Руководитель](demo/DEMO_SCENARIO_EXECUTIVE_RU.md); +- [ИБ](demo/DEMO_SCENARIO_SECURITY_RU.md); +- [Расследования](demo/DEMO_SCENARIO_FORENSICS_RU.md). + ## Перед началом - Открыть портал на рабочем демонстрационном URL. @@ -46,6 +52,7 @@ - Markdown-отчет формируется. - Smoke-тест завершился с `ok=true`. - `DEMO_RUNBOOK_RU.md` открыт рядом с демонстрационным окном. +- `DEMO_REPORT_EXAMPLE_RU.md` открыт как резервный пример итогового отчета. ## Сценарий показа @@ -68,7 +75,8 @@ - Портал открывается без ошибок. - Статус загрузки: `Данные готовы`. -- События безопасности доступны. +- События безопасности доступны или fallback-статус понятен. - Есть кандидат на проверку. - Расследование открывается из карточки риска. - Markdown-отчет формируется. +- Открывается пример отчета [DEMO_REPORT_EXAMPLE_RU.md](DEMO_REPORT_EXAMPLE_RU.md). diff --git a/docs/PILOT_DEMO_SCENARIO_RU.md b/docs/PILOT_DEMO_SCENARIO_RU.md index 8270728..f80d6d0 100644 --- a/docs/PILOT_DEMO_SCENARIO_RU.md +++ b/docs/PILOT_DEMO_SCENARIO_RU.md @@ -174,11 +174,17 @@ SIEM, классическом DLP, ML/LLM или готовом pfSense ingesti Демонстрационные материалы: +- [demo-сценарий руководителя](demo/DEMO_SCENARIO_EXECUTIVE_RU.md); +- [demo-сценарий ИБ](demo/DEMO_SCENARIO_SECURITY_RU.md); +- [demo-сценарий расследований](demo/DEMO_SCENARIO_FORENSICS_RU.md); +- [приемочный checklist demo-pack](demo/DEMO_PACK_ACCEPTANCE_CHECKLIST_RU.md); - [demo-seed-data.json](fixtures/pilot-v1-demo/demo-seed-data.json); - [executive-summary.md](fixtures/pilot-v1-demo/evidence-pack/executive-summary.md); - [security-technical-summary.md](fixtures/pilot-v1-demo/evidence-pack/security-technical-summary.md); - [investigation-report.md](fixtures/pilot-v1-demo/evidence-pack/investigation-report.md); -- [investigation-contract.json](fixtures/pilot-v1-demo/evidence-pack/investigation-contract.json). +- [investigation-contract.json](fixtures/pilot-v1-demo/evidence-pack/investigation-contract.json); +- [пример итогового отчета](DEMO_REPORT_EXAMPLE_RU.md); +- [ценность пилота для заказчика](PILOT_VALUE_PROPOSITION_RU.md). Все материалы demo-only. Для сетевых примеров используются только RFC 5737 адреса `192.0.2.0/24`, `198.51.100.0/24`, `203.0.113.0/24`. diff --git a/docs/PILOT_V1_EVIDENCE_RU.md b/docs/PILOT_V1_EVIDENCE_RU.md index 8ba12c1..fe6f297 100644 --- a/docs/PILOT_V1_EVIDENCE_RU.md +++ b/docs/PILOT_V1_EVIDENCE_RU.md @@ -19,6 +19,11 @@ contracts, UEBA Score v1 и pfSense readiness. | pfSense | [PFSENSE_INTEGRATION_RU.md](PFSENSE_INTEGRATION_RU.md) | readiness=`contract_only`, без SIEM/ingestion claims | | Demo сценарий | [CUSTOMER_DEMO_SCENARIO_RU.md](CUSTOMER_DEMO_SCENARIO_RU.md) | 10-минутный показ заказчику | | Pilot v1 demo | [PILOT_DEMO_SCENARIO_RU.md](PILOT_DEMO_SCENARIO_RU.md) | воспроизводимый demo-pack по ролям | +| Demo Executive | [demo/DEMO_SCENARIO_EXECUTIVE_RU.md](demo/DEMO_SCENARIO_EXECUTIVE_RU.md) | сценарий руководителя | +| Demo Security | [demo/DEMO_SCENARIO_SECURITY_RU.md](demo/DEMO_SCENARIO_SECURITY_RU.md) | сценарий ИБ | +| Demo Forensics | [demo/DEMO_SCENARIO_FORENSICS_RU.md](demo/DEMO_SCENARIO_FORENSICS_RU.md) | сценарий расследований | +| Demo report | [DEMO_REPORT_EXAMPLE_RU.md](DEMO_REPORT_EXAMPLE_RU.md) | пример итогового Markdown-отчета | +| Pilot value | [PILOT_VALUE_PROPOSITION_RU.md](PILOT_VALUE_PROPOSITION_RU.md) | ценность пилота для заказчика | | Преддемо | [DEMO_RUNBOOK_RU.md](DEMO_RUNBOOK_RU.md) | прогрев и порядок проверки перед показом | | Gap analysis | [PILOT_GAP_ANALYSIS_RU.md](PILOT_GAP_ANALYSIS_RU.md) | известные риски и остаточные ограничения | @@ -52,12 +57,18 @@ contracts, UEBA Score v1 и pfSense readiness. - `docs/screenshots/05-investigation-pack.png`; - `docs/screenshots/06-markdown-report.png`; - `docs/screenshots/07-product-architecture.png`; -- `docs/fixtures/pfsense-demo-events.json`. +- `docs/fixtures/pfsense-demo-events.json`; - `docs/fixtures/pilot-v1-demo/demo-seed-data.json`; - `docs/fixtures/pilot-v1-demo/evidence-pack/executive-summary.md`; - `docs/fixtures/pilot-v1-demo/evidence-pack/security-technical-summary.md`; - `docs/fixtures/pilot-v1-demo/evidence-pack/investigation-report.md`; -- `docs/fixtures/pilot-v1-demo/evidence-pack/investigation-contract.json`. +- `docs/fixtures/pilot-v1-demo/evidence-pack/investigation-contract.json`; +- `docs/demo/DEMO_SCENARIO_EXECUTIVE_RU.md`; +- `docs/demo/DEMO_SCENARIO_SECURITY_RU.md`; +- `docs/demo/DEMO_SCENARIO_FORENSICS_RU.md`; +- `docs/demo/DEMO_PACK_ACCEPTANCE_CHECKLIST_RU.md`; +- `docs/DEMO_REPORT_EXAMPLE_RU.md`; +- `docs/PILOT_VALUE_PROPOSITION_RU.md`. Требования: diff --git a/docs/PILOT_VALUE_PROPOSITION_RU.md b/docs/PILOT_VALUE_PROPOSITION_RU.md new file mode 100644 index 0000000..1d6d253 --- /dev/null +++ b/docs/PILOT_VALUE_PROPOSITION_RU.md @@ -0,0 +1,70 @@ +# Pilot Value Proposition + +Документ фиксирует ценность AWatch-rus для пилотного показа заказчику без +преувеличений и без заявления несуществующих интеграций. + +## Проблема заказчика + +У руководителя, ИБ и эксплуатации часто разные картины одной ситуации: + +- руководителю нужен короткий управленческий вывод, а не технические события; +- ИБ нужен объяснимый сигнал для проверки, а не набор разрозненных логов; +- расследованиям нужен связанный пакет материалов; +- эксплуатации нужно понимать, достаточно ли свежие и полные данные; +- при неполном покрытии источников риск легко переоценить или недооценить. + +## Что решает AWatch-rus + +AWatch-rus объединяет уже собранные сигналы в три прикладных слоя: + +- Workforce Analytics: активность, подразделения, тренды, нагрузка и + объяснимый KPI. +- Security Analytics: UEBA Score v1, risk severity, кандидаты на ручную + проверку и ограничения источников. +- Forensics: timeline, контекст `user / host / app / network event`, evidence + package и Markdown-отчет. + +Пилот показывает не максимальный набор интеграций, а ценность связанного +управленческого и ИБ-контура на понятных данных. + +## Выгоды для руководителя + +- главный риск отображается первым; +- KPI объяснен через факторы и уровень доверия; +- видно подразделение или зона, требующая внимания; +- рекомендации показывают ответственного и срок; +- отчет можно использовать для обсуждения без сырых технических логов. + +## Выгоды для ИБ + +- UEBA Score v1 rule-based и объясним через reason codes; +- incident candidates отделены от подтвержденных инцидентов; +- Risk Narrative связывает активность, покрытие данных и security-сигналы; +- Security View не подменяет SIEM, но дает понятный слой первичной проверки; +- pfSense readiness честно обозначается как `contract_only`, если ingestion не + включен и не принят отдельно. + +## Выгоды для расследований + +- один кандидат связывается с контекстом, timeline и evidence package; +- отчет экспортируется в Markdown; +- demo-пакет показывает цепочку `событие -> контекст -> evidence -> отчет`; +- решение остается за ответственным сотрудником, а не за автоматикой. + +## Выгоды для эксплуатации + +- видны полнота и свежесть данных; +- низкое покрытие агентами влияет на confidence, а не скрывается; +- fallback/readiness статусы можно объяснить до показа заказчику; +- smoke-проверка отделена от бизнес-демонстрации. + +## Ограничения пилота + +- AWatch-rus не является сертифицированным SIEM, EDR или классической DLP. +- UEBA Score v1 и Risk Narrative являются rule-based, без ML/LLM. +- Action Center не выполняет auto-remediation. +- pfSense readiness является `contract_only`, если реальный ingestion отдельно + не включен и не прошел приемку. +- Planned/future providers не считаются реализованными collectors. +- Demo dataset не является production data и не должен использоваться для + выводов о реальных сотрудниках. diff --git a/docs/demo/DEMO_PACK_ACCEPTANCE_CHECKLIST_RU.md b/docs/demo/DEMO_PACK_ACCEPTANCE_CHECKLIST_RU.md new file mode 100644 index 0000000..875ef49 --- /dev/null +++ b/docs/demo/DEMO_PACK_ACCEPTANCE_CHECKLIST_RU.md @@ -0,0 +1,49 @@ +# Customer Demo Pack: Acceptance Checklist + +Чеклист используется перед пилотным показом заказчику. + +## Материалы + +- [ ] Открывается `docs/DEMO_RUNBOOK_RU.md`. +- [ ] Открывается `docs/PILOT_DEMO_SCENARIO_RU.md`. +- [ ] Открывается сценарий руководителя: + `docs/demo/DEMO_SCENARIO_EXECUTIVE_RU.md`. +- [ ] Открывается сценарий ИБ: + `docs/demo/DEMO_SCENARIO_SECURITY_RU.md`. +- [ ] Открывается сценарий расследований: + `docs/demo/DEMO_SCENARIO_FORENSICS_RU.md`. +- [ ] Открывается пример отчета: + `docs/DEMO_REPORT_EXAMPLE_RU.md`. +- [ ] Открывается ценностное описание пилота: + `docs/PILOT_VALUE_PROPOSITION_RU.md`. + +## Demo Dataset + +- [ ] `docs/fixtures/pilot-v1-demo/demo-seed-data.json` является валидным JSON. +- [ ] Dataset содержит только синтетические идентификаторы. +- [ ] Dataset покрывает нормальную работу. +- [ ] Dataset покрывает снижение активности. +- [ ] Dataset покрывает рост удаленных сессий. +- [ ] Dataset покрывает повышенный UEBA. +- [ ] Dataset покрывает incident candidate. +- [ ] Dataset покрывает низкое покрытие агентами. + +## Screenshots + +- [ ] `docs/screenshots/01-executive-overview.png` существует и не пустой. +- [ ] `docs/screenshots/02-risk-heatmap.png` существует и не пустой. +- [ ] `docs/screenshots/03-security-view.png` существует и не пустой. +- [ ] `docs/screenshots/04-operations-view.png` существует и не пустой. +- [ ] `docs/screenshots/05-investigation-pack.png` существует и не пустой. +- [ ] `docs/screenshots/06-markdown-report.png` существует и не пустой. +- [ ] `docs/screenshots/07-product-architecture.png` существует и не пустой. + +## Запреты + +- [ ] В demo-pack нет реальных IP-адресов, hostname, логинов, ФИО и + подразделений заказчика. +- [ ] Planned/future не описаны как implemented. +- [ ] pfSense readiness описан как `contract_only`, если ingestion отдельно не + включен и не принят. +- [ ] AWatch-rus не заявляется как SIEM, EDR или классическая DLP. +- [ ] ML/LLM не заявлены и не используются. diff --git a/docs/demo/DEMO_SCENARIO_EXECUTIVE_RU.md b/docs/demo/DEMO_SCENARIO_EXECUTIVE_RU.md new file mode 100644 index 0000000..067a278 --- /dev/null +++ b/docs/demo/DEMO_SCENARIO_EXECUTIVE_RU.md @@ -0,0 +1,57 @@ +# Demo Scenario: Руководитель + +Цель: показать управленческую ценность AWatch-rus без технических логов и без +ИБ-детализации по умолчанию. + +Данные: только `docs/fixtures/pilot-v1-demo/demo-seed-data.json` и +обезличенные скриншоты `docs/screenshots/`. + +## Что показывать + +- роль `Руководитель`; +- блок `Главный вывод`; +- Workforce KPI и объяснение индекса; +- Risk Narrative; +- `Рекомендуемые действия`; +- карту рисков подразделений; +- итоговый Markdown-отчет. + +## Порядок показа + +1. Открыть портал и выбрать роль `Руководитель`. +2. Показать, что главный вывод расположен первым. +3. Перейти к KPI: общий индекс активности и уровень доверия к нему. +4. Показать объяснение KPI: полезная активность, простой, удаленные сессии, + полнота данных. +5. Показать Risk Narrative: что происходит, почему это риск и чем подтверждено. +6. Показать `Рекомендуемые действия`: кому адресовано, срок, причина. +7. Показать карту рисков подразделений. +8. Открыть пример итогового отчета: + `docs/DEMO_REPORT_EXAMPLE_RU.md`. + +## Какие выводы делать + +- AWatch-rus помогает руководителю увидеть главный риск без чтения технических + событий. +- KPI объясним: видно, какие факторы подняли или снизили индекс. +- Risk Narrative связывает Workforce KPI, UEBA, полноту данных и кандидатов на + проверку в понятный управленческий вывод. +- Action Center не выполняет действия автоматически, а формирует ручные + рекомендации для ответственных ролей. + +## Какие вопросы ожидать + +| Вопрос заказчика | Ответ | +| --- | --- | +| Это оценка эффективности сотрудника? | Нет. Это аналитика активности и рисков, требующая управленческой интерпретации. | +| Почему KPI именно такой? | Через explainability-блок: факторы, вклад, покрытие данных и уровень доверия. | +| Можно ли доверять выводу при неполных данных? | Система показывает confidence и coverage; при низком покрытии вывод должен использоваться осторожно. | +| Система сама назначает виновного? | Нет. Она показывает риск и рекомендации для ручной проверки. | +| Это SIEM или DLP? | Нет. AWatch-rus позиционируется как Workforce Analytics + Security Analytics + Forensics. | + +## Границы демонстрации + +- Не показывать персональные данные. +- Не обещать автоматические кадровые решения. +- Не показывать planned/future integrations как реализованные. +- Не использовать demo identifiers как реальные сотрудники или хосты. diff --git a/docs/demo/DEMO_SCENARIO_FORENSICS_RU.md b/docs/demo/DEMO_SCENARIO_FORENSICS_RU.md new file mode 100644 index 0000000..f134007 --- /dev/null +++ b/docs/demo/DEMO_SCENARIO_FORENSICS_RU.md @@ -0,0 +1,55 @@ +# Demo Scenario: Расследования + +Цель: показать, как AWatch-rus собирает контекст проверки и Markdown-отчет по +кандидату без утверждения, что система автоматически доказывает нарушение. + +Данные: только demo evidence pack: +`docs/fixtures/pilot-v1-demo/evidence-pack/`. + +## Что показывать + +- роль `Расследования`; +- событие-кандидат; +- контекст `user / host / app / network event`; +- timeline; +- evidence package; +- Markdown-отчет расследования. + +## Порядок показа + +1. Выбрать роль `Расследования`. +2. Открыть кандидата `sec-demo-004` или соответствующую карточку проверки. +3. Показать контекст: demo user, demo host, приложение и сетевой readiness + признак. +4. Показать timeline: активность, UEBA signal, network readiness, review step. +5. Открыть evidence package: + `docs/fixtures/pilot-v1-demo/evidence-pack/investigation-contract.json`. +6. Показать Markdown-отчет: + `docs/fixtures/pilot-v1-demo/evidence-pack/investigation-report.md`. +7. Завершить выводом: решение принимает человек, система фиксирует контекст и + материалы для проверки. + +## Какие выводы делать + +- Forensics View помогает собрать проверяемый пакет материалов. +- Timeline объясняет, почему кандидат попал в ручную проверку. +- Evidence package связывает события без публикации персональных данных. +- Markdown export пригоден для внутреннего разбора и передачи ответственному + сотруднику. + +## Какие вопросы ожидать + +| Вопрос заказчика | Ответ | +| --- | --- | +| Это юридическая экспертиза? | Нет. Это внутренний evidence package для ручного расследования. | +| Система доказывает нарушение? | Нет. Она показывает контекст и причины для проверки. | +| Где реальные ФИО и хосты? | В demo-pack их нет. Используются только synthetic identifiers. | +| Можно ли экспортировать отчет? | Да, в проекте есть Markdown-отчет и demo-пример отчета. | +| Сетевой признак означает реальный pfSense ingestion? | Нет. В demo-pack это readiness/contract-only пример. | + +## Границы демонстрации + +- Не показывать реальные evidence/screenshots. +- Не обещать процессуальную доказательную силу отчета. +- Не утверждать, что network readiness равен production ingestion. +- Не добавлять во время показа новые источники или collectors. diff --git a/docs/demo/DEMO_SCENARIO_SECURITY_RU.md b/docs/demo/DEMO_SCENARIO_SECURITY_RU.md new file mode 100644 index 0000000..4028042 --- /dev/null +++ b/docs/demo/DEMO_SCENARIO_SECURITY_RU.md @@ -0,0 +1,56 @@ +# Demo Scenario: ИБ + +Цель: показать пользу AWatch-rus для ИБ как explainable security analytics +слоя без заявления продукта как SIEM, EDR или классической DLP. + +Данные: только синтетический dataset +`docs/fixtures/pilot-v1-demo/demo-seed-data.json` и demo evidence pack. + +## Что показывать + +- роль `Безопасность`; +- UEBA Score v1; +- incident candidates; +- Risk Narrative; +- `Рекомендуемые действия ИБ`; +- security correlation, если она есть в текущем отчете; +- ограничения pfSense readiness как `contract_only`. + +## Порядок показа + +1. Выбрать роль `Безопасность`. +2. Показать UEBA Score v1: numeric score, severity и reason codes. +3. Показать кандидата на проверку `sec-demo-004`. +4. Объяснить, что severity является сигналом для ручной проверки, а не + автоматическим вердиктом. +5. Показать Risk Narrative: как Workforce KPI, UEBA, coverage и candidate + складываются в общий риск. +6. Показать `Рекомендуемые действия ИБ`: передать кандидата в ИБ, провести + проверку и зафиксировать решение. +7. При необходимости открыть demo evidence pack: + `docs/fixtures/pilot-v1-demo/evidence-pack/security-technical-summary.md`. + +## Какие выводы делать + +- ИБ получает объяснимую очередь проверки без ML/LLM. +- UEBA Score v1 rule-based: причины видны через reason codes. +- Кандидаты отделены от подтвержденных инцидентов. +- pfSense показан честно: contract/readiness layer, не production ingestion. +- Action Center помогает не потерять ручное действие и срок. + +## Какие вопросы ожидать + +| Вопрос заказчика | Ответ | +| --- | --- | +| Это SIEM-корреляция? | Нет. Это security analytics и readiness-контракты поверх существующих сигналов. | +| UEBA использует ML? | Нет. UEBA Score v1 rule-based, детерминированный и объяснимый. | +| Что значит incident candidate? | Это кандидат на ручную проверку, не подтвержденный инцидент. | +| pfSense уже собирается в production? | Нет. Для Pilot v1 pfSense readiness обозначен как `contract_only`, если ingestion отдельно не включен и не принят. | +| Можно ли автоматически блокировать пользователя? | Нет. Auto-remediation и блокировки не реализуются в этом demo-pack. | + +## Границы демонстрации + +- Не заявлять DLP/SIEM/EDR функциональность. +- Не обещать автоматическую блокировку, карантин или изменение политик. +- Не показывать реальные сетевые адреса; использовать только TEST-NET примеры. +- Не смешивать ИБ-экран с управленческим Workforce Dashboard. diff --git a/docs/fixtures/pilot-v1-demo/README_RU.md b/docs/fixtures/pilot-v1-demo/README_RU.md index 9dd82b4..6a796ae 100644 --- a/docs/fixtures/pilot-v1-demo/README_RU.md +++ b/docs/fixtures/pilot-v1-demo/README_RU.md @@ -6,7 +6,8 @@ AWatch-rus Pilot v1. Состав: - `demo-seed-data.json` - демонстрационный набор сигналов Workforce, Security, - Forensics, UEBA и pfSense readiness; + Forensics, UEBA, remote-session growth, low agent coverage и pfSense + readiness; - `evidence-pack/executive-summary.md` - краткий управленческий вывод; - `evidence-pack/security-technical-summary.md` - техническая сводка для ИБ; - `evidence-pack/investigation-report.md` - Markdown-отчет расследования; @@ -23,3 +24,12 @@ AWatch-rus Pilot v1. В demo fixtures запрещены реальные IP-адреса, hostname, логины, ФИО, подразделения заказчика и реальные события безопасности. + +Покрытые demo-сценарии: + +- нормальная работа; +- снижение активности; +- рост удаленных сессий; +- повышенный UEBA; +- incident candidate; +- низкое покрытие агентами. diff --git a/docs/fixtures/pilot-v1-demo/demo-seed-data.json b/docs/fixtures/pilot-v1-demo/demo-seed-data.json index e05f032..7e1184a 100644 --- a/docs/fixtures/pilot-v1-demo/demo-seed-data.json +++ b/docs/fixtures/pilot-v1-demo/demo-seed-data.json @@ -6,12 +6,56 @@ "real_personal_data": false, "real_customer_hosts": false, "real_customer_networks": false, + "real_domains": false, + "real_logins": false, + "personal_data": false, "allowed_network_examples": [ "192.0.2.0/24", "198.51.100.0/24", "203.0.113.0/24" ] }, + "scenario_coverage": [ + { + "scenario": "normal_work", + "covered_by": [ + "dept-sales-demo", + "activity event normal_activity" + ] + }, + { + "scenario": "activity_drop", + "covered_by": [ + "dept-warehouse-demo", + "activity event low_activity" + ] + }, + { + "scenario": "remote_session_growth", + "covered_by": [ + "remote_session_summary", + "rdp-session activity events" + ] + }, + { + "scenario": "elevated_ueba", + "covered_by": [ + "ueba_score_examples sec-demo-004" + ] + }, + { + "scenario": "incident_candidate", + "covered_by": [ + "investigation case-demo-004" + ] + }, + { + "scenario": "low_agent_coverage", + "covered_by": [ + "agent_coverage" + ] + } + ], "departments": [ { "department_id": "dept-sales-demo", @@ -106,6 +150,14 @@ "kind": "low_activity", "duration_minutes": 8 }, + { + "timestamp": "2026-06-06T18:25:00Z", + "user_ref": "demo-user-003", + "host": "HOST-DEMO-03", + "app": "rdp-session", + "kind": "remote_session_activity", + "duration_minutes": 31 + }, { "timestamp": "2026-06-06T21:40:00Z", "user_ref": "demo-user-005", @@ -113,8 +165,23 @@ "app": "admin-tool-demo.exe", "kind": "night_access_anomaly", "duration_minutes": 24 + }, + { + "timestamp": "2026-06-06T21:42:00Z", + "user_ref": "demo-user-005", + "host": "HOST-DEMO-05", + "app": "rdp-session", + "kind": "remote_session_activity", + "duration_minutes": 27 } ], + "remote_session_summary": { + "baseline_sessions_7d_avg": 2, + "demo_period_sessions": 6, + "growth_percent": 200, + "risk_signal": "remote_session_growth", + "explanation": "В демонстрационном периоде число удаленных сессий выше базового уровня." + }, "security_events": [ { "event_id": "sec-demo-001", @@ -209,6 +276,115 @@ ] } ], + "agent_coverage": { + "expected_agents": 6, + "active_agents": 4, + "stale_agents": 1, + "missing_agents": 1, + "coverage_percent": 67, + "sla_status": "WARNING", + "demo_impact": "KPI требует осторожной интерпретации из-за неполного покрытия." + }, + "workforce_kpi_example": { + "kpi_score": 64, + "confidence": "medium", + "coverage": { + "agent_coverage_percent": 67, + "data_freshness": "fresh", + "missing_sources": [ + "HOST-DEMO-06" + ] + }, + "factors": [ + { + "name": "productive_activity", + "label": "Полезная активность", + "impact": "+28", + "explanation": "Рабочие приложения присутствуют в дневном периоде." + }, + { + "name": "idle_time", + "label": "Простой", + "impact": "-9", + "explanation": "Есть периоды низкой активности в рабочее время." + }, + { + "name": "remote_session_activity", + "label": "Удаленные сессии", + "impact": "-11", + "explanation": "Удаленные сессии выросли относительно демонстрационной базы." + }, + { + "name": "data_coverage", + "label": "Полнота данных", + "impact": "-7", + "explanation": "Покрытие агентами ниже целевого уровня." + } + ] + }, + "risk_narrative_example": { + "risk_level": "high", + "risk_score": 78, + "title": "Рост операционного риска требует ручной проверки", + "summary": "Снижение активности в одном подразделении совпало с ростом удаленных сессий, повышенным UEBA и неполным покрытием агентами.", + "why": [ + "Workforce KPI ниже целевого уровня", + "Есть рост удаленных сессий", + "UEBA Score v1 повышен до critical на демонстрационном кандидате", + "Покрытие агентами ниже целевого уровня" + ], + "limitations": [ + "Risk Narrative является rule-based выводом", + "pfSense readiness находится в contract_only режиме", + "Данные демонстрационные и не являются production ingestion" + ] + }, + "recommended_actions": [ + { + "priority": "high", + "title": "Проверить подразделение с низким индексом активности", + "summary": "Просадка активности требует управленческого разбора причины.", + "owner_role": "manager", + "recommended_deadline": "24h", + "reason_codes": [ + "LOW_WORKFORCE_KPI", + "HIGH_REMOTE_ACTIVITY" + ], + "evidence": [ + "Workforce KPI demo score: 64%", + "Рост удаленных сессий: +200%" + ] + }, + { + "priority": "high", + "title": "Передать кандидата в контур ИБ", + "summary": "UEBA Score v1 повышен; требуется ручная проверка специалистом ИБ.", + "owner_role": "security", + "recommended_deadline": "24h", + "reason_codes": [ + "HIGH_UEBA", + "INCIDENT_CANDIDATE" + ], + "evidence": [ + "sec-demo-004 severity critical", + "Связка activity/app/network readiness" + ] + }, + { + "priority": "high", + "title": "Проверить покрытие агентами", + "summary": "Неполное покрытие снижает доверие к KPI и должно быть проверено эксплуатацией.", + "owner_role": "admin", + "recommended_deadline": "24h", + "reason_codes": [ + "LOW_COVERAGE" + ], + "evidence": [ + "Покрытие агентами: 67%", + "Один агент stale, один отсутствует" + ] + } + ], "investigation": { "investigation_id": "case-demo-004", "candidate_id": "sec-demo-004", diff --git a/docs/roadmap/TASK_007_CUSTOMER_DEMO_PACK.md b/docs/roadmap/TASK_007_CUSTOMER_DEMO_PACK.md index e6c563e..73b1502 100644 --- a/docs/roadmap/TASK_007_CUSTOMER_DEMO_PACK.md +++ b/docs/roadmap/TASK_007_CUSTOMER_DEMO_PACK.md @@ -210,4 +210,45 @@ docs/PILOT_VALUE_PROPOSITION_RU.md 4. Demo screenshots. 5. Demo dataset. 6. Проверки. -7. Ограничения. \ No newline at end of file +7. Ограничения. + +## Выполнение + +Статус: done. + +Добавленные документы: + +- `docs/demo/DEMO_SCENARIO_EXECUTIVE_RU.md`; +- `docs/demo/DEMO_SCENARIO_SECURITY_RU.md`; +- `docs/demo/DEMO_SCENARIO_FORENSICS_RU.md`; +- `docs/demo/DEMO_PACK_ACCEPTANCE_CHECKLIST_RU.md`; +- `docs/DEMO_REPORT_EXAMPLE_RU.md`; +- `docs/PILOT_VALUE_PROPOSITION_RU.md`. + +Обновленные документы и материалы: + +- `README.md`; +- `docs/DEMO_RUNBOOK_RU.md`; +- `docs/PILOT_DEMO_SCENARIO_RU.md`; +- `docs/PILOT_V1_EVIDENCE_RU.md`; +- `docs/fixtures/pilot-v1-demo/README_RU.md`; +- `docs/fixtures/pilot-v1-demo/demo-seed-data.json`. +- `scripts/detmir-pilot-demo-smoke.mjs`. + +Demo dataset: + +- синтетический; +- покрывает нормальную работу, снижение активности, рост удаленных сессий, + повышенный UEBA, incident candidate и низкое покрытие агентами; +- использует только demo identifiers и TEST-NET адреса. + +Demo screenshots: + +- существующие PNG проверены как реальные изображения, не заглушки; +- обновление PNG не потребовалось. + +Ограничения: + +- новая функциональность, API, агенты, ML, LLM не добавлялись; +- SIEM/DLP/EDR claims не добавлялись; +- planned/future не описаны как implemented. diff --git a/scripts/detmir-pilot-demo-smoke.mjs b/scripts/detmir-pilot-demo-smoke.mjs index 1b35198..1fb6a8f 100644 --- a/scripts/detmir-pilot-demo-smoke.mjs +++ b/scripts/detmir-pilot-demo-smoke.mjs @@ -57,7 +57,15 @@ async function fetchText(baseUrl, relativePath, role = "executive") { function readDemoFiles() { const files = [ + "docs/DEMO_RUNBOOK_RU.md", + "docs/CUSTOMER_DEMO_SCENARIO_RU.md", "docs/PILOT_DEMO_SCENARIO_RU.md", + "docs/DEMO_REPORT_EXAMPLE_RU.md", + "docs/PILOT_VALUE_PROPOSITION_RU.md", + "docs/demo/DEMO_SCENARIO_EXECUTIVE_RU.md", + "docs/demo/DEMO_SCENARIO_SECURITY_RU.md", + "docs/demo/DEMO_SCENARIO_FORENSICS_RU.md", + "docs/demo/DEMO_PACK_ACCEPTANCE_CHECKLIST_RU.md", "docs/fixtures/pilot-v1-demo/README_RU.md", "docs/fixtures/pilot-v1-demo/demo-seed-data.json", "docs/fixtures/pilot-v1-demo/evidence-pack/executive-summary.md", @@ -71,6 +79,80 @@ function readDemoFiles() { })); } +function validateDemoDataset() { + const file = "docs/fixtures/pilot-v1-demo/demo-seed-data.json"; + const data = JSON.parse(fs.readFileSync(path.join(root, file), "utf8")); + const scenarios = new Set((data.scenario_coverage || []).map((item) => item.scenario)); + const required = [ + "normal_work", + "activity_drop", + "remote_session_growth", + "elevated_ueba", + "incident_candidate", + "low_agent_coverage", + ]; + const missing = required.filter((name) => !scenarios.has(name)); + return { + ok: data.demo_only === true + && data.privacy?.real_personal_data === false + && data.privacy?.real_customer_hosts === false + && data.privacy?.real_customer_networks === false + && data.privacy?.real_domains === false + && data.privacy?.real_logins === false + && data.privacy?.personal_data === false + && missing.length === 0, + missing, + scenarios: [...scenarios].sort(), + }; +} + +function validateDemoScreenshots() { + const files = [ + "docs/screenshots/01-executive-overview.png", + "docs/screenshots/02-risk-heatmap.png", + "docs/screenshots/03-security-view.png", + "docs/screenshots/04-operations-view.png", + "docs/screenshots/05-investigation-pack.png", + "docs/screenshots/06-markdown-report.png", + "docs/screenshots/07-product-architecture.png", + ]; + const missing = []; + for (const file of files) { + const fullPath = path.join(root, file); + if (!fs.existsSync(fullPath)) { + missing.push({ file, reason: "missing" }); + continue; + } + const bytes = fs.readFileSync(fullPath); + if (bytes.length <= 1000 || !bytes.subarray(0, 8).equals(Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]))) { + missing.push({ file, reason: "not_png_or_too_small", size: bytes.length }); + } + } + return { ok: missing.length === 0, missing, count: files.length }; +} + +function validateDemoMarkdownLinks() { + const findings = []; + const linkPattern = /!?\[[^\]]+\]\(([^)]+)\)/g; + for (const item of readDemoFiles()) { + let match = null; + while ((match = linkPattern.exec(item.text)) !== null) { + const raw = String(match[1] || "").trim(); + const target = raw.split(/\s+/)[0].replace(/^<|>$/g, ""); + if (!target || target.startsWith("#") || target.startsWith("http://") || target.startsWith("https://") || target.startsWith("mailto:")) { + continue; + } + const withoutAnchor = target.split("#", 1)[0]; + if (!withoutAnchor) continue; + const resolved = path.resolve(root, path.dirname(item.file), withoutAnchor); + if (!fs.existsSync(resolved)) { + findings.push({ file: item.file, target }); + } + } + } + return { ok: findings.length === 0, findings }; +} + function scanDemoFiles() { const forbidden = [ /10\.10\.\d+\.\d+/, @@ -101,6 +183,13 @@ async function main() { const baseUrl = normalizeBaseUrl(env("DETMIR_PORTAL_SMOKE_URL", "http://127.0.0.1:8720/portal/")); const checks = []; + const dataset = validateDemoDataset(); + pass(checks, "demo_dataset_loads_and_covers_required_scenarios", dataset.ok, dataset); + const screenshots = validateDemoScreenshots(); + pass(checks, "demo_screenshots_exist_and_are_png", screenshots.ok, screenshots); + const markdownLinks = validateDemoMarkdownLinks(); + pass(checks, "demo_markdown_links_valid", markdownLinks.ok, markdownLinks); + const html = await fetchText(baseUrl, "", "executive"); pass(checks, "portal_html_available", html.ok && contains(html.text, "AWatch-rus"), { status: html.status,