Подключение Сканер ВС 5 к SIEM Комрад

Как подключить Сканер ВС 5 к SIEM

Для подключения Сканера-ВС к SIEM-системы нужно:

  1. На АРМе с установленным Сканер-ВС разрешить подключения к PostgreSQL.
    1.1) Заходим в терминал
    1.2) Меняем в файле postgresql.conf строку, содержащую # listen_addresses = localhost на listen_addresses = ‘';
    nano /etc/postgresql/10/main/postgresql.conf
    ctrl+w listen_addresses
    Выставляем значение listen_addresses = '

    ctrl+s
    ctrl+x
    1.3) Переходим в файл: pg_hba.conf, добавить в IPv4 local connection строку host all 0.0.0.0/0 md5, закомментировать предыдущую;
    nano /etc/postgresql/10/main/pg_hba.conf
    Листаем в самый низ
    Комментируем строку host all all 127.0.0.1/32 md5
    Добавляем эту строку host all all 0.0.0.0/0 md5
    Должно получится так:
    # IPv4 local connections:
    host all all 0.0.0.0/0 md5
    #host all all 127.0.0.1/32 md5
    ctrl+s
    ctrl+x
    1.4) Далее, перезапускаем службу postgresql
    systemctl restart postgresql
    1.5) Проверяем, корректно ли перезапустился postgresql
    systemctl status postgresql
    Поле Active должно быть в статусе active (Active: active)
  2. Добавлем АРМ со Сканером-ВС в качестве источника у SQL-коллектора.(Пример реализован на KOMRAD Enterprize SIEM)
    2.1) На SIEM-системе добавляем источник у SQL-коллектора.
    “Администрирование”->“Настройка коллекторов”->“SQL”->Выбираем нужный коллектор->Добавляем источник
    Тип БД: PostgreSQL
    Строка подключения: postgres://sca-web:sca-web-password@<IP Сканера-ВС>:5432/sca-web
    Инициализирующий запрос:

– Полезным будет создать такие индексы:

– CREATE INDEX IF NOT EXISTS launch_progress_ix ON launches(id, progress);
– CREATE INDEX IF NOT EXISTS vulnerability_name_ix ON i18n_nvts(name);

SELECT id scanner_launch_id
FROM launches
ORDER BY id
LIMIT 1

	Регулярный запрос:

WITH launches_chunk AS (select *
FROM launches
WHERE id > 0
AND progress = 100
LIMIT 5),
per_port AS (SELECT launches_chunk.id scanner_launch_id,
launches_chunk.info scanner_launch_info,
pa.value vulns,
split_part(pa.key, ‘/’, 1) ecs_host_port,
split_part(pa.key, ‘/’, 2) ecs_network_protocol,
raw_result ->> ‘address’::text ecs_host_ip,
raw_result ->> ‘hostname’::text ecs_host_name,
pa.value ->> ‘state’ scanner_port_state,
raw_result ->> ‘state’::text scanner_state,
raw_result ->> ‘ports’::text scanner_ports,
‘scanner-vs’ as ecs_service_type,
id as ecs_event_sequence,
state as ecs_event_state,
errors as ecs_event_error,
“startedAt” as ecs_event_start,
“finishedAt” as ecs_event_end,
split as scanner_split,
parallel as scanner_parallel,
job_id as ecs_task_id,
user_id as ecs_user_id
FROM (select *
FROM launches
WHERE id > 0
AND progress = 100
LIMIT 5) launches_chunk,
unnest(result) as raw_result,
jsonb_each(to_jsonb(raw_result → ‘ports’)) pa)
select per_port.scanner_launch_id “Scanner.Launch.ID”,
per_port.scanner_launch_id,
per_port.scanner_launch_info “Scanner.Launch.Info”,
nvts.cve || nvts.bdu “ECS.Vulnerability.ID”,
‘CVSS’ “ECS.Vulnerability.Classification”,
nvts.cve “Scanner.Vulnerability.CVE”,
nvts.bdu “Scanner.Vulnerability.BDU”,
nvts.cvss2 “Scanner.Vulnerability.CVSS.Score.V2”,
nvts.cvss3 “Scanner.Vulnerability.CVSS.Score.V3”,
nvts.“cvss2Vector” “Scanner.Vulnerability.CVSS.V2”,
nvts.“cvss3Vector” “Scanner.Vulnerability.CVSS.V3”,
nvts.links[1] “ECS.Vulnerability.Reference”,
nvts.“bduLinks”[1] “Scanner.Vulnerability.BDU.Reference”,
nvts.family_name “Scanner.Vulnerability.FamilyName”,
nvts.qod “Scanner.Vulnerability.QOD”,
nvts.name “Scanner.Vulnerability.Name”,
i18n_nvts.name “Scanner.Vulnerability.Name.RU”,
nvts.summary “ECS.Vulnerability.Description”,
i18n_nvts.summary “Scanner.Vulnerability.Description.RU”,
nvts.oid “Scanner.Vulnerability.OID”,
nvts.impact “Scanner.Vulnerability.Impact”,
nvts.detect “Scanner.Vulnerability.Detect”,
nvts.insight “Scanner.Vulnerability.Insight”,
i18n_nvts.solution “ECS.Vulnerability.Solution”,
‘echelon’ as “ECS.Vulnerability.Scanner.Vendor”,
‘todo’ as “ECS.Vulnerability.ReportID”,
per_port.scanner_port_state “Scanner.Port.State”,
per_port.ecs_network_protocol “ECS.Network.Protocol”,
per_port.scanner_port_state “Scanner.Port.State”,
per_port.ecs_host_ip “ECS.Host.IP”,
per_port.ecs_host_name “ECS.Host.Name”,
per_port.scanner_state “Scanner.State”,
‘scanner-vs’ as “ECS.Service.Type”,
per_port.ecs_event_sequence “ECS.Event.Sequence”,
per_port.ecs_event_state “Scanner.State”,
per_port.ecs_event_error “ECS.Event.Error”,
per_port.ecs_event_start “ECS.Event.Start”,
per_port.ecs_event_end “ECS.Event.End”,
(ecs_event_start - ecs_event_end) “ECS.Event.Duration”,
per_port.scanner_split “Scanner.Split”,
per_port.scanner_parallel “Scanner.IsParallel”,
per_port.ecs_task_id “Scanner.Task.ID”,
per_port.ecs_user_id “Scanner.User.ID”
FROM per_port,
jsonb_array_elements(per_port.vulns → ‘vulnerabilities’) vu
LEFT JOIN i18n_nvts
ON vu ->> ‘oid’ = i18n_nvts.“nvtOid”
LEFT JOIN nvts
ON vu ->> ‘oid’ = nvts.oid
ORDER BY per_port.scanner_launch_id, vu ->> ‘oid’ DESC

	Название поля-счётчика: id
	Сохранить
2.2) Найденные уязвимости Вы можете найти в карточке события.
	Карточка события состоит из 4 дополнительных полей:
		State - состояние задачи
		Result - результат выполнения задачи(уязвимости находятся в этом поле в "сыром" виде)
		JobId - id задачи, которая запустила задачу
		ID - id запуска сканирования

P.S. Запрос из примера вытаскивает завершенные задачи Сканера-ВС, для получения информации о найденых уязвимостей воспользуйтесь руководством по поиску уязвимостей по внутренним oid в Сканере-ВС.