# AWatch-rus Rust Agent Architecture Документ описывает агентный слой AWatch-rus v0.3. ## Назначение `awatch-agent-rs` является собственным Rust-агентом телеметрии для контура: ```text Agent -> Telemetry -> Analytics -> Risk -> Investigation -> Report ``` Агент собирает техническую и операционную телеметрию рабочего места или сервера и отправляет ее в серверный endpoint `POST /api/telemetry`. ## Границы реализации v0.3 - Linux collector собирает реальные данные через `/proc`, `/sys`, окружение сессии и системные журналы. - Windows collector формирует `TelemetryRecord` без PowerShell primary collection: identity/session/process/network/resource context через read-only системные источники и командные probe-фолбэки. Глубина WinAPI, ETW, Event Log API и WMI-библиотеки Rust является следующим расширением. - FreeBSD collector формирует `TelemetryRecord` через read-only системные probe: `uname`, `sysctl`, `ps`, `ifconfig`, `sockstat`, `/var/log/messages`. Глубина `procstat`/`kvm` является следующим расширением. - PowerShell не является основным механизмом сбора. Он допускается только как будущий `legacy` fallback под feature flag. - Агент не содержит скрытых функций, драйверов ядра, кейлоггера, записи экрана, перехвата документов и контентного DLP-анализа. ## Crate ```text adk-rust/crates/awatch-agent-rs ``` Структура: ```text src/main.rs src/config.rs src/telemetry.rs src/transport.rs src/collectors/mod.rs src/collectors/common.rs src/collectors/linux.rs src/collectors/windows.rs src/collectors/freebsd.rs ``` ## Единая модель TelemetryRecord Все платформы должны отдавать один JSON-контракт: - `agent_id` - `hostname` - `os_name` - `os_version` - `platform` - `username` - `domain` - `timestamp` - `uptime_seconds` - `cpu_usage_percent` - `memory_total` - `memory_used` - `active_sessions` - `rdp_sessions` - `ssh_sessions` - `processes` - `network_interfaces` - `network_connections` - `workforce_activity` - `security_events` - `collector_version` Дополнительные структуры: `SessionInfo`, `ProcessInfo`, `NetworkInterfaceInfo`, `NetworkConnectionInfo`, `WorkforceActivityInfo`, `SecurityEventInfo`. ## Collector trait `TelemetryCollector` задает единый контракт: ```text collect_identity() collect_sessions() collect_processes() collect_resources() collect_network() collect_security_events() collect_workforce_activity() collect_all() ``` Такой интерфейс позволяет расширять Windows, Linux, FreeBSD и pfSense mode без изменения серверного API. ## Транспорт Транспорт использует JSON over HTTPS: ```text POST /api/telemetry x-api-key: ``` При недоступности сервера запись не теряется: агент сохраняет JSON в spool и повторно отправляет после восстановления связи.