@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.
Files changed (130) hide show
  1. package/dist/agent/analyze-agent.d.ts +62 -0
  2. package/dist/agent/analyze-agent.d.ts.map +1 -0
  3. package/dist/agent/analyze-agent.js +327 -0
  4. package/dist/agent/analyze-agent.js.map +1 -0
  5. package/dist/agent/detect-agent.d.ts +59 -0
  6. package/dist/agent/detect-agent.d.ts.map +1 -0
  7. package/dist/agent/detect-agent.js +214 -0
  8. package/dist/agent/detect-agent.js.map +1 -0
  9. package/dist/agent/index.d.ts +15 -0
  10. package/dist/agent/index.d.ts.map +1 -0
  11. package/dist/agent/index.js +14 -0
  12. package/dist/agent/index.js.map +1 -0
  13. package/dist/agent/report-agent.d.ts +122 -0
  14. package/dist/agent/report-agent.d.ts.map +1 -0
  15. package/dist/agent/report-agent.js +468 -0
  16. package/dist/agent/report-agent.js.map +1 -0
  17. package/dist/agent/respond-agent.d.ts +113 -0
  18. package/dist/agent/respond-agent.d.ts.map +1 -0
  19. package/dist/agent/respond-agent.js +749 -0
  20. package/dist/agent/respond-agent.js.map +1 -0
  21. package/dist/agent-client/index.d.ts +81 -0
  22. package/dist/agent-client/index.d.ts.map +1 -0
  23. package/dist/agent-client/index.js +170 -0
  24. package/dist/agent-client/index.js.map +1 -0
  25. package/dist/cli/index.d.ts +17 -0
  26. package/dist/cli/index.d.ts.map +1 -0
  27. package/dist/cli/index.js +295 -0
  28. package/dist/cli/index.js.map +1 -0
  29. package/dist/config.d.ts +23 -0
  30. package/dist/config.d.ts.map +1 -0
  31. package/dist/config.js +108 -0
  32. package/dist/config.js.map +1 -0
  33. package/dist/daemon/index.d.ts +66 -0
  34. package/dist/daemon/index.d.ts.map +1 -0
  35. package/dist/daemon/index.js +284 -0
  36. package/dist/daemon/index.js.map +1 -0
  37. package/dist/dashboard/index.d.ts +78 -0
  38. package/dist/dashboard/index.d.ts.map +1 -0
  39. package/dist/dashboard/index.js +455 -0
  40. package/dist/dashboard/index.js.map +1 -0
  41. package/dist/guard-engine.d.ts +108 -0
  42. package/dist/guard-engine.d.ts.map +1 -0
  43. package/dist/guard-engine.js +740 -0
  44. package/dist/guard-engine.js.map +1 -0
  45. package/dist/index.d.ts +29 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +39 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/install/index.d.ts +23 -0
  50. package/dist/install/index.d.ts.map +1 -0
  51. package/dist/install/index.js +216 -0
  52. package/dist/install/index.js.map +1 -0
  53. package/dist/investigation/index.d.ts +80 -0
  54. package/dist/investigation/index.d.ts.map +1 -0
  55. package/dist/investigation/index.js +570 -0
  56. package/dist/investigation/index.js.map +1 -0
  57. package/dist/license/index.d.ts +46 -0
  58. package/dist/license/index.d.ts.map +1 -0
  59. package/dist/license/index.js +145 -0
  60. package/dist/license/index.js.map +1 -0
  61. package/dist/memory/baseline.d.ts +34 -0
  62. package/dist/memory/baseline.d.ts.map +1 -0
  63. package/dist/memory/baseline.js +224 -0
  64. package/dist/memory/baseline.js.map +1 -0
  65. package/dist/memory/index.d.ts +32 -0
  66. package/dist/memory/index.d.ts.map +1 -0
  67. package/dist/memory/index.js +58 -0
  68. package/dist/memory/index.js.map +1 -0
  69. package/dist/memory/learning.d.ts +35 -0
  70. package/dist/memory/learning.d.ts.map +1 -0
  71. package/dist/memory/learning.js +60 -0
  72. package/dist/memory/learning.js.map +1 -0
  73. package/dist/monitors/falco-monitor.d.ts +62 -0
  74. package/dist/monitors/falco-monitor.d.ts.map +1 -0
  75. package/dist/monitors/falco-monitor.js +226 -0
  76. package/dist/monitors/falco-monitor.js.map +1 -0
  77. package/dist/monitors/suricata-monitor.d.ts +80 -0
  78. package/dist/monitors/suricata-monitor.d.ts.map +1 -0
  79. package/dist/monitors/suricata-monitor.js +227 -0
  80. package/dist/monitors/suricata-monitor.js.map +1 -0
  81. package/dist/notify/email.d.ts +23 -0
  82. package/dist/notify/email.d.ts.map +1 -0
  83. package/dist/notify/email.js +124 -0
  84. package/dist/notify/email.js.map +1 -0
  85. package/dist/notify/index.d.ts +31 -0
  86. package/dist/notify/index.d.ts.map +1 -0
  87. package/dist/notify/index.js +70 -0
  88. package/dist/notify/index.js.map +1 -0
  89. package/dist/notify/line-notify.d.ts.map +1 -0
  90. package/dist/notify/slack.d.ts +21 -0
  91. package/dist/notify/slack.d.ts.map +1 -0
  92. package/dist/notify/slack.js +92 -0
  93. package/dist/notify/slack.js.map +1 -0
  94. package/dist/notify/telegram.d.ts +21 -0
  95. package/dist/notify/telegram.d.ts.map +1 -0
  96. package/dist/notify/telegram.js +89 -0
  97. package/dist/notify/telegram.js.map +1 -0
  98. package/dist/response/file-quarantine.d.ts +63 -0
  99. package/dist/response/file-quarantine.d.ts.map +1 -0
  100. package/dist/response/file-quarantine.js +137 -0
  101. package/dist/response/file-quarantine.js.map +1 -0
  102. package/dist/response/index.d.ts +4 -0
  103. package/dist/response/index.d.ts.map +1 -0
  104. package/dist/response/index.js +4 -0
  105. package/dist/response/index.js.map +1 -0
  106. package/dist/response/ip-blocker.d.ts +69 -0
  107. package/dist/response/ip-blocker.d.ts.map +1 -0
  108. package/dist/response/ip-blocker.js +191 -0
  109. package/dist/response/ip-blocker.js.map +1 -0
  110. package/dist/response/process-killer.d.ts +49 -0
  111. package/dist/response/process-killer.d.ts.map +1 -0
  112. package/dist/response/process-killer.js +230 -0
  113. package/dist/response/process-killer.js.map +1 -0
  114. package/dist/rules/builtin-rules.d.ts +12 -0
  115. package/dist/rules/builtin-rules.d.ts.map +1 -0
  116. package/dist/rules/builtin-rules.js +471 -0
  117. package/dist/rules/builtin-rules.js.map +1 -0
  118. package/dist/threat-cloud/client-id.d.ts +13 -0
  119. package/dist/threat-cloud/client-id.d.ts.map +1 -0
  120. package/dist/threat-cloud/client-id.js +38 -0
  121. package/dist/threat-cloud/client-id.js.map +1 -0
  122. package/dist/threat-cloud/index.d.ts +103 -0
  123. package/dist/threat-cloud/index.d.ts.map +1 -0
  124. package/dist/threat-cloud/index.js +386 -0
  125. package/dist/threat-cloud/index.js.map +1 -0
  126. package/dist/types.d.ts +336 -0
  127. package/dist/types.d.ts.map +1 -0
  128. package/dist/types.js +42 -0
  129. package/dist/types.js.map +1 -0
  130. package/package.json +35 -0
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Process Killer - Terminate processes with child cleanup and safety checks
3
+ * 程序終止器 - 終止程序(含子程序清理與安全檢查)
4
+ *
5
+ * Features:
6
+ * - Kill process and all child processes (process tree)
7
+ * - Protected process list (never kill system-critical processes)
8
+ * - SIGTERM first, SIGKILL after timeout
9
+ * - Cross-platform support
10
+ *
11
+ * @module @panguard-ai/panguard-guard/response/process-killer
12
+ */
13
+ import { execFile } from 'node:child_process';
14
+ import { platform } from 'node:os';
15
+ import { createLogger } from '@panguard-ai/core';
16
+ const logger = createLogger('panguard-guard:process-killer');
17
+ /** Protected system processes that must never be killed / 不可終止的系統程序 */
18
+ const PROTECTED_PROCESSES = new Set([
19
+ // Unix/Linux
20
+ 'init',
21
+ 'systemd',
22
+ 'launchd',
23
+ 'sshd',
24
+ 'cron',
25
+ 'atd',
26
+ 'journald',
27
+ 'udevd',
28
+ 'dbus-daemon',
29
+ 'NetworkManager',
30
+ 'login',
31
+ 'getty',
32
+ // macOS
33
+ 'loginwindow',
34
+ 'WindowServer',
35
+ 'kernel_task',
36
+ 'mds',
37
+ 'mds_stores',
38
+ 'coreaudiod',
39
+ 'diskarbitrationd',
40
+ 'configd',
41
+ // Windows
42
+ 'explorer.exe',
43
+ 'svchost.exe',
44
+ 'csrss.exe',
45
+ 'lsass.exe',
46
+ 'services.exe',
47
+ 'winlogon.exe',
48
+ 'wininit.exe',
49
+ 'smss.exe',
50
+ 'System',
51
+ 'dwm.exe',
52
+ // Self
53
+ 'panguard-guard',
54
+ 'node',
55
+ ]);
56
+ /** Protected PIDs / 受保護的 PID */
57
+ const PROTECTED_PIDS = new Set([0, 1]);
58
+ /**
59
+ * Process Killer with safety checks and tree killing
60
+ * 程序終止器(含安全檢查與程序樹終止)
61
+ */
62
+ export class ProcessKiller {
63
+ additionalProtected;
64
+ constructor(additionalProtectedProcesses = []) {
65
+ this.additionalProtected = new Set(additionalProtectedProcesses);
66
+ }
67
+ /** Check if process name is protected / 檢查程序名稱是否受保護 */
68
+ isProtected(nameOrPid) {
69
+ if (typeof nameOrPid === 'number') {
70
+ return PROTECTED_PIDS.has(nameOrPid) || nameOrPid === process.pid;
71
+ }
72
+ return PROTECTED_PROCESSES.has(nameOrPid) || this.additionalProtected.has(nameOrPid);
73
+ }
74
+ /**
75
+ * Kill a process and optionally its children
76
+ * 終止程序(可選終止子程序)
77
+ */
78
+ async kill(pid, options = {}) {
79
+ const { processName, killChildren = true, gracePeriodMs = 3000 } = options;
80
+ // Safety: protected PID check
81
+ if (PROTECTED_PIDS.has(pid) || pid === process.pid) {
82
+ return {
83
+ pid,
84
+ processName,
85
+ success: false,
86
+ message: `PID ${pid} is protected and cannot be killed`,
87
+ childrenKilled: 0,
88
+ };
89
+ }
90
+ // Safety: protected process name check
91
+ if (processName &&
92
+ (PROTECTED_PROCESSES.has(processName) || this.additionalProtected.has(processName))) {
93
+ return {
94
+ pid,
95
+ processName,
96
+ success: false,
97
+ message: `Process "${processName}" is protected`,
98
+ childrenKilled: 0,
99
+ };
100
+ }
101
+ let childrenKilled = 0;
102
+ // Kill children first if requested
103
+ if (killChildren) {
104
+ try {
105
+ const children = await this.getChildPIDs(pid);
106
+ for (const childPid of children) {
107
+ try {
108
+ process.kill(childPid, 'SIGTERM');
109
+ childrenKilled++;
110
+ }
111
+ catch {
112
+ // Child may have already exited
113
+ }
114
+ }
115
+ }
116
+ catch {
117
+ // Failed to get children, continue with parent
118
+ }
119
+ }
120
+ // SIGTERM first (graceful)
121
+ try {
122
+ process.kill(pid, 'SIGTERM');
123
+ }
124
+ catch (err) {
125
+ const msg = err instanceof Error ? err.message : String(err);
126
+ if (err.code === 'ESRCH') {
127
+ return {
128
+ pid,
129
+ processName,
130
+ success: true,
131
+ message: 'Process already exited',
132
+ childrenKilled,
133
+ };
134
+ }
135
+ return {
136
+ pid,
137
+ processName,
138
+ success: false,
139
+ message: `SIGTERM failed: ${msg}`,
140
+ childrenKilled,
141
+ };
142
+ }
143
+ // Wait for graceful exit, then SIGKILL if still alive
144
+ const isAlive = await this.waitForExit(pid, gracePeriodMs);
145
+ if (isAlive) {
146
+ try {
147
+ process.kill(pid, 'SIGKILL');
148
+ logger.info(`SIGKILL sent to PID ${pid} after grace period`);
149
+ }
150
+ catch {
151
+ // Process may have exited between check and kill
152
+ }
153
+ }
154
+ logger.info(`Killed process PID ${pid}${processName ? ` (${processName})` : ''}, ${childrenKilled} children terminated`);
155
+ return {
156
+ pid,
157
+ processName,
158
+ success: true,
159
+ message: `Process PID ${pid} terminated (${childrenKilled} children also killed)`,
160
+ childrenKilled,
161
+ };
162
+ }
163
+ /**
164
+ * Get child PIDs of a process / 取得程序的子 PID
165
+ */
166
+ async getChildPIDs(parentPid) {
167
+ const os = platform();
168
+ try {
169
+ if (os === 'win32') {
170
+ const stdout = await execFilePromise('wmic', [
171
+ 'process',
172
+ 'where',
173
+ `(ParentProcessId=${parentPid})`,
174
+ 'get',
175
+ 'ProcessId',
176
+ ]);
177
+ return stdout
178
+ .split('\n')
179
+ .map((line) => parseInt(line.trim(), 10))
180
+ .filter((pid) => !isNaN(pid) && pid !== parentPid);
181
+ }
182
+ else {
183
+ // Unix/macOS: use pgrep
184
+ const stdout = await execFilePromise('/usr/bin/pgrep', ['-P', String(parentPid)]);
185
+ return stdout
186
+ .split('\n')
187
+ .map((line) => parseInt(line.trim(), 10))
188
+ .filter((pid) => !isNaN(pid));
189
+ }
190
+ }
191
+ catch {
192
+ return []; // No children or pgrep not available
193
+ }
194
+ }
195
+ /**
196
+ * Wait for process to exit, return true if still alive
197
+ * 等待程序退出,如果仍存活則回傳 true
198
+ */
199
+ waitForExit(pid, timeoutMs) {
200
+ return new Promise((resolve) => {
201
+ const start = Date.now();
202
+ const check = () => {
203
+ try {
204
+ process.kill(pid, 0); // Signal 0 checks existence
205
+ if (Date.now() - start >= timeoutMs) {
206
+ resolve(true); // Still alive after timeout
207
+ }
208
+ else {
209
+ setTimeout(check, 200);
210
+ }
211
+ }
212
+ catch {
213
+ resolve(false); // Process exited
214
+ }
215
+ };
216
+ check();
217
+ });
218
+ }
219
+ }
220
+ function execFilePromise(command, args) {
221
+ return new Promise((resolve, reject) => {
222
+ execFile(command, args, { timeout: 5000 }, (error, stdout) => {
223
+ if (error)
224
+ reject(error);
225
+ else
226
+ resolve(stdout);
227
+ });
228
+ });
229
+ }
230
+ //# sourceMappingURL=process-killer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-killer.js","sourceRoot":"","sources":["../../src/response/process-killer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
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
+ import type { SigmaRule } from '@panguard-ai/core';
11
+ export declare const BUILTIN_RULES: SigmaRule[];
12
+ //# sourceMappingURL=builtin-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-rules.d.ts","sourceRoot":"","sources":["../../src/rules/builtin-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAO,MAAM,aAAa,EAAE,SAAS,EAqdpC,CAAC"}