145 lines
5.2 KiB
SQL
145 lines
5.2 KiB
SQL
INSERT INTO analytics_1c.detections
|
|
SELECT *
|
|
FROM (
|
|
SELECT
|
|
ts,
|
|
concat('after_hours_login:', infobase, ':', user, ':', toString(toUnixTimestamp(ts))) AS detection_id,
|
|
infobase,
|
|
'after_hours_login' AS rule_id,
|
|
'Вход вне рабочего времени' AS rule_title,
|
|
'user' AS entity_type,
|
|
user AS entity_id,
|
|
'medium' AS severity,
|
|
35 AS score,
|
|
concat('Пользователь ', user, ' выполнил вход вне рабочего времени') AS summary,
|
|
'open' AS status
|
|
FROM analytics_1c.reglog_events
|
|
WHERE event_name ILIKE '%login%'
|
|
AND toHour(ts) NOT BETWEEN 8 AND 20
|
|
) AS src
|
|
WHERE src.detection_id NOT IN (SELECT detection_id FROM analytics_1c.detections);
|
|
|
|
INSERT INTO analytics_1c.detections
|
|
SELECT *
|
|
FROM (
|
|
SELECT
|
|
ts,
|
|
concat('large_manual_adjustment:', infobase, ':', document_id, ':', toString(toUnixTimestamp(ts)), ':', toString(line_no)) AS detection_id,
|
|
infobase,
|
|
'large_manual_adjustment' AS rule_id,
|
|
'Крупная корректировка проводки' AS rule_title,
|
|
'document' AS entity_type,
|
|
document_id AS entity_id,
|
|
'high' AS severity,
|
|
75 AS score,
|
|
concat('Крупная корректировка по документу ', document_id, ' amount=', toString(amount), ' счет ', debit_account, ' -> ', credit_account) AS summary,
|
|
'open' AS status
|
|
FROM analytics_1c.business_events
|
|
WHERE event_kind = 'posting'
|
|
AND amount >= 50000
|
|
AND (
|
|
operation_type ILIKE '%adjust%'
|
|
OR document_type ILIKE '%Коррект%'
|
|
)
|
|
) AS src
|
|
WHERE src.detection_id NOT IN (SELECT detection_id FROM analytics_1c.detections);
|
|
|
|
INSERT INTO analytics_1c.detections
|
|
SELECT *
|
|
FROM (
|
|
SELECT
|
|
ts,
|
|
concat('risky_document_change:', infobase, ':', change_id) AS detection_id,
|
|
infobase,
|
|
'risky_document_change' AS rule_id,
|
|
'Рискованное изменение документа' AS rule_title,
|
|
if(document_id != '', 'document', 'counterparty') AS entity_type,
|
|
if(document_id != '', document_id, company_entity_key) AS entity_id,
|
|
'high' AS severity,
|
|
70 AS score,
|
|
concat('Изменение ', change_kind, ' field=', field_name, ' risk=', risk_tag) AS summary,
|
|
'open' AS status
|
|
FROM analytics_1c.document_change_events
|
|
WHERE risk_tag != ''
|
|
) AS src
|
|
WHERE src.detection_id NOT IN (SELECT detection_id FROM analytics_1c.detections);
|
|
|
|
INSERT INTO analytics_1c.detections
|
|
SELECT *
|
|
FROM (
|
|
SELECT
|
|
generated_at AS ts,
|
|
concat('company_signal:', signal_id, ':', toString(toUnixTimestamp(generated_at))) AS detection_id,
|
|
infobase,
|
|
concat('company_', signal_type) AS rule_id,
|
|
'Сигнал активности компании' AS rule_title,
|
|
'counterparty' AS entity_type,
|
|
counterparty AS entity_id,
|
|
severity,
|
|
score,
|
|
summary,
|
|
'open' AS status
|
|
FROM analytics_1c.v_company_health_current
|
|
WHERE severity IN ('medium', 'high', 'critical')
|
|
) AS src
|
|
WHERE src.detection_id NOT IN (SELECT detection_id FROM analytics_1c.detections);
|
|
|
|
INSERT INTO analytics_1c.detections
|
|
SELECT *
|
|
FROM (
|
|
SELECT
|
|
event_ts AS ts,
|
|
concat('failed_login_burst:', infobase, ':', user, ':', toString(toUnixTimestamp(event_ts))) AS detection_id,
|
|
infobase,
|
|
'failed_login_burst' AS rule_id,
|
|
'Всплеск ошибок входа' AS rule_title,
|
|
'user' AS entity_type,
|
|
user AS entity_id,
|
|
'high' AS severity,
|
|
65 AS score,
|
|
concat('У пользователя ', user, ' более 5 ошибок входа за 15 минут') AS summary,
|
|
'open' AS status
|
|
FROM (
|
|
SELECT
|
|
infobase,
|
|
user,
|
|
toStartOfFifteenMinutes(ts) AS window_ts,
|
|
max(ts) AS event_ts,
|
|
count() AS attempts
|
|
FROM analytics_1c.reglog_events
|
|
WHERE level IN ('error', 'warn')
|
|
AND (event_name ILIKE '%login%' OR message ILIKE '%парол%' OR message ILIKE '%auth%')
|
|
GROUP BY infobase, user, window_ts
|
|
HAVING attempts >= 5
|
|
)
|
|
) AS src
|
|
WHERE src.detection_id NOT IN (SELECT detection_id FROM analytics_1c.detections);
|
|
|
|
INSERT INTO analytics_1c.detections
|
|
SELECT *
|
|
FROM (
|
|
SELECT
|
|
event_ts AS ts,
|
|
concat('disk_latency_high:', host, ':', toString(toUnixTimestamp(event_ts))) AS detection_id,
|
|
'' AS infobase,
|
|
'disk_latency_high' AS rule_id,
|
|
'Высокая задержка диска' AS rule_title,
|
|
'host' AS entity_type,
|
|
host AS entity_id,
|
|
'high' AS severity,
|
|
65 AS score,
|
|
concat('На хосте ', host, ' задержка диска превышает 50 мс') AS summary,
|
|
'open' AS status
|
|
FROM (
|
|
SELECT
|
|
host,
|
|
toStartOfHour(ts) AS hour_ts,
|
|
max(ts) AS event_ts,
|
|
avg(disk_latency_ms) AS avg_latency_ms
|
|
FROM analytics_1c.host_events
|
|
GROUP BY host, hour_ts
|
|
HAVING avg_latency_ms > 50
|
|
)
|
|
) AS src
|
|
WHERE src.detection_id NOT IN (SELECT detection_id FROM analytics_1c.detections);
|