@kenhkl/agent-moss 0.16.13 → 0.17.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/dist/cli.js +1900 -1418
- package/dist/engine/coordinator.js +723 -1015
- package/dist/rules/formal_rules.json +61 -0
- package/dist/rules/heuristic_rules.json +40 -0
- package/dist/rules/inline_rules.json +151 -0
- package/dist/rules/l1_rules.json +166 -51
- package/dist/rules/l2_rules.json +2 -1
- package/dist/rules/logic_rules.json +73 -0
- package/dist/rules/manifest.json +6 -0
- package/dist/rules/platform_traits.json +389 -0
- package/dist/rules/script_rules.json +311 -0
- package/dist/server.js +1678 -1218
- package/package.json +1 -1
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "脚本内容分析的高风险词表(Python script_content_analyzer/script_analyzer ↔ TS script-content-analyzer/script-analyzer 单一事实源)。suspicious_patterns 与 script_exec_patterns 的 flags 是语义标志(i/s/m);keyword_combination_risks 的 group1/group2 里以 $ 开头的字符串是对 keyword_sets 的引用。script_exec_patterns 分两份是**历史原因**:chain 供递归追踪(识别解释器 + 任意后缀),legacy 只认 .sh(供 L3 提示词用),两者不可互相替换。",
|
|
3
|
+
"keyword_sets": {
|
|
4
|
+
"network_post": [
|
|
5
|
+
"curl POST",
|
|
6
|
+
"curl --data",
|
|
7
|
+
"curl -d",
|
|
8
|
+
"wget --post-data",
|
|
9
|
+
"wget --post-file"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
"suspicious_patterns": [
|
|
13
|
+
{
|
|
14
|
+
"name": "curl POST",
|
|
15
|
+
"pattern": "curl\\s+(.*\\s)?-X\\s+POST",
|
|
16
|
+
"flags": "i"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "curl --data",
|
|
20
|
+
"pattern": "curl\\s+(.*\\s)?--data",
|
|
21
|
+
"flags": "i"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "curl -d",
|
|
25
|
+
"pattern": "curl\\s+(.*\\s)?-d\\s",
|
|
26
|
+
"flags": "i"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"name": "wget --post-data",
|
|
30
|
+
"pattern": "wget\\s+(.*\\s)?--post-data",
|
|
31
|
+
"flags": "i"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "wget --post-file",
|
|
35
|
+
"pattern": "wget\\s+(.*\\s)?--post-file",
|
|
36
|
+
"flags": "i"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "nc -e",
|
|
40
|
+
"pattern": "\\bnc\\s+.*-e\\b",
|
|
41
|
+
"flags": ""
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "ncat -e",
|
|
45
|
+
"pattern": "\\bncat\\s+.*-e\\b",
|
|
46
|
+
"flags": ""
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "/dev/tcp",
|
|
50
|
+
"pattern": "/dev/tcp/",
|
|
51
|
+
"flags": ""
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "/dev/udp",
|
|
55
|
+
"pattern": "/dev/udp/",
|
|
56
|
+
"flags": ""
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "$(base64",
|
|
60
|
+
"pattern": "\\$\\(\\s*base64",
|
|
61
|
+
"flags": ""
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "`base64",
|
|
65
|
+
"pattern": "`\\s*base64",
|
|
66
|
+
"flags": ""
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "base64 decode pipe",
|
|
70
|
+
"pattern": "base64\\s+(-d|--decode)\\s*\\|",
|
|
71
|
+
"flags": ""
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "/etc/shadow",
|
|
75
|
+
"pattern": "/etc/shadow",
|
|
76
|
+
"flags": ""
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"name": "id_rsa",
|
|
80
|
+
"pattern": "\\bid_rsa\\b",
|
|
81
|
+
"flags": ""
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "id_ed25519",
|
|
85
|
+
"pattern": "\\bid_ed25519\\b",
|
|
86
|
+
"flags": ""
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"name": "crontab install",
|
|
90
|
+
"pattern": "crontab\\s+-",
|
|
91
|
+
"flags": ""
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"name": "authorized_keys",
|
|
95
|
+
"pattern": "authorized_keys",
|
|
96
|
+
"flags": ""
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"name": "ssh no host key check",
|
|
100
|
+
"pattern": "ssh\\s+.*StrictHostKeyChecking\\s*=\\s*no",
|
|
101
|
+
"flags": ""
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
"keyword_combination_risks": [
|
|
105
|
+
{
|
|
106
|
+
"group1": "$network_post",
|
|
107
|
+
"group2": [
|
|
108
|
+
"$(base64",
|
|
109
|
+
"`base64",
|
|
110
|
+
"base64 decode pipe"
|
|
111
|
+
],
|
|
112
|
+
"level": "critical",
|
|
113
|
+
"reason": "检测到网络数据发送 + Base64编码组合,构成 Critical 级别数据外传风险。攻击者可能将敏感数据编码后外传。"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"group1": "$network_post",
|
|
117
|
+
"group2": [
|
|
118
|
+
"/etc/shadow",
|
|
119
|
+
"id_ed25519",
|
|
120
|
+
"id_rsa"
|
|
121
|
+
],
|
|
122
|
+
"level": "critical",
|
|
123
|
+
"reason": "检测到网络数据发送 + 敏感文件访问组合,构成 Critical 级别凭证外传风险。"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"group1": [
|
|
127
|
+
"/dev/tcp",
|
|
128
|
+
"/dev/udp",
|
|
129
|
+
"nc -e",
|
|
130
|
+
"ncat -e"
|
|
131
|
+
],
|
|
132
|
+
"group2": [],
|
|
133
|
+
"level": "high",
|
|
134
|
+
"reason": "检测到反弹 Shell 特征,攻击者可能建立远程控制通道。"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"group1": [
|
|
138
|
+
"authorized_keys",
|
|
139
|
+
"crontab install",
|
|
140
|
+
"ssh no host key check"
|
|
141
|
+
],
|
|
142
|
+
"group2": [],
|
|
143
|
+
"level": "high",
|
|
144
|
+
"reason": "检测到持久化后门特征,攻击者可能在系统中植入后门。"
|
|
145
|
+
}
|
|
146
|
+
],
|
|
147
|
+
"single_keyword_risks": {
|
|
148
|
+
"curl POST": {
|
|
149
|
+
"level": "high",
|
|
150
|
+
"reason": "检测到 curl POST 请求,可能向外部服务器发送数据。"
|
|
151
|
+
},
|
|
152
|
+
"curl --data": {
|
|
153
|
+
"level": "high",
|
|
154
|
+
"reason": "检测到 curl --data 参数,可能向外部服务器发送数据。"
|
|
155
|
+
},
|
|
156
|
+
"curl -d": {
|
|
157
|
+
"level": "high",
|
|
158
|
+
"reason": "检测到 curl -d 参数,可能向外部服务器发送数据。"
|
|
159
|
+
},
|
|
160
|
+
"wget --post-data": {
|
|
161
|
+
"level": "high",
|
|
162
|
+
"reason": "检测到 wget POST 请求,可能向外部服务器发送数据。"
|
|
163
|
+
},
|
|
164
|
+
"wget --post-file": {
|
|
165
|
+
"level": "high",
|
|
166
|
+
"reason": "检测到 wget 文件上传,可能向外部服务器发送文件。"
|
|
167
|
+
},
|
|
168
|
+
"nc -e": {
|
|
169
|
+
"level": "critical",
|
|
170
|
+
"reason": "检测到 nc -e 反弹 Shell 特征。"
|
|
171
|
+
},
|
|
172
|
+
"ncat -e": {
|
|
173
|
+
"level": "critical",
|
|
174
|
+
"reason": "检测到 ncat -e 反弹 Shell 特征。"
|
|
175
|
+
},
|
|
176
|
+
"/dev/tcp": {
|
|
177
|
+
"level": "critical",
|
|
178
|
+
"reason": "检测到 /dev/tcp 反弹 Shell 特征。"
|
|
179
|
+
},
|
|
180
|
+
"/dev/udp": {
|
|
181
|
+
"level": "critical",
|
|
182
|
+
"reason": "检测到 /dev/udp 反弹 Shell 特征。"
|
|
183
|
+
},
|
|
184
|
+
"$(base64": {
|
|
185
|
+
"level": "high",
|
|
186
|
+
"reason": "检测到 Base64 编码执行,可能是混淆逃逸。"
|
|
187
|
+
},
|
|
188
|
+
"`base64": {
|
|
189
|
+
"level": "high",
|
|
190
|
+
"reason": "检测到 Base64 编码执行,可能是混淆逃逸。"
|
|
191
|
+
},
|
|
192
|
+
"base64 decode pipe": {
|
|
193
|
+
"level": "high",
|
|
194
|
+
"reason": "检测到 Base64 解码后管道执行,可能是混淆逃逸。"
|
|
195
|
+
},
|
|
196
|
+
"/etc/shadow": {
|
|
197
|
+
"level": "critical",
|
|
198
|
+
"reason": "检测到访问系统密码文件。"
|
|
199
|
+
},
|
|
200
|
+
"id_rsa": {
|
|
201
|
+
"level": "critical",
|
|
202
|
+
"reason": "检测到访问 SSH 私钥。"
|
|
203
|
+
},
|
|
204
|
+
"id_ed25519": {
|
|
205
|
+
"level": "critical",
|
|
206
|
+
"reason": "检测到访问 SSH 私钥。"
|
|
207
|
+
},
|
|
208
|
+
"crontab install": {
|
|
209
|
+
"level": "high",
|
|
210
|
+
"reason": "检测到修改定时任务,可能是持久化后门。"
|
|
211
|
+
},
|
|
212
|
+
"authorized_keys": {
|
|
213
|
+
"level": "high",
|
|
214
|
+
"reason": "检测到修改 SSH 授权密钥,可能是持久化后门。"
|
|
215
|
+
},
|
|
216
|
+
"ssh no host key check": {
|
|
217
|
+
"level": "high",
|
|
218
|
+
"reason": "检测到 SSH 跳过主机密钥验证,可能是横向移动。"
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
"env_exfil_patterns": [
|
|
222
|
+
"$env",
|
|
223
|
+
"$(env)",
|
|
224
|
+
"$USER",
|
|
225
|
+
"$(hostname)",
|
|
226
|
+
"$(pwd)",
|
|
227
|
+
"$HOME"
|
|
228
|
+
],
|
|
229
|
+
"script_exec_patterns": {
|
|
230
|
+
"chain": [
|
|
231
|
+
{
|
|
232
|
+
"pattern": "(?:^|\\s|&&|\\|\\|)\\s*bash\\s+(\\S+)",
|
|
233
|
+
"flags": "i"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"pattern": "(?:^|\\s|&&|\\|\\|)\\s*/bin/bash\\s+(\\S+)",
|
|
237
|
+
"flags": "i"
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"pattern": "(?:^|\\s|&&|\\|\\|)\\s*sh\\s+(\\S+)",
|
|
241
|
+
"flags": "i"
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"pattern": "(?:^|\\s|&&|\\|\\|)\\s*zsh\\s+(\\S+)",
|
|
245
|
+
"flags": "i"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"pattern": "\\./(\\S+)",
|
|
249
|
+
"flags": "i"
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"pattern": "(?:^|\\s|&&|\\|\\|)\\s*source\\s+(\\S+)",
|
|
253
|
+
"flags": "i"
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"pattern": "(?:^|\\s|&&|\\|\\|)\\s*\\.\\s+(\\S+)",
|
|
257
|
+
"flags": "i"
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"pattern": "(?:^|\\s|&&|\\|\\|)\\s*python3?\\s+(\\S+\\.py)",
|
|
261
|
+
"flags": "i"
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"pattern": "(?:^|\\s|&&|\\|\\|)\\s*node\\s+(\\S+\\.js)",
|
|
265
|
+
"flags": "i"
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"pattern": "(?:^|\\s|&&|\\|\\|)\\s*ruby\\s+(\\S+\\.rb)",
|
|
269
|
+
"flags": "i"
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"pattern": "(?:^|\\s|&&|\\|\\|)\\s*perl\\s+(\\S+\\.pl)",
|
|
273
|
+
"flags": "i"
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"pattern": "(?:^|\\s|&&|\\|\\|)\\s*php\\s+(\\S+\\.php)",
|
|
277
|
+
"flags": "i"
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"pattern": "(?:^|\\s|&&|\\|\\|)\\s*lua\\s+(\\S+\\.lua)",
|
|
281
|
+
"flags": "i"
|
|
282
|
+
}
|
|
283
|
+
],
|
|
284
|
+
"legacy": [
|
|
285
|
+
{
|
|
286
|
+
"pattern": "bash\\s+(\\S+\\.sh)",
|
|
287
|
+
"flags": ""
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"pattern": "sh\\s+(\\S+\\.sh)",
|
|
291
|
+
"flags": ""
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"pattern": "\\./(\\S+\\.sh)",
|
|
295
|
+
"flags": ""
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"pattern": "source\\s+(\\S+\\.sh)",
|
|
299
|
+
"flags": ""
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"pattern": "\\.\\s+(\\S+\\.sh)",
|
|
303
|
+
"flags": ""
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"pattern": "zsh\\s+(\\S+\\.sh)",
|
|
307
|
+
"flags": ""
|
|
308
|
+
}
|
|
309
|
+
]
|
|
310
|
+
}
|
|
311
|
+
}
|