@gendigital/sage-openclaw 0.9.0 → 0.11.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.
- package/README.md +63 -20
- package/dist/index.cjs +1073 -653
- package/dist/index.cjs.map +4 -4
- package/dist/mcp-server.cjs +31776 -0
- package/dist/mcp-server.cjs.map +7 -0
- package/dist/model-download-worker.cjs +422 -29
- package/dist/model-download-worker.cjs.map +4 -4
- package/openclaw.plugin.json +1 -1
- package/package.json +13 -3
- package/resources/skills/security-awareness/SKILL.md +5 -1
- package/resources/threats/agent-layer.yaml +186 -0
- package/resources/threats/commands.yaml +24 -53
- package/resources/threats/credentials.yaml +12 -20
- package/resources/threats/dummy.yaml +22 -33
- package/resources/threats/files.yaml +34 -53
- package/resources/threats/mac-commands.yaml +20 -47
- package/resources/threats/mac-credentials.yaml +4 -12
- package/resources/threats/mac-files.yaml +5 -15
- package/resources/threats/mac-obfuscation.yaml +6 -13
- package/resources/threats/mac-persistence.yaml +11 -20
- package/resources/threats/mac-supply-chain.yaml +5 -8
- package/resources/threats/mitre.yaml +105 -167
- package/resources/threats/obfuscation.yaml +7 -15
- package/resources/threats/persistence.yaml +10 -17
- package/resources/threats/prompt-injection.yaml +94 -44
- package/resources/threats/self-defense.yaml +8 -12
- package/resources/threats/supply_chain.yaml +1 -2
- package/resources/threats/urls.yaml +9 -14
- package/resources/threats/win-commands.yaml +46 -106
- package/resources/threats/win-credentials.yaml +15 -25
- package/resources/threats/win-files.yaml +10 -20
- package/resources/threats/win-obfuscation.yaml +21 -37
- package/resources/threats/win-persistence.yaml +8 -16
- package/resources/threats/win-supply-chain.yaml +2 -3
- /package/resources/{allowlists → trusted-domains}/trusted-installer-domains.yaml +0 -0
|
@@ -24,7 +24,6 @@
|
|
|
24
24
|
category: testing
|
|
25
25
|
severity: critical
|
|
26
26
|
confidence: 0.95
|
|
27
|
-
action: block
|
|
28
27
|
pattern: "__sage_test_deny_cmd_a75bf229__"
|
|
29
28
|
match_on: command
|
|
30
29
|
title: "[TEST] Canary deny command (alpha)"
|
|
@@ -35,7 +34,6 @@
|
|
|
35
34
|
category: testing
|
|
36
35
|
severity: critical
|
|
37
36
|
confidence: 0.95
|
|
38
|
-
action: block
|
|
39
37
|
pattern: "__sage_test_deny_run_c3d91e4a__"
|
|
40
38
|
match_on: command
|
|
41
39
|
title: "[TEST] Canary deny command (bravo)"
|
|
@@ -44,9 +42,8 @@
|
|
|
44
42
|
|
|
45
43
|
- id: "DUMMY-CMD-ASK-001"
|
|
46
44
|
category: testing
|
|
47
|
-
severity:
|
|
48
|
-
confidence: 0.
|
|
49
|
-
action: require_approval
|
|
45
|
+
severity: warning
|
|
46
|
+
confidence: 0.60
|
|
50
47
|
pattern: "__sage_test_ask_cmd_8f2e6b71__"
|
|
51
48
|
match_on: command
|
|
52
49
|
title: "[TEST] Canary approval command (alpha)"
|
|
@@ -55,9 +52,8 @@
|
|
|
55
52
|
|
|
56
53
|
- id: "DUMMY-CMD-ASK-002"
|
|
57
54
|
category: testing
|
|
58
|
-
severity:
|
|
59
|
-
confidence: 0.
|
|
60
|
-
action: require_approval
|
|
55
|
+
severity: warning
|
|
56
|
+
confidence: 0.60
|
|
61
57
|
pattern: "__sage_test_ask_run_d4a09c53__"
|
|
62
58
|
match_on: command
|
|
63
59
|
title: "[TEST] Canary approval command (bravo)"
|
|
@@ -66,14 +62,14 @@
|
|
|
66
62
|
|
|
67
63
|
- id: "DUMMY-CMD-LOG-001"
|
|
68
64
|
category: testing
|
|
69
|
-
severity:
|
|
70
|
-
confidence: 0.
|
|
71
|
-
action: log
|
|
65
|
+
severity: info
|
|
66
|
+
confidence: 0.10
|
|
72
67
|
pattern: "__sage_test_log_cmd_1b7e3f82__"
|
|
73
68
|
match_on: command
|
|
74
69
|
title: "[TEST] Canary log-only command"
|
|
75
70
|
expires_at: null
|
|
76
71
|
revoked: false
|
|
72
|
+
flags: ["report"]
|
|
77
73
|
|
|
78
74
|
# ─── File-path patterns (Write / Edit / Read / Delete tools) ────────
|
|
79
75
|
|
|
@@ -81,7 +77,6 @@
|
|
|
81
77
|
category: testing
|
|
82
78
|
severity: critical
|
|
83
79
|
confidence: 0.95
|
|
84
|
-
action: block
|
|
85
80
|
pattern: "__sage_test_deny_file_e6c4a918__"
|
|
86
81
|
match_on: file_path
|
|
87
82
|
title: "[TEST] Canary deny file path"
|
|
@@ -90,9 +85,8 @@
|
|
|
90
85
|
|
|
91
86
|
- id: "DUMMY-FILE-ASK-001"
|
|
92
87
|
category: testing
|
|
93
|
-
severity:
|
|
94
|
-
confidence: 0.
|
|
95
|
-
action: require_approval
|
|
88
|
+
severity: warning
|
|
89
|
+
confidence: 0.60
|
|
96
90
|
pattern: "__sage_test_ask_file_52fd7b36__"
|
|
97
91
|
match_on: file_path
|
|
98
92
|
title: "[TEST] Canary approval file path"
|
|
@@ -101,14 +95,14 @@
|
|
|
101
95
|
|
|
102
96
|
- id: "DUMMY-FILE-LOG-001"
|
|
103
97
|
category: testing
|
|
104
|
-
severity:
|
|
105
|
-
confidence: 0.
|
|
106
|
-
action: log
|
|
98
|
+
severity: info
|
|
99
|
+
confidence: 0.10
|
|
107
100
|
pattern: "__sage_test_log_file_9a13de74__"
|
|
108
101
|
match_on: file_path
|
|
109
102
|
title: "[TEST] Canary log-only file path"
|
|
110
103
|
expires_at: null
|
|
111
104
|
revoked: false
|
|
105
|
+
flags: ["report"]
|
|
112
106
|
|
|
113
107
|
# ─── Content patterns (Write / Edit tools — file body) ──────────────
|
|
114
108
|
|
|
@@ -116,7 +110,6 @@
|
|
|
116
110
|
category: testing
|
|
117
111
|
severity: critical
|
|
118
112
|
confidence: 0.95
|
|
119
|
-
action: block
|
|
120
113
|
pattern: "__SAGE_TEST_DENY_CONTENT_3c8f15b7__"
|
|
121
114
|
match_on: content
|
|
122
115
|
title: "[TEST] Canary deny content"
|
|
@@ -125,9 +118,8 @@
|
|
|
125
118
|
|
|
126
119
|
- id: "DUMMY-CONTENT-ASK-001"
|
|
127
120
|
category: testing
|
|
128
|
-
severity:
|
|
129
|
-
confidence: 0.
|
|
130
|
-
action: require_approval
|
|
121
|
+
severity: warning
|
|
122
|
+
confidence: 0.60
|
|
131
123
|
pattern: "__SAGE_TEST_ASK_CONTENT_7d4ea2c9__"
|
|
132
124
|
match_on: content
|
|
133
125
|
title: "[TEST] Canary approval content"
|
|
@@ -136,14 +128,14 @@
|
|
|
136
128
|
|
|
137
129
|
- id: "DUMMY-CONTENT-LOG-001"
|
|
138
130
|
category: testing
|
|
139
|
-
severity:
|
|
140
|
-
confidence: 0.
|
|
141
|
-
action: log
|
|
131
|
+
severity: info
|
|
132
|
+
confidence: 0.10
|
|
142
133
|
pattern: "__SAGE_TEST_LOG_CONTENT_f0b683d1__"
|
|
143
134
|
match_on: content
|
|
144
135
|
title: "[TEST] Canary log-only content"
|
|
145
136
|
expires_at: null
|
|
146
137
|
revoked: false
|
|
138
|
+
flags: ["report"]
|
|
147
139
|
|
|
148
140
|
# ─── URL patterns (WebFetch / Bash / Write content) ─────────────────
|
|
149
141
|
# Uses .test TLD (RFC 2606 reserved, never resolves) for safety.
|
|
@@ -152,7 +144,6 @@
|
|
|
152
144
|
category: testing
|
|
153
145
|
severity: critical
|
|
154
146
|
confidence: 0.95
|
|
155
|
-
action: block
|
|
156
147
|
pattern: "sage-canary-deny-4e91ca37\\.test"
|
|
157
148
|
match_on: url
|
|
158
149
|
title: "[TEST] Canary deny URL"
|
|
@@ -161,9 +152,8 @@
|
|
|
161
152
|
|
|
162
153
|
- id: "DUMMY-URL-ASK-001"
|
|
163
154
|
category: testing
|
|
164
|
-
severity:
|
|
165
|
-
confidence: 0.
|
|
166
|
-
action: require_approval
|
|
155
|
+
severity: warning
|
|
156
|
+
confidence: 0.60
|
|
167
157
|
pattern: "sage-canary-ask-b26d80f5\\.test"
|
|
168
158
|
match_on: url
|
|
169
159
|
title: "[TEST] Canary approval URL"
|
|
@@ -172,14 +162,14 @@
|
|
|
172
162
|
|
|
173
163
|
- id: "DUMMY-URL-LOG-001"
|
|
174
164
|
category: testing
|
|
175
|
-
severity:
|
|
176
|
-
confidence: 0.
|
|
177
|
-
action: log
|
|
165
|
+
severity: info
|
|
166
|
+
confidence: 0.10
|
|
178
167
|
pattern: "sage-canary-log-65f3d7a4\\.test"
|
|
179
168
|
match_on: url
|
|
180
169
|
title: "[TEST] Canary log-only URL"
|
|
181
170
|
expires_at: null
|
|
182
171
|
revoked: false
|
|
172
|
+
flags: ["report"]
|
|
183
173
|
|
|
184
174
|
# ─── Domain pattern (verifies domain→url routing in heuristics) ─────
|
|
185
175
|
|
|
@@ -187,7 +177,6 @@
|
|
|
187
177
|
category: testing
|
|
188
178
|
severity: critical
|
|
189
179
|
confidence: 0.95
|
|
190
|
-
action: block
|
|
191
180
|
pattern: "sage-canary-domain-0c82eb16\\.test"
|
|
192
181
|
match_on: domain
|
|
193
182
|
title: "[TEST] Canary deny domain"
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
category: secrets
|
|
9
9
|
severity: critical
|
|
10
10
|
confidence: 0.95
|
|
11
|
-
action: block
|
|
12
11
|
pattern: "(/etc/passwd|/etc/shadow|/etc/sudoers)"
|
|
13
12
|
match_on: file_path
|
|
14
13
|
title: "Access system authentication file"
|
|
@@ -20,7 +19,6 @@
|
|
|
20
19
|
category: secrets
|
|
21
20
|
severity: critical
|
|
22
21
|
confidence: 0.95
|
|
23
|
-
action: block
|
|
24
22
|
pattern: "\\.ssh/authorized_keys"
|
|
25
23
|
match_on: file_path
|
|
26
24
|
title: "Access SSH authorized_keys (unauthorized access persistence)"
|
|
@@ -30,9 +28,8 @@
|
|
|
30
28
|
# --- SSH private keys and config ---
|
|
31
29
|
- id: "CLT-FILE-003"
|
|
32
30
|
category: secrets
|
|
33
|
-
severity:
|
|
34
|
-
confidence: 0.
|
|
35
|
-
action: require_approval
|
|
31
|
+
severity: warning
|
|
32
|
+
confidence: 0.60
|
|
36
33
|
pattern: "\\.ssh/(id_rsa|id_ed25519|id_ecdsa|id_dsa|config)$"
|
|
37
34
|
match_on: file_path
|
|
38
35
|
title: "Access SSH key or config file"
|
|
@@ -42,9 +39,8 @@
|
|
|
42
39
|
# --- Shell RC files ---
|
|
43
40
|
- id: "CLT-FILE-004"
|
|
44
41
|
category: tool
|
|
45
|
-
severity:
|
|
46
|
-
confidence: 0.
|
|
47
|
-
action: require_approval
|
|
42
|
+
severity: warning
|
|
43
|
+
confidence: 0.60
|
|
48
44
|
pattern: "\\.(bashrc|zshrc|profile|bash_profile|zprofile|zshenv)$"
|
|
49
45
|
match_on: file_path
|
|
50
46
|
title: "Access shell RC file (persistence mechanism)"
|
|
@@ -54,9 +50,8 @@
|
|
|
54
50
|
# --- Cron directories ---
|
|
55
51
|
- id: "CLT-FILE-006"
|
|
56
52
|
category: tool
|
|
57
|
-
severity:
|
|
58
|
-
confidence: 0.
|
|
59
|
-
action: require_approval
|
|
53
|
+
severity: warning
|
|
54
|
+
confidence: 0.60
|
|
60
55
|
pattern: "(/etc/cron\\.(d|daily|hourly|weekly|monthly)/|/var/spool/cron/)"
|
|
61
56
|
match_on: file_path
|
|
62
57
|
title: "Access cron directory"
|
|
@@ -66,9 +61,8 @@
|
|
|
66
61
|
# --- systemd unit files ---
|
|
67
62
|
- id: "CLT-FILE-007"
|
|
68
63
|
category: tool
|
|
69
|
-
severity:
|
|
70
|
-
confidence: 0.
|
|
71
|
-
action: require_approval
|
|
64
|
+
severity: warning
|
|
65
|
+
confidence: 0.60
|
|
72
66
|
pattern: "/etc/systemd/system/"
|
|
73
67
|
match_on: file_path
|
|
74
68
|
title: "Access systemd service unit file"
|
|
@@ -82,9 +76,8 @@
|
|
|
82
76
|
# targeted than command-string matching.
|
|
83
77
|
- id: "CLT-FILE-008"
|
|
84
78
|
category: secrets
|
|
85
|
-
severity:
|
|
86
|
-
confidence: 0.
|
|
87
|
-
action: require_approval
|
|
79
|
+
severity: warning
|
|
80
|
+
confidence: 0.60
|
|
88
81
|
pattern: "((^|[\\/\\\\])\\.env(\\.local|\\.production|\\.prod|\\.staging|\\.stage|\\.development|\\.dev|\\.test)?|\\.aws/credentials|\\.netrc|\\.pgpass)$"
|
|
89
82
|
match_on: file_path
|
|
90
83
|
title: "Access credential or environment file"
|
|
@@ -94,9 +87,8 @@
|
|
|
94
87
|
# --- Git hooks ---
|
|
95
88
|
- id: "CLT-FILE-009"
|
|
96
89
|
category: tool
|
|
97
|
-
severity:
|
|
98
|
-
confidence: 0.
|
|
99
|
-
action: require_approval
|
|
90
|
+
severity: warning
|
|
91
|
+
confidence: 0.60
|
|
100
92
|
pattern: "\\.git/hooks/"
|
|
101
93
|
match_on: file_path
|
|
102
94
|
title: "Access git hook (potential code execution on git events)"
|
|
@@ -106,9 +98,8 @@
|
|
|
106
98
|
# --- Android signing files ---
|
|
107
99
|
- id: "CLT-FILE-010"
|
|
108
100
|
category: secrets
|
|
109
|
-
severity:
|
|
110
|
-
confidence: 0.
|
|
111
|
-
action: require_approval
|
|
101
|
+
severity: warning
|
|
102
|
+
confidence: 0.60
|
|
112
103
|
pattern: "(key\\.properties|release\\.keystore|\\.jks|\\.keystore)$"
|
|
113
104
|
match_on: file_path
|
|
114
105
|
title: "Access Android signing file"
|
|
@@ -118,9 +109,8 @@
|
|
|
118
109
|
# --- Firebase config files ---
|
|
119
110
|
- id: "CLT-FILE-011"
|
|
120
111
|
category: secrets
|
|
121
|
-
severity:
|
|
122
|
-
confidence: 0.
|
|
123
|
-
action: require_approval
|
|
112
|
+
severity: warning
|
|
113
|
+
confidence: 0.60
|
|
124
114
|
pattern: "(google-services\\.json|GoogleService-Info\\.plist)$"
|
|
125
115
|
match_on: file_path
|
|
126
116
|
title: "Access Firebase configuration file"
|
|
@@ -130,9 +120,8 @@
|
|
|
130
120
|
# --- Cloud provider credential files ---
|
|
131
121
|
- id: "CLT-FILE-012"
|
|
132
122
|
category: secrets
|
|
133
|
-
severity:
|
|
134
|
-
confidence: 0.
|
|
135
|
-
action: require_approval
|
|
123
|
+
severity: warning
|
|
124
|
+
confidence: 0.60
|
|
136
125
|
pattern: "(application_default_credentials\\.json|\\.azure/(accessTokens|msal_token_cache)\\.json|\\.config/doctl/config\\.yaml)$"
|
|
137
126
|
match_on: file_path
|
|
138
127
|
title: "Access cloud provider credential file"
|
|
@@ -142,9 +131,8 @@
|
|
|
142
131
|
# --- Package manager tokens ---
|
|
143
132
|
- id: "CLT-FILE-013"
|
|
144
133
|
category: secrets
|
|
145
|
-
severity:
|
|
146
|
-
confidence: 0.
|
|
147
|
-
action: require_approval
|
|
134
|
+
severity: warning
|
|
135
|
+
confidence: 0.60
|
|
148
136
|
pattern: "(\\.npmrc|\\.pypirc|\\.gem/credentials|\\.cargo/credentials\\.toml|\\.docker/config\\.json)$"
|
|
149
137
|
match_on: file_path
|
|
150
138
|
title: "Access package manager credential file"
|
|
@@ -154,9 +142,8 @@
|
|
|
154
142
|
# --- Terraform state files ---
|
|
155
143
|
- id: "CLT-FILE-014"
|
|
156
144
|
category: secrets
|
|
157
|
-
severity:
|
|
158
|
-
confidence: 0.
|
|
159
|
-
action: require_approval
|
|
145
|
+
severity: warning
|
|
146
|
+
confidence: 0.60
|
|
160
147
|
pattern: "\\.(tfstate(\\.backup)?|tfvars(\\.json)?)$"
|
|
161
148
|
match_on: file_path
|
|
162
149
|
title: "Access Terraform state or variables file"
|
|
@@ -166,9 +153,8 @@
|
|
|
166
153
|
# --- Secrets/vault files ---
|
|
167
154
|
- id: "CLT-FILE-015"
|
|
168
155
|
category: secrets
|
|
169
|
-
severity:
|
|
170
|
-
confidence: 0.
|
|
171
|
-
action: require_approval
|
|
156
|
+
severity: warning
|
|
157
|
+
confidence: 0.60
|
|
172
158
|
pattern: "(master\\.key|credentials\\.yml\\.enc|secrets\\.yml|vault\\.yml|\\.vault-pass|\\.vault-token)$"
|
|
173
159
|
match_on: file_path
|
|
174
160
|
title: "Access secrets or vault file"
|
|
@@ -181,9 +167,8 @@
|
|
|
181
167
|
# would miss private key exfiltration.
|
|
182
168
|
- id: "CLT-FILE-016"
|
|
183
169
|
category: secrets
|
|
184
|
-
severity:
|
|
185
|
-
confidence: 0.
|
|
186
|
-
action: require_approval
|
|
170
|
+
severity: warning
|
|
171
|
+
confidence: 0.60
|
|
187
172
|
pattern: "\\.(pem|p12|pfx|p8)$"
|
|
188
173
|
match_on: file_path
|
|
189
174
|
title: "Access private key or certificate file"
|
|
@@ -193,9 +178,8 @@
|
|
|
193
178
|
# --- Kubeconfig ---
|
|
194
179
|
- id: "CLT-FILE-017"
|
|
195
180
|
category: secrets
|
|
196
|
-
severity:
|
|
197
|
-
confidence: 0.
|
|
198
|
-
action: require_approval
|
|
181
|
+
severity: warning
|
|
182
|
+
confidence: 0.60
|
|
199
183
|
pattern: "(\\.kube/config|kubeconfig(\\.yaml|\\.yml)?)$"
|
|
200
184
|
match_on: file_path
|
|
201
185
|
title: "Access Kubernetes configuration file"
|
|
@@ -205,9 +189,8 @@
|
|
|
205
189
|
# --- Build system credential files ---
|
|
206
190
|
- id: "CLT-FILE-018"
|
|
207
191
|
category: secrets
|
|
208
|
-
severity:
|
|
209
|
-
confidence: 0.
|
|
210
|
-
action: require_approval
|
|
192
|
+
severity: warning
|
|
193
|
+
confidence: 0.60
|
|
211
194
|
pattern: "(\\.m2/settings\\.xml|gradle\\.properties)$"
|
|
212
195
|
match_on: file_path
|
|
213
196
|
title: "Access build system credential file"
|
|
@@ -217,9 +200,8 @@
|
|
|
217
200
|
# --- Shell/REPL history files ---
|
|
218
201
|
- id: "CLT-FILE-019"
|
|
219
202
|
category: secrets
|
|
220
|
-
severity:
|
|
221
|
-
confidence: 0.
|
|
222
|
-
action: require_approval
|
|
203
|
+
severity: warning
|
|
204
|
+
confidence: 0.60
|
|
223
205
|
pattern: "\\.(bash_history|zsh_history|mysql_history|python_history|node_repl_history|psql_history|irb_history)$"
|
|
224
206
|
match_on: file_path
|
|
225
207
|
title: "Access shell or REPL history file"
|
|
@@ -229,9 +211,8 @@
|
|
|
229
211
|
# --- JetBrains IDE database credentials ---
|
|
230
212
|
- id: "CLT-FILE-020"
|
|
231
213
|
category: secrets
|
|
232
|
-
severity:
|
|
233
|
-
confidence: 0.
|
|
234
|
-
action: require_approval
|
|
214
|
+
severity: warning
|
|
215
|
+
confidence: 0.60
|
|
235
216
|
pattern: "\\.idea/dataSources(\\.xml|/)"
|
|
236
217
|
match_on: file_path
|
|
237
218
|
title: "Access JetBrains IDE database credential file"
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
category: tool
|
|
11
11
|
severity: critical
|
|
12
12
|
confidence: 0.95
|
|
13
|
-
action: block
|
|
14
13
|
pattern: "\\bosascript\\b.*-e.*do shell script"
|
|
15
14
|
case_insensitive: true
|
|
16
15
|
match_on: command
|
|
@@ -23,7 +22,6 @@
|
|
|
23
22
|
category: tool
|
|
24
23
|
severity: critical
|
|
25
24
|
confidence: 0.90
|
|
26
|
-
action: block
|
|
27
25
|
pattern: "\\bosascript\\b.*-l\\s+JavaScript"
|
|
28
26
|
case_insensitive: true
|
|
29
27
|
match_on: command
|
|
@@ -36,7 +34,6 @@
|
|
|
36
34
|
category: tool
|
|
37
35
|
severity: critical
|
|
38
36
|
confidence: 0.90
|
|
39
|
-
action: block
|
|
40
37
|
pattern: "\\|\\s*osascript"
|
|
41
38
|
match_on: command
|
|
42
39
|
title: "Piped input to osascript (stdin AppleScript execution)"
|
|
@@ -48,7 +45,6 @@
|
|
|
48
45
|
category: tool
|
|
49
46
|
severity: critical
|
|
50
47
|
confidence: 0.90
|
|
51
|
-
action: block
|
|
52
48
|
pattern: "(curl|wget).*\\|.*osascript|osascript.*(curl|wget)"
|
|
53
49
|
case_insensitive: true
|
|
54
50
|
match_on: command
|
|
@@ -61,9 +57,8 @@
|
|
|
61
57
|
# open -a Terminal (launch Terminal with script)
|
|
62
58
|
- id: "CLT-MAC-CMD-005"
|
|
63
59
|
category: tool
|
|
64
|
-
severity:
|
|
65
|
-
confidence: 0.
|
|
66
|
-
action: require_approval
|
|
60
|
+
severity: warning
|
|
61
|
+
confidence: 0.60
|
|
67
62
|
pattern: "\\bopen\\s+-a\\s+Terminal"
|
|
68
63
|
match_on: command
|
|
69
64
|
title: "Launch Terminal application via open -a"
|
|
@@ -73,9 +68,8 @@
|
|
|
73
68
|
# open with hidden/background flags
|
|
74
69
|
- id: "CLT-MAC-CMD-006"
|
|
75
70
|
category: tool
|
|
76
|
-
severity:
|
|
77
|
-
confidence: 0.
|
|
78
|
-
action: require_approval
|
|
71
|
+
severity: warning
|
|
72
|
+
confidence: 0.60
|
|
79
73
|
pattern: "\\bopen\\s+(-[jg]|--hide|--background)"
|
|
80
74
|
match_on: command
|
|
81
75
|
title: "Launch application hidden/background via open"
|
|
@@ -87,9 +81,8 @@
|
|
|
87
81
|
# dscl user/group manipulation
|
|
88
82
|
- id: "CLT-MAC-CMD-007"
|
|
89
83
|
category: tool
|
|
90
|
-
severity:
|
|
91
|
-
confidence: 0.
|
|
92
|
-
action: require_approval
|
|
84
|
+
severity: warning
|
|
85
|
+
confidence: 0.60
|
|
93
86
|
pattern: "\\bdscl\\b.*(-create|-delete|-passwd|-append)"
|
|
94
87
|
match_on: command
|
|
95
88
|
title: "Directory Services user/group manipulation via dscl"
|
|
@@ -99,9 +92,8 @@
|
|
|
99
92
|
# networksetup proxy/DNS manipulation
|
|
100
93
|
- id: "CLT-MAC-CMD-008"
|
|
101
94
|
category: tool
|
|
102
|
-
severity:
|
|
103
|
-
confidence: 0.
|
|
104
|
-
action: require_approval
|
|
95
|
+
severity: warning
|
|
96
|
+
confidence: 0.60
|
|
105
97
|
pattern: "\\bnetworksetup\\b.*(-setwebproxy|-setsocksfirewallproxy|-setdnsservers|-setautoproxyurl)"
|
|
106
98
|
case_insensitive: true
|
|
107
99
|
match_on: command
|
|
@@ -114,7 +106,6 @@
|
|
|
114
106
|
category: tool
|
|
115
107
|
severity: critical
|
|
116
108
|
confidence: 0.90
|
|
117
|
-
action: block
|
|
118
109
|
pattern: "\\bsystemsetup\\b.*(-setremotelogin\\s+on|-setwakeonnetworkaccess\\s+on)"
|
|
119
110
|
case_insensitive: true
|
|
120
111
|
match_on: command
|
|
@@ -127,7 +118,6 @@
|
|
|
127
118
|
category: tool
|
|
128
119
|
severity: critical
|
|
129
120
|
confidence: 0.90
|
|
130
|
-
action: block
|
|
131
121
|
pattern: "kickstart.*-activate.*-configure"
|
|
132
122
|
case_insensitive: true
|
|
133
123
|
match_on: command
|
|
@@ -138,9 +128,8 @@
|
|
|
138
128
|
# installer -pkg -target / (silent package install)
|
|
139
129
|
- id: "CLT-MAC-CMD-011"
|
|
140
130
|
category: tool
|
|
141
|
-
severity:
|
|
142
|
-
confidence: 0.
|
|
143
|
-
action: require_approval
|
|
131
|
+
severity: warning
|
|
132
|
+
confidence: 0.60
|
|
144
133
|
pattern: "\\binstaller\\b.*-pkg.*-target"
|
|
145
134
|
case_insensitive: true
|
|
146
135
|
match_on: command
|
|
@@ -151,9 +140,8 @@
|
|
|
151
140
|
# hdiutil mount remote DMG
|
|
152
141
|
- id: "CLT-MAC-CMD-012"
|
|
153
142
|
category: tool
|
|
154
|
-
severity:
|
|
155
|
-
confidence: 0.
|
|
156
|
-
action: require_approval
|
|
143
|
+
severity: warning
|
|
144
|
+
confidence: 0.60
|
|
157
145
|
pattern: "\\bhdiutil\\b.*\\b(attach|mount)\\b.*https?://"
|
|
158
146
|
case_insensitive: true
|
|
159
147
|
match_on: command
|
|
@@ -164,9 +152,8 @@
|
|
|
164
152
|
# pkgutil --forget (package receipt manipulation)
|
|
165
153
|
- id: "CLT-MAC-CMD-013"
|
|
166
154
|
category: tool
|
|
167
|
-
severity:
|
|
168
|
-
confidence: 0.
|
|
169
|
-
action: require_approval
|
|
155
|
+
severity: warning
|
|
156
|
+
confidence: 0.60
|
|
170
157
|
pattern: "\\bpkgutil\\b.*--forget"
|
|
171
158
|
match_on: command
|
|
172
159
|
title: "Package receipt removal via pkgutil --forget"
|
|
@@ -180,7 +167,6 @@
|
|
|
180
167
|
category: tool
|
|
181
168
|
severity: critical
|
|
182
169
|
confidence: 0.95
|
|
183
|
-
action: block
|
|
184
170
|
pattern: "\\bdiskutil\\b.*\\b(eraseDisk|partitionDisk|secureErase)\\b"
|
|
185
171
|
match_on: command
|
|
186
172
|
title: "Disk erase/partition via diskutil"
|
|
@@ -192,7 +178,6 @@
|
|
|
192
178
|
category: tool
|
|
193
179
|
severity: critical
|
|
194
180
|
confidence: 0.95
|
|
195
|
-
action: block
|
|
196
181
|
pattern: "\\btmutil\\b.*\\b(delete|disable)\\b"
|
|
197
182
|
match_on: command
|
|
198
183
|
title: "Time Machine backup deletion/disable via tmutil (ransomware indicator)"
|
|
@@ -206,7 +191,6 @@
|
|
|
206
191
|
category: tool
|
|
207
192
|
severity: critical
|
|
208
193
|
confidence: 0.95
|
|
209
|
-
action: block
|
|
210
194
|
pattern: "\\bspctl\\b.*--master-disable"
|
|
211
195
|
match_on: command
|
|
212
196
|
title: "Gatekeeper disable via spctl --master-disable"
|
|
@@ -218,7 +202,6 @@
|
|
|
218
202
|
category: tool
|
|
219
203
|
severity: critical
|
|
220
204
|
confidence: 0.95
|
|
221
|
-
action: block
|
|
222
205
|
pattern: "\\bcsrutil\\b.*\\bdisable\\b"
|
|
223
206
|
match_on: command
|
|
224
207
|
title: "System Integrity Protection disable via csrutil"
|
|
@@ -230,7 +213,6 @@
|
|
|
230
213
|
category: tool
|
|
231
214
|
severity: critical
|
|
232
215
|
confidence: 0.90
|
|
233
|
-
action: block
|
|
234
216
|
pattern: "\\bdefaults\\b.*\\bwrite\\b.*LSQuarantine"
|
|
235
217
|
case_insensitive: true
|
|
236
218
|
match_on: command
|
|
@@ -241,9 +223,8 @@
|
|
|
241
223
|
# xattr -d com.apple.quarantine (quarantine removal)
|
|
242
224
|
- id: "CLT-MAC-CMD-019"
|
|
243
225
|
category: tool
|
|
244
|
-
severity:
|
|
245
|
-
confidence: 0.
|
|
246
|
-
action: require_approval
|
|
226
|
+
severity: warning
|
|
227
|
+
confidence: 0.60
|
|
247
228
|
pattern: "\\bxattr\\b.*-d.*com\\.apple\\.quarantine"
|
|
248
229
|
match_on: command
|
|
249
230
|
title: "Quarantine attribute removal via xattr"
|
|
@@ -255,7 +236,6 @@
|
|
|
255
236
|
category: tool
|
|
256
237
|
severity: critical
|
|
257
238
|
confidence: 0.90
|
|
258
|
-
action: block
|
|
259
239
|
pattern: "\\bpfctl\\b.*\\s-d\\b"
|
|
260
240
|
match_on: command
|
|
261
241
|
title: "Packet filter (firewall) disable via pfctl -d"
|
|
@@ -267,7 +247,6 @@
|
|
|
267
247
|
category: tool
|
|
268
248
|
severity: critical
|
|
269
249
|
confidence: 0.90
|
|
270
|
-
action: block
|
|
271
250
|
pattern: "\\btccutil\\b.*\\breset\\b"
|
|
272
251
|
match_on: command
|
|
273
252
|
title: "TCC privacy permissions reset via tccutil"
|
|
@@ -279,7 +258,6 @@
|
|
|
279
258
|
category: tool
|
|
280
259
|
severity: critical
|
|
281
260
|
confidence: 0.90
|
|
282
|
-
action: block
|
|
283
261
|
pattern: "\\blaunchctl\\b.*\\b(unload|bootout)\\b.*(com\\.apple\\.MRT|com\\.apple\\.XProtect|com\\.apple\\.security)"
|
|
284
262
|
case_insensitive: true
|
|
285
263
|
match_on: command
|
|
@@ -292,7 +270,6 @@
|
|
|
292
270
|
category: tool
|
|
293
271
|
severity: critical
|
|
294
272
|
confidence: 0.90
|
|
295
|
-
action: block
|
|
296
273
|
pattern: "\\bdefaults\\b.*\\bwrite\\b.*(com\\.apple\\.Finder\\s+AppleShowAllFiles|com\\.apple\\.LaunchServices\\s+LSQuarantine|com\\.apple\\.loginwindow)"
|
|
297
274
|
case_insensitive: true
|
|
298
275
|
match_on: command
|
|
@@ -307,7 +284,6 @@
|
|
|
307
284
|
category: tool
|
|
308
285
|
severity: critical
|
|
309
286
|
confidence: 0.90
|
|
310
|
-
action: block
|
|
311
287
|
pattern: "\\bdscl\\b.*\\s-passwd\\b"
|
|
312
288
|
match_on: command
|
|
313
289
|
title: "User password change via dscl"
|
|
@@ -319,7 +295,6 @@
|
|
|
319
295
|
category: tool
|
|
320
296
|
severity: critical
|
|
321
297
|
confidence: 0.95
|
|
322
|
-
action: block
|
|
323
298
|
pattern: "\\bdseditgroup\\b.*-o\\s+edit.*-a.*admin"
|
|
324
299
|
match_on: command
|
|
325
300
|
title: "Add user to admin group via dseditgroup"
|
|
@@ -329,9 +304,8 @@
|
|
|
329
304
|
# createhomedir — create home directory for arbitrary user
|
|
330
305
|
- id: "CLT-MAC-CMD-026"
|
|
331
306
|
category: tool
|
|
332
|
-
severity:
|
|
333
|
-
confidence: 0.
|
|
334
|
-
action: require_approval
|
|
307
|
+
severity: warning
|
|
308
|
+
confidence: 0.60
|
|
335
309
|
pattern: "\\bcreatehomedir\\b"
|
|
336
310
|
match_on: command
|
|
337
311
|
title: "Create home directory for user via createhomedir"
|
|
@@ -345,9 +319,8 @@
|
|
|
345
319
|
# screencapture to remote or hidden location
|
|
346
320
|
- id: "CLT-MAC-CMD-027"
|
|
347
321
|
category: tool
|
|
348
|
-
severity:
|
|
349
|
-
confidence: 0.
|
|
350
|
-
action: require_approval
|
|
322
|
+
severity: warning
|
|
323
|
+
confidence: 0.60
|
|
351
324
|
pattern: "\\bscreencapture\\b.*(-x|-C)"
|
|
352
325
|
match_on: command
|
|
353
326
|
title: "Silent screen capture via screencapture"
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
category: secrets
|
|
8
8
|
severity: critical
|
|
9
9
|
confidence: 0.95
|
|
10
|
-
action: block
|
|
11
10
|
pattern: "\\bsecurity\\b.*\\bfind-generic-password\\b.*-w"
|
|
12
11
|
match_on: command
|
|
13
12
|
title: "Keychain password extraction via security find-generic-password"
|
|
@@ -19,7 +18,6 @@
|
|
|
19
18
|
category: secrets
|
|
20
19
|
severity: critical
|
|
21
20
|
confidence: 0.95
|
|
22
|
-
action: block
|
|
23
21
|
pattern: "\\bsecurity\\b.*\\bfind-internet-password\\b.*-w"
|
|
24
22
|
match_on: command
|
|
25
23
|
title: "Keychain internet password extraction via security find-internet-password"
|
|
@@ -31,7 +29,6 @@
|
|
|
31
29
|
category: secrets
|
|
32
30
|
severity: critical
|
|
33
31
|
confidence: 0.95
|
|
34
|
-
action: block
|
|
35
32
|
pattern: "\\bsecurity\\b.*\\bdump-keychain\\b"
|
|
36
33
|
match_on: command
|
|
37
34
|
title: "Full keychain dump via security dump-keychain"
|
|
@@ -43,7 +40,6 @@
|
|
|
43
40
|
category: secrets
|
|
44
41
|
severity: critical
|
|
45
42
|
confidence: 0.90
|
|
46
|
-
action: block
|
|
47
43
|
pattern: "\\bsecurity\\b.*\\bunlock-keychain\\b.*-p"
|
|
48
44
|
match_on: command
|
|
49
45
|
title: "Keychain unlock with plaintext password"
|
|
@@ -53,9 +49,8 @@
|
|
|
53
49
|
# Keychain export
|
|
54
50
|
- id: "CLT-MAC-CRED-005"
|
|
55
51
|
category: secrets
|
|
56
|
-
severity:
|
|
57
|
-
confidence: 0.
|
|
58
|
-
action: require_approval
|
|
52
|
+
severity: warning
|
|
53
|
+
confidence: 0.60
|
|
59
54
|
pattern: "\\bsecurity\\b.*\\bexport\\b.*-k"
|
|
60
55
|
match_on: command
|
|
61
56
|
title: "Keychain item export via security export"
|
|
@@ -67,7 +62,6 @@
|
|
|
67
62
|
category: secrets
|
|
68
63
|
severity: critical
|
|
69
64
|
confidence: 0.90
|
|
70
|
-
action: block
|
|
71
65
|
pattern: "\\bsecurity\\b.*\\bdelete-keychain\\b"
|
|
72
66
|
match_on: command
|
|
73
67
|
title: "Keychain deletion via security delete-keychain"
|
|
@@ -77,9 +71,8 @@
|
|
|
77
71
|
# Directory Services auth data read
|
|
78
72
|
- id: "CLT-MAC-CRED-007"
|
|
79
73
|
category: secrets
|
|
80
|
-
severity:
|
|
81
|
-
confidence: 0.
|
|
82
|
-
action: require_approval
|
|
74
|
+
severity: warning
|
|
75
|
+
confidence: 0.60
|
|
83
76
|
pattern: "\\bdscl\\b.*-read.*(AuthenticationAuthority|Password|ShadowHash)"
|
|
84
77
|
match_on: command
|
|
85
78
|
title: "Read user authentication data via dscl"
|
|
@@ -91,7 +84,6 @@
|
|
|
91
84
|
category: secrets
|
|
92
85
|
severity: critical
|
|
93
86
|
confidence: 0.90
|
|
94
|
-
action: block
|
|
95
87
|
pattern: "\\bsqlite3\\b.*(/Library/Keychains/|login\\.keychain)"
|
|
96
88
|
match_on: command
|
|
97
89
|
title: "Direct Keychain database access via sqlite3"
|