diff --git a/README.md b/README.md index 3872b02..5beef19 100755 --- a/README.md +++ b/README.md @@ -37,6 +37,42 @@ JSON API, OpenAPI и TypeScript declarations. Dioxus не используетс рассматривается для Pilot v1.0. React, Tauri и Electron также не входят в текущий основной UI. +## Product Evolution + +AWatch-rus уже является рабочей платформой Workforce + Security + Forensics. +Архитектура предусматривает расширение на агентные и agentless-источники +данных. Planned/Future элементы ниже не являются реализованной функциональностью +и не должны трактоваться как готовые collectors или integrations. + +Implemented: + +- Rust Backend. +- Rust Agent. +- HTML/HTMX Portal. +- Role-based Pilot v1 contracts. +- Product architecture page `/portal/architecture`. +- Workforce reports. +- UEBA v1. +- Forensics reporting. +- pfSense contract/readiness layer со статусом `contract_only`, без заявления + production ingestion. + +Planned: + +- Provider detail expansion under `/portal/architecture`. +- PowerShell Provider. +- SSH Provider. +- Syslog Provider. +- 1C Provider как формализация текущего file-based 1C analytics направления. +- Russian OS support validation. + +Future: + +- Extended Enterprise connectors. +- SCUD/VPN integrations. +- React/TypeScript Enterprise UI. +- Tauri Desktop Forensics. + ## Что видит оператор - Работал ли пользователь за компьютером или в удаленной сессии. @@ -128,6 +164,7 @@ Markdown-отчет собирает главный вывод, риски по - [Pilot v1.0](docs/PILOT_V1_RU.md) - [Pilot v1.0 acceptance checklist](docs/PILOT_V1_ACCEPTANCE_CHECKLIST_RU.md) - [Pilot v1.0 evidence](docs/PILOT_V1_EVIDENCE_RU.md) +- [Позиционирование продукта](docs/PRODUCT_POSITIONING_RU.md) - [Экосистема сборщиков](docs/COLLECTOR_ECOSYSTEM_RU.md) - [Стратегия внедрения](docs/DEPLOYMENT_STRATEGY_RU.md) - [Стратегия платформ](docs/PLATFORM_STRATEGY_RU.md) diff --git a/adk-rust/crates/detmir-portal/src/main.rs b/adk-rust/crates/detmir-portal/src/main.rs index 674e1fd..e8f2ba8 100644 --- a/adk-rust/crates/detmir-portal/src/main.rs +++ b/adk-rust/crates/detmir-portal/src/main.rs @@ -24,6 +24,7 @@ use sha2::{Digest, Sha256}; use tiny_http::{Header, Method, Request, Response, Server, StatusCode}; const INDEX_HTML: &str = include_str!("static/index.html"); +const ARCHITECTURE_HTML: &str = include_str!("static/architecture.html"); const APP_CSS: &str = include_str!("static/app.css"); const APP_JS: &str = include_str!("static/app.js"); const API_CONTRACT_OPENAPI: &str = include_str!("contracts/openapi.json"); @@ -1372,13 +1373,10 @@ fn handle_request(request: Request, args: &Cli, snapshot_cache: &SnapshotCache) if let Some((evidence_id, download)) = parse_evidence_screenshot_path(&path) { return handle_evidence_screenshot(request, args, &evidence_id, download); } + if let Some(html) = portal_html_route(&path) { + return respond_text(request, StatusCode(200), html, "text/html; charset=utf-8"); + } match path.as_str() { - "/" | "/operator" | "/manager" | "/owner" | "/incidents" | "/reports" => respond_text( - request, - StatusCode(200), - INDEX_HTML, - "text/html; charset=utf-8", - ), "/app.css" => respond_text(request, StatusCode(200), APP_CSS, "text/css; charset=utf-8"), "/app.js" => respond_text( request, @@ -1506,6 +1504,14 @@ fn handle_request(request: Request, args: &Cli, snapshot_cache: &SnapshotCache) } } +fn portal_html_route(path: &str) -> Option<&'static str> { + match path { + "/" | "/operator" | "/manager" | "/owner" | "/incidents" | "/reports" => Some(INDEX_HTML), + "/architecture" => Some(ARCHITECTURE_HTML), + _ => None, + } +} + fn handle_evidence_only_request(request: Request, args: &Cli) -> Result<()> { let method = request.method().clone(); let path = normalize_path(request.url()); @@ -9961,6 +9967,7 @@ mod tests { fn normalizes_gateway_prefix() { assert_eq!(normalize_path("/portal/api/health?x=1"), "/api/health"); assert_eq!(normalize_path("/portal/"), "/"); + assert_eq!(normalize_path("/portal/architecture"), "/architecture"); assert_eq!(normalize_path("/api/health"), "/api/health"); assert!(query_flag("/api/reports?anonymize=1", "anonymize")); assert!(query_flag("/api/reports?anonymize=true", "anonymize")); @@ -9976,6 +9983,23 @@ mod tests { assert_eq!(safe_download_stem("risk:candidate/1"), "risk_candidate_1"); } + #[test] + fn portal_architecture_page_is_informational_and_status_labeled() { + assert!(portal_html_route("/architecture").is_some()); + let body = portal_html_route("/architecture").unwrap(); + for marker in [ + "Rust Agent", + "PowerShell Provider", + "implemented", + "planned", + "future", + "contract_only", + "Страница является информационной", + ] { + assert!(body.contains(marker), "architecture page missing {marker}"); + } + } + #[test] fn api_contract_artifacts_are_valid_and_future_ui_ready() { let openapi: Value = diff --git a/adk-rust/crates/detmir-portal/src/static/app.css b/adk-rust/crates/detmir-portal/src/static/app.css index c2a0468..f80bb8c 100644 --- a/adk-rust/crates/detmir-portal/src/static/app.css +++ b/adk-rust/crates/detmir-portal/src/static/app.css @@ -243,6 +243,63 @@ h1 { color: #ffffff; } +.nav-link { + display: block; + width: 100%; + border: 1px solid transparent; + background: transparent; + color: #cbd5e1; + border-radius: 8px; + padding: 11px 12px; + font: inherit; + font-weight: 700; + text-align: left; + text-decoration: none; +} + +.nav-link:hover, +.nav-link.is-active { + background: rgba(148, 163, 184, 0.14); + color: #ffffff; +} + +.architecture-page .topbar { + margin-bottom: 16px; +} + +.architecture-content { + display: grid; + gap: 16px; +} + +.architecture-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + gap: 10px; +} + +.architecture-grid article { + display: grid; + gap: 8px; + align-content: start; + min-height: 150px; + padding: 14px; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--soft); +} + +.architecture-grid strong { + font-size: 15px; +} + +.architecture-grid p { + margin: 0; + color: var(--muted); + font-size: 13px; + line-height: 1.45; +} + .summary-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); diff --git a/adk-rust/crates/detmir-portal/src/static/architecture.html b/adk-rust/crates/detmir-portal/src/static/architecture.html new file mode 100644 index 0000000..70dae5e --- /dev/null +++ b/adk-rust/crates/detmir-portal/src/static/architecture.html @@ -0,0 +1,80 @@ + + + + + + AWatch-rus Product Architecture + + + +
+ +
+
+
+

AWatch-rus

+

Product Architecture

+

Текущие компоненты, предусмотренные расширения и будущие направления без заявления фиктивных collectors.

+
+ +
+ +
+
+

Current Components

+

Эти элементы относятся к текущему рабочему контуру AWatch-rus.

+
+
implementedBackend

Rust-first серверные helpers, report layer и portal runtime.

+
implementedPortal

Rust server-rendered HTML + HTMX-compatible JSON API.

+
implementedRust Agent

Агентский Rust runtime и Windows telemetry paths в текущей parity-модели.

+
implementedReports

Workforce, Security и Forensics отчеты, включая Markdown export.

+
implementedUEBA v1

Прозрачная rule-based модель без ML, LLM и внешних SaaS.

+
implementedForensics

Карточки расследований, timeline и evidence package.

+
implementedRole gates

Серверные проверки доступа для Pilot v1 ролей.

+
+
+ +
+

Planned Extensions

+

Эти направления предусмотрены архитектурой, но не являются готовой функциональностью без отдельной реализации и тестов.

+
+
plannedPowerShell Provider

Agentless/legacy Windows source после формализации provider contract.

+
plannedSSH Provider

Read-only probes и existing logs для Linux/Unix/network hosts.

+
plannedSyslog Provider

Нормализация событий от внешних log sources.

+
planned1C Provider

Расширение текущего file-based 1C analytics сценария до формального provider.

+
contract_onlypfSense Provider

Readiness contracts и demo fixture без заявления production ingestion.

+
plannedRussian OS validation

Astra Linux, РЕД ОС, Альт и РОСА требуют distro-specific smoke и compatibility matrix.

+
+
+ +
+

Future

+

Эти элементы являются будущими направлениями, а не частью текущего Pilot v1.

+
+
futureSCUD Provider

Сопоставление с физическим доступом после отдельного vendor/source contract.

+
futureVPN Provider

Сетевой контекст для расследований после отдельной реализации.

+
futureReact/TypeScript Enterprise UI

Будущий enterprise UI, не текущий основной portal UI.

+
futureTauri Desktop Forensics

Отдельный desktop-контур для forensic workflows.

+
+
+ +
+

Граница заявления

+

Страница является информационной. Она не добавляет backend API, collectors или ingestion. Planned и future элементы не считаются implemented.

+
+
+
+
+ + diff --git a/adk-rust/crates/detmir-portal/src/static/index.html b/adk-rust/crates/detmir-portal/src/static/index.html index c7e68bd..f491887 100644 --- a/adk-rust/crates/detmir-portal/src/static/index.html +++ b/adk-rust/crates/detmir-portal/src/static/index.html @@ -22,6 +22,7 @@ + Архитектура diff --git a/docs/PRODUCT_POSITIONING_RU.md b/docs/PRODUCT_POSITIONING_RU.md new file mode 100644 index 0000000..55f396d --- /dev/null +++ b/docs/PRODUCT_POSITIONING_RU.md @@ -0,0 +1,141 @@ +# Product Positioning: AWatch-rus + +AWatch-rus позиционируется как рабочая платформа: + +- Workforce Analytics; +- Security Analytics; +- Forensics. + +Это не SIEM, не классический DLP, не EDR/XDR и не сертифицированная СЗИ. +Интеграции и providers со статусом `planned` или `future` не считаются +реализованной функциональностью. + +## Статусы + +- `implemented` - есть код, контракт, документация или проверенный runtime path. +- `planned` - направление предусмотрено архитектурой и требует реализации или + расширения parity. +- `future` - возможное развитие продукта без текущего готового collector/API. + +## Workforce Analytics + +Целевая аудитория: + +- руководители; +- руководители подразделений; +- эксплуатация, отвечающая за качество данных. + +Задачи слоя: + +- активность сотрудников; +- подразделения; +- KPI и управленческие показатели; +- тренды; +- нагрузка, перегрузка и недогрузка. + +Implemented: + +- Executive/Workforce portal views; +- Workforce reports и Markdown-отчет; +- role-based Pilot v1 contracts для executive/manager; +- Rust-first backend helpers для worktime/report layer. + +Planned: + +- agentless PowerShell/SSH/Syslog providers как источники пилотного обследования; +- расширение матрицы совместимости agent/server/portal; +- validation profiles для российских Linux-дистрибутивов. + +Future: + +- расширенные Enterprise connectors для HR/directory context; +- React/TypeScript Enterprise UI как отдельный будущий интерфейсный слой; +- дополнительные отраслевые KPI после отдельного согласования схем данных. + +## Security Analytics + +Целевая аудитория: + +- ИБ; +- технический аудитор; +- эксплуатация, отвечающая за контроль отклонений. + +Задачи слоя: + +- риск-скоринг; +- UEBA; +- аномалии; +- контроль отклонений; +- кандидаты на проверку. + +Implemented: + +- UEBA Score v1 как объяснимая rule-based модель без ML/LLM; +- Security portal view; +- события безопасности и DLP/evidence как прикладные модули; +- аудит ручных решений по кандидатам. + +Planned: + +- PowerShell Provider для legacy/agentless Windows-источников; +- SSH Provider для read-only probes и existing logs; +- Syslog Provider для нормализации событий от внешних источников; +- pfSense readiness остается `contract_only`, без заявления реального ingestion. + +Future: + +- SIEM interoperability как внешняя интеграция, а не замена SIEM; +- VPN provider после отдельного контракта и тестов; +- SCUD provider после отдельного vendor/source contract. + +## Forensics + +Целевая аудитория: + +- ИБ; +- внутренние расследования; +- технические ответственные за evidence package. + +Задачи слоя: + +- расследования; +- timeline; +- evidence package; +- корреляция событий; +- экспорт отчетов. + +Implemented: + +- Forensics portal view; +- карточки расследований и timeline; +- investigation pack; +- Markdown export; +- связка user / host / app / network event там, где такие данные есть в + текущих источниках. + +Planned: + +- расширение bounded EVTX/Hayabusa upload parity; +- унификация evidence package acceptance для дополнительных источников; +- расширение Rust validation CLI для полного замещения legacy `.ps1` paths. + +Future: + +- Tauri Desktop Forensics как отдельный будущий desktop-контур; +- расширенная корреляция с VPN/SCUD/directory events после появления + реализованных providers; +- offline forensic workbench без изменения Pilot v1 contracts. + +## Коммерческая граница заявления + +AWatch-rus уже является рабочей платформой Workforce + Security + Forensics. +Архитектура предусматривает расширение на агентные и agentless-источники +данных, но каждый новый источник должен отдельно получить: + +- контракт данных; +- реализацию; +- тесты; +- документацию; +- smoke-проверку; +- честный статус готовности. +