Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
b091fd1
- Bump Version and build pack
scottbrumley Dec 11, 2025
bf5f7b6
Merge pull request #360 from Palo-Cortex/update/content-soc-opt-unified
scottbrumley Dec 11, 2025
4a4e1d3
- Update Pack and Catalog builder
scottbrumley Dec 11, 2025
b6cc8cb
- Bump All packs and catalog
scottbrumley Dec 11, 2025
0f3ff71
Update/content soc opt unified (#362)
scottbrumley Dec 11, 2025
08339a6
- Update to broken formatting
scottbrumley Dec 11, 2025
5df27a5
Merge pull request #364 from Palo-Cortex/update/content-soc-opt-unified
scottbrumley Dec 11, 2025
ca60d03
Merge branch 'main' into develop
scottbrumley Dec 11, 2025
89ede3a
- update build pack
scottbrumley Dec 11, 2025
93af92b
Merge pull request #365 from Palo-Cortex/update/content-soc-opt-unified
scottbrumley Dec 11, 2025
6982177
Merge branch 'main' into develop
scottbrumley Dec 11, 2025
be9ee9d
- remove xsoar_config.json changes
scottbrumley Dec 11, 2025
63d29dc
- New bump version program to align pack_metadata.json with xsoar_con…
scottbrumley Dec 11, 2025
2ee8379
Merge branch 'develop' into update/content-soc-opt-unified
scottbrumley Dec 11, 2025
ba35010
- Validation is suddenly hung on this List.
scottbrumley Dec 11, 2025
aa76188
Merge remote-tracking branch 'origin/update/content-soc-opt-unified' …
scottbrumley Dec 11, 2025
1af2418
- Validation is suddenly hung on this List.
scottbrumley Dec 11, 2025
b7c8792
Merge pull request #367 from Palo-Cortex/update/content-soc-opt-unified
scottbrumley Dec 11, 2025
764bbf4
- Fix main deploy
scottbrumley Dec 11, 2025
6404d81
Merge pull request #369 from Palo-Cortex/update/content-soc-opt-unified
scottbrumley Dec 11, 2025
fd2bf40
- Test Deploy Unified
scottbrumley Dec 11, 2025
1c03679
Merge pull request #370 from Palo-Cortex/update/content-soc-opt-unified
scottbrumley Dec 11, 2025
11b125c
Merge branch 'main' into develop
scottbrumley Dec 11, 2025
b27dc75
- Updated workflow for pushing content to tenant
scottbrumley Dec 12, 2025
af41317
Merge pull request #372 from Palo-Cortex/update/content-soc-opt-unified
scottbrumley Dec 12, 2025
b232cba
- Removed xsoar_config.json from .gitattributes since we are not doin…
scottbrumley Dec 12, 2025
b56662f
Merge pull request #374 from Palo-Cortex/fix/gitattributes-xsoar
scottbrumley Dec 12, 2025
ec42d6f
- Problem with xsoar_config.json on Unified
scottbrumley Dec 12, 2025
98f4ed2
Merge pull request #376 from Palo-Cortex/fix/content-soc-unified
scottbrumley Dec 12, 2025
8268906
Merge branch 'main' into develop
scottbrumley Dec 12, 2025
ccd0b2b
- Update Catalog
scottbrumley Dec 12, 2025
c590c14
Merge pull request #378 from Palo-Cortex/fix/content-soc-unified
scottbrumley Dec 12, 2025
da08770
- Update Catalog
scottbrumley Dec 12, 2025
04059ce
Merge pull request #379 from Palo-Cortex/fix/content-soc-unified
scottbrumley Dec 12, 2025
e2fc325
Merge branch 'main' into develop
scottbrumley Dec 12, 2025
a5f183c
- Update Catalog
scottbrumley Dec 12, 2025
6795b18
Merge pull request #381 from Palo-Cortex/fix/rule-trend-micros
scottbrumley Dec 12, 2025
3d77353
- Updated Streamline Rules
scottbrumley Dec 12, 2025
6861b7b
Merge pull request #383 from Palo-Cortex/fix/rule-trend-micros
scottbrumley Dec 12, 2025
c689f03
Merge branch 'main' into develop
scottbrumley Dec 12, 2025
8f67cad
- Updated Streamline Rules
scottbrumley Dec 13, 2025
d48dcef
- Updated Streamline Rules
scottbrumley Dec 13, 2025
aa58ae6
Merge pull request #385 from Palo-Cortex/fix/vendor-trend-micro
scottbrumley Dec 13, 2025
eda5488
Merge branch 'main' into develop
scottbrumley Dec 13, 2025
24341c9
- Updated Streamline Rules
scottbrumley Dec 13, 2025
6cd4dff
- Name mismatch in Layout for scripts. Scripts need to follow a nami…
scottbrumley Dec 13, 2025
a5a92df
Merge pull request #387 from Palo-Cortex/fix/trend-layout-scripts
scottbrumley Dec 13, 2025
13c7495
- Name mismatch in Layout for scripts. Scripts need to follow a nami…
scottbrumley Dec 14, 2025
055dda4
Merge pull request #388 from Palo-Cortex/fix/trend-layout-scripts
scottbrumley Dec 14, 2025
d51da28
Merge branch 'main' into develop
scottbrumley Dec 14, 2025
72fc0e0
- Working on timing of SDK Upload
scottbrumley Dec 14, 2025
5085cfc
Merge pull request #390 from Palo-Cortex/fix/trend-micro-rules
scottbrumley Dec 14, 2025
e83fce8
Merge branch 'main' into develop
scottbrumley Dec 14, 2025
af40599
- Working on timestamps
scottbrumley Dec 14, 2025
1341751
Merge pull request #392 from Palo-Cortex/fix/send_events
scottbrumley Dec 14, 2025
b9f1b44
- Bump version to test install package.
scottbrumley Dec 14, 2025
87f5a47
Merge pull request #394 from Palo-Cortex/test/pack-deploy-crowdstrike
scottbrumley Dec 14, 2025
0f7189c
- Bump version to test install package.
scottbrumley Dec 14, 2025
9958581
Merge pull request #396 from Palo-Cortex/test/pack-deploy-defender
scottbrumley Dec 14, 2025
06689c7
- Bump version to test install package.
scottbrumley Dec 14, 2025
3457f7c
Merge pull request #398 from Palo-Cortex/test/pack-deploy-proofpoint
scottbrumley Dec 14, 2025
b35d054
- Updating Trend Micros Layouts to V3
scottbrumley Dec 16, 2025
0b89339
- Bump version and catalog
scottbrumley Dec 16, 2025
8816658
- Missed validation. Updated
scottbrumley Dec 16, 2025
9f7dfdd
Merge pull request #400 from Palo-Cortex/update/pack-trend-micro-layout
scottbrumley Dec 16, 2025
016dfc3
Merge branch 'main' into develop
scottbrumley Dec 16, 2025
0dc1974
- Speed up loading of correlation rules
scottbrumley Dec 17, 2025
6fff2d6
- Bump Version
scottbrumley Dec 17, 2025
18ca5e7
Merge pull request #402 from Palo-Cortex/fix/rule-trend-micro
scottbrumley Dec 17, 2025
4df4d7f
Merge branch 'main' into develop
scottbrumley Dec 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@ alert_fields:
severity: severity
source_insert_ts: alert_time
tim_main_indicator: ioc_value
trendmicrovisiononexdrindicators: indicators_json
trendmicrovisiononexdrindicatorsjson: indicators_json
trendmicrovisiononexdrinvestigationstatus: investigation_status
trendmicrovisiononexdrpriorityscore: score
userid: user_id
Expand All @@ -47,7 +45,7 @@ dataset: alerts
description: null
drilldown_query_timeframe: ALERT
execution_mode: REAL_TIME
global_rule_id: c6eeabcc-3842-40e5-b327-7989f7f835be_ta0003_other
global_rule_id: 49b609a6-5fd8-4021-8b3c-982048cca0be_other
investigation_query_link: ''
lookup_mapping: []
mapping_strategy: CUSTOM
Expand All @@ -65,7 +63,7 @@ xql_query: |

| alter j = _alert_data -> raw_json

/* --- MITRE technique (cheap: first rule/filter only) --- */
/* --- MITRE technique (cheap) --- */
| alter j_str = to_string(j)
| alter mitre_technique_id_raw =
json_extract_scalar(j_str, "$.matched_rules[0].matched_filters[0].mitre_technique_ids[0]")
Expand All @@ -77,8 +75,6 @@ xql_query: |
replace(replace(mitre_technique_id_raw, "\"",""), "\\.[0-9]+$",""),
"—"
)

/* --- Strip sub-technique: T1547.001 -> T1547 (only if it has a dot) --- */
| alter mitre_ids_str =
if(mitre_ids_str contains ".", arrayindex(regextract(mitre_ids_str, "(.*)\."), 0), mitre_ids_str)

Expand All @@ -98,7 +94,7 @@ xql_query: |
| alter ta0010_exfiltration = arraycreate("T1041","T1567","T1020")
| alter ta0040_impact = arraycreate("T1485","T1486","T1490","T1499","T1561")

/* --- Match Tactic Name (Impact -> Recon, no overwrite) --- */
/* --- Match Tactic Name + ID --- */
| alter mitre_tactic = if (ta0040_impact contains mitre_ids_str, "Impact")
| alter mitre_tactic = if (ta0010_exfiltration contains mitre_ids_str, "Exfiltration", mitre_tactic)
| alter mitre_tactic = if (ta0011_command_and_control contains mitre_ids_str, "Command and Control", mitre_tactic)
Expand All @@ -114,7 +110,6 @@ xql_query: |
| alter mitre_tactic = if (ta0042_resource_development contains mitre_ids_str, "Resource Development", mitre_tactic)
| alter mitre_tactic = if (ta0043_reconnaissance contains mitre_ids_str, "Reconnaissance", mitre_tactic)

/* --- Match Tactic ID (Impact -> Recon, no overwrite) --- */
| alter mitre_tactic_id = if (ta0040_impact contains mitre_ids_str, "TA0040")
| alter mitre_tactic_id = if (ta0010_exfiltration contains mitre_ids_str, "TA0010", mitre_tactic_id)
| alter mitre_tactic_id = if (ta0011_command_and_control contains mitre_ids_str, "TA0011", mitre_tactic_id)
Expand All @@ -130,15 +125,15 @@ xql_query: |
| alter mitre_tactic_id = if (ta0042_resource_development contains mitre_ids_str, "TA0042", mitre_tactic_id)
| alter mitre_tactic_id = if (ta0043_reconnaissance contains mitre_ids_str, "TA0043", mitre_tactic_id)

/* ---- Split Anchor (required by mitre split script) ---- */
/* ---- Split Anchor (required) ---- */
| alter
mitre_technique_id = mitre_ids_str,
mitre_technique = null,
mitre_tactic_id = mitre_tactic_id,
mitre_tactic = mitre_tactic
| filter mitre_tactic_id = "" and mitre_tactic = ""

/* ---- Core metadata ---- */
/* ---- Core metadata (keep legacy field names you mapped) ---- */
| alter
id = j -> id,
status = j -> status,
Expand All @@ -150,93 +145,67 @@ xql_query: |
score = to_integer(j -> score),
severity = j -> severity,
alert_time = j -> created_date_time,
alert_description = j -> description

| alter
indicators = j -> indicators[],
entities = j -> impact_scope.entities[]

/* ---- Host / User ---- */
| alter ent_hosts = arrayfilter(entities, json_extract_scalar("@element","$.entity_type") = "host")
| alter ent_users = arrayfilter(entities, json_extract_scalar("@element","$.entity_type") = "user")

| alter host0 = arrayindex(ent_hosts, 0)
alert_description = j -> description,
alert_source = coalesce(j -> alert_provider, "Trend Micro Vision One"),
indicators = j -> indicators[]

/* ---- FAST indicator extraction (no arraymap/indexof) ---- */
/* host */
| alter i_host = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.type") = "host"), 0)
| alter
v1_host_guid = json_extract_scalar(host0, "$.entity_value.guid"),
v1_host_name = json_extract_scalar(host0, "$.entity_value.name"),
local_ip = replace(json_extract_scalar(host0, "$.entity_value.ips[0]"), "\"", "")
v1_host_guid = json_extract_scalar(i_host, "$.value.guid"),
v1_host_name = json_extract_scalar(i_host, "$.value.name"),
local_ip = replace(json_extract_scalar(i_host, "$.value.ips[0]"), "\"", "")

/* mac (host indicator value has multiple possibilities in some feeds; keep best-effort) */
| alter mac_address =
coalesce(
json_extract_scalar(host0, "$.entity_value.mac"),
json_extract_scalar(host0, "$.entity_value.mac_address"),
json_extract_scalar(host0, "$.entity_value.macs[0]"),
json_extract_scalar(host0, "$.entity_value.macAddresses[0]")
json_extract_scalar(i_host, "$.value.mac"),
json_extract_scalar(i_host, "$.value.mac_address"),
json_extract_scalar(i_host, "$.value.macs[0]"),
json_extract_scalar(i_host, "$.value.macAddresses[0]")
)

| alter user0 =
arrayindex(
arrayfilter(
entities,
json_extract_scalar("@element","$.entity_type") = "user"
or json_extract_scalar("@element","$.entity_type") = "account"
),
0
)

| alter
user_name =
coalesce(
json_extract_scalar(user0, "$.entity_value.name"),
json_extract_scalar(user0, "$.entity_value.username"),
json_extract_scalar(user0, "$.entity_value") /* handles account string */
),
user_id =
coalesce(
json_extract_scalar(user0, "$.entity_value.id"),
json_extract_scalar(user0, "$.entity_value.userId"),
json_extract_scalar(user0, "$.entity_value.sid"),
json_extract_scalar(user0, "$.entity_id") /* fallback */
)

/* ---- Indicators (minimal set) ---- */
/* extract each indicator object once */
| alter
cmd0 = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.type") = "command_line"), 0),
reg0 = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.field") = "objectRegistryData"), 0),
peer0 = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.field") = "peerIp"), 0),
pfp0 = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.field") = "parentFilePath"), 0),
sha0 = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.type") = "file_sha256"), 0),
md50 = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.type") = "file_md5"), 0),
dom0 = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.field") = "domain"), 0)

/* values from the extracted indicator objects */
/* user */
| alter i_user = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.type") = "user_account"), 0)
| alter
cmdline = json_extract_scalar(cmd0, "$.value"),
reg_path = json_extract_scalar(reg0, "$.value"),
remote_ip_str = json_extract_scalar(peer0, "$.value"),
parent_process_path= json_extract_scalar(pfp0, "$.value"),
sha256 = json_extract_scalar(sha0, "$.value"),
md5 = json_extract_scalar(md50, "$.value"),
domain = json_extract_scalar(dom0, "$.value")

/* filepath + derived */
user_name = json_extract_scalar(i_user, "$.value"),
user_id = null

/* cmdline */
| alter i_cmd1 = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.type") = "command_line"), 0)
| alter i_cmd2 = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.field") = "processCmd"), 0)
| alter cmdline = coalesce(json_extract_scalar(i_cmd1, "$.value"), json_extract_scalar(i_cmd2, "$.value"))

/* sha256 (main) */
| alter i_sha = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.type") = "file_sha256"), 0)
| alter sha256 = json_extract_scalar(i_sha, "$.value")

/* remote ip + domain */
| alter i_peer = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.field") = "peerIp"), 0)
| alter remote_ip_str = json_extract_scalar(i_peer, "$.value")

| alter i_dom = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.field") = "domain"), 0)
| alter domain = json_extract_scalar(i_dom, "$.value")

/* parent process path */
| alter i_pfp = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.field") = "parentFilePath"), 0)
| alter parent_process_path = json_extract_scalar(i_pfp, "$.value")
| alter parent_process_name = replace(parent_process_path, "^.*[\\\\/]", "")

/* filepath / filename (from registry object or cmdline fallback) */
| alter i_reg = arrayindex(arrayfilter(indicators, json_extract_scalar("@element","$.field") = "objectRegistryData"), 0)
| alter reg_path = json_extract_scalar(i_reg, "$.value")

| alter filepath =
coalesce(
reg_path,
arrayindex(regextract(cmdline, "^\\s*([^\\s]+)"), 0)
)
| alter
filename = replace(filepath, "^.*[\\\\/]", ""),
parent_process_name = replace(parent_process_path, "^.*[\\\\/]", "")
coalesce(
reg_path,
arrayindex(regextract(cmdline, "^\\s*([^\\s]+)"), 0)
)
| alter filename = replace(filepath, "^.*[\\\\/]", "")

/* convenience */
| alter
ioc_value = coalesce(sha256, md5),
alert_source = coalesce(alert_provider, "Trend Micro Vision One"),
indicators_json = to_string(indicators)

| alter ioc_value = coalesce(sha256, null)

| fields
id, workbench_link, alert_name, alert_source, status,
Expand All @@ -246,5 +215,4 @@ xql_query: |
user_name, user_id,
filename, filepath, parent_process_path, parent_process_name, cmdline,
sha256, ioc_value, domain, remote_ip_str,
indicators_json,
mitre_technique, mitre_technique_id, mitre_tactic, mitre_tactic_id, mitre_ids_str
Loading