Compare commits

...
9 Commits
Author SHA1 Message Date
Josh Patterson 7121531336 Merge pull request #16328 from Security-Onion-Solutions/fix/socqeurymerge
combine default and alerts queries added via pillar
2026-10-14 11:13:39 -04:00
Josh Patterson ff2b46b73e combine default and alerts queries added via pillar
pillar.get replaces lists, so once alerts queries are saved to pillar
from the SOC config UI, queries added to defaults later (e.g. the
licensed Group By Assessment, Name) never reach soc.json. Merge them by
name the same way availableModels are merged by id: pillar order and
edits are kept, and default queries missing from pillar are appended.
2026-10-14 09:19:16 -04:00
Mike Reeves b158a38099 Merge pull request #16323 from Security-Onion-Solutions/mreeves/alert-triage-notify-skill
Remove the Notifier agent mapping
2026-10-13 17:45:22 -04:00
Mike Reeves 26f5d07435 Remove the Notifier agent mapping
AlertTriage now sends its own notification through the Notify skill, so the
Notifier agent no longer exists in SOC.
2026-10-13 17:35:22 -04:00
Mike Reeves 747abeed79 Merge pull request #16302 from Security-Onion-Solutions/mreeves/alert-assessment-groupby
Add a licensed Group By Assessment, Name alerts query
2026-10-13 17:16:48 -04:00
Mike Reeves 1bcf80dd10 Group by assessment without a missing bucket
The assessment is a number, and SOC's missing bucket only works on keyword
fields, so the * made Elasticsearch fail parsing "__missing__" as a long.
Untriaged alerts now drop out of this view.
2026-10-13 17:11:49 -04:00
Josh Patterson e7d7676a90 Merge pull request #16322 from Security-Onion-Solutions/fix/socmerge
combine default and availableModels added via pillar
2026-10-13 16:27:57 -04:00
Mike Reeves 3304aff62b Note that an oai query also needs the agentic assistant
SOC (securityonion-soc#1363) now hides a query licensed for oai unless the
assistant is enabled and agentic, so the query editor's license help says so.

Claude-Session: https://claude.ai/code/session_01SZLcwj68A2wLo3F8TGKsLP
2026-10-07 08:56:44 -04:00
Mike Reeves 7469d833d1 Add a licensed Group By Assessment, Name alerts query
Groups alerts by the AI triage assessment, keeping untriaged alerts as a
missing bucket. Query entries take an optional license feature, which SOC uses
to hide this one on grids without OnionAI, and the query editor now shows it.
2026-10-06 21:14:25 -04:00
3 changed files with 25 additions and 6 deletions

No files matched your search

+3 -1
View File
@@ -1545,7 +1545,6 @@ soc:
Investigator: haiku@SOAI Investigator: haiku@SOAI
DetectionEngineer: haiku@SOAI DetectionEngineer: haiku@SOAI
AlertTriage: haiku@SOAI AlertTriage: haiku@SOAI
Notifier: haiku@SOAI
useMemory: false useMemory: false
useMemoryScanner: false useMemoryScanner: false
dontScanBefore: "" dontScanBefore: ""
@@ -2527,6 +2526,9 @@ soc:
queries: queries:
- name: 'Group By Name, Module' - name: 'Group By Name, Module'
query: '* | groupby rule.name event.module* event.severity_label rule.uuid' query: '* | groupby rule.name event.module* event.severity_label rule.uuid'
- name: 'Group By Assessment, Name'
query: '* | groupby event.so_alerttriage.assessment rule.name event.severity_label rule.uuid'
license: oai
- name: 'Group By Sensor, Source IP/Port, Destination IP/Port, Name' - name: 'Group By Sensor, Source IP/Port, Destination IP/Port, Name'
query: '* | groupby observer.name source.ip source.port destination.ip destination.port rule.name network.community_id event.severity_label rule.uuid' query: '* | groupby observer.name source.ip source.port destination.ip destination.port rule.name network.community_id event.severity_label rule.uuid'
- name: 'Group By Source IP, Name' - name: 'Group By Source IP, Name'
+19 -1
View File
@@ -22,7 +22,7 @@
{% do SOCMERGED.config.server.update({'additionalCA': MANAGERMERGED.additionalCA}) %} {% do SOCMERGED.config.server.update({'additionalCA': MANAGERMERGED.additionalCA}) %}
{% do SOCMERGED.config.server.update({'insecureSkipVerify': MANAGERMERGED.insecureSkipVerify}) %} {% do SOCMERGED.config.server.update({'insecureSkipVerify': MANAGERMERGED.insecureSkipVerify}) %}
{# pillar.get replaces lists instead of merging them, so combine availableModels by id #} {# pillar.get replaces lists instead of merging them, so combine availableModels by id and alerts queries by name #}
{% set default_models = {} %} {% set default_models = {} %}
{% for m in SOCDEFAULTS.config.server.client.assistant.availableModels %} {% for m in SOCDEFAULTS.config.server.client.assistant.availableModels %}
{% do default_models.setdefault(m.id, m) %} {% do default_models.setdefault(m.id, m) %}
@@ -41,6 +41,24 @@
{% endfor %} {% endfor %}
{% do SOCMERGED.config.server.client.assistant.update({'availableModels': merged_models}) %} {% do SOCMERGED.config.server.client.assistant.update({'availableModels': merged_models}) %}
{% set default_queries = {} %}
{% for q in SOCDEFAULTS.config.server.client.alerts.queries %}
{% do default_queries.setdefault(q.name, q) %}
{% endfor %}
{% set merged_queries = [] %}
{% set merged_names = [] %}
{% for q in SOCMERGED.config.server.client.alerts.queries or [] %}
{% set query = {} %}
{% do query.update(default_queries.get(q.get('name'), {})) %}
{% do query.update(q) %}
{% do merged_queries.append(query) %}
{% do merged_names.append(q.get('name')) %}
{% endfor %}
{% for name, q in default_queries.items() if name not in merged_names %}
{% do merged_queries.append(q) %}
{% endfor %}
{% do SOCMERGED.config.server.client.alerts.update({'queries': merged_queries}) %}
{% if not SOCMERGED.config.server.modules.postgres.host %} {% if not SOCMERGED.config.server.modules.postgres.host %}
{% do SOCMERGED.config.server.modules.postgres.update({'host': GLOBALS.manager}) %} {% do SOCMERGED.config.server.modules.postgres.update({'host': GLOBALS.manager}) %}
{% endif %} {% endif %}
+3 -4
View File
@@ -954,10 +954,7 @@ soc:
description: This agent manages detections and their overrides, including tuning noisy rules and authoring rule content. description: This agent manages detections and their overrides, including tuning noisy rules and authoring rule content.
global: True global: True
AlertTriage: AlertTriage:
description: This agent triages alerts autonomously for the Alert Triage automation, ending each run with a report and an assessment of the alert. It can notify through the Notifier but cannot acknowledge alerts or escalate to cases. description: This agent triages alerts autonomously for the Alert Triage automation, ending each run with a report and an assessment of the alert. It can send a notification but cannot acknowledge alerts or escalate to cases.
global: True
Notifier:
description: This agent sends a single notification on behalf of another agent, such as AlertTriage, and takes no other action.
global: True global: True
useMemory: useMemory:
description: Enables the Memory system for OnionAI description: Enables the Memory system for OnionAI
@@ -1229,6 +1226,8 @@ soc:
- field: showSubtitle - field: showSubtitle
label: Show Query in Dropdown. label: Show Query in Dropdown.
forcedType: bool forcedType: bool
- field: license
label: Only show on grids licensed for this feature, e.g. oai. An oai query also needs the assistant enabled and agentic. Leave blank to show everywhere.
queryToggleFilters: queryToggleFilters:
description: Customize togglable query filters that apply to all queries. Exclusive toggles will invert the filter if toggled off rather than omitting the filter from the query. description: Customize togglable query filters that apply to all queries. Exclusive toggles will invert the filter if toggled off rather than omitting the filter from the query.
global: True global: True