@kenhkl/agent-moss 0.14.0 → 0.15.1

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.
@@ -1,245 +1,245 @@
1
1
  {
2
- "intent_consistency": [
3
- {
4
- "intent_keywords": [
5
- "读取",
6
- "查看",
7
- "分析",
8
- "read",
9
- "analyze",
10
- "view",
11
- "list",
12
- "列出"
13
- ],
14
- "dangerous_actions": [
15
- "删除",
16
- "remove",
17
- "delete",
18
- "rm",
19
- "格式化",
20
- "format"
21
- ],
22
- "reason": "原始意图为读取/分析,但执行了删除操作"
23
- },
24
- {
25
- "intent_keywords": [
26
- "查询",
27
- "搜索",
28
- "search",
29
- "query",
30
- "find"
31
- ],
32
- "dangerous_actions": [
33
- "修改",
34
- "update",
35
- "write",
36
- "写入",
37
- "alter"
38
- ],
39
- "reason": "原始意图为查询/搜索,但执行了修改操作"
40
- }
41
- ],
42
- "password_modify_consent": [
43
- {
44
- "pattern": "\\|\\s*passwd\\b"
45
- },
46
- {
47
- "pattern": "\\bpasswd\\s+--stdin\\b"
48
- },
49
- {
50
- "pattern": "\\bchpasswd\\b"
51
- },
52
- {
53
- "pattern": "\\bchgpasswd\\b"
54
- },
55
- {
56
- "pattern": "\\b(newusers|lnewusers)\\b"
57
- },
58
- {
59
- "pattern": "\\bpasswd\\s+-[a-zA-Z]*d\\b"
60
- },
61
- {
62
- "pattern": "\\bpasswd\\s+-[a-zA-Z]*l\\b"
63
- }
64
- ],
65
- "user_deletion_consent": [
66
- {
67
- "pattern": "\\buserdel\\s"
68
- },
69
- {
70
- "pattern": "\\bdeluser\\s"
71
- },
72
- {
73
- "pattern": "\\bluserdel\\s"
74
- },
75
- {
76
- "pattern": "\\bgroupdel\\s"
77
- },
78
- {
79
- "pattern": "\\blgroupdel\\s"
80
- }
81
- ],
82
- "combo_chains": {
83
- "_comment": "L2 组合攻击链检测:单步操作可能无害,但按 kill chain 顺序组合即为后渗透攻击(参考 ChainWatch 六阶段 kill chain / 玄武实验室 Hermes 案例)。阶段 pattern 匹配 action_detail(含 tool call 参数),链定义要求至少 min_stages 个阶段按顺序出现才命中,防单步误报。A 会话内杀伤链 / D 提权-利用组合 / E 持久化-外联组合在 L2 实现(基于 action_history 子序列匹配);B 跨会话组合链 / C 敏感数据传播链 / F 跨设备组合依赖行为图与数据流,由 formal_engine 实现。",
84
- "stages": {
85
- "PRIVESC": [
86
- "\\b(?:pkexec|doas)\\b",
87
- "\\bsudo\\s+-u\\s+root\\b",
88
- "\\bsudo\\b[^;&|\\n]*(?:/bin/sh|/bin/bash|\\bchmod\\b|\\bsetcap\\b|\\bvisudo\\b|\\bpasswd\\s+root|\\buseradd\\b)",
89
- "\\bchmod\\s+u\\+s\\b|\\bsetcap\\b|\\bsetuid\\b",
90
- "\\bsu\\s+-?l?\\s+root\\b"
91
- ],
92
- "SCAN": [
93
- "\\bnc\\s+-z\\b",
94
- "\\bnmap\\b(?!\\s+--help\\b)",
95
- "\\bmasscan\\b",
96
- "\\bhping3\\b",
97
- "\\bzenmap\\b",
98
- "\\bseq\\b.*\\bnc\\b"
99
- ],
100
- "LISTEN": [
101
- "\\bsocket\\s*\\([^)]*\\)\\s*[^;&|\\n]*(?:bind\\s*\\([^)]*\\)\\s*[^;&|\\n]*listen\\s*\\(|listen\\s*\\([^)]*\\)\\s*[^;&|\\n]*bind\\s*\\()",
102
- "\\bflask\\b|\\bfastapi\\b",
103
- "httpserver|http\\.server",
104
- "\\bnc\\s+-l",
105
- "\\bsocat\\b",
106
- "nohup\\s+.*\\bpython",
107
- "create\\s+.*listener",
108
- "listen\\("
109
- ],
110
- "EXEC": [
111
- "\\bpython3?\\s+-c\\s+['\\\"](?!.*(?:requests|urllib(?:\\.request)?|aiohttp|httpx)\\.(?:post|put|request|send)\\s*\\()(?![^'\\\"]*\\b(?:print|pprint|echo)\\s*\\()",
112
- "\\b(?:bash|sh)\\s+-[ce]\\b",
113
- "(?:^|[;&|\\s])(?!grep\\b|cat\\b|sed\\b|awk\\b|find\\b|less\\b|more\\b|head\\b|tail\\b)\\b(?:os\\.system\\b|subprocess\\b|shell\\s*=\\s*True\\b)",
114
- "\\b(?:bash|sh)\\s+-[ce]\\b",
115
- "\\beval\\s*[\\(\\s]|\\bexec\\s*\\(|/exec\\b",
116
- "\\bperl\\s+-e\\b|\\bnode\\s+-e\\b|\\bphp\\s+-r\\b",
117
- "\\./[\\w.-]+\\.(?:sh|py|pl)\\b"
118
- ],
119
- "EXFIL": [
120
- "\\bcurl\\b[^;&|\\n]*(?:-X\\s+POST\\s+|-d\\s+|-F\\s+|--data|--upload-file|--data-binary)[^;&|\\n]*(?:/etc/shadow|/etc/passwd|id_rsa|credentials|[^\\s]*\\.db|secret[^\\s]*)[^;&|\\n]*https?://(?!127\\.\\d+\\.\\d+\\.\\d+|0\\.0\\.0\\.0|localhost|\\[?::1\\]?)",
121
- "\\bcurl\\b[^;&|\\n]*(?:-X\\s+POST\\s+|-d\\s+|-F\\s+|--data|--upload-file|--data-binary)[^;&|\\n]*https?://(?!127\\.\\d+\\.\\d+\\.\\d+|0\\.0\\.0\\.0|localhost|\\[?::1\\]?)",
122
- "\\b(?:curl|wget)\\b[^;&|\\n]*\\s(?:-T|--upload-file)\\s+[^;&|\\n]*https?://(?!localhost|127\\.0\\.0\\.1)",
123
- "[^;&|\\n]*\\|\\s*nc\\s+[^;&|\\n]*\\d{1,5}\\b",
124
- "\\b(?:scp|sftp|rsync)\\s+[^;&|\\n]*(?:/etc/shadow|/etc/passwd|id_rsa|id_dsa|credentials|\\S*secret\\S*|\\.ssh/)[^;&|\\n]*\\S+@\\S+:",
125
- "\\bpython3?\\s+-c\\s+['\\\"][^'\\\"]*(?:requests|urllib(?:\\.request)?|aiohttp)\\.(?:post|put|request|send)\\s*\\([^'\\\"]*['\\\"]"
126
- ],
127
- "CRED": [
128
- "(?:cat|head|tail|less|more|sed|awk|strings|base64|dd)\\s+[^;&|\\n]*[~]?/\\.ssh(?:/[\\w.-]+)?\\b",
129
- "(?:cat|head|tail|less|more|sed|awk|strings|base64|dd)\\s+[^;&|\\n]*(?:id_rsa|id_dsa|id_ecdsa|\\.aws/credentials|credentials\\.json|\\.netrc)",
130
- "(?:cat|head|tail|less|more|sed|awk|strings|base64)\\s+[^;&|\\n]*(?:/etc/shadow|/etc/passwd|/etc/master\\.passwd)",
131
- "(?:cat|head|tail|less|more|grep)\\s+[^;&|\\n]*known_hosts",
132
- "\\bpython3?\\s+-c\\s+['\\\"][\\s\\S]{0,200}?(?:base64\\.b64encode|open\\s*\\(|Path\\(|io\\.open\\s*\\(|read_text\\s*\\(|read\\s*\\()[\\s\\S]{0,200}?(?:/etc/shadow|/etc/passwd|id_rsa|credentials|\\.ssh)",
133
- "(?:grep|find|cat)\\s+[^;&|\\n]*\\b(?:password|secret|passwd|shadow|credential|api[_-]?key)\\b[^;&|\\n]*(?:/etc/shadow|/etc/passwd|id_rsa|credentials|\\.ssh)",
134
- "(?:cp|mv|dd|curl)\\s+[^;&|\\n]*(?:/etc/shadow|/etc/passwd|id_rsa|credentials|\\.ssh)"
135
- ],
136
- "PERSIST": [
137
- "(?:echo|printf|cat)\\b[^;\\n]*\\|[^;\\n]*(?:crontab|at\\b)\\s*-",
138
- "\\bsystemctl\\s+enable\\s+",
139
- "(?:echo|printf)\\b[^;\\n]*(?:/dev/tcp/|nc\\s+-l|ncat|reverse|backdoor|bash\\s+-i)[^;\\n]*(?:>>|>)\\s*(?:~?/\\.bashrc|~?/\\.profile|/etc/rc\\.local|/etc/crontab)",
140
- "\\bat\\s+now\\b|\\bchkconfig\\s+\\S+\\s+on\\b",
141
- "\\bcrontab\\s+-e\\b"
142
- ]
143
- },
144
- "chains": [
145
- {
146
- "id": "listener-exec-scan",
147
- "stages": [
148
- "LISTEN",
149
- "EXEC",
150
- "SCAN"
151
- ],
152
- "min_stages": 3,
153
- "risk_level": "high",
154
- "reason": "组合攻击链:建立监听服务 → 获取命令执行能力 → 网络侦察"
155
- },
156
- {
157
- "id": "listener-exec-cred",
158
- "stages": [
159
- "LISTEN",
160
- "EXEC",
161
- "CRED"
162
- ],
163
- "min_stages": 3,
164
- "risk_level": "critical",
165
- "reason": "组合攻击链:建立监听服务 → 获取命令执行能力 → 访问凭据文件"
166
- },
167
- {
168
- "id": "listener-exec-exfil",
169
- "stages": [
170
- "LISTEN",
171
- "EXEC",
172
- "EXFIL"
173
- ],
174
- "min_stages": 3,
175
- "risk_level": "critical",
176
- "reason": "组合攻击链:建立监听服务 → 获取命令执行能力 → 数据外传"
177
- },
178
- {
179
- "id": "listener-exec-persist",
180
- "stages": [
181
- "LISTEN",
182
- "EXEC",
183
- "PERSIST"
184
- ],
185
- "min_stages": 3,
186
- "risk_level": "high",
187
- "reason": "组合攻击链:建立监听服务 → 获取命令执行能力 → 持久化后门"
188
- },
189
- {
190
- "id": "exec-scan-cred",
191
- "stages": [
192
- "EXEC",
193
- "SCAN",
194
- "CRED"
195
- ],
196
- "min_stages": 3,
197
- "risk_level": "high",
198
- "reason": "组合攻击链:获取命令执行能力 → 网络侦察 → 访问凭据文件"
199
- },
200
- {
201
- "id": "exec-privesc-cred",
202
- "stages": [
203
- "EXEC",
204
- "PRIVESC",
205
- "CRED"
206
- ],
207
- "min_stages": 3,
208
- "risk_level": "high",
209
- "reason": "组合攻击链:获取命令执行能力 → 提权 → 访问凭据文件"
210
- },
211
- {
212
- "id": "privesc-cred-exfil",
213
- "stages": [
214
- "PRIVESC",
215
- "CRED",
216
- "EXFIL"
217
- ],
218
- "min_stages": 3,
219
- "risk_level": "critical",
220
- "reason": "组合攻击链:提权 → 访问凭据文件 → 数据外传"
221
- },
222
- {
223
- "id": "persist-exfil",
224
- "stages": [
225
- "PERSIST",
226
- "EXFIL"
227
- ],
228
- "min_stages": 2,
229
- "risk_level": "high",
230
- "reason": "组合攻击链:持久化后门 → 数据外传(C2 信标)"
231
- },
232
- {
233
- "id": "exec-persist-exfil",
234
- "stages": [
235
- "EXEC",
236
- "PERSIST",
237
- "EXFIL"
238
- ],
239
- "min_stages": 3,
240
- "risk_level": "critical",
241
- "reason": "组合攻击链:获取命令执行能力 → 持久化后门 → 数据外传"
242
- }
243
- ]
2
+ "intent_consistency": [
3
+ {
4
+ "intent_keywords": [
5
+ "读取",
6
+ "查看",
7
+ "分析",
8
+ "read",
9
+ "analyze",
10
+ "view",
11
+ "list",
12
+ "列出"
13
+ ],
14
+ "dangerous_actions": [
15
+ "删除",
16
+ "remove",
17
+ "delete",
18
+ "rm",
19
+ "格式化",
20
+ "format"
21
+ ],
22
+ "reason": "原始意图为读取/分析,但执行了删除操作"
23
+ },
24
+ {
25
+ "intent_keywords": [
26
+ "查询",
27
+ "搜索",
28
+ "search",
29
+ "query",
30
+ "find"
31
+ ],
32
+ "dangerous_actions": [
33
+ "修改",
34
+ "update",
35
+ "write",
36
+ "写入",
37
+ "alter"
38
+ ],
39
+ "reason": "原始意图为查询/搜索,但执行了修改操作"
244
40
  }
41
+ ],
42
+ "password_modify_consent": [
43
+ {
44
+ "pattern": "\\|\\s*passwd\\b"
45
+ },
46
+ {
47
+ "pattern": "\\bpasswd\\s+--stdin\\b"
48
+ },
49
+ {
50
+ "pattern": "\\bchpasswd\\b"
51
+ },
52
+ {
53
+ "pattern": "\\bchgpasswd\\b"
54
+ },
55
+ {
56
+ "pattern": "\\b(newusers|lnewusers)\\b"
57
+ },
58
+ {
59
+ "pattern": "\\bpasswd\\s+-[a-zA-Z]*d\\b"
60
+ },
61
+ {
62
+ "pattern": "\\bpasswd\\s+-[a-zA-Z]*l\\b"
63
+ }
64
+ ],
65
+ "user_deletion_consent": [
66
+ {
67
+ "pattern": "\\buserdel\\s"
68
+ },
69
+ {
70
+ "pattern": "\\bdeluser\\s"
71
+ },
72
+ {
73
+ "pattern": "\\bluserdel\\s"
74
+ },
75
+ {
76
+ "pattern": "\\bgroupdel\\s"
77
+ },
78
+ {
79
+ "pattern": "\\blgroupdel\\s"
80
+ }
81
+ ],
82
+ "combo_chains": {
83
+ "_comment": "L2 组合攻击链检测:单步操作可能无害,但按 kill chain 顺序组合即为后渗透攻击(参考 ChainWatch 六阶段 kill chain / 玄武实验室 Hermes 案例)。阶段 pattern 匹配 action_detail(含 tool call 参数),链定义要求至少 min_stages 个阶段按顺序出现才命中,防单步误报。A 会话内杀伤链 / D 提权-利用组合 / E 持久化-外联组合在 L2 实现(基于 action_history 子序列匹配);B 跨会话组合链 / C 敏感数据传播链 / F 跨设备组合依赖行为图与数据流,由 formal_engine 实现。",
84
+ "stages": {
85
+ "PRIVESC": [
86
+ "\\b(?:pkexec|doas)\\b",
87
+ "\\bsudo\\s+-u\\s+root\\b",
88
+ "\\bsudo\\b[^;&|\\n]*(?:/bin/sh|/bin/bash|\\bchmod\\b|\\bsetcap\\b|\\bvisudo\\b|\\bpasswd\\s+root|\\buseradd\\b)",
89
+ "\\bchmod\\s+u\\+s\\b|\\bsetcap\\b|\\bsetuid\\b",
90
+ "\\bsu\\s+-?l?\\s+root\\b"
91
+ ],
92
+ "SCAN": [
93
+ "\\bnc\\s+-z\\b",
94
+ "\\bnmap\\b(?!\\s+--help\\b)",
95
+ "\\bmasscan\\b",
96
+ "\\bhping3\\b",
97
+ "\\bzenmap\\b",
98
+ "\\bseq\\b.*\\bnc\\b"
99
+ ],
100
+ "LISTEN": [
101
+ "\\bsocket\\s*\\([^)]*\\)\\s*[^;&|\\n]*(?:bind\\s*\\([^)]*\\)\\s*[^;&|\\n]*listen\\s*\\(|listen\\s*\\([^)]*\\)\\s*[^;&|\\n]*bind\\s*\\()",
102
+ "\\bflask\\b|\\bfastapi\\b",
103
+ "httpserver|http\\.server",
104
+ "\\bnc\\s+-l",
105
+ "\\bsocat\\b",
106
+ "nohup\\s+.*\\bpython",
107
+ "create\\s+.*listener",
108
+ "listen\\("
109
+ ],
110
+ "EXEC": [
111
+ "\\bpython3?\\s+-c\\s+['\\\"](?!.*(?:requests|urllib(?:\\.request)?|aiohttp|httpx)\\.(?:post|put|request|send)\\s*\\()(?![^'\\\"]*\\b(?:print|pprint|echo)\\s*\\()",
112
+ "\\b(?:bash|sh)\\s+-[ce]\\b",
113
+ "(?:^|[;&|\\s])(?!grep\\b|cat\\b|sed\\b|awk\\b|find\\b|less\\b|more\\b|head\\b|tail\\b)\\b(?:os\\.system\\b|subprocess\\b|shell\\s*=\\s*True\\b)",
114
+ "\\b(?:bash|sh)\\s+-[ce]\\b",
115
+ "\\beval\\s*[\\(\\s]|\\bexec\\s*\\(|/exec\\b",
116
+ "\\bperl\\s+-e\\b|\\bnode\\s+-e\\b|\\bphp\\s+-r\\b",
117
+ "\\./[\\w.-]+\\.(?:sh|py|pl)\\b"
118
+ ],
119
+ "EXFIL": [
120
+ "\\bcurl\\b[^;&|\\n]*(?:-X\\s+POST\\s+|-d\\s+|-F\\s+|--data|--upload-file|--data-binary)[^;&|\\n]*(?:/etc/shadow|/etc/passwd|id_rsa|credentials|[^\\s]*\\.db|secret[^\\s]*)[^;&|\\n]*https?://(?!127\\.\\d+\\.\\d+\\.\\d+|0\\.0\\.0\\.0|localhost|\\[?::1\\]?)",
121
+ "\\bcurl\\b[^;&|\\n]*(?:-X\\s+POST\\s+|-d\\s+|-F\\s+|--data|--upload-file|--data-binary)[^;&|\\n]*https?://(?!127\\.\\d+\\.\\d+\\.\\d+|0\\.0\\.0\\.0|localhost|\\[?::1\\]?)",
122
+ "\\b(?:curl|wget)\\b[^;&|\\n]*\\s(?:-T|--upload-file)\\s+[^;&|\\n]*https?://(?!localhost|127\\.0\\.0\\.1)",
123
+ "[^;&|\\n]*\\|\\s*nc\\s+[^;&|\\n]*\\d{1,5}\\b",
124
+ "\\b(?:scp|sftp|rsync)\\s+[^;&|\\n]*(?:/etc/shadow|/etc/passwd|id_rsa|id_dsa|credentials|\\S*secret\\S*|\\.ssh/)[^;&|\\n]*\\S+@\\S+:",
125
+ "\\bpython3?\\s+-c\\s+['\"][^'\"]*(?:requests|urllib(?:\\.request)?|aiohttp)\\.(?:post|put|request|send)\\s*\\([^'\"]*['\"]https?://(?!127\\.\\d+\\.\\d+\\.\\d+|0\\.0\\.0\\.0|localhost|\\[?::1\\]?)"
126
+ ],
127
+ "CRED": [
128
+ "(?:cat|head|tail|less|more|sed|awk|strings|base64|dd)\\s+[^;&|\\n]*[~]?/\\.ssh(?:/[\\w.-]+)?\\b",
129
+ "(?:cat|head|tail|less|more|sed|awk|strings|base64|dd)\\s+[^;&|\\n]*(?:id_rsa|id_dsa|id_ecdsa|\\.aws/credentials|credentials\\.json|\\.netrc)",
130
+ "(?:cat|head|tail|less|more|sed|awk|strings|base64)\\s+[^;&|\\n]*(?:/etc/shadow|/etc/passwd|/etc/master\\.passwd)",
131
+ "(?:cat|head|tail|less|more|grep)\\s+[^;&|\\n]*known_hosts",
132
+ "\\bpython3?\\s+-c\\s+['\\\"][\\s\\S]{0,200}?(?:base64\\.b64encode|open\\s*\\(|Path\\(|io\\.open\\s*\\(|read_text\\s*\\(|read\\s*\\()[\\s\\S]{0,200}?(?:/etc/shadow|/etc/passwd|id_rsa|credentials|\\.ssh)",
133
+ "(?:grep|find|cat)\\s+[^;&|\\n]*\\b(?:password|secret|passwd|shadow|credential|api[_-]?key)\\b[^;&|\\n]*(?:/etc/shadow|/etc/passwd|id_rsa|credentials|\\.ssh)",
134
+ "(?:cp|mv|dd|curl)\\s+[^;&|\\n]*(?:/etc/shadow|/etc/passwd|id_rsa|credentials|\\.ssh)"
135
+ ],
136
+ "PERSIST": [
137
+ "(?:echo|printf|cat)\\b[^;\\n]*\\|[^;\\n]*(?:crontab|at\\b)\\s*-",
138
+ "\\bsystemctl\\s+enable\\s+",
139
+ "(?:echo|printf)\\b[^;\\n]*(?:/dev/tcp/|nc\\s+-l|ncat|reverse|backdoor|bash\\s+-i)[^;\\n]*(?:>>|>)\\s*(?:~?/\\.bashrc|~?/\\.profile|/etc/rc\\.local|/etc/crontab)",
140
+ "\\bat\\s+now\\b|\\bchkconfig\\s+\\S+\\s+on\\b",
141
+ "\\bcrontab\\s+-e\\b"
142
+ ]
143
+ },
144
+ "chains": [
145
+ {
146
+ "id": "listener-exec-scan",
147
+ "stages": [
148
+ "LISTEN",
149
+ "EXEC",
150
+ "SCAN"
151
+ ],
152
+ "min_stages": 3,
153
+ "risk_level": "high",
154
+ "reason": "组合攻击链:建立监听服务 → 获取命令执行能力 → 网络侦察"
155
+ },
156
+ {
157
+ "id": "listener-exec-cred",
158
+ "stages": [
159
+ "LISTEN",
160
+ "EXEC",
161
+ "CRED"
162
+ ],
163
+ "min_stages": 3,
164
+ "risk_level": "critical",
165
+ "reason": "组合攻击链:建立监听服务 → 获取命令执行能力 → 访问凭据文件"
166
+ },
167
+ {
168
+ "id": "listener-exec-exfil",
169
+ "stages": [
170
+ "LISTEN",
171
+ "EXEC",
172
+ "EXFIL"
173
+ ],
174
+ "min_stages": 3,
175
+ "risk_level": "critical",
176
+ "reason": "组合攻击链:建立监听服务 → 获取命令执行能力 → 数据外传"
177
+ },
178
+ {
179
+ "id": "listener-exec-persist",
180
+ "stages": [
181
+ "LISTEN",
182
+ "EXEC",
183
+ "PERSIST"
184
+ ],
185
+ "min_stages": 3,
186
+ "risk_level": "high",
187
+ "reason": "组合攻击链:建立监听服务 → 获取命令执行能力 → 持久化后门"
188
+ },
189
+ {
190
+ "id": "exec-scan-cred",
191
+ "stages": [
192
+ "EXEC",
193
+ "SCAN",
194
+ "CRED"
195
+ ],
196
+ "min_stages": 3,
197
+ "risk_level": "high",
198
+ "reason": "组合攻击链:获取命令执行能力 → 网络侦察 → 访问凭据文件"
199
+ },
200
+ {
201
+ "id": "exec-privesc-cred",
202
+ "stages": [
203
+ "EXEC",
204
+ "PRIVESC",
205
+ "CRED"
206
+ ],
207
+ "min_stages": 3,
208
+ "risk_level": "high",
209
+ "reason": "组合攻击链:获取命令执行能力 → 提权 → 访问凭据文件"
210
+ },
211
+ {
212
+ "id": "privesc-cred-exfil",
213
+ "stages": [
214
+ "PRIVESC",
215
+ "CRED",
216
+ "EXFIL"
217
+ ],
218
+ "min_stages": 3,
219
+ "risk_level": "critical",
220
+ "reason": "组合攻击链:提权 → 访问凭据文件 → 数据外传"
221
+ },
222
+ {
223
+ "id": "persist-exfil",
224
+ "stages": [
225
+ "PERSIST",
226
+ "EXFIL"
227
+ ],
228
+ "min_stages": 2,
229
+ "risk_level": "high",
230
+ "reason": "组合攻击链:持久化后门 → 数据外传(C2 信标)"
231
+ },
232
+ {
233
+ "id": "exec-persist-exfil",
234
+ "stages": [
235
+ "EXEC",
236
+ "PERSIST",
237
+ "EXFIL"
238
+ ],
239
+ "min_stages": 3,
240
+ "risk_level": "critical",
241
+ "reason": "组合攻击链:获取命令执行能力 → 持久化后门 → 数据外传"
242
+ }
243
+ ]
244
+ }
245
245
  }