e38f62340f
Ingest correlates direct RDP logoff with open login events on the same host and user. Terminate-session treats missing qwinsta as already logged off. Co-authored-by: Cursor <cursoragent@cursor.com>
175 lines
4.6 KiB
JSON
175 lines
4.6 KiB
JSON
{
|
||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||
"$id": "https://git.kalinamall.ru/PapaTramp/security-alert-center/schemas/event-v1.json",
|
||
"title": "Security Alert Center Event v1",
|
||
"description": "Каноническое событие от ssh-monitor или RDP-login-monitor",
|
||
"type": "object",
|
||
"required": [
|
||
"schema_version",
|
||
"event_id",
|
||
"occurred_at",
|
||
"source",
|
||
"host",
|
||
"category",
|
||
"type",
|
||
"severity",
|
||
"title",
|
||
"summary"
|
||
],
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"schema_version": {
|
||
"type": "string",
|
||
"const": "1.0"
|
||
},
|
||
"event_id": {
|
||
"type": "string",
|
||
"format": "uuid",
|
||
"description": "UUID v4, уникален глобально, для идемпотентности"
|
||
},
|
||
"occurred_at": {
|
||
"type": "string",
|
||
"format": "date-time",
|
||
"description": "ISO 8601 с offset, время события на хосте"
|
||
},
|
||
"source": {
|
||
"type": "object",
|
||
"required": ["product", "product_version"],
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"product": {
|
||
"type": "string",
|
||
"enum": ["ssh-monitor", "rdp-login-monitor"]
|
||
},
|
||
"product_version": {
|
||
"type": "string"
|
||
},
|
||
"agent_instance_id": {
|
||
"type": "string",
|
||
"description": "Стабильный ID установки агента"
|
||
}
|
||
}
|
||
},
|
||
"host": {
|
||
"type": "object",
|
||
"required": ["hostname", "os_family"],
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"hostname": { "type": "string" },
|
||
"display_name": { "type": "string" },
|
||
"fqdn": { "type": "string" },
|
||
"os_family": {
|
||
"type": "string",
|
||
"enum": ["linux", "windows"]
|
||
},
|
||
"os_version": { "type": "string" },
|
||
"ipv4": { "type": "string" },
|
||
"ipv6": { "type": "string" },
|
||
"timezone": {
|
||
"type": "string",
|
||
"description": "IANA, например Europe/Moscow"
|
||
}
|
||
}
|
||
},
|
||
"category": {
|
||
"type": "string",
|
||
"enum": [
|
||
"auth",
|
||
"privilege",
|
||
"network",
|
||
"session",
|
||
"report",
|
||
"agent"
|
||
]
|
||
},
|
||
"type": {
|
||
"type": "string",
|
||
"description": "Машиночитаемый тип, см. docs/agent-integration.md",
|
||
"examples": [
|
||
"ssh.login.success",
|
||
"ssh.login.failed",
|
||
"privilege.sudo.command",
|
||
"ssh.ip.banned",
|
||
"ssh.bruteforce.mass",
|
||
"session.logind.new",
|
||
"rdp.login.success",
|
||
"rdp.login.failed",
|
||
"rdp.session.logoff",
|
||
"rdp.shadow.control.started",
|
||
"rdp.shadow.control.stopped",
|
||
"rdp.shadow.control.permission",
|
||
"winrm.session.started",
|
||
"smb.admin_share.access",
|
||
"rdg.connection.success",
|
||
"report.daily.ssh",
|
||
"agent.heartbeat",
|
||
"agent.inventory",
|
||
"agent.test"
|
||
]
|
||
},
|
||
"severity": {
|
||
"type": "string",
|
||
"enum": ["info", "warning", "high", "critical"]
|
||
},
|
||
"title": {
|
||
"type": "string",
|
||
"maxLength": 256
|
||
},
|
||
"summary": {
|
||
"type": "string",
|
||
"description": "Человекочитаемый текст (как в Telegram сейчас)",
|
||
"maxLength": 8192
|
||
},
|
||
"details": {
|
||
"type": "object",
|
||
"description": "Структурированные поля по типу события",
|
||
"additionalProperties": true
|
||
},
|
||
"raw": {
|
||
"type": "object",
|
||
"properties": {
|
||
"format": {
|
||
"type": "string",
|
||
"enum": ["journal", "windows_event_xml", "text"]
|
||
},
|
||
"payload": {
|
||
"type": "string",
|
||
"maxLength": 16384
|
||
}
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"tags": {
|
||
"type": "array",
|
||
"items": { "type": "string", "maxLength": 64 },
|
||
"maxItems": 32
|
||
},
|
||
"dedup_key": {
|
||
"type": "string",
|
||
"maxLength": 512
|
||
},
|
||
"correlation_id": {
|
||
"type": "string",
|
||
"format": "uuid"
|
||
},
|
||
"fingerprint": {
|
||
"type": "string",
|
||
"maxLength": 128
|
||
},
|
||
"enrichment": {
|
||
"type": "object",
|
||
"additionalProperties": true,
|
||
"properties": {
|
||
"attempt_number": { "type": "integer", "minimum": 0 },
|
||
"threshold": { "type": "integer", "minimum": 0 },
|
||
"risk_level": {
|
||
"type": "string",
|
||
"enum": ["low", "medium", "high", "critical"]
|
||
},
|
||
"filtered_out": { "type": "boolean" },
|
||
"filter_reason": { "type": "string" }
|
||
}
|
||
}
|
||
}
|
||
}
|