98 lines
3.5 KiB
Markdown
98 lines
3.5 KiB
Markdown
# 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: <api-key>
|
|
```
|
|
|
|
При недоступности сервера запись не теряется: агент сохраняет JSON в spool и повторно отправляет после восстановления связи.
|