@gendigital/sage-openclaw 0.10.0 → 0.12.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 +5 -5
- package/dist/index.cjs +1881 -977
- package/dist/index.cjs.map +4 -4
- package/dist/mcp-server.cjs +31882 -0
- package/dist/mcp-server.cjs.map +7 -0
- package/dist/model-download-worker.cjs +140 -111
- package/dist/model-download-worker.cjs.map +3 -3
- package/dist/skill-upload-worker.cjs +5632 -0
- package/dist/skill-upload-worker.cjs.map +7 -0
- package/openclaw.plugin.json +6 -1
- package/package.json +9 -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 +44 -50
- 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 +92 -43
- 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 +14 -24
- 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
|
@@ -2,8 +2,13 @@
|
|
|
2
2
|
# Author: Test — NOT real threats
|
|
3
3
|
#
|
|
4
4
|
# Canary rules that match completely harmless, highly-specific marker strings.
|
|
5
|
-
# The
|
|
6
|
-
#
|
|
5
|
+
# The markers are deliberately OPAQUE (e.g. "diagmark_cmd_a75bf229", not
|
|
6
|
+
# "__sage_test_deny_cmd_..."): a self-describing name reads as a security probe, and
|
|
7
|
+
# a safety-trained model given security context (e.g. OpenCode, which injects Sage's
|
|
8
|
+
# scan findings into the prompt) will REFUSE to run it — so the artifact never
|
|
9
|
+
# reaches Sage and the E2E deny/ask test can't fire. Opaque markers run as rote yet
|
|
10
|
+
# stay unique random strings, so false positives are essentially impossible. The
|
|
11
|
+
# rule id/title carry the human-readable meaning; the hex suffix aids traceability.
|
|
7
12
|
#
|
|
8
13
|
# Coverage matrix:
|
|
9
14
|
# Tool match_on block(deny) require_approval(ask) log(allow)
|
|
@@ -24,8 +29,7 @@
|
|
|
24
29
|
category: testing
|
|
25
30
|
severity: critical
|
|
26
31
|
confidence: 0.95
|
|
27
|
-
|
|
28
|
-
pattern: "__sage_test_deny_cmd_a75bf229__"
|
|
32
|
+
pattern: "diagmark_cmd_a75bf229"
|
|
29
33
|
match_on: command
|
|
30
34
|
title: "[TEST] Canary deny command (alpha)"
|
|
31
35
|
expires_at: null
|
|
@@ -35,8 +39,7 @@
|
|
|
35
39
|
category: testing
|
|
36
40
|
severity: critical
|
|
37
41
|
confidence: 0.95
|
|
38
|
-
|
|
39
|
-
pattern: "__sage_test_deny_run_c3d91e4a__"
|
|
42
|
+
pattern: "diagmark_run_c3d91e4a"
|
|
40
43
|
match_on: command
|
|
41
44
|
title: "[TEST] Canary deny command (bravo)"
|
|
42
45
|
expires_at: null
|
|
@@ -44,10 +47,9 @@
|
|
|
44
47
|
|
|
45
48
|
- id: "DUMMY-CMD-ASK-001"
|
|
46
49
|
category: testing
|
|
47
|
-
severity:
|
|
48
|
-
confidence: 0.
|
|
49
|
-
|
|
50
|
-
pattern: "__sage_test_ask_cmd_8f2e6b71__"
|
|
50
|
+
severity: warning
|
|
51
|
+
confidence: 0.60
|
|
52
|
+
pattern: "diagmark_cmd_8f2e6b71"
|
|
51
53
|
match_on: command
|
|
52
54
|
title: "[TEST] Canary approval command (alpha)"
|
|
53
55
|
expires_at: null
|
|
@@ -55,10 +57,9 @@
|
|
|
55
57
|
|
|
56
58
|
- id: "DUMMY-CMD-ASK-002"
|
|
57
59
|
category: testing
|
|
58
|
-
severity:
|
|
59
|
-
confidence: 0.
|
|
60
|
-
|
|
61
|
-
pattern: "__sage_test_ask_run_d4a09c53__"
|
|
60
|
+
severity: warning
|
|
61
|
+
confidence: 0.60
|
|
62
|
+
pattern: "diagmark_run_d4a09c53"
|
|
62
63
|
match_on: command
|
|
63
64
|
title: "[TEST] Canary approval command (bravo)"
|
|
64
65
|
expires_at: null
|
|
@@ -66,14 +67,14 @@
|
|
|
66
67
|
|
|
67
68
|
- id: "DUMMY-CMD-LOG-001"
|
|
68
69
|
category: testing
|
|
69
|
-
severity:
|
|
70
|
-
confidence: 0.
|
|
71
|
-
|
|
72
|
-
pattern: "__sage_test_log_cmd_1b7e3f82__"
|
|
70
|
+
severity: info
|
|
71
|
+
confidence: 0.10
|
|
72
|
+
pattern: "diagmark_cmd_1b7e3f82"
|
|
73
73
|
match_on: command
|
|
74
74
|
title: "[TEST] Canary log-only command"
|
|
75
75
|
expires_at: null
|
|
76
76
|
revoked: false
|
|
77
|
+
flags: ["report"]
|
|
77
78
|
|
|
78
79
|
# ─── File-path patterns (Write / Edit / Read / Delete tools) ────────
|
|
79
80
|
|
|
@@ -81,8 +82,7 @@
|
|
|
81
82
|
category: testing
|
|
82
83
|
severity: critical
|
|
83
84
|
confidence: 0.95
|
|
84
|
-
|
|
85
|
-
pattern: "__sage_test_deny_file_e6c4a918__"
|
|
85
|
+
pattern: "diagmark_file_e6c4a918"
|
|
86
86
|
match_on: file_path
|
|
87
87
|
title: "[TEST] Canary deny file path"
|
|
88
88
|
expires_at: null
|
|
@@ -90,10 +90,9 @@
|
|
|
90
90
|
|
|
91
91
|
- id: "DUMMY-FILE-ASK-001"
|
|
92
92
|
category: testing
|
|
93
|
-
severity:
|
|
94
|
-
confidence: 0.
|
|
95
|
-
|
|
96
|
-
pattern: "__sage_test_ask_file_52fd7b36__"
|
|
93
|
+
severity: warning
|
|
94
|
+
confidence: 0.60
|
|
95
|
+
pattern: "diagmark_file_52fd7b36"
|
|
97
96
|
match_on: file_path
|
|
98
97
|
title: "[TEST] Canary approval file path"
|
|
99
98
|
expires_at: null
|
|
@@ -101,14 +100,14 @@
|
|
|
101
100
|
|
|
102
101
|
- id: "DUMMY-FILE-LOG-001"
|
|
103
102
|
category: testing
|
|
104
|
-
severity:
|
|
105
|
-
confidence: 0.
|
|
106
|
-
|
|
107
|
-
pattern: "__sage_test_log_file_9a13de74__"
|
|
103
|
+
severity: info
|
|
104
|
+
confidence: 0.10
|
|
105
|
+
pattern: "diagmark_file_9a13de74"
|
|
108
106
|
match_on: file_path
|
|
109
107
|
title: "[TEST] Canary log-only file path"
|
|
110
108
|
expires_at: null
|
|
111
109
|
revoked: false
|
|
110
|
+
flags: ["report"]
|
|
112
111
|
|
|
113
112
|
# ─── Content patterns (Write / Edit tools — file body) ──────────────
|
|
114
113
|
|
|
@@ -116,8 +115,7 @@
|
|
|
116
115
|
category: testing
|
|
117
116
|
severity: critical
|
|
118
117
|
confidence: 0.95
|
|
119
|
-
|
|
120
|
-
pattern: "__SAGE_TEST_DENY_CONTENT_3c8f15b7__"
|
|
118
|
+
pattern: "diagmark_content_3c8f15b7"
|
|
121
119
|
match_on: content
|
|
122
120
|
title: "[TEST] Canary deny content"
|
|
123
121
|
expires_at: null
|
|
@@ -125,10 +123,9 @@
|
|
|
125
123
|
|
|
126
124
|
- id: "DUMMY-CONTENT-ASK-001"
|
|
127
125
|
category: testing
|
|
128
|
-
severity:
|
|
129
|
-
confidence: 0.
|
|
130
|
-
|
|
131
|
-
pattern: "__SAGE_TEST_ASK_CONTENT_7d4ea2c9__"
|
|
126
|
+
severity: warning
|
|
127
|
+
confidence: 0.60
|
|
128
|
+
pattern: "diagmark_content_7d4ea2c9"
|
|
132
129
|
match_on: content
|
|
133
130
|
title: "[TEST] Canary approval content"
|
|
134
131
|
expires_at: null
|
|
@@ -136,14 +133,14 @@
|
|
|
136
133
|
|
|
137
134
|
- id: "DUMMY-CONTENT-LOG-001"
|
|
138
135
|
category: testing
|
|
139
|
-
severity:
|
|
140
|
-
confidence: 0.
|
|
141
|
-
|
|
142
|
-
pattern: "__SAGE_TEST_LOG_CONTENT_f0b683d1__"
|
|
136
|
+
severity: info
|
|
137
|
+
confidence: 0.10
|
|
138
|
+
pattern: "diagmark_content_f0b683d1"
|
|
143
139
|
match_on: content
|
|
144
140
|
title: "[TEST] Canary log-only content"
|
|
145
141
|
expires_at: null
|
|
146
142
|
revoked: false
|
|
143
|
+
flags: ["report"]
|
|
147
144
|
|
|
148
145
|
# ─── URL patterns (WebFetch / Bash / Write content) ─────────────────
|
|
149
146
|
# Uses .test TLD (RFC 2606 reserved, never resolves) for safety.
|
|
@@ -152,8 +149,7 @@
|
|
|
152
149
|
category: testing
|
|
153
150
|
severity: critical
|
|
154
151
|
confidence: 0.95
|
|
155
|
-
|
|
156
|
-
pattern: "sage-canary-deny-4e91ca37\\.test"
|
|
152
|
+
pattern: "diaghost-4e91ca37\\.test"
|
|
157
153
|
match_on: url
|
|
158
154
|
title: "[TEST] Canary deny URL"
|
|
159
155
|
expires_at: null
|
|
@@ -161,10 +157,9 @@
|
|
|
161
157
|
|
|
162
158
|
- id: "DUMMY-URL-ASK-001"
|
|
163
159
|
category: testing
|
|
164
|
-
severity:
|
|
165
|
-
confidence: 0.
|
|
166
|
-
|
|
167
|
-
pattern: "sage-canary-ask-b26d80f5\\.test"
|
|
160
|
+
severity: warning
|
|
161
|
+
confidence: 0.60
|
|
162
|
+
pattern: "diaghost-b26d80f5\\.test"
|
|
168
163
|
match_on: url
|
|
169
164
|
title: "[TEST] Canary approval URL"
|
|
170
165
|
expires_at: null
|
|
@@ -172,14 +167,14 @@
|
|
|
172
167
|
|
|
173
168
|
- id: "DUMMY-URL-LOG-001"
|
|
174
169
|
category: testing
|
|
175
|
-
severity:
|
|
176
|
-
confidence: 0.
|
|
177
|
-
|
|
178
|
-
pattern: "sage-canary-log-65f3d7a4\\.test"
|
|
170
|
+
severity: info
|
|
171
|
+
confidence: 0.10
|
|
172
|
+
pattern: "diaghost-65f3d7a4\\.test"
|
|
179
173
|
match_on: url
|
|
180
174
|
title: "[TEST] Canary log-only URL"
|
|
181
175
|
expires_at: null
|
|
182
176
|
revoked: false
|
|
177
|
+
flags: ["report"]
|
|
183
178
|
|
|
184
179
|
# ─── Domain pattern (verifies domain→url routing in heuristics) ─────
|
|
185
180
|
|
|
@@ -187,8 +182,7 @@
|
|
|
187
182
|
category: testing
|
|
188
183
|
severity: critical
|
|
189
184
|
confidence: 0.95
|
|
190
|
-
|
|
191
|
-
pattern: "sage-canary-domain-0c82eb16\\.test"
|
|
185
|
+
pattern: "diaghost-0c82eb16\\.test"
|
|
192
186
|
match_on: domain
|
|
193
187
|
title: "[TEST] Canary deny domain"
|
|
194
188
|
expires_at: null
|
|
@@ -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"
|