@panguard-ai/panguard-guard 0.1.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/agent/analyze-agent.d.ts +62 -0
- package/dist/agent/analyze-agent.d.ts.map +1 -0
- package/dist/agent/analyze-agent.js +327 -0
- package/dist/agent/analyze-agent.js.map +1 -0
- package/dist/agent/detect-agent.d.ts +59 -0
- package/dist/agent/detect-agent.d.ts.map +1 -0
- package/dist/agent/detect-agent.js +214 -0
- package/dist/agent/detect-agent.js.map +1 -0
- package/dist/agent/index.d.ts +15 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +14 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/report-agent.d.ts +122 -0
- package/dist/agent/report-agent.d.ts.map +1 -0
- package/dist/agent/report-agent.js +468 -0
- package/dist/agent/report-agent.js.map +1 -0
- package/dist/agent/respond-agent.d.ts +113 -0
- package/dist/agent/respond-agent.d.ts.map +1 -0
- package/dist/agent/respond-agent.js +749 -0
- package/dist/agent/respond-agent.js.map +1 -0
- package/dist/agent-client/index.d.ts +81 -0
- package/dist/agent-client/index.d.ts.map +1 -0
- package/dist/agent-client/index.js +170 -0
- package/dist/agent-client/index.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +295 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config.d.ts +23 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +108 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon/index.d.ts +66 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +284 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/dashboard/index.d.ts +78 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +455 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/guard-engine.d.ts +108 -0
- package/dist/guard-engine.d.ts.map +1 -0
- package/dist/guard-engine.js +740 -0
- package/dist/guard-engine.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/install/index.d.ts +23 -0
- package/dist/install/index.d.ts.map +1 -0
- package/dist/install/index.js +216 -0
- package/dist/install/index.js.map +1 -0
- package/dist/investigation/index.d.ts +80 -0
- package/dist/investigation/index.d.ts.map +1 -0
- package/dist/investigation/index.js +570 -0
- package/dist/investigation/index.js.map +1 -0
- package/dist/license/index.d.ts +46 -0
- package/dist/license/index.d.ts.map +1 -0
- package/dist/license/index.js +145 -0
- package/dist/license/index.js.map +1 -0
- package/dist/memory/baseline.d.ts +34 -0
- package/dist/memory/baseline.d.ts.map +1 -0
- package/dist/memory/baseline.js +224 -0
- package/dist/memory/baseline.js.map +1 -0
- package/dist/memory/index.d.ts +32 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +58 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/learning.d.ts +35 -0
- package/dist/memory/learning.d.ts.map +1 -0
- package/dist/memory/learning.js +60 -0
- package/dist/memory/learning.js.map +1 -0
- package/dist/monitors/falco-monitor.d.ts +62 -0
- package/dist/monitors/falco-monitor.d.ts.map +1 -0
- package/dist/monitors/falco-monitor.js +226 -0
- package/dist/monitors/falco-monitor.js.map +1 -0
- package/dist/monitors/suricata-monitor.d.ts +80 -0
- package/dist/monitors/suricata-monitor.d.ts.map +1 -0
- package/dist/monitors/suricata-monitor.js +227 -0
- package/dist/monitors/suricata-monitor.js.map +1 -0
- package/dist/notify/email.d.ts +23 -0
- package/dist/notify/email.d.ts.map +1 -0
- package/dist/notify/email.js +124 -0
- package/dist/notify/email.js.map +1 -0
- package/dist/notify/index.d.ts +31 -0
- package/dist/notify/index.d.ts.map +1 -0
- package/dist/notify/index.js +70 -0
- package/dist/notify/index.js.map +1 -0
- package/dist/notify/line-notify.d.ts.map +1 -0
- package/dist/notify/slack.d.ts +21 -0
- package/dist/notify/slack.d.ts.map +1 -0
- package/dist/notify/slack.js +92 -0
- package/dist/notify/slack.js.map +1 -0
- package/dist/notify/telegram.d.ts +21 -0
- package/dist/notify/telegram.d.ts.map +1 -0
- package/dist/notify/telegram.js +89 -0
- package/dist/notify/telegram.js.map +1 -0
- package/dist/response/file-quarantine.d.ts +63 -0
- package/dist/response/file-quarantine.d.ts.map +1 -0
- package/dist/response/file-quarantine.js +137 -0
- package/dist/response/file-quarantine.js.map +1 -0
- package/dist/response/index.d.ts +4 -0
- package/dist/response/index.d.ts.map +1 -0
- package/dist/response/index.js +4 -0
- package/dist/response/index.js.map +1 -0
- package/dist/response/ip-blocker.d.ts +69 -0
- package/dist/response/ip-blocker.d.ts.map +1 -0
- package/dist/response/ip-blocker.js +191 -0
- package/dist/response/ip-blocker.js.map +1 -0
- package/dist/response/process-killer.d.ts +49 -0
- package/dist/response/process-killer.d.ts.map +1 -0
- package/dist/response/process-killer.js +230 -0
- package/dist/response/process-killer.js.map +1 -0
- package/dist/rules/builtin-rules.d.ts +12 -0
- package/dist/rules/builtin-rules.d.ts.map +1 -0
- package/dist/rules/builtin-rules.js +471 -0
- package/dist/rules/builtin-rules.js.map +1 -0
- package/dist/threat-cloud/client-id.d.ts +13 -0
- package/dist/threat-cloud/client-id.d.ts.map +1 -0
- package/dist/threat-cloud/client-id.js +38 -0
- package/dist/threat-cloud/client-id.js.map +1 -0
- package/dist/threat-cloud/index.d.ts +103 -0
- package/dist/threat-cloud/index.d.ts.map +1 -0
- package/dist/threat-cloud/index.js +386 -0
- package/dist/threat-cloud/index.js.map +1 -0
- package/dist/types.d.ts +336 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +42 -0
- package/dist/types.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in Sigma detection rules shipped with Guard
|
|
3
|
+
* 內建 Sigma 偵測規則
|
|
4
|
+
*
|
|
5
|
+
* These rules provide baseline detection capability out of the box.
|
|
6
|
+
* Additional rules can be loaded from disk or fetched from Threat Cloud.
|
|
7
|
+
*
|
|
8
|
+
* @module @panguard-ai/panguard-guard/rules/builtin-rules
|
|
9
|
+
*/
|
|
10
|
+
export const BUILTIN_RULES = [
|
|
11
|
+
// -------------------------------------------------------------------------
|
|
12
|
+
// Credential Access / 憑證存取
|
|
13
|
+
// -------------------------------------------------------------------------
|
|
14
|
+
{
|
|
15
|
+
id: 'panguard-builtin-001',
|
|
16
|
+
title: 'Brute Force Login Attempt',
|
|
17
|
+
status: 'stable',
|
|
18
|
+
description: 'Detects failed login attempts indicating brute force attack',
|
|
19
|
+
author: 'Panguard AI',
|
|
20
|
+
logsource: { category: 'authentication', product: 'any' },
|
|
21
|
+
detection: {
|
|
22
|
+
selection: {
|
|
23
|
+
category: 'authentication',
|
|
24
|
+
'description|contains': [
|
|
25
|
+
'failed login',
|
|
26
|
+
'authentication failure',
|
|
27
|
+
'login failed',
|
|
28
|
+
'invalid password',
|
|
29
|
+
'Failed password',
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
condition: 'selection',
|
|
33
|
+
},
|
|
34
|
+
level: 'high',
|
|
35
|
+
tags: ['attack.credential_access', 'attack.t1110'],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'panguard-builtin-002',
|
|
39
|
+
title: 'SSH Brute Force',
|
|
40
|
+
status: 'stable',
|
|
41
|
+
description: 'Detects SSH authentication failures from sshd logs',
|
|
42
|
+
author: 'Panguard AI',
|
|
43
|
+
logsource: { category: 'authentication', service: 'sshd' },
|
|
44
|
+
detection: {
|
|
45
|
+
selection: {
|
|
46
|
+
category: 'authentication',
|
|
47
|
+
'description|contains': [
|
|
48
|
+
'Failed password for',
|
|
49
|
+
'Invalid user',
|
|
50
|
+
'Connection closed by authenticating user',
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
condition: 'selection',
|
|
54
|
+
},
|
|
55
|
+
level: 'high',
|
|
56
|
+
tags: ['attack.credential_access', 'attack.t1110.001'],
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 'panguard-builtin-003',
|
|
60
|
+
title: 'Credential Dumping Tool',
|
|
61
|
+
status: 'stable',
|
|
62
|
+
description: 'Detects credential dumping tools like mimikatz',
|
|
63
|
+
author: 'Panguard AI',
|
|
64
|
+
logsource: { category: 'process_creation' },
|
|
65
|
+
detection: {
|
|
66
|
+
selection: {
|
|
67
|
+
'description|contains': ['mimikatz', 'sekurlsa', 'lsadump', 'hashdump', 'credential dump'],
|
|
68
|
+
},
|
|
69
|
+
condition: 'selection',
|
|
70
|
+
},
|
|
71
|
+
level: 'critical',
|
|
72
|
+
tags: ['attack.credential_access', 'attack.t1003'],
|
|
73
|
+
},
|
|
74
|
+
// -------------------------------------------------------------------------
|
|
75
|
+
// Execution / 執行
|
|
76
|
+
// -------------------------------------------------------------------------
|
|
77
|
+
{
|
|
78
|
+
id: 'panguard-builtin-004',
|
|
79
|
+
title: 'Suspicious Reverse Shell',
|
|
80
|
+
status: 'stable',
|
|
81
|
+
description: 'Detects reverse shell commands in process or log events',
|
|
82
|
+
author: 'Panguard AI',
|
|
83
|
+
logsource: { category: 'process_creation' },
|
|
84
|
+
detection: {
|
|
85
|
+
selection_bash: {
|
|
86
|
+
'description|contains': ['bash -i >& /dev/tcp/', '/bin/bash -c "bash -i'],
|
|
87
|
+
},
|
|
88
|
+
selection_nc: {
|
|
89
|
+
'description|contains': ['nc -e /bin/', 'ncat -e /bin/', 'netcat -e'],
|
|
90
|
+
},
|
|
91
|
+
selection_python: {
|
|
92
|
+
'description|contains': ["python -c 'import socket", 'python3 -c "import socket'],
|
|
93
|
+
},
|
|
94
|
+
selection_perl: {
|
|
95
|
+
'description|contains': ["perl -e 'use Socket"],
|
|
96
|
+
},
|
|
97
|
+
condition: 'selection_bash OR selection_nc OR selection_python OR selection_perl',
|
|
98
|
+
},
|
|
99
|
+
level: 'critical',
|
|
100
|
+
tags: ['attack.execution', 'attack.t1059'],
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: 'panguard-builtin-005',
|
|
104
|
+
title: 'Command and Scripting Interpreter',
|
|
105
|
+
status: 'stable',
|
|
106
|
+
description: 'Detects suspicious use of scripting interpreters',
|
|
107
|
+
author: 'Panguard AI',
|
|
108
|
+
logsource: { category: 'process_creation' },
|
|
109
|
+
detection: {
|
|
110
|
+
selection: {
|
|
111
|
+
category: 'process',
|
|
112
|
+
'description|contains': [
|
|
113
|
+
'powershell -enc',
|
|
114
|
+
'powershell -e ',
|
|
115
|
+
'cmd /c whoami',
|
|
116
|
+
'bash -c "curl',
|
|
117
|
+
'wget -O- |',
|
|
118
|
+
'curl | bash',
|
|
119
|
+
'python -c "import os',
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
condition: 'selection',
|
|
123
|
+
},
|
|
124
|
+
level: 'high',
|
|
125
|
+
tags: ['attack.execution', 'attack.t1059'],
|
|
126
|
+
},
|
|
127
|
+
// -------------------------------------------------------------------------
|
|
128
|
+
// Persistence / 持久化
|
|
129
|
+
// -------------------------------------------------------------------------
|
|
130
|
+
{
|
|
131
|
+
id: 'panguard-builtin-006',
|
|
132
|
+
title: 'Cron Job Persistence',
|
|
133
|
+
status: 'stable',
|
|
134
|
+
description: 'Detects new cron job creation for persistence',
|
|
135
|
+
author: 'Panguard AI',
|
|
136
|
+
logsource: { category: 'process_creation' },
|
|
137
|
+
detection: {
|
|
138
|
+
selection: {
|
|
139
|
+
'description|contains': ['crontab -', '/etc/cron', '/var/spool/cron', 'CRON['],
|
|
140
|
+
},
|
|
141
|
+
condition: 'selection',
|
|
142
|
+
},
|
|
143
|
+
level: 'medium',
|
|
144
|
+
tags: ['attack.persistence', 'attack.t1053.003'],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
id: 'panguard-builtin-007',
|
|
148
|
+
title: 'Systemd Service Creation',
|
|
149
|
+
status: 'stable',
|
|
150
|
+
description: 'Detects new systemd service installation for persistence',
|
|
151
|
+
author: 'Panguard AI',
|
|
152
|
+
logsource: { category: 'file_change' },
|
|
153
|
+
detection: {
|
|
154
|
+
selection: {
|
|
155
|
+
'description|contains': [
|
|
156
|
+
'/etc/systemd/system/',
|
|
157
|
+
'/usr/lib/systemd/system/',
|
|
158
|
+
'systemctl enable',
|
|
159
|
+
'systemctl daemon-reload',
|
|
160
|
+
],
|
|
161
|
+
},
|
|
162
|
+
condition: 'selection',
|
|
163
|
+
},
|
|
164
|
+
level: 'medium',
|
|
165
|
+
tags: ['attack.persistence', 'attack.t1543.002'],
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
id: 'panguard-builtin-008',
|
|
169
|
+
title: 'SSH Authorized Keys Modification',
|
|
170
|
+
status: 'stable',
|
|
171
|
+
description: 'Detects changes to SSH authorized_keys for backdoor access',
|
|
172
|
+
author: 'Panguard AI',
|
|
173
|
+
logsource: { category: 'file_change' },
|
|
174
|
+
detection: {
|
|
175
|
+
selection: {
|
|
176
|
+
'description|contains': ['authorized_keys', '.ssh/authorized'],
|
|
177
|
+
},
|
|
178
|
+
condition: 'selection',
|
|
179
|
+
},
|
|
180
|
+
level: 'high',
|
|
181
|
+
tags: ['attack.persistence', 'attack.t1098.004'],
|
|
182
|
+
},
|
|
183
|
+
// -------------------------------------------------------------------------
|
|
184
|
+
// Discovery & Reconnaissance / 偵察
|
|
185
|
+
// -------------------------------------------------------------------------
|
|
186
|
+
{
|
|
187
|
+
id: 'panguard-builtin-009',
|
|
188
|
+
title: 'Port Scan Detection',
|
|
189
|
+
status: 'stable',
|
|
190
|
+
description: 'Detects port scanning activity from network events',
|
|
191
|
+
author: 'Panguard AI',
|
|
192
|
+
logsource: { category: 'network_connection' },
|
|
193
|
+
detection: {
|
|
194
|
+
selection: {
|
|
195
|
+
category: 'network',
|
|
196
|
+
'description|contains': ['port scan', 'SYN scan', 'connection refused', 'nmap'],
|
|
197
|
+
},
|
|
198
|
+
condition: 'selection',
|
|
199
|
+
},
|
|
200
|
+
level: 'medium',
|
|
201
|
+
tags: ['attack.discovery', 'attack.t1046'],
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
id: 'panguard-builtin-010',
|
|
205
|
+
title: 'Network Enumeration Commands',
|
|
206
|
+
status: 'stable',
|
|
207
|
+
description: 'Detects system/network enumeration commands',
|
|
208
|
+
author: 'Panguard AI',
|
|
209
|
+
logsource: { category: 'process_creation' },
|
|
210
|
+
detection: {
|
|
211
|
+
selection: {
|
|
212
|
+
'description|contains': [
|
|
213
|
+
'ifconfig -a',
|
|
214
|
+
'ip addr show',
|
|
215
|
+
'netstat -',
|
|
216
|
+
'ss -tulnp',
|
|
217
|
+
'arp -a',
|
|
218
|
+
'route -n',
|
|
219
|
+
'cat /etc/passwd',
|
|
220
|
+
'cat /etc/shadow',
|
|
221
|
+
],
|
|
222
|
+
},
|
|
223
|
+
condition: 'selection',
|
|
224
|
+
},
|
|
225
|
+
level: 'medium',
|
|
226
|
+
tags: ['attack.discovery', 'attack.t1016'],
|
|
227
|
+
},
|
|
228
|
+
// -------------------------------------------------------------------------
|
|
229
|
+
// Lateral Movement / 橫向移動
|
|
230
|
+
// -------------------------------------------------------------------------
|
|
231
|
+
{
|
|
232
|
+
id: 'panguard-builtin-011',
|
|
233
|
+
title: 'Lateral Movement via SSH',
|
|
234
|
+
status: 'stable',
|
|
235
|
+
description: 'Detects outbound SSH connections that may indicate lateral movement',
|
|
236
|
+
author: 'Panguard AI',
|
|
237
|
+
logsource: { category: 'network_connection' },
|
|
238
|
+
detection: {
|
|
239
|
+
selection: {
|
|
240
|
+
category: 'network',
|
|
241
|
+
'description|contains': ['ssh connection to', 'Accepted publickey', 'sshpass'],
|
|
242
|
+
},
|
|
243
|
+
condition: 'selection',
|
|
244
|
+
},
|
|
245
|
+
level: 'medium',
|
|
246
|
+
tags: ['attack.lateral_movement', 'attack.t1021.004'],
|
|
247
|
+
},
|
|
248
|
+
// -------------------------------------------------------------------------
|
|
249
|
+
// Defense Evasion / 防禦規避
|
|
250
|
+
// -------------------------------------------------------------------------
|
|
251
|
+
{
|
|
252
|
+
id: 'panguard-builtin-012',
|
|
253
|
+
title: 'Log Tampering',
|
|
254
|
+
status: 'stable',
|
|
255
|
+
description: 'Detects attempts to clear or tamper with system logs',
|
|
256
|
+
author: 'Panguard AI',
|
|
257
|
+
logsource: { category: 'process_creation' },
|
|
258
|
+
detection: {
|
|
259
|
+
selection: {
|
|
260
|
+
'description|contains': [
|
|
261
|
+
'truncate -s 0 /var/log',
|
|
262
|
+
'> /var/log/',
|
|
263
|
+
'rm -f /var/log/',
|
|
264
|
+
'shred /var/log/',
|
|
265
|
+
'history -c',
|
|
266
|
+
'unset HISTFILE',
|
|
267
|
+
],
|
|
268
|
+
},
|
|
269
|
+
condition: 'selection',
|
|
270
|
+
},
|
|
271
|
+
level: 'critical',
|
|
272
|
+
tags: ['attack.defense_evasion', 'attack.t1070.002'],
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
id: 'panguard-builtin-013',
|
|
276
|
+
title: 'Firewall Rule Modification',
|
|
277
|
+
status: 'stable',
|
|
278
|
+
description: 'Detects firewall rule changes that may disable security',
|
|
279
|
+
author: 'Panguard AI',
|
|
280
|
+
logsource: { category: 'process_creation' },
|
|
281
|
+
detection: {
|
|
282
|
+
selection: {
|
|
283
|
+
'description|contains': [
|
|
284
|
+
'iptables -F',
|
|
285
|
+
'iptables -X',
|
|
286
|
+
'ufw disable',
|
|
287
|
+
'firewall-cmd --remove',
|
|
288
|
+
'pfctl -d',
|
|
289
|
+
'netsh advfirewall set',
|
|
290
|
+
],
|
|
291
|
+
},
|
|
292
|
+
condition: 'selection',
|
|
293
|
+
},
|
|
294
|
+
level: 'critical',
|
|
295
|
+
tags: ['attack.defense_evasion', 'attack.t1562.004'],
|
|
296
|
+
},
|
|
297
|
+
// -------------------------------------------------------------------------
|
|
298
|
+
// Impact / 衝擊
|
|
299
|
+
// -------------------------------------------------------------------------
|
|
300
|
+
{
|
|
301
|
+
id: 'panguard-builtin-014',
|
|
302
|
+
title: 'Crypto Mining Activity',
|
|
303
|
+
status: 'stable',
|
|
304
|
+
description: 'Detects cryptocurrency mining indicators',
|
|
305
|
+
author: 'Panguard AI',
|
|
306
|
+
logsource: { category: 'process_creation' },
|
|
307
|
+
detection: {
|
|
308
|
+
selection: {
|
|
309
|
+
'description|contains': [
|
|
310
|
+
'xmrig',
|
|
311
|
+
'minerd',
|
|
312
|
+
'stratum+tcp',
|
|
313
|
+
'cryptonight',
|
|
314
|
+
'coin-hive',
|
|
315
|
+
'coinhive',
|
|
316
|
+
'minergate',
|
|
317
|
+
],
|
|
318
|
+
},
|
|
319
|
+
condition: 'selection',
|
|
320
|
+
},
|
|
321
|
+
level: 'high',
|
|
322
|
+
tags: ['attack.impact', 'attack.t1496'],
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
id: 'panguard-builtin-015',
|
|
326
|
+
title: 'Data Exfiltration Indicators',
|
|
327
|
+
status: 'stable',
|
|
328
|
+
description: 'Detects data exfiltration via common tools',
|
|
329
|
+
author: 'Panguard AI',
|
|
330
|
+
logsource: { category: 'process_creation' },
|
|
331
|
+
detection: {
|
|
332
|
+
selection: {
|
|
333
|
+
'description|contains': [
|
|
334
|
+
'curl -X POST.*--data',
|
|
335
|
+
'wget --post-file',
|
|
336
|
+
'scp.*@.*:',
|
|
337
|
+
'rsync.*@.*:',
|
|
338
|
+
'tar.*|.*nc ',
|
|
339
|
+
'base64.*|.*curl',
|
|
340
|
+
],
|
|
341
|
+
},
|
|
342
|
+
condition: 'selection',
|
|
343
|
+
},
|
|
344
|
+
level: 'high',
|
|
345
|
+
tags: ['attack.exfiltration', 'attack.t1048'],
|
|
346
|
+
},
|
|
347
|
+
// -------------------------------------------------------------------------
|
|
348
|
+
// File Integrity / 檔案完整性
|
|
349
|
+
// -------------------------------------------------------------------------
|
|
350
|
+
{
|
|
351
|
+
id: 'panguard-builtin-016',
|
|
352
|
+
title: 'Critical System File Modification',
|
|
353
|
+
status: 'stable',
|
|
354
|
+
description: 'Detects changes to critical system configuration files',
|
|
355
|
+
author: 'Panguard AI',
|
|
356
|
+
logsource: { category: 'file_change' },
|
|
357
|
+
detection: {
|
|
358
|
+
selection: {
|
|
359
|
+
category: 'file',
|
|
360
|
+
'description|contains': [
|
|
361
|
+
'/etc/passwd',
|
|
362
|
+
'/etc/shadow',
|
|
363
|
+
'/etc/sudoers',
|
|
364
|
+
'/etc/hosts',
|
|
365
|
+
'/etc/resolv.conf',
|
|
366
|
+
],
|
|
367
|
+
},
|
|
368
|
+
condition: 'selection',
|
|
369
|
+
},
|
|
370
|
+
level: 'critical',
|
|
371
|
+
tags: ['attack.persistence', 'attack.t1222'],
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
id: 'panguard-builtin-017',
|
|
375
|
+
title: 'Web Shell Detection',
|
|
376
|
+
status: 'stable',
|
|
377
|
+
description: 'Detects potential web shell uploads or access',
|
|
378
|
+
author: 'Panguard AI',
|
|
379
|
+
logsource: { category: 'file_change' },
|
|
380
|
+
detection: {
|
|
381
|
+
selection: {
|
|
382
|
+
'description|contains': [
|
|
383
|
+
'webshell',
|
|
384
|
+
'c99shell',
|
|
385
|
+
'r57shell',
|
|
386
|
+
'WSO shell',
|
|
387
|
+
'eval(base64_decode',
|
|
388
|
+
'system($_GET',
|
|
389
|
+
'passthru(',
|
|
390
|
+
],
|
|
391
|
+
},
|
|
392
|
+
condition: 'selection',
|
|
393
|
+
},
|
|
394
|
+
level: 'critical',
|
|
395
|
+
tags: ['attack.persistence', 'attack.t1505.003'],
|
|
396
|
+
},
|
|
397
|
+
// -------------------------------------------------------------------------
|
|
398
|
+
// Privilege Escalation / 權限提升
|
|
399
|
+
// -------------------------------------------------------------------------
|
|
400
|
+
{
|
|
401
|
+
id: 'panguard-builtin-018',
|
|
402
|
+
title: 'Sudo Privilege Escalation',
|
|
403
|
+
status: 'stable',
|
|
404
|
+
description: 'Detects suspicious sudo usage for privilege escalation',
|
|
405
|
+
author: 'Panguard AI',
|
|
406
|
+
logsource: { category: 'authentication' },
|
|
407
|
+
detection: {
|
|
408
|
+
selection: {
|
|
409
|
+
'description|contains': [
|
|
410
|
+
'sudo:.*COMMAND=',
|
|
411
|
+
'user NOT in sudoers',
|
|
412
|
+
'sudo su -',
|
|
413
|
+
'sudo bash',
|
|
414
|
+
'sudo -i',
|
|
415
|
+
],
|
|
416
|
+
},
|
|
417
|
+
condition: 'selection',
|
|
418
|
+
},
|
|
419
|
+
level: 'medium',
|
|
420
|
+
tags: ['attack.privilege_escalation', 'attack.t1548.003'],
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
id: 'panguard-builtin-019',
|
|
424
|
+
title: 'SUID/SGID Binary Exploitation',
|
|
425
|
+
status: 'stable',
|
|
426
|
+
description: 'Detects SUID/SGID file permission changes',
|
|
427
|
+
author: 'Panguard AI',
|
|
428
|
+
logsource: { category: 'process_creation' },
|
|
429
|
+
detection: {
|
|
430
|
+
selection: {
|
|
431
|
+
'description|contains': [
|
|
432
|
+
'chmod +s ',
|
|
433
|
+
'chmod u+s',
|
|
434
|
+
'chmod 4755',
|
|
435
|
+
'chmod 6755',
|
|
436
|
+
'find / -perm -4000',
|
|
437
|
+
],
|
|
438
|
+
},
|
|
439
|
+
condition: 'selection',
|
|
440
|
+
},
|
|
441
|
+
level: 'high',
|
|
442
|
+
tags: ['attack.privilege_escalation', 'attack.t1548.001'],
|
|
443
|
+
},
|
|
444
|
+
// -------------------------------------------------------------------------
|
|
445
|
+
// Malware / 惡意軟體
|
|
446
|
+
// -------------------------------------------------------------------------
|
|
447
|
+
{
|
|
448
|
+
id: 'panguard-builtin-020',
|
|
449
|
+
title: 'Ransomware Indicators',
|
|
450
|
+
status: 'stable',
|
|
451
|
+
description: 'Detects ransomware behavior patterns',
|
|
452
|
+
author: 'Panguard AI',
|
|
453
|
+
logsource: { category: 'process_creation' },
|
|
454
|
+
detection: {
|
|
455
|
+
selection: {
|
|
456
|
+
'description|contains': [
|
|
457
|
+
'vssadmin delete shadows',
|
|
458
|
+
'wmic shadowcopy delete',
|
|
459
|
+
'bcdedit /set.*recoveryenabled.*no',
|
|
460
|
+
'.encrypted',
|
|
461
|
+
'DECRYPT_INSTRUCTIONS',
|
|
462
|
+
'YOUR_FILES_ARE_ENCRYPTED',
|
|
463
|
+
],
|
|
464
|
+
},
|
|
465
|
+
condition: 'selection',
|
|
466
|
+
},
|
|
467
|
+
level: 'critical',
|
|
468
|
+
tags: ['attack.impact', 'attack.t1486'],
|
|
469
|
+
},
|
|
470
|
+
];
|
|
471
|
+
//# sourceMappingURL=builtin-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-rules.js","sourceRoot":"","sources":["../../src/rules/builtin-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anonymous Client ID for Threat Cloud deduplication.
|
|
3
|
+
* Reads or creates a UUID at ~/.panguard/client-id.
|
|
4
|
+
* Not associated with any user account or email.
|
|
5
|
+
*
|
|
6
|
+
* @module @panguard-ai/panguard-guard/threat-cloud/client-id
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Get or create an anonymous client ID for deduplication.
|
|
10
|
+
* This ID is a random UUID, not linked to user identity.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getAnonymousClientId(): string;
|
|
13
|
+
//# sourceMappingURL=client-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-id.d.ts","sourceRoot":"","sources":["../../src/threat-cloud/client-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAkB7C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anonymous Client ID for Threat Cloud deduplication.
|
|
3
|
+
* Reads or creates a UUID at ~/.panguard/client-id.
|
|
4
|
+
* Not associated with any user account or email.
|
|
5
|
+
*
|
|
6
|
+
* @module @panguard-ai/panguard-guard/threat-cloud/client-id
|
|
7
|
+
*/
|
|
8
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { homedir } from 'node:os';
|
|
11
|
+
import { randomUUID } from 'node:crypto';
|
|
12
|
+
const ID_PATH = join(homedir(), '.panguard', 'client-id');
|
|
13
|
+
/**
|
|
14
|
+
* Get or create an anonymous client ID for deduplication.
|
|
15
|
+
* This ID is a random UUID, not linked to user identity.
|
|
16
|
+
*/
|
|
17
|
+
export function getAnonymousClientId() {
|
|
18
|
+
try {
|
|
19
|
+
if (existsSync(ID_PATH)) {
|
|
20
|
+
const id = readFileSync(ID_PATH, 'utf-8').trim();
|
|
21
|
+
if (id.length > 0)
|
|
22
|
+
return id;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Fall through to create
|
|
27
|
+
}
|
|
28
|
+
const id = randomUUID();
|
|
29
|
+
try {
|
|
30
|
+
mkdirSync(join(homedir(), '.panguard'), { recursive: true });
|
|
31
|
+
writeFileSync(ID_PATH, id, 'utf-8');
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Best effort - return the ID even if we can't persist it
|
|
35
|
+
}
|
|
36
|
+
return id;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=client-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-id.js","sourceRoot":"","sources":["../../src/threat-cloud/client-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAE1D;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YACjD,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;IAED,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,aAAa,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collective Threat Intelligence (Threat Cloud)
|
|
3
|
+
* 集體威脅智慧(威脅雲)
|
|
4
|
+
*
|
|
5
|
+
* Provides anonymized threat data upload and community rule distribution.
|
|
6
|
+
* Supports HTTP cloud backend with local file fallback for offline mode.
|
|
7
|
+
* 提供匿名化威脅數據上傳和社群規則分發。
|
|
8
|
+
* 支援 HTTP 雲端後端和離線模式的本地檔案備援。
|
|
9
|
+
*
|
|
10
|
+
* @module @panguard-ai/panguard-guard/threat-cloud
|
|
11
|
+
*/
|
|
12
|
+
import type { AnonymizedThreatData, ThreatCloudUpdate, ThreatCloudStatus } from '../types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Threat Cloud Client for collective intelligence sharing
|
|
15
|
+
* 集體情報分享的威脅雲客戶端
|
|
16
|
+
*/
|
|
17
|
+
export declare class ThreatCloudClient {
|
|
18
|
+
private readonly endpoint;
|
|
19
|
+
private readonly dataDir;
|
|
20
|
+
private readonly clientId;
|
|
21
|
+
private status;
|
|
22
|
+
private cache;
|
|
23
|
+
private uploadQueue;
|
|
24
|
+
private uploadBuffer;
|
|
25
|
+
private flushTimer;
|
|
26
|
+
/** Max events before immediate flush */
|
|
27
|
+
private static readonly BATCH_SIZE;
|
|
28
|
+
/** Max buffer size to prevent memory growth */
|
|
29
|
+
private static readonly MAX_BUFFER;
|
|
30
|
+
/** Periodic flush interval (ms) */
|
|
31
|
+
private static readonly FLUSH_INTERVAL;
|
|
32
|
+
/**
|
|
33
|
+
* @param endpoint - Cloud API endpoint URL (undefined = offline mode) / 雲端 API 端點 URL
|
|
34
|
+
* @param dataDir - Local data directory for cache/queue / 本地資料目錄
|
|
35
|
+
*/
|
|
36
|
+
constructor(endpoint: string | undefined, dataDir: string);
|
|
37
|
+
/**
|
|
38
|
+
* Get current connection status / 取得當前連線狀態
|
|
39
|
+
*/
|
|
40
|
+
getStatus(): ThreatCloudStatus;
|
|
41
|
+
/**
|
|
42
|
+
* Upload anonymized threat data to the cloud.
|
|
43
|
+
* Data is buffered and sent in batches of up to 50 events.
|
|
44
|
+
* 上傳匿名化威脅數據至雲端。數據會緩衝並批次上傳(最多 50 筆)。
|
|
45
|
+
*
|
|
46
|
+
* @param data - Anonymized threat data / 匿名化威脅數據
|
|
47
|
+
*/
|
|
48
|
+
upload(data: AnonymizedThreatData): Promise<boolean>;
|
|
49
|
+
/**
|
|
50
|
+
* Flush the upload buffer (batch POST to cloud).
|
|
51
|
+
* 清空上傳緩衝區(批次 POST 至雲端)。
|
|
52
|
+
*/
|
|
53
|
+
private flushBuffer;
|
|
54
|
+
/**
|
|
55
|
+
* Stop the flush timer (call on shutdown).
|
|
56
|
+
* 停止定期清空計時器。
|
|
57
|
+
*/
|
|
58
|
+
stopFlushTimer(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Fetch latest community rules from the cloud
|
|
61
|
+
* 從雲端取得最新社群規則
|
|
62
|
+
*
|
|
63
|
+
* @returns Array of rule updates / 規則更新陣列
|
|
64
|
+
*/
|
|
65
|
+
fetchRules(): Promise<ThreatCloudUpdate[]>;
|
|
66
|
+
/**
|
|
67
|
+
* Flush the upload queue (sync pending data to cloud)
|
|
68
|
+
* 清空上傳佇列(將待上傳數據同步至雲端)
|
|
69
|
+
*
|
|
70
|
+
* @returns Number of items successfully uploaded / 成功上傳的項目數
|
|
71
|
+
*/
|
|
72
|
+
flushQueue(): Promise<number>;
|
|
73
|
+
/**
|
|
74
|
+
* Fetch IP blocklist from the cloud (plain text, one IP per line).
|
|
75
|
+
* 從雲端取得 IP 封鎖清單(純文字,每行一個 IP)。
|
|
76
|
+
*
|
|
77
|
+
* @returns Array of blocked IPs / 封鎖 IP 陣列
|
|
78
|
+
*/
|
|
79
|
+
fetchBlocklist(): Promise<string[]>;
|
|
80
|
+
/**
|
|
81
|
+
* Get cached rules without network call / 取得快取規則(不進行網路呼叫)
|
|
82
|
+
*/
|
|
83
|
+
getCachedRules(): ThreatCloudUpdate[];
|
|
84
|
+
/**
|
|
85
|
+
* Get queue size / 取得佇列大小
|
|
86
|
+
*/
|
|
87
|
+
getQueueSize(): number;
|
|
88
|
+
/**
|
|
89
|
+
* Get statistics / 取得統計
|
|
90
|
+
*/
|
|
91
|
+
getStats(): {
|
|
92
|
+
totalUploaded: number;
|
|
93
|
+
totalRulesReceived: number;
|
|
94
|
+
queueSize: number;
|
|
95
|
+
};
|
|
96
|
+
private httpPost;
|
|
97
|
+
private httpGet;
|
|
98
|
+
private loadCache;
|
|
99
|
+
private saveCache;
|
|
100
|
+
private loadQueue;
|
|
101
|
+
private saveQueue;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/threat-cloud/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAkB9F;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,UAAU,CAA+C;IAEjE,wCAAwC;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAM;IACxC,+CAA+C;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAQ;IAC1C,mCAAmC;IACnC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAU;IAEhD;;;OAGG;gBACS,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM;IAoBzD;;OAEG;IACH,SAAS,IAAI,iBAAiB;IAI9B;;;;;;OAMG;IACG,MAAM,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAsB1D;;;OAGG;YACW,WAAW;IA4BzB;;;OAGG;IACH,cAAc,IAAI,IAAI;IAOtB;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAsChD;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAiCnC;;;;;OAKG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAwBzC;;OAEG;IACH,cAAc,IAAI,iBAAiB,EAAE;IAIrC;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,QAAQ,IAAI;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAWpF,OAAO,CAAC,QAAQ;IA2ChB,OAAO,CAAC,OAAO;IA2Cf,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,SAAS;CAUlB"}
|