@gendigital/sage-opencode 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +1 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +255 -74
  4. package/dist/index.js.map +1 -1
  5. package/dist/mcp-server.cjs +230 -96
  6. package/dist/mcp-server.cjs.map +4 -4
  7. package/dist/plugin-discovery.d.ts +1 -0
  8. package/dist/plugin-discovery.d.ts.map +1 -1
  9. package/dist/plugin-discovery.js +27 -1
  10. package/dist/plugin-discovery.js.map +1 -1
  11. package/dist/startup-scan.d.ts +11 -3
  12. package/dist/startup-scan.d.ts.map +1 -1
  13. package/dist/startup-scan.js +59 -21
  14. package/dist/startup-scan.js.map +1 -1
  15. package/dist/tool-handler.d.ts +2 -1
  16. package/dist/tool-handler.d.ts.map +1 -1
  17. package/dist/tool-handler.js +17 -4
  18. package/dist/tool-handler.js.map +1 -1
  19. package/package.json +3 -3
  20. package/resources/threats/_macros.yaml +193 -0
  21. package/resources/threats/agent-layer.yaml +19 -1
  22. package/resources/threats/commands.yaml +165 -31
  23. package/resources/threats/credentials.yaml +24 -4
  24. package/resources/threats/dummy.yaml +52 -17
  25. package/resources/threats/files.yaml +38 -0
  26. package/resources/threats/mac-commands.yaml +118 -27
  27. package/resources/threats/mac-credentials.yaml +34 -8
  28. package/resources/threats/mac-files.yaml +20 -0
  29. package/resources/threats/mac-obfuscation.yaml +28 -6
  30. package/resources/threats/mac-persistence.yaml +30 -4
  31. package/resources/threats/mac-supply-chain.yaml +12 -3
  32. package/resources/threats/mitre.yaml +325 -62
  33. package/resources/threats/obfuscation.yaml +33 -8
  34. package/resources/threats/persistence.yaml +40 -5
  35. package/resources/threats/prompt-injection.yaml +58 -0
  36. package/resources/threats/self-defense.yaml +15 -2
  37. package/resources/threats/supply_chain.yaml +6 -1
  38. package/resources/threats/urls.yaml +10 -0
  39. package/resources/threats/win-commands.yaml +294 -60
  40. package/resources/threats/win-credentials.yaml +68 -9
  41. package/resources/threats/win-files.yaml +20 -0
  42. package/resources/threats/win-obfuscation.yaml +56 -8
  43. package/resources/threats/win-persistence.yaml +45 -7
  44. package/resources/threats/win-supply-chain.yaml +5 -1
@@ -5,10 +5,16 @@
5
5
 
6
6
  # --- T1003.001: LSASS Memory ---
7
7
  - id: "CLT-MITRE-001"
8
+ version: 1
9
+ detection_name: "CMD:SageMitre-A [Heur]"
8
10
  category: credential_access
9
11
  severity: critical
10
12
  confidence: 0.90
11
- pattern: "(rundll32(\\.exe)?.*comsvcs\\.dll,MiniDump.*|procdump.*-ma.*lsass\\.exe.*lsass_dump|sekurlsa::Minidump.*lsassdump\\.dmp|sekurlsa::logonPasswords)"
13
+ # {{CMD_POS}} + {{NOT_FILENAME}} on the two program names, same shape as
14
+ # CLT-CMD-009. The `sekurlsa::` module references are left as-is -- like
15
+ # WIN-CRED-006's Mimikatz rule, they're arguments to a running mimikatz
16
+ # session, never a program name themselves.
17
+ pattern: "{{CMD_POS}}rundll32(?:\\.exe)?{{NOT_FILENAME}}.*comsvcs\\.dll,MiniDump.*|{{CMD_POS}}procdump(?:\\.exe)?{{NOT_FILENAME}}.*-ma.*lsass\\.exe.*lsass_dump|sekurlsa::Minidump.*lsassdump\\.dmp|sekurlsa::logonPasswords"
12
18
  case_insensitive: true
13
19
  match_on: command
14
20
  title: "MITRE ATT&CK T1003.001 - LSASS Memory"
@@ -17,10 +23,14 @@
17
23
 
18
24
  # --- T1003.002: Security Account Manager ---
19
25
  - id: "CLT-MITRE-002"
26
+ version: 1
27
+ detection_name: "CMD:SageMitre-B [Heur]"
20
28
  category: credential_access
21
29
  severity: critical
22
30
  confidence: 0.90
23
- pattern: "(reg.*save.*HKLM.*sam.*sam|reg.*save.*HKLM.*system.*system)"
31
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
32
+ # CLT-CMD-009.
33
+ pattern: "{{CMD_POS}}reg(?:\\.exe)?{{NOT_FILENAME}}.*save.*HKLM.*sam.*sam|{{CMD_POS}}reg(?:\\.exe)?{{NOT_FILENAME}}.*save.*HKLM.*system.*system"
24
34
  case_insensitive: true
25
35
  match_on: command
26
36
  title: "MITRE ATT&CK T1003.002 - Security Account Manager"
@@ -29,10 +39,14 @@
29
39
 
30
40
  # --- T1003.003: NTDS ---
31
41
  - id: "CLT-MITRE-003"
42
+ version: 1
43
+ detection_name: "CMD:SageMitre-C [Heur]"
32
44
  category: credential_access
33
45
  severity: critical
34
46
  confidence: 0.90
35
- pattern: "ntdsutil(\\.exe)?"
47
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
48
+ # boundary at all.
49
+ pattern: "{{CMD_POS}}ntdsutil(?:\\.exe)?{{NOT_FILENAME}}"
36
50
  case_insensitive: true
37
51
  match_on: command
38
52
  title: "MITRE ATT&CK T1003.003 - NTDS"
@@ -41,10 +55,14 @@
41
55
 
42
56
  # --- T1003.004: LSA Secrets ---
43
57
  - id: "CLT-MITRE-004"
58
+ version: 1
59
+ detection_name: "CMD:SageMitre-D [Heur]"
44
60
  category: credential_access
45
61
  severity: critical
46
62
  confidence: 0.90
47
- pattern: "Get-LSASecret\\.ps1"
63
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
64
+ # boundary at all.
65
+ pattern: "{{CMD_POS}}Get-LSASecret\\.ps1{{NOT_FILENAME}}"
48
66
  case_insensitive: true
49
67
  match_on: command
50
68
  title: "MITRE ATT&CK T1003.004 - LSA Secrets"
@@ -53,10 +71,14 @@
53
71
 
54
72
  # --- T1003.005: Cached Domain Credentials ---
55
73
  - id: "CLT-MITRE-005"
74
+ version: 1
75
+ detection_name: "CMD:SageMitre-E [Heur]"
56
76
  category: credential_access
57
77
  severity: critical
58
78
  confidence: 0.90
59
- pattern: "cmdkey(\\.exe)?.*/list"
79
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
80
+ # boundary at all.
81
+ pattern: "{{CMD_POS}}cmdkey(?:\\.exe)?{{NOT_FILENAME}}.*/list"
60
82
  case_insensitive: true
61
83
  match_on: command
62
84
  title: "MITRE ATT&CK T1003.005 - Cached Domain Credentials"
@@ -65,10 +87,16 @@
65
87
 
66
88
  # --- T1003.006: DC Sync ---
67
89
  - id: "CLT-MITRE-006"
90
+ version: 1
91
+ detection_name: "CMD:SageMitre-F [Heur]"
68
92
  category: credential_access
69
93
  severity: critical
70
94
  confidence: 0.90
71
- pattern: "Invoke-Mimikatz.*-Command.*lsadump::dcsync.*/user:"
95
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Unlike
96
+ # CLT-WIN-CRED-006, "Invoke-Mimikatz" here is the complete identifier being
97
+ # matched, not a suffix of one, so {{CMD_POS}} applies cleanly. Had no
98
+ # boundary at all.
99
+ pattern: "{{CMD_POS}}Invoke-Mimikatz{{NOT_FILENAME}}.*-Command.*lsadump::dcsync.*/user:"
72
100
  case_insensitive: true
73
101
  match_on: command
74
102
  title: "MITRE ATT&CK T1003.006 - DC Sync"
@@ -77,10 +105,14 @@
77
105
 
78
106
  # --- T1003: OS Credential Dumping ---
79
107
  - id: "CLT-MITRE-007"
108
+ version: 1
109
+ detection_name: "CMD:SageMitre-G [Heur]"
80
110
  category: credential_access
81
111
  severity: critical
82
112
  confidence: 0.90
83
- pattern: "(reg(\\.exe)? (save|export).*SAM|(PasswordDump|CreateMiniDump)|Invoke-PowerDump\\.ps1|Get-PassHashes\\.ps1|Get-RegAutoLogon\\.ps1)"
113
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
114
+ # CLT-CMD-009.
115
+ pattern: "{{CMD_POS}}reg(?:\\.exe)?{{NOT_FILENAME}} (save|export).*SAM|{{CMD_POS}}(PasswordDump|CreateMiniDump){{NOT_FILENAME}}|{{CMD_POS}}Invoke-PowerDump\\.ps1{{NOT_FILENAME}}|{{CMD_POS}}Get-PassHashes\\.ps1{{NOT_FILENAME}}|{{CMD_POS}}Get-RegAutoLogon\\.ps1{{NOT_FILENAME}}"
84
116
  case_insensitive: true
85
117
  match_on: command
86
118
  title: "MITRE ATT&CK T1003 - OS Credential Dumping"
@@ -89,10 +121,14 @@
89
121
 
90
122
  # --- T1020: Automated Exfiltration ---
91
123
  - id: "CLT-MITRE-012"
124
+ version: 1
125
+ detection_name: "CMD:SageMitre-L [Heur]"
92
126
  category: exfiltration
93
127
  severity: warning
94
128
  confidence: 0.60
95
- pattern: "(rar(\\.exe)?.*[afu].*\\s(-dw|-tb|-ta)|7z(\\.exe)?.*[au].*-sdel|Add-Exfiltration\\.ps1|Do-Exfiltration\\.ps1|Invoke-PostExfil\\.ps1)"
129
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
130
+ # CLT-CMD-009.
131
+ pattern: "{{CMD_POS}}rar(?:\\.exe)?{{NOT_FILENAME}}.*[afu].*\\s(-dw|-tb|-ta)|{{CMD_POS}}7z(?:\\.exe)?{{NOT_FILENAME}}.*[au].*-sdel|{{CMD_POS}}Add-Exfiltration\\.ps1{{NOT_FILENAME}}|{{CMD_POS}}Do-Exfiltration\\.ps1{{NOT_FILENAME}}|{{CMD_POS}}Invoke-PostExfil\\.ps1{{NOT_FILENAME}}"
96
132
  case_insensitive: true
97
133
  match_on: command
98
134
  title: "MITRE ATT&CK T1020 - Automated Exfiltration"
@@ -101,10 +137,14 @@
101
137
 
102
138
  # --- T1021.003: Distributed Component Object Model ---
103
139
  - id: "CLT-MITRE-014"
140
+ version: 1
141
+ detection_name: "CMD:SageMitre-N [Heur]"
104
142
  category: lateral_movement
105
143
  severity: warning
106
144
  confidence: 0.60
107
- pattern: "Invoke-DCOM.*\\-ComputerName"
145
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
146
+ # boundary at all.
147
+ pattern: "{{CMD_POS}}Invoke-DCOM{{NOT_FILENAME}}.*\\-ComputerName"
108
148
  case_insensitive: true
109
149
  match_on: command
110
150
  title: "MITRE ATT&CK T1021.003 - Distributed Component Object Model"
@@ -113,10 +153,14 @@
113
153
 
114
154
  # --- T1027.003: Steganography ---
115
155
  - id: "CLT-MITRE-016"
156
+ version: 1
157
+ detection_name: "CMD:SageMitre-P [Heur]"
116
158
  category: defense_evasion
117
159
  severity: warning
118
160
  confidence: 0.60
119
- pattern: "(Invoke-PSImage.*-Script|Invoke-PSImage)"
161
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
162
+ # CLT-CMD-009.
163
+ pattern: "{{CMD_POS}}Invoke-PSImage{{NOT_FILENAME}}.*-Script|{{CMD_POS}}Invoke-PSImage{{NOT_FILENAME}}"
120
164
  case_insensitive: true
121
165
  match_on: command
122
166
  title: "MITRE ATT&CK T1027.003 - Steganography"
@@ -125,10 +169,14 @@
125
169
 
126
170
  # --- T1027.005: Indicator Removalfrom Tools ---
127
171
  - id: "CLT-MITRE-017"
172
+ version: 1
173
+ detection_name: "CMD:SageMitre-Q [Heur]"
128
174
  category: defense_evasion
129
175
  severity: warning
130
176
  confidence: 0.60
131
- pattern: "Find-AVSignature.*-Startbyte"
177
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
178
+ # boundary at all.
179
+ pattern: "{{CMD_POS}}Find-AVSignature{{NOT_FILENAME}}.*-Startbyte"
132
180
  case_insensitive: true
133
181
  match_on: command
134
182
  title: "MITRE ATT&CK T1027.005 - Indicator Removalfrom Tools"
@@ -137,10 +185,14 @@
137
185
 
138
186
  # --- T1040: Network Sniffing ---
139
187
  - id: "CLT-MITRE-020"
188
+ version: 1
189
+ detection_name: "CMD:SageMitre-T [Heur]"
140
190
  category: credential_access
141
191
  severity: warning
142
192
  confidence: 0.60
143
- pattern: "netsh(\\.exe)?.*start.*trace"
193
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
194
+ # boundary at all.
195
+ pattern: "{{CMD_POS}}netsh(?:\\.exe)?{{NOT_FILENAME}}.*start.*trace"
144
196
  case_insensitive: true
145
197
  match_on: command
146
198
  title: "MITRE ATT&CK T1040 - Network Sniffing"
@@ -149,10 +201,16 @@
149
201
 
150
202
  # --- T1046: Network Service Scanning ---
151
203
  - id: "CLT-MITRE-022"
204
+ version: 1
205
+ detection_name: "CMD:SageMitre-V [Heur]"
152
206
  category: discovery
153
207
  severity: warning
154
208
  confidence: 0.60
155
- pattern: "(\\btelnet(\\.exe)?\\b|\\bnmap(\\.exe)?\\b|Invoke-ARPScan\\.ps1|Invoke-PortScan\\.ps1|Invoke-SMBScanner\\.ps1|Port-Scan\\.ps1)"
209
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
210
+ # CLT-CMD-009. The old bare `\b` boundaries already blocked matching inside
211
+ # a longer identifier (`UnmapViewOfFile`) but not quoted prose or
212
+ # argument position.
213
+ pattern: "{{CMD_POS}}telnet(?:\\.exe)?{{NOT_FILENAME}}|{{CMD_POS}}nmap(?:\\.exe)?{{NOT_FILENAME}}|{{CMD_POS}}Invoke-ARPScan\\.ps1{{NOT_FILENAME}}|{{CMD_POS}}Invoke-PortScan\\.ps1{{NOT_FILENAME}}|{{CMD_POS}}Invoke-SMBScanner\\.ps1{{NOT_FILENAME}}|{{CMD_POS}}Port-Scan\\.ps1{{NOT_FILENAME}}"
156
214
  case_insensitive: true
157
215
  match_on: command
158
216
  title: "MITRE ATT&CK T1046 - Network Service Scanning"
@@ -161,10 +219,16 @@
161
219
 
162
220
  # --- T1048: Exfiltration Over Alternative Protocol ---
163
221
  - id: "CLT-MITRE-023"
222
+ version: 1
223
+ detection_name: "CMD:SageMitre-W [Heur]"
164
224
  category: exfiltration
165
225
  severity: critical
166
226
  confidence: 0.90
167
- pattern: "(dnscat2|iodine)"
227
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
228
+ # CLT-CMD-009. Both tools ship real Windows .exe builds (dnscat2's client
229
+ # is commonly compiled for Windows targets; iodine has official Windows
230
+ # binaries), so both need the optional .exe suffix.
231
+ pattern: "{{CMD_POS}}dnscat2(?:\\.exe)?{{NOT_FILENAME}}|{{CMD_POS}}iodine(?:\\.exe)?{{NOT_FILENAME}}"
168
232
  case_insensitive: true
169
233
  match_on: command
170
234
  title: "MITRE ATT&CK T1048 - Exfiltration Over Alternative Protocol"
@@ -173,10 +237,14 @@
173
237
 
174
238
  # --- T1053.005: Scheduled Task ---
175
239
  - id: "CLT-MITRE-026"
240
+ version: 1
241
+ detection_name: "CMD:SageMitre-Z [Heur]"
176
242
  category: persistence
177
243
  severity: warning
178
244
  confidence: 0.60
179
- pattern: "(schtasks(\\.exe)?\\s+/create|schtasks(\\.exe)?\\s+/%windir:~0,1%reate|\\bat\\.exe\\b)"
245
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
246
+ # CLT-CMD-009.
247
+ pattern: "{{CMD_POS}}schtasks(?:\\.exe)?{{NOT_FILENAME}}\\s+/create|{{CMD_POS}}schtasks(?:\\.exe)?{{NOT_FILENAME}}\\s+/%windir:~0,1%reate|{{CMD_POS}}at\\.exe{{NOT_FILENAME}}"
180
248
  case_insensitive: true
181
249
  match_on: command
182
250
  title: "MITRE ATT&CK T1053.005 - Scheduled Task"
@@ -185,10 +253,14 @@
185
253
 
186
254
  # --- T1055.001: Dynamiclink Library Injection ---
187
255
  - id: "CLT-MITRE-027"
256
+ version: 1
257
+ detection_name: "CMD:SageMitre-AA [Heur]"
188
258
  category: defense_evasion
189
259
  severity: critical
190
260
  confidence: 0.90
191
- pattern: "Invoke-DllInjection\\.ps1"
261
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
262
+ # boundary at all.
263
+ pattern: "{{CMD_POS}}Invoke-DllInjection\\.ps1{{NOT_FILENAME}}"
192
264
  case_insensitive: true
193
265
  match_on: command
194
266
  title: "MITRE ATT&CK T1055.001 - Dynamiclink Library Injection"
@@ -197,10 +269,14 @@
197
269
 
198
270
  # --- T1069: Permission Groups Discovery ---
199
271
  - id: "CLT-MITRE-032"
272
+ version: 1
273
+ detection_name: "CMD:SageMitre-AF [Heur]"
200
274
  category: discovery
201
275
  severity: warning
202
276
  confidence: 0.60
203
- pattern: "Get-ManagementRoleAssignment"
277
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
278
+ # boundary at all.
279
+ pattern: "{{CMD_POS}}Get-ManagementRoleAssignment{{NOT_FILENAME}}"
204
280
  case_insensitive: true
205
281
  match_on: command
206
282
  title: "MITRE ATT&CK T1069 - Permission Groups Discovery"
@@ -209,10 +285,14 @@
209
285
 
210
286
  # --- T1070.004: File Deletion ---
211
287
  - id: "CLT-MITRE-033"
288
+ version: 1
289
+ detection_name: "CMD:SageMitre-AG [Heur]"
212
290
  category: defense_evasion
213
291
  severity: warning
214
292
  confidence: 0.60
215
- pattern: "(cmd(\\.exe)?\\s+/c\\s+del\\s+/[sqf]|fsutil(\\.exe)?.*usn.*deleteJournal)"
293
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
294
+ # CLT-CMD-009.
295
+ pattern: "{{CMD_POS}}cmd(?:\\.exe)?{{NOT_FILENAME}}\\s+/c\\s+del\\s+/[sqf]|{{CMD_POS}}fsutil(?:\\.exe)?{{NOT_FILENAME}}.*usn.*deleteJournal"
216
296
  case_insensitive: true
217
297
  match_on: command
218
298
  title: "MITRE ATT&CK T1070.004 - File Deletion"
@@ -221,10 +301,14 @@
221
301
 
222
302
  # --- T1070.005: Network Share Connection Removal ---
223
303
  - id: "CLT-MITRE-034"
304
+ version: 1
305
+ detection_name: "CMD:SageMitre-AH [Heur]"
224
306
  category: defense_evasion
225
307
  severity: warning
226
308
  confidence: 0.60
227
- pattern: "net(1)?(\\.exe)?.*use.*\\\\\\\\.*\\\\.*/delete$"
309
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
310
+ # boundary at all.
311
+ pattern: "{{CMD_POS}}net(?:1)?(?:\\.exe)?{{NOT_FILENAME}}.*use.*\\\\\\\\.*\\\\.*/delete$"
228
312
  case_insensitive: true
229
313
  match_on: command
230
314
  title: "MITRE ATT&CK T1070.005 - Network Share Connection Removal"
@@ -233,10 +317,14 @@
233
317
 
234
318
  # --- T1087.002: Domain Account ---
235
319
  - id: "CLT-MITRE-037"
320
+ version: 1
321
+ detection_name: "CMD:SageMitre-AK [Heur]"
236
322
  category: discovery
237
323
  severity: warning
238
324
  confidence: 0.60
239
- pattern: "(net1.*user.*/dom|net(\\.exe)?.*user.*/dom|net1.*group.*/dom|net(\\.exe)?.*group.*/dom)"
325
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
326
+ # CLT-CMD-009.
327
+ pattern: "{{CMD_POS}}net1(?:\\.exe)?{{NOT_FILENAME}}.*user.*/dom|{{CMD_POS}}net(?:\\.exe)?{{NOT_FILENAME}}.*user.*/dom|{{CMD_POS}}net1(?:\\.exe)?{{NOT_FILENAME}}.*group.*/dom|{{CMD_POS}}net(?:\\.exe)?{{NOT_FILENAME}}.*group.*/dom"
240
328
  case_insensitive: true
241
329
  match_on: command
242
330
  title: "MITRE ATT&CK T1087.002 - Domain Account"
@@ -245,10 +333,14 @@
245
333
 
246
334
  # --- T1087.003: Email Account ---
247
335
  - id: "CLT-MITRE-038"
336
+ version: 1
337
+ detection_name: "CMD:SageMitre-AL [Heur]"
248
338
  category: discovery
249
339
  severity: warning
250
340
  confidence: 0.60
251
- pattern: "Get-.*GlobalAddressList"
341
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
342
+ # boundary at all.
343
+ pattern: "{{CMD_POS}}Get-.*GlobalAddressList{{NOT_FILENAME}}"
252
344
  case_insensitive: true
253
345
  match_on: command
254
346
  title: "MITRE ATT&CK T1087.003 - Email Account"
@@ -257,10 +349,14 @@
257
349
 
258
350
  # --- T1098.002: Exchange Email Delegate Permissions ---
259
351
  - id: "CLT-MITRE-039"
352
+ version: 1
353
+ detection_name: "CMD:SageMitre-AM [Heur]"
260
354
  category: persistence
261
355
  severity: warning
262
356
  confidence: 0.60
263
- pattern: "Add-MailboxPermission"
357
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
358
+ # boundary at all.
359
+ pattern: "{{CMD_POS}}Add-MailboxPermission{{NOT_FILENAME}}"
264
360
  case_insensitive: true
265
361
  match_on: command
266
362
  title: "MITRE ATT&CK T1098.002 - Exchange Email Delegate Permissions"
@@ -269,10 +365,14 @@
269
365
 
270
366
  # --- T1098: Account Manipulation ---
271
367
  - id: "CLT-MITRE-040"
368
+ version: 1
369
+ detection_name: "CMD:SageMitre-AN [Heur]"
272
370
  category: persistence
273
371
  severity: warning
274
372
  confidence: 0.60
275
- pattern: "(net(1|\\.exe)?.*user.*\\w+.*/add|net(1|\\.exe)?.*group.*Administrators.*\\w+ /add|net(1|\\.exe)?.*localgroup.*Administrators.*\\w+ /add)"
373
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
374
+ # CLT-CMD-009.
375
+ pattern: "{{CMD_POS}}net(?:1)?(?:\\.exe)?{{NOT_FILENAME}}.*user.*\\w+.*/add|{{CMD_POS}}net(?:1)?(?:\\.exe)?{{NOT_FILENAME}}.*group.*Administrators.*\\w+ /add|{{CMD_POS}}net(?:1)?(?:\\.exe)?{{NOT_FILENAME}}.*localgroup.*Administrators.*\\w+ /add"
276
376
  case_insensitive: true
277
377
  match_on: command
278
378
  title: "MITRE ATT&CK T1098 - Account Manipulation"
@@ -281,10 +381,18 @@
281
381
 
282
382
  # --- T1105: Ingress Tool Transfer ---
283
383
  - id: "CLT-MITRE-041"
384
+ version: 1
385
+ detection_name: "CMD:SageMitre-AO [Heur]"
284
386
  category: command_and_control
285
387
  severity: warning
286
388
  confidence: 0.60
287
- pattern: "(certutil(\\.exe)?.*-(decode|decodehex|encode|ping|url|urlcache|verifyctl)|MpCmdRun(\\.exe)?.*-DownloadFile.*-url.*http|\\(new-object System\\.Net\\.WebClient\\)\\.DownloadFile|bitsadmin(\\.exe)?.*/(transfer|download|create|addfile|setnotifycmdline|resume|complete)|Start-BitsTransfer)"
389
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
390
+ # CLT-CMD-009. The `New-Object` branch keeps its literal opening paren
391
+ # instead of {{CMD_POS}} -- the closing `\)` is already a literal
392
+ # requirement, so pairing it with {{CMD_POS}}'s wider boundary set (`;`,
393
+ # `&`, `|`, ...) would accept an unmatched close paren with nothing real to
394
+ # pair it with. Same pipe-boundary exception shape as CLT-MAC-CMD-003.
395
+ pattern: "{{CMD_POS}}certutil(?:\\.exe)?{{NOT_FILENAME}}.*-(decode|decodehex|encode|ping|url|urlcache|verifyctl)|{{CMD_POS}}MpCmdRun(?:\\.exe)?{{NOT_FILENAME}}.*-DownloadFile.*-url.*http|\\(New-Object{{NOT_FILENAME}} System\\.Net\\.WebClient\\)\\.DownloadFile|{{CMD_POS}}bitsadmin(?:\\.exe)?{{NOT_FILENAME}}.*/(transfer|download|create|addfile|setnotifycmdline|resume|complete)|{{CMD_POS}}Start-BitsTransfer{{NOT_FILENAME}}"
288
396
  case_insensitive: true
289
397
  match_on: command
290
398
  title: "MITRE ATT&CK T1105 - Ingress Tool Transfer"
@@ -293,10 +401,14 @@
293
401
 
294
402
  # --- T1110.004: Credential Stuffing ---
295
403
  - id: "CLT-MITRE-042"
404
+ version: 1
405
+ detection_name: "CMD:SageMitre-AP [Heur]"
296
406
  category: credential_access
297
407
  severity: warning
298
408
  confidence: 0.60
299
- pattern: "Invoke-CredentialInjection\\.ps1"
409
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
410
+ # boundary at all.
411
+ pattern: "{{CMD_POS}}Invoke-CredentialInjection\\.ps1{{NOT_FILENAME}}"
300
412
  case_insensitive: true
301
413
  match_on: command
302
414
  title: "MITRE ATT&CK T1110.004 - Credential Stuffing"
@@ -305,10 +417,14 @@
305
417
 
306
418
  # --- T1120: Peripheral Device Discovery ---
307
419
  - id: "CLT-MITRE-043"
420
+ version: 1
421
+ detection_name: "CMD:SageMitre-AQ [Heur]"
308
422
  category: discovery
309
423
  severity: warning
310
424
  confidence: 0.60
311
- pattern: "(Get-WMIObject.*Win32_PnPEntity|pnputil(\\.exe)?.*/enum-devices)"
425
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
426
+ # CLT-CMD-009.
427
+ pattern: "{{CMD_POS}}Get-WMIObject{{NOT_FILENAME}}.*Win32_PnPEntity|{{CMD_POS}}pnputil(?:\\.exe)?{{NOT_FILENAME}}.*/enum-devices"
312
428
  case_insensitive: true
313
429
  match_on: command
314
430
  title: "MITRE ATT&CK T1120 - Peripheral Device Discovery"
@@ -317,10 +433,14 @@
317
433
 
318
434
  # --- T1136.001: Local Account ---
319
435
  - id: "CLT-MITRE-048"
436
+ version: 1
437
+ detection_name: "CMD:SageMitre-AV [Heur]"
320
438
  category: persistence
321
439
  severity: warning
322
440
  confidence: 0.60
323
- pattern: "net(1)?(\\.exe)?.*user.*/add"
441
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
442
+ # boundary at all.
443
+ pattern: "{{CMD_POS}}net(?:1)?(?:\\.exe)?{{NOT_FILENAME}}.*user.*/add"
324
444
  case_insensitive: true
325
445
  match_on: command
326
446
  title: "MITRE ATT&CK T1136.001 - Local Account"
@@ -329,10 +449,14 @@
329
449
 
330
450
  # --- T1136.002: Domain Account ---
331
451
  - id: "CLT-MITRE-049"
452
+ version: 1
453
+ detection_name: "CMD:SageMitre-AW [Heur]"
332
454
  category: persistence
333
455
  severity: warning
334
456
  confidence: 0.60
335
- pattern: "net(1)?(\\.exe)?.*user.*/add.*/domain"
457
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
458
+ # boundary at all.
459
+ pattern: "{{CMD_POS}}net(?:1)?(?:\\.exe)?{{NOT_FILENAME}}.*user.*/add.*/domain"
336
460
  case_insensitive: true
337
461
  match_on: command
338
462
  title: "MITRE ATT&CK T1136.002 - Domain Account"
@@ -341,10 +465,14 @@
341
465
 
342
466
  # --- T1201: Password Policy Discovery ---
343
467
  - id: "CLT-MITRE-050"
468
+ version: 1
469
+ detection_name: "CMD:SageMitre-AX [Heur]"
344
470
  category: discovery
345
471
  severity: warning
346
472
  confidence: 0.60
347
- pattern: "(net.*accounts|Get-ADDefaultDomainPasswordPolicy|Get-PassPol)"
473
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
474
+ # CLT-CMD-009.
475
+ pattern: "{{CMD_POS}}net(?:\\.exe)?{{NOT_FILENAME}}.*accounts|{{CMD_POS}}Get-ADDefaultDomainPasswordPolicy{{NOT_FILENAME}}|{{CMD_POS}}Get-PassPol{{NOT_FILENAME}}"
348
476
  case_insensitive: true
349
477
  match_on: command
350
478
  title: "MITRE ATT&CK T1201 - Password Policy Discovery"
@@ -353,10 +481,14 @@
353
481
 
354
482
  # --- T1202: Indirect Command Execution ---
355
483
  - id: "CLT-MITRE-051"
484
+ version: 1
485
+ detection_name: "CMD:SageMitre-AY [Heur]"
356
486
  category: defense_evasion
357
487
  severity: warning
358
488
  confidence: 0.60
359
- pattern: "(regsvr32(\\.exe)?.*/i:http(s)?://.+.*scrobj\\.dll|rundll32(\\.exe)?.*pcwutl\\.dll,LaunchApplication|rundll32(\\.exe)?.*shell32\\.dll,ShellExec_RunDLL|rundll32(\\.exe)?.*url\\.dll,OpenURL|msiexec(\\.exe)?.*-(Y|Z)|regasm(\\.exe)?.*/u.*\\\\)"
489
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
490
+ # CLT-CMD-009.
491
+ pattern: "{{CMD_POS}}regsvr32(?:\\.exe)?{{NOT_FILENAME}}.*/i:http(s)?://.+.*scrobj\\.dll|{{CMD_POS}}rundll32(?:\\.exe)?{{NOT_FILENAME}}.*pcwutl\\.dll,LaunchApplication|{{CMD_POS}}rundll32(?:\\.exe)?{{NOT_FILENAME}}.*shell32\\.dll,ShellExec_RunDLL|{{CMD_POS}}rundll32(?:\\.exe)?{{NOT_FILENAME}}.*url\\.dll,OpenURL|{{CMD_POS}}msiexec(?:\\.exe)?{{NOT_FILENAME}}.*-(Y|Z)|{{CMD_POS}}regasm(?:\\.exe)?{{NOT_FILENAME}}.*/u.*\\\\"
360
492
  case_insensitive: true
361
493
  match_on: command
362
494
  title: "MITRE ATT&CK T1202 - Indirect Command Execution"
@@ -365,10 +497,14 @@
365
497
 
366
498
  # --- T1203: Exploitationfor Client Execution ---
367
499
  - id: "CLT-MITRE-052"
500
+ version: 1
501
+ detection_name: "CMD:SageMitre-AZ [Heur]"
368
502
  category: execution
369
503
  severity: critical
370
504
  confidence: 0.90
371
- pattern: "(p\\^+o\\^+w\\^+e\\^+r\\^+s\\^+h\\^+e\\^+l\\^+l|w\\^+s\\^+c\\^+r\\^+i\\^+p\\^+t|c\\^+e\\^+r\\^+t\\^+u\\^+t\\^+i\\^+l|m\\^+s\\^+h\\^+t\\^+a|explorer\\.exe .*\\.vbs$)"
505
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
506
+ # CLT-CMD-009.
507
+ pattern: "{{CMD_POS}}p\\^+o\\^+w\\^+e\\^+r\\^+s\\^+h\\^+e\\^+l\\^+l{{NOT_FILENAME}}|{{CMD_POS}}w\\^+s\\^+c\\^+r\\^+i\\^+p\\^+t{{NOT_FILENAME}}|{{CMD_POS}}c\\^+e\\^+r\\^+t\\^+u\\^+t\\^+i\\^+l{{NOT_FILENAME}}|{{CMD_POS}}m\\^+s\\^+h\\^+t\\^+a{{NOT_FILENAME}}|{{CMD_POS}}explorer\\.exe{{NOT_FILENAME}} .*\\.vbs$"
372
508
  case_insensitive: true
373
509
  match_on: command
374
510
  title: "MITRE ATT&CK T1203 - Exploitationfor Client Execution"
@@ -377,10 +513,14 @@
377
513
 
378
514
  # --- T1216.001: Pub Prn ---
379
515
  - id: "CLT-MITRE-053"
516
+ version: 1
517
+ detection_name: "CMD:SageMitre-BA [Heur]"
380
518
  category: defense_evasion
381
519
  severity: warning
382
520
  confidence: 0.60
383
- pattern: "pubprn\\.vbs"
521
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
522
+ # boundary at all.
523
+ pattern: "{{CMD_POS}}pubprn\\.vbs{{NOT_FILENAME}}"
384
524
  case_insensitive: true
385
525
  match_on: command
386
526
  title: "MITRE ATT&CK T1216.001 - Pub Prn"
@@ -389,10 +529,14 @@
389
529
 
390
530
  # --- T1218.012: Verclsid ---
391
531
  - id: "CLT-MITRE-064"
532
+ version: 1
533
+ detection_name: "CMD:SageMitre-BL [Heur]"
392
534
  category: defense_evasion
393
535
  severity: warning
394
536
  confidence: 0.60
395
- pattern: "verclsid(\\.exe)?.*/S.*/C.*\\{[0-9a-fA-F]{8}"
537
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
538
+ # boundary at all.
539
+ pattern: "{{CMD_POS}}verclsid(?:\\.exe)?{{NOT_FILENAME}}.*/S.*/C.*\\{[0-9a-fA-F]{8}"
396
540
  case_insensitive: true
397
541
  match_on: command
398
542
  title: "MITRE ATT&CK T1218.012 - Verclsid"
@@ -401,10 +545,14 @@
401
545
 
402
546
  # --- T1220: XSL Script Processing ---
403
547
  - id: "CLT-MITRE-065"
548
+ version: 1
549
+ detection_name: "CMD:SageMitre-BM [Heur]"
404
550
  category: defense_evasion
405
551
  severity: warning
406
552
  confidence: 0.60
407
- pattern: "(msxsl(\\.exe)?.+\\.xsl|wmic(\\.exe)?.*process.*list.*/FORMAT:.+\\.xsl|wmic(\\.exe)?.*os.*get.*/FORMAT:.+\\.xsl|wmic.*process.*list.*/FORMAT:evil\\[\\.\\]xsl|wmic.*os.*get.*/FORMAT:https\\[:\\]//example\\[\\.\\]com/evil\\[\\.\\]xsl)"
553
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
554
+ # CLT-CMD-009.
555
+ pattern: "{{CMD_POS}}msxsl(?:\\.exe)?{{NOT_FILENAME}}.+\\.xsl|{{CMD_POS}}wmic(?:\\.exe)?{{NOT_FILENAME}}.*process.*list.*/FORMAT:.+\\.xsl|{{CMD_POS}}wmic(?:\\.exe)?{{NOT_FILENAME}}.*os.*get.*/FORMAT:.+\\.xsl|{{CMD_POS}}wmic(?:\\.exe)?{{NOT_FILENAME}}.*process.*list.*/FORMAT:evil\\[\\.\\]xsl|{{CMD_POS}}wmic(?:\\.exe)?{{NOT_FILENAME}}.*os.*get.*/FORMAT:https\\[:\\]//example\\[\\.\\]com/evil\\[\\.\\]xsl"
408
556
  case_insensitive: true
409
557
  match_on: command
410
558
  title: "MITRE ATT&CK T1220 - XSL Script Processing"
@@ -413,10 +561,14 @@
413
561
 
414
562
  # --- T1482: Domain Trust Discovery ---
415
563
  - id: "CLT-MITRE-066"
564
+ version: 1
565
+ detection_name: "CMD:SageMitre-BN [Heur]"
416
566
  category: discovery
417
567
  severity: warning
418
568
  confidence: 0.60
419
- pattern: "(nltest(\\.exe)?.*/domain_trusts|dsquery(\\.exe)?.*/trustedDomain|Get-NetDomainTrust|Get-NetForestTrust|Get-ADDomain)"
569
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
570
+ # CLT-CMD-009.
571
+ pattern: "{{CMD_POS}}nltest(?:\\.exe)?{{NOT_FILENAME}}.*/domain_trusts|{{CMD_POS}}dsquery(?:\\.exe)?{{NOT_FILENAME}}.*/trustedDomain|{{CMD_POS}}Get-NetDomainTrust{{NOT_FILENAME}}|{{CMD_POS}}Get-NetForestTrust{{NOT_FILENAME}}|{{CMD_POS}}Get-ADDomain{{NOT_FILENAME}}"
420
572
  case_insensitive: true
421
573
  match_on: command
422
574
  title: "MITRE ATT&CK T1482 - Domain Trust Discovery"
@@ -425,10 +577,14 @@
425
577
 
426
578
  # --- T1484.001: Group Policy Modification ---
427
579
  - id: "CLT-MITRE-067"
580
+ version: 1
581
+ detection_name: "CMD:SageMitre-BO [Heur]"
428
582
  category: defense_evasion
429
583
  severity: warning
430
584
  confidence: 0.60
431
- pattern: "(New-GPOImmediateTask|New-.*GPOImmediateTask)"
585
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
586
+ # CLT-CMD-009.
587
+ pattern: "{{CMD_POS}}New-GPOImmediateTask{{NOT_FILENAME}}|{{CMD_POS}}New-.*GPOImmediateTask{{NOT_FILENAME}}"
432
588
  case_insensitive: true
433
589
  match_on: command
434
590
  title: "MITRE ATT&CK T1484.001 - Group Policy Modification"
@@ -437,10 +593,14 @@
437
593
 
438
594
  # --- T1518.001: Security Software Discovery ---
439
595
  - id: "CLT-MITRE-071"
596
+ version: 1
597
+ detection_name: "CMD:SageMitre-BS [Heur]"
440
598
  category: discovery
441
599
  severity: warning
442
600
  confidence: 0.60
443
- pattern: "(tasklist(\\.exe)?.+(virus|defender|cylance)|wmic(\\.exe)?.+Path.*AntiVirusProduct)"
601
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
602
+ # CLT-CMD-009.
603
+ pattern: "{{CMD_POS}}tasklist(?:\\.exe)?{{NOT_FILENAME}}.+(virus|defender|cylance)|{{CMD_POS}}wmic(?:\\.exe)?{{NOT_FILENAME}}.+Path.*AntiVirusProduct"
444
604
  case_insensitive: true
445
605
  match_on: command
446
606
  title: "MITRE ATT&CK T1518.001 - Security Software Discovery"
@@ -449,10 +609,14 @@
449
609
 
450
610
  # --- T1518: Software Discovery ---
451
611
  - id: "CLT-MITRE-072"
612
+ version: 1
613
+ detection_name: "CMD:SageMitre-BT [Heur]"
452
614
  category: discovery
453
615
  severity: warning
454
616
  confidence: 0.60
455
- pattern: "wmic(\\.exe)? product get name"
617
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
618
+ # boundary at all.
619
+ pattern: "{{CMD_POS}}wmic(?:\\.exe)?{{NOT_FILENAME}} product get name"
456
620
  case_insensitive: true
457
621
  match_on: command
458
622
  title: "MITRE ATT&CK T1518 - Software Discovery"
@@ -461,10 +625,14 @@
461
625
 
462
626
  # --- T1546.001: Change Default File Association ---
463
627
  - id: "CLT-MITRE-075"
628
+ version: 1
629
+ detection_name: "CMD:SageMitre-BW [Heur]"
464
630
  category: persistence
465
631
  severity: warning
466
632
  confidence: 0.60
467
- pattern: "cmd(\\.exe)?.*/c.+assoc"
633
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
634
+ # boundary at all.
635
+ pattern: "{{CMD_POS}}cmd(?:\\.exe)?{{NOT_FILENAME}}.*/c.+assoc"
468
636
  case_insensitive: true
469
637
  match_on: command
470
638
  title: "MITRE ATT&CK T1546.001 - Change Default File Association"
@@ -473,10 +641,14 @@
473
641
 
474
642
  # --- T1546.003: Windows Management Instrumentation Event Subscription ---
475
643
  - id: "CLT-MITRE-076"
644
+ version: 1
645
+ detection_name: "CMD:SageMitre-BX [Heur]"
476
646
  category: persistence
477
647
  severity: warning
478
648
  confidence: 0.60
479
- pattern: "scrcons\\.exe"
649
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
650
+ # boundary at all.
651
+ pattern: "{{CMD_POS}}scrcons\\.exe{{NOT_FILENAME}}"
480
652
  case_insensitive: true
481
653
  match_on: command
482
654
  title: "MITRE ATT&CK T1546.003 - Windows Management Instrumentation Event Subscription"
@@ -485,10 +657,14 @@
485
657
 
486
658
  # --- T1546.007: Netsh Helper DLL ---
487
659
  - id: "CLT-MITRE-077"
660
+ version: 1
661
+ detection_name: "CMD:SageMitre-BY [Heur]"
488
662
  category: persistence
489
663
  severity: warning
490
664
  confidence: 0.60
491
- pattern: "netsh\\.exe add helper"
665
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
666
+ # boundary at all.
667
+ pattern: "{{CMD_POS}}netsh\\.exe{{NOT_FILENAME}} add helper"
492
668
  case_insensitive: true
493
669
  match_on: command
494
670
  title: "MITRE ATT&CK T1546.007 - Netsh Helper DLL"
@@ -497,10 +673,14 @@
497
673
 
498
674
  # --- T1546.012: Image File Execution Options Injection ---
499
675
  - id: "CLT-MITRE-078"
676
+ version: 1
677
+ detection_name: "CMD:SageMitre-BZ [Heur]"
500
678
  category: persistence
501
679
  severity: warning
502
680
  confidence: 0.60
503
- pattern: "(Add-ScrnSaveBackdoor\\.ps1|Add-RegBackdoor\\.ps1)"
681
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
682
+ # CLT-CMD-009.
683
+ pattern: "{{CMD_POS}}Add-ScrnSaveBackdoor\\.ps1{{NOT_FILENAME}}|{{CMD_POS}}Add-RegBackdoor\\.ps1{{NOT_FILENAME}}"
504
684
  case_insensitive: true
505
685
  match_on: command
506
686
  title: "MITRE ATT&CK T1546.012 - Image File Execution Options Injection"
@@ -509,10 +689,14 @@
509
689
 
510
690
  # --- T1547: Bootor Logon Autostart Execution ---
511
691
  - id: "CLT-MITRE-081"
692
+ version: 1
693
+ detection_name: "CMD:SageMitre-CC [Heur]"
512
694
  category: persistence
513
695
  severity: warning
514
696
  confidence: 0.60
515
- pattern: "Add-Persistence\\.ps1"
697
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
698
+ # boundary at all.
699
+ pattern: "{{CMD_POS}}Add-Persistence\\.ps1{{NOT_FILENAME}}"
516
700
  case_insensitive: true
517
701
  match_on: command
518
702
  title: "MITRE ATT&CK T1547 - Bootor Logon Autostart Execution"
@@ -521,10 +705,14 @@
521
705
 
522
706
  # --- T1548.002: Bypass User Account Control ---
523
707
  - id: "CLT-MITRE-082"
708
+ version: 1
709
+ detection_name: "CMD:SageMitre-CD [Heur]"
524
710
  category: privilege_escalation
525
711
  severity: warning
526
712
  confidence: 0.60
527
- pattern: "(Invoke-BypassUAC\\.ps1|Invoke-WScriptBypassUAC\\.ps1|Add-MpPreference\\.ps1)"
713
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
714
+ # CLT-CMD-009.
715
+ pattern: "{{CMD_POS}}Invoke-BypassUAC\\.ps1{{NOT_FILENAME}}|{{CMD_POS}}Invoke-WScriptBypassUAC\\.ps1{{NOT_FILENAME}}|{{CMD_POS}}Add-MpPreference\\.ps1{{NOT_FILENAME}}"
528
716
  case_insensitive: true
529
717
  match_on: command
530
718
  title: "MITRE ATT&CK T1548.002 - Bypass User Account Control"
@@ -533,10 +721,14 @@
533
721
 
534
722
  # --- T1552.002: Credentialsin Registry ---
535
723
  - id: "CLT-MITRE-083"
724
+ version: 1
725
+ detection_name: "CMD:SageMitre-CE [Heur]"
536
726
  category: credential_access
537
727
  severity: warning
538
728
  confidence: 0.60
539
- pattern: "reg(\\.exe)? query (HKLM|HKCU) /f password /t REG_SZ /s"
729
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
730
+ # boundary at all.
731
+ pattern: "{{CMD_POS}}reg(?:\\.exe)?{{NOT_FILENAME}} query (HKLM|HKCU) /f password /t REG_SZ /s"
540
732
  case_insensitive: true
541
733
  match_on: command
542
734
  title: "MITRE ATT&CK T1552.002 - Credentialsin Registry"
@@ -545,10 +737,14 @@
545
737
 
546
738
  # --- T1553.004: Install Root Certificate ---
547
739
  - id: "CLT-MITRE-085"
740
+ version: 1
741
+ detection_name: "CMD:SageMitre-CG [Heur]"
548
742
  category: defense_evasion
549
743
  severity: warning
550
744
  confidence: 0.60
551
- pattern: "(certutil(\\.exe)? -addstore|certmgr(\\.exe)? -add)"
745
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
746
+ # CLT-CMD-009.
747
+ pattern: "{{CMD_POS}}certutil(?:\\.exe)?{{NOT_FILENAME}} -addstore|{{CMD_POS}}certmgr(?:\\.exe)?{{NOT_FILENAME}} -add"
552
748
  case_insensitive: true
553
749
  match_on: command
554
750
  title: "MITRE ATT&CK T1553.004 - Install Root Certificate"
@@ -557,10 +753,14 @@
557
753
 
558
754
  # --- T1555.003: Credentialsfrom Web Browsers ---
559
755
  - id: "CLT-MITRE-086"
756
+ version: 1
757
+ detection_name: "CMD:SageMitre-CH [Heur]"
560
758
  category: credential_access
561
759
  severity: warning
562
760
  confidence: 0.60
563
- pattern: "(Get-ChromeDump\\.ps1|Get-FoxDump\\.ps1)"
761
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
762
+ # CLT-CMD-009.
763
+ pattern: "{{CMD_POS}}Get-ChromeDump\\.ps1{{NOT_FILENAME}}|{{CMD_POS}}Get-FoxDump\\.ps1{{NOT_FILENAME}}"
564
764
  case_insensitive: true
565
765
  match_on: command
566
766
  title: "MITRE ATT&CK T1555.003 - Credentialsfrom Web Browsers"
@@ -569,10 +769,14 @@
569
769
 
570
770
  # --- T1555: Credentialsfrom Password Stores ---
571
771
  - id: "CLT-MITRE-087"
772
+ version: 1
773
+ detection_name: "CMD:SageMitre-CI [Heur]"
572
774
  category: credential_access
573
775
  severity: warning
574
776
  confidence: 0.60
575
- pattern: "Get-VaultCredential\\.ps1"
777
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
778
+ # boundary at all.
779
+ pattern: "{{CMD_POS}}Get-VaultCredential\\.ps1{{NOT_FILENAME}}"
576
780
  case_insensitive: true
577
781
  match_on: command
578
782
  title: "MITRE ATT&CK T1555 - Credentialsfrom Password Stores"
@@ -581,10 +785,15 @@
581
785
 
582
786
  # --- T1558.001: Golden Ticket ---
583
787
  - id: "CLT-MITRE-088"
788
+ version: 1
789
+ detection_name: "CMD:SageMitre-CJ [Heur]"
584
790
  category: credential_access
585
791
  severity: warning
586
792
  confidence: 0.60
587
- pattern: "(net(1)?(\\.exe)?.*group.*(domain admins|enterprise admins|organization management).*/domain$|Invoke-Mimikatz.*Golden.*Ticket)"
793
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
794
+ # CLT-CMD-009. "Invoke-Mimikatz" here is the complete identifier, not a
795
+ # suffix, so {{CMD_POS}} applies cleanly (see CLT-MITRE-006 note).
796
+ pattern: "{{CMD_POS}}net(?:1)?(?:\\.exe)?{{NOT_FILENAME}}.*group.*(domain admins|enterprise admins|organization management).*/domain$|{{CMD_POS}}Invoke-Mimikatz{{NOT_FILENAME}}.*Golden.*Ticket"
588
797
  case_insensitive: true
589
798
  match_on: command
590
799
  title: "MITRE ATT&CK T1558.001 - Golden Ticket"
@@ -593,10 +802,14 @@
593
802
 
594
803
  # --- T1558.002: Silver Ticket ---
595
804
  - id: "CLT-MITRE-089"
805
+ version: 1
806
+ detection_name: "CMD:SageMitre-CK [Heur]"
596
807
  category: credential_access
597
808
  severity: warning
598
809
  confidence: 0.60
599
- pattern: "Invoke-Mimikatz.*Silver.*Ticket"
810
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009 (see
811
+ # CLT-MITRE-006 note on why {{CMD_POS}} applies to Invoke-Mimikatz here).
812
+ pattern: "{{CMD_POS}}Invoke-Mimikatz{{NOT_FILENAME}}.*Silver.*Ticket"
600
813
  case_insensitive: true
601
814
  match_on: command
602
815
  title: "MITRE ATT&CK T1558.002 - Silver Ticket"
@@ -605,10 +818,14 @@
605
818
 
606
819
  # --- T1558.003: Kerberoasting ---
607
820
  - id: "CLT-MITRE-090"
821
+ version: 1
822
+ detection_name: "CMD:SageMitre-CL [Heur]"
608
823
  category: credential_access
609
824
  severity: warning
610
825
  confidence: 0.60
611
- pattern: "Invoke-Kerberoast"
826
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
827
+ # boundary at all.
828
+ pattern: "{{CMD_POS}}Invoke-Kerberoast{{NOT_FILENAME}}"
612
829
  case_insensitive: true
613
830
  match_on: command
614
831
  title: "MITRE ATT&CK T1558.003 - Kerberoasting"
@@ -617,10 +834,14 @@
617
834
 
618
835
  # --- T1558.004: ASREP Roasting ---
619
836
  - id: "CLT-MITRE-091"
837
+ version: 1
838
+ detection_name: "CMD:SageMitre-CM [Heur]"
620
839
  category: credential_access
621
840
  severity: warning
622
841
  confidence: 0.60
623
- pattern: "Get-ASREPHash"
842
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
843
+ # boundary at all.
844
+ pattern: "{{CMD_POS}}Get-ASREPHash{{NOT_FILENAME}}"
624
845
  case_insensitive: true
625
846
  match_on: command
626
847
  title: "MITRE ATT&CK T1558.004 - ASREP Roasting"
@@ -629,10 +850,14 @@
629
850
 
630
851
  # --- T1560.001: Archive Via Utility ---
631
852
  - id: "CLT-MITRE-092"
853
+ version: 1
854
+ detection_name: "CMD:SageMitre-CN [Heur]"
632
855
  category: collection
633
856
  severity: warning
634
857
  confidence: 0.60
635
- pattern: "(\\brar(\\.exe)?\\s+.*\\b[afu]\\b|\\bWinRAR(\\.exe)?\\s|\\b7z(\\.exe)?\\s+.*\\ba\\b|\\bzip(\\.exe)?\\s+.*-u|\\bWinZip32(\\.exe)?\\s)"
858
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
859
+ # CLT-CMD-009.
860
+ pattern: "{{CMD_POS}}rar(?:\\.exe)?{{NOT_FILENAME}}\\s+.*\\b[afu]\\b|{{CMD_POS}}WinRAR(?:\\.exe)?{{NOT_FILENAME}}\\s|{{CMD_POS}}7z(?:\\.exe)?{{NOT_FILENAME}}\\s+.*\\ba\\b|{{CMD_POS}}zip(?:\\.exe)?{{NOT_FILENAME}}\\s+.*-u|{{CMD_POS}}WinZip32(?:\\.exe)?{{NOT_FILENAME}}\\s"
636
861
  case_insensitive: true
637
862
  match_on: command
638
863
  title: "MITRE ATT&CK T1560.001 - Archive Via Utility"
@@ -641,10 +866,14 @@
641
866
 
642
867
  # --- T1562.002: Disable Windows Event Logging ---
643
868
  - id: "CLT-MITRE-093"
869
+ version: 1
870
+ detection_name: "CMD:SageMitre-CO [Heur]"
644
871
  category: defense_evasion
645
872
  severity: warning
646
873
  confidence: 0.60
647
- pattern: "AUDITPOL(\\.exe)?.*/set.*/category:Detailed Tracking"
874
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
875
+ # boundary at all.
876
+ pattern: "{{CMD_POS}}AUDITPOL(?:\\.exe)?{{NOT_FILENAME}}.*/set.*/category:Detailed Tracking"
648
877
  case_insensitive: true
649
878
  match_on: command
650
879
  title: "MITRE ATT&CK T1562.002 - Disable Windows Event Logging"
@@ -653,10 +882,14 @@
653
882
 
654
883
  # --- T1562.003: Impair Command History Logging ---
655
884
  - id: "CLT-MITRE-094"
885
+ version: 1
886
+ detection_name: "CMD:SageMitre-CP [Heur]"
656
887
  category: defense_evasion
657
888
  severity: warning
658
889
  confidence: 0.60
659
- pattern: "(Set-.*PSReadLineOption.*-HistorySavePath.*\\{File.*Path\\}|Set-PSReadlineOption.*-HistorySaveStyle.*SaveNothing)"
890
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
891
+ # CLT-CMD-009.
892
+ pattern: "{{CMD_POS}}Set-.*PSReadLineOption{{NOT_FILENAME}}.*-HistorySavePath.*\\{File.*Path\\}|{{CMD_POS}}Set-PSReadlineOption{{NOT_FILENAME}}.*-HistorySaveStyle.*SaveNothing"
660
893
  case_insensitive: true
661
894
  match_on: command
662
895
  title: "MITRE ATT&CK T1562.003 - Impair Command History Logging"
@@ -665,10 +898,14 @@
665
898
 
666
899
  # --- T1562.006: Indicator Blocking ---
667
900
  - id: "CLT-MITRE-095"
901
+ version: 1
902
+ detection_name: "CMD:SageMitre-CQ [Heur]"
668
903
  category: defense_evasion
669
904
  severity: warning
670
905
  confidence: 0.60
671
- pattern: "(wevtutil(\\.exe)?.*(sl|set-log).+/e:false|wevtutil(\\.exe)?.*(cl|clear-log)|Set-.*EtwTraceProvider)"
906
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
907
+ # CLT-CMD-009.
908
+ pattern: "{{CMD_POS}}wevtutil(?:\\.exe)?{{NOT_FILENAME}}.*(sl|set-log).+/e:false|{{CMD_POS}}wevtutil(?:\\.exe)?{{NOT_FILENAME}}.*(cl|clear-log)|{{CMD_POS}}Set-.*EtwTraceProvider{{NOT_FILENAME}}"
672
909
  case_insensitive: true
673
910
  match_on: command
674
911
  title: "MITRE ATT&CK T1562.006 - Indicator Blocking"
@@ -677,10 +914,16 @@
677
914
 
678
915
  # --- T1563.002: RDP Hijacking ---
679
916
  - id: "CLT-MITRE-096"
917
+ version: 1
918
+ detection_name: "CMD:SageMitre-CR [Heur]"
680
919
  category: lateral_movement
681
920
  severity: warning
682
921
  confidence: 0.60
683
- pattern: "(^|\\s|[;&|])(?:\"[^\"]*\\btscon(?:\\.exe)?\\b\"|'[^']*\\btscon(?:\\.exe)?\\b'|(?:[^\\s\"']*[\\\\/])?\\btscon(?:\\.exe)?\\b)\\s+\\S+(\\s+/dest:[^\\s]+)?"
922
+ # {{CMD_POS}} + {{HAS_ARG}}, same shape as CLT-CMD-009. The old
923
+ # `(^|\s|[;&|])` boundary plus a "match inside any quoted string" branch
924
+ # accepted argument position and quoted prose alike (`grep -rn tscon`,
925
+ # `echo "use tscon.exe ... to hijack"`).
926
+ pattern: "{{CMD_POS}}tscon(?:\\.exe)?{{NOT_FILENAME}}{{HAS_ARG}}"
684
927
  case_insensitive: true
685
928
  match_on: command
686
929
  title: "MITRE ATT&CK T1563.002 - RDP Hijacking"
@@ -689,10 +932,14 @@
689
932
 
690
933
  # --- T1567.001: Exfiltrationto Code Repository ---
691
934
  - id: "CLT-MITRE-099"
935
+ version: 1
936
+ detection_name: "CMD:SageMitre-CU [Heur]"
692
937
  category: exfiltration
693
938
  severity: warning
694
939
  confidence: 0.60
695
- pattern: "Invoke-ExfilDataToGitHub"
940
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
941
+ # boundary at all.
942
+ pattern: "{{CMD_POS}}Invoke-ExfilDataToGitHub{{NOT_FILENAME}}"
696
943
  case_insensitive: true
697
944
  match_on: command
698
945
  title: "MITRE ATT&CK T1567.001 - Exfiltrationto Code Repository"
@@ -701,10 +948,14 @@
701
948
 
702
949
  # --- T1567.002: Exfiltrationto Cloud Storage ---
703
950
  - id: "CLT-MITRE-100"
951
+ version: 1
952
+ detection_name: "CMD:SageMitre-CV [Heur]"
704
953
  category: exfiltration
705
954
  severity: warning
706
955
  confidence: 0.60
707
- pattern: "Invoke-DropboxUpload"
956
+ # {{CMD_POS}} + {{NOT_FILENAME}}, same shape as CLT-CMD-009. Had no
957
+ # boundary at all.
958
+ pattern: "{{CMD_POS}}Invoke-DropboxUpload{{NOT_FILENAME}}"
708
959
  case_insensitive: true
709
960
  match_on: command
710
961
  title: "MITRE ATT&CK T1567.002 - Exfiltrationto Cloud Storage"
@@ -713,10 +964,14 @@
713
964
 
714
965
  # --- T1569: System Services ---
715
966
  - id: "CLT-MITRE-102"
967
+ version: 1
968
+ detection_name: "CMD:SageMitre-CX [Heur]"
716
969
  category: execution
717
970
  severity: warning
718
971
  confidence: 0.60
719
- pattern: "(subinacl(\\.exe) /service|sc(\\.exe)? sdset)"
972
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
973
+ # CLT-CMD-009.
974
+ pattern: "{{CMD_POS}}subinacl(?:\\.exe){{NOT_FILENAME}} /service|{{CMD_POS}}sc(?:\\.exe)?{{NOT_FILENAME}} sdset"
720
975
  case_insensitive: true
721
976
  match_on: command
722
977
  title: "MITRE ATT&CK T1569 - System Services"
@@ -725,10 +980,14 @@
725
980
 
726
981
  # --- T1592.002: Software ---
727
982
  - id: "CLT-MITRE-104"
983
+ version: 1
984
+ detection_name: "CMD:SageMitre-CZ [Heur]"
728
985
  category: reconnaissance
729
986
  severity: warning
730
987
  confidence: 0.60
731
- pattern: "(powershell(\\.exe)?.*-Class.*AntiVirusProduct|powershell(\\.exe)?.*path.*AntiVirusProduct)"
988
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
989
+ # CLT-CMD-009.
990
+ pattern: "{{CMD_POS}}powershell(?:\\.exe)?{{NOT_FILENAME}}.*-Class.*AntiVirusProduct|{{CMD_POS}}powershell(?:\\.exe)?{{NOT_FILENAME}}.*path.*AntiVirusProduct"
732
991
  case_insensitive: true
733
992
  match_on: command
734
993
  title: "MITRE ATT&CK T1592.002 - Software"
@@ -737,10 +996,14 @@
737
996
 
738
997
  # --- T1592.004: Client Configurations ---
739
998
  - id: "CLT-MITRE-105"
999
+ version: 1
1000
+ detection_name: "CMD:SageMitre-DA [Heur]"
740
1001
  category: reconnaissance
741
1002
  severity: warning
742
1003
  confidence: 0.60
743
- pattern: "(powershell(\\.exe)?.*-Class.*Win32_UserAccount|powershell(\\.exe)?.*Get-SmbShare)"
1004
+ # {{CMD_POS}} + {{NOT_FILENAME}} on each alternative, same shape as
1005
+ # CLT-CMD-009.
1006
+ pattern: "{{CMD_POS}}powershell(?:\\.exe)?{{NOT_FILENAME}}.*-Class.*Win32_UserAccount|{{CMD_POS}}powershell(?:\\.exe)?{{NOT_FILENAME}}.*Get-SmbShare"
744
1007
  case_insensitive: true
745
1008
  match_on: command
746
1009
  title: "MITRE ATT&CK T1592.004 - Client Configurations"