@panguard-ai/core 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 (233) hide show
  1. package/dist/adapters/adapter-registry.d.ts +150 -0
  2. package/dist/adapters/adapter-registry.d.ts.map +1 -0
  3. package/dist/adapters/adapter-registry.js +271 -0
  4. package/dist/adapters/adapter-registry.js.map +1 -0
  5. package/dist/adapters/base-adapter.d.ts +101 -0
  6. package/dist/adapters/base-adapter.d.ts.map +1 -0
  7. package/dist/adapters/base-adapter.js +160 -0
  8. package/dist/adapters/base-adapter.js.map +1 -0
  9. package/dist/adapters/defender-adapter.d.ts +90 -0
  10. package/dist/adapters/defender-adapter.d.ts.map +1 -0
  11. package/dist/adapters/defender-adapter.js +227 -0
  12. package/dist/adapters/defender-adapter.js.map +1 -0
  13. package/dist/adapters/index.d.ts +22 -0
  14. package/dist/adapters/index.d.ts.map +1 -0
  15. package/dist/adapters/index.js +23 -0
  16. package/dist/adapters/index.js.map +1 -0
  17. package/dist/adapters/syslog-adapter.d.ts +207 -0
  18. package/dist/adapters/syslog-adapter.d.ts.map +1 -0
  19. package/dist/adapters/syslog-adapter.js +432 -0
  20. package/dist/adapters/syslog-adapter.js.map +1 -0
  21. package/dist/adapters/types.d.ts +135 -0
  22. package/dist/adapters/types.d.ts.map +1 -0
  23. package/dist/adapters/types.js +13 -0
  24. package/dist/adapters/types.js.map +1 -0
  25. package/dist/adapters/wazuh-adapter.d.ts +120 -0
  26. package/dist/adapters/wazuh-adapter.d.ts.map +1 -0
  27. package/dist/adapters/wazuh-adapter.js +266 -0
  28. package/dist/adapters/wazuh-adapter.js.map +1 -0
  29. package/dist/ai/claude-provider.d.ts +66 -0
  30. package/dist/ai/claude-provider.d.ts.map +1 -0
  31. package/dist/ai/claude-provider.js +166 -0
  32. package/dist/ai/claude-provider.js.map +1 -0
  33. package/dist/ai/funnel-router.d.ts +75 -0
  34. package/dist/ai/funnel-router.d.ts.map +1 -0
  35. package/dist/ai/funnel-router.js +173 -0
  36. package/dist/ai/funnel-router.js.map +1 -0
  37. package/dist/ai/index.d.ts +77 -0
  38. package/dist/ai/index.d.ts.map +1 -0
  39. package/dist/ai/index.js +95 -0
  40. package/dist/ai/index.js.map +1 -0
  41. package/dist/ai/ollama-provider.d.ts +73 -0
  42. package/dist/ai/ollama-provider.d.ts.map +1 -0
  43. package/dist/ai/ollama-provider.js +200 -0
  44. package/dist/ai/ollama-provider.js.map +1 -0
  45. package/dist/ai/openai-provider.d.ts +70 -0
  46. package/dist/ai/openai-provider.d.ts.map +1 -0
  47. package/dist/ai/openai-provider.js +175 -0
  48. package/dist/ai/openai-provider.js.map +1 -0
  49. package/dist/ai/prompts/event-classifier.d.ts +25 -0
  50. package/dist/ai/prompts/event-classifier.d.ts.map +1 -0
  51. package/dist/ai/prompts/event-classifier.js +94 -0
  52. package/dist/ai/prompts/event-classifier.js.map +1 -0
  53. package/dist/ai/prompts/index.d.ts +13 -0
  54. package/dist/ai/prompts/index.d.ts.map +1 -0
  55. package/dist/ai/prompts/index.js +13 -0
  56. package/dist/ai/prompts/index.js.map +1 -0
  57. package/dist/ai/prompts/report-generator.d.ts +25 -0
  58. package/dist/ai/prompts/report-generator.d.ts.map +1 -0
  59. package/dist/ai/prompts/report-generator.js +131 -0
  60. package/dist/ai/prompts/report-generator.js.map +1 -0
  61. package/dist/ai/prompts/threat-analyzer.d.ts +26 -0
  62. package/dist/ai/prompts/threat-analyzer.d.ts.map +1 -0
  63. package/dist/ai/prompts/threat-analyzer.js +75 -0
  64. package/dist/ai/prompts/threat-analyzer.js.map +1 -0
  65. package/dist/ai/provider-base.d.ts +100 -0
  66. package/dist/ai/provider-base.d.ts.map +1 -0
  67. package/dist/ai/provider-base.js +166 -0
  68. package/dist/ai/provider-base.js.map +1 -0
  69. package/dist/ai/response-parser.d.ts +36 -0
  70. package/dist/ai/response-parser.d.ts.map +1 -0
  71. package/dist/ai/response-parser.js +195 -0
  72. package/dist/ai/response-parser.js.map +1 -0
  73. package/dist/ai/token-tracker.d.ts +72 -0
  74. package/dist/ai/token-tracker.d.ts.map +1 -0
  75. package/dist/ai/token-tracker.js +145 -0
  76. package/dist/ai/token-tracker.js.map +1 -0
  77. package/dist/ai/types.d.ts +138 -0
  78. package/dist/ai/types.d.ts.map +1 -0
  79. package/dist/ai/types.js +12 -0
  80. package/dist/ai/types.js.map +1 -0
  81. package/dist/cli/index.d.ts +146 -0
  82. package/dist/cli/index.d.ts.map +1 -0
  83. package/dist/cli/index.js +515 -0
  84. package/dist/cli/index.js.map +1 -0
  85. package/dist/cli/prompts.d.ts +58 -0
  86. package/dist/cli/prompts.d.ts.map +1 -0
  87. package/dist/cli/prompts.js +327 -0
  88. package/dist/cli/prompts.js.map +1 -0
  89. package/dist/cli/wizard.d.ts +58 -0
  90. package/dist/cli/wizard.d.ts.map +1 -0
  91. package/dist/cli/wizard.js +200 -0
  92. package/dist/cli/wizard.js.map +1 -0
  93. package/dist/discovery/firewall-checker.d.ts +28 -0
  94. package/dist/discovery/firewall-checker.d.ts.map +1 -0
  95. package/dist/discovery/firewall-checker.js +379 -0
  96. package/dist/discovery/firewall-checker.js.map +1 -0
  97. package/dist/discovery/index.d.ts +23 -0
  98. package/dist/discovery/index.d.ts.map +1 -0
  99. package/dist/discovery/index.js +29 -0
  100. package/dist/discovery/index.js.map +1 -0
  101. package/dist/discovery/network-scanner.d.ts +60 -0
  102. package/dist/discovery/network-scanner.d.ts.map +1 -0
  103. package/dist/discovery/network-scanner.js +640 -0
  104. package/dist/discovery/network-scanner.js.map +1 -0
  105. package/dist/discovery/os-detector.d.ts +24 -0
  106. package/dist/discovery/os-detector.d.ts.map +1 -0
  107. package/dist/discovery/os-detector.js +253 -0
  108. package/dist/discovery/os-detector.js.map +1 -0
  109. package/dist/discovery/osquery-provider.d.ts +127 -0
  110. package/dist/discovery/osquery-provider.d.ts.map +1 -0
  111. package/dist/discovery/osquery-provider.js +214 -0
  112. package/dist/discovery/osquery-provider.js.map +1 -0
  113. package/dist/discovery/risk-scorer.d.ts +66 -0
  114. package/dist/discovery/risk-scorer.d.ts.map +1 -0
  115. package/dist/discovery/risk-scorer.js +294 -0
  116. package/dist/discovery/risk-scorer.js.map +1 -0
  117. package/dist/discovery/security-tools.d.ts +31 -0
  118. package/dist/discovery/security-tools.d.ts.map +1 -0
  119. package/dist/discovery/security-tools.js +346 -0
  120. package/dist/discovery/security-tools.js.map +1 -0
  121. package/dist/discovery/service-detector.d.ts +28 -0
  122. package/dist/discovery/service-detector.d.ts.map +1 -0
  123. package/dist/discovery/service-detector.js +300 -0
  124. package/dist/discovery/service-detector.js.map +1 -0
  125. package/dist/discovery/types.d.ts +502 -0
  126. package/dist/discovery/types.d.ts.map +1 -0
  127. package/dist/discovery/types.js +12 -0
  128. package/dist/discovery/types.js.map +1 -0
  129. package/dist/discovery/user-auditor.d.ts +28 -0
  130. package/dist/discovery/user-auditor.d.ts.map +1 -0
  131. package/dist/discovery/user-auditor.js +385 -0
  132. package/dist/discovery/user-auditor.js.map +1 -0
  133. package/dist/i18n/config.d.ts +45 -0
  134. package/dist/i18n/config.d.ts.map +1 -0
  135. package/dist/i18n/config.js +135 -0
  136. package/dist/i18n/config.js.map +1 -0
  137. package/dist/i18n/index.d.ts +8 -0
  138. package/dist/i18n/index.d.ts.map +1 -0
  139. package/dist/i18n/index.js +8 -0
  140. package/dist/i18n/index.js.map +1 -0
  141. package/dist/index.d.ts +31 -0
  142. package/dist/index.d.ts.map +1 -0
  143. package/dist/index.js +31 -0
  144. package/dist/index.js.map +1 -0
  145. package/dist/monitor/event-normalizer.d.ts +102 -0
  146. package/dist/monitor/event-normalizer.d.ts.map +1 -0
  147. package/dist/monitor/event-normalizer.js +195 -0
  148. package/dist/monitor/event-normalizer.js.map +1 -0
  149. package/dist/monitor/file-monitor.d.ts +90 -0
  150. package/dist/monitor/file-monitor.d.ts.map +1 -0
  151. package/dist/monitor/file-monitor.js +222 -0
  152. package/dist/monitor/file-monitor.js.map +1 -0
  153. package/dist/monitor/index.d.ts +147 -0
  154. package/dist/monitor/index.d.ts.map +1 -0
  155. package/dist/monitor/index.js +293 -0
  156. package/dist/monitor/index.js.map +1 -0
  157. package/dist/monitor/log-monitor.d.ts +102 -0
  158. package/dist/monitor/log-monitor.d.ts.map +1 -0
  159. package/dist/monitor/log-monitor.js +245 -0
  160. package/dist/monitor/log-monitor.js.map +1 -0
  161. package/dist/monitor/network-monitor.d.ts +103 -0
  162. package/dist/monitor/network-monitor.d.ts.map +1 -0
  163. package/dist/monitor/network-monitor.js +336 -0
  164. package/dist/monitor/network-monitor.js.map +1 -0
  165. package/dist/monitor/process-monitor.d.ts +108 -0
  166. package/dist/monitor/process-monitor.d.ts.map +1 -0
  167. package/dist/monitor/process-monitor.js +245 -0
  168. package/dist/monitor/process-monitor.js.map +1 -0
  169. package/dist/monitor/threat-intel-feeds.d.ts +141 -0
  170. package/dist/monitor/threat-intel-feeds.d.ts.map +1 -0
  171. package/dist/monitor/threat-intel-feeds.js +430 -0
  172. package/dist/monitor/threat-intel-feeds.js.map +1 -0
  173. package/dist/monitor/threat-intel.d.ts +83 -0
  174. package/dist/monitor/threat-intel.d.ts.map +1 -0
  175. package/dist/monitor/threat-intel.js +215 -0
  176. package/dist/monitor/threat-intel.js.map +1 -0
  177. package/dist/monitor/types.d.ts +65 -0
  178. package/dist/monitor/types.d.ts.map +1 -0
  179. package/dist/monitor/types.js +20 -0
  180. package/dist/monitor/types.js.map +1 -0
  181. package/dist/rules/index.d.ts +115 -0
  182. package/dist/rules/index.d.ts.map +1 -0
  183. package/dist/rules/index.js +244 -0
  184. package/dist/rules/index.js.map +1 -0
  185. package/dist/rules/rule-loader.d.ts +54 -0
  186. package/dist/rules/rule-loader.d.ts.map +1 -0
  187. package/dist/rules/rule-loader.js +167 -0
  188. package/dist/rules/rule-loader.js.map +1 -0
  189. package/dist/rules/sigma-matcher.d.ts +40 -0
  190. package/dist/rules/sigma-matcher.d.ts.map +1 -0
  191. package/dist/rules/sigma-matcher.js +447 -0
  192. package/dist/rules/sigma-matcher.js.map +1 -0
  193. package/dist/rules/sigma-parser.d.ts +36 -0
  194. package/dist/rules/sigma-parser.d.ts.map +1 -0
  195. package/dist/rules/sigma-parser.js +180 -0
  196. package/dist/rules/sigma-parser.js.map +1 -0
  197. package/dist/rules/types.d.ts +112 -0
  198. package/dist/rules/types.d.ts.map +1 -0
  199. package/dist/rules/types.js +11 -0
  200. package/dist/rules/types.js.map +1 -0
  201. package/dist/rules/yara-scanner.d.ts +103 -0
  202. package/dist/rules/yara-scanner.d.ts.map +1 -0
  203. package/dist/rules/yara-scanner.js +421 -0
  204. package/dist/rules/yara-scanner.js.map +1 -0
  205. package/dist/scoring/achievements.d.ts +76 -0
  206. package/dist/scoring/achievements.d.ts.map +1 -0
  207. package/dist/scoring/achievements.js +211 -0
  208. package/dist/scoring/achievements.js.map +1 -0
  209. package/dist/scoring/index.d.ts +3 -0
  210. package/dist/scoring/index.d.ts.map +1 -0
  211. package/dist/scoring/index.js +3 -0
  212. package/dist/scoring/index.js.map +1 -0
  213. package/dist/scoring/security-score.d.ts +60 -0
  214. package/dist/scoring/security-score.d.ts.map +1 -0
  215. package/dist/scoring/security-score.js +211 -0
  216. package/dist/scoring/security-score.js.map +1 -0
  217. package/dist/types.d.ts +71 -0
  218. package/dist/types.d.ts.map +1 -0
  219. package/dist/types.js +8 -0
  220. package/dist/types.js.map +1 -0
  221. package/dist/utils/index.d.ts +10 -0
  222. package/dist/utils/index.d.ts.map +1 -0
  223. package/dist/utils/index.js +9 -0
  224. package/dist/utils/index.js.map +1 -0
  225. package/dist/utils/logger.d.ts +38 -0
  226. package/dist/utils/logger.d.ts.map +1 -0
  227. package/dist/utils/logger.js +71 -0
  228. package/dist/utils/logger.js.map +1 -0
  229. package/dist/utils/validation.d.ts +35 -0
  230. package/dist/utils/validation.d.ts.map +1 -0
  231. package/dist/utils/validation.js +56 -0
  232. package/dist/utils/validation.js.map +1 -0
  233. package/package.json +60 -0
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Abstract base class for security tool adapters
3
+ * 安全工具對接器抽象基底類別
4
+ *
5
+ * Provides shared functionality for all adapters including configuration
6
+ * management, logging, and standard alert-to-SecurityEvent conversion.
7
+ * 為所有對接器提供共用功能,包括配置管理、日誌記錄和標準
8
+ * 告警到 SecurityEvent 的轉換。
9
+ *
10
+ * @module @panguard-ai/core/adapters/base-adapter
11
+ */
12
+ import { randomUUID } from 'node:crypto';
13
+ import os from 'node:os';
14
+ import { createLogger } from '../utils/logger.js';
15
+ /**
16
+ * Map a severity string to the standard Severity type
17
+ * 將嚴重等級字串映射為標準 Severity 型別
18
+ *
19
+ * Handles common severity labels from various security tools and normalizes
20
+ * them into the five-level Severity scale used throughout Panguard.
21
+ * 處理來自各種安全工具的常見嚴重等級標籤,並將其正規化為
22
+ * Panguard 中使用的五級 Severity 量表。
23
+ *
24
+ * @param severity - Raw severity string from the adapter / 來自對接器的原始嚴重等級字串
25
+ * @returns Normalized Severity value / 正規化的 Severity 值
26
+ */
27
+ export function mapSeverity(severity) {
28
+ const normalized = severity.toLowerCase().trim();
29
+ switch (normalized) {
30
+ case 'critical':
31
+ case 'fatal':
32
+ case 'emergency':
33
+ case '5':
34
+ return 'critical';
35
+ case 'high':
36
+ case 'severe':
37
+ case 'major':
38
+ case '4':
39
+ return 'high';
40
+ case 'medium':
41
+ case 'moderate':
42
+ case 'warning':
43
+ case 'warn':
44
+ case '3':
45
+ return 'medium';
46
+ case 'low':
47
+ case 'minor':
48
+ case '2':
49
+ return 'low';
50
+ case 'info':
51
+ case 'informational':
52
+ case 'notice':
53
+ case 'debug':
54
+ case '1':
55
+ case '0':
56
+ return 'info';
57
+ default:
58
+ return 'info';
59
+ }
60
+ }
61
+ /**
62
+ * Map an adapter source string to the standard EventSource type
63
+ * 將對接器來源字串映射為標準 EventSource 型別
64
+ *
65
+ * @param source - Raw source string from the adapter / 來自對接器的原始來源字串
66
+ * @returns Normalized EventSource value / 正規化的 EventSource 值
67
+ */
68
+ export function mapEventSource(source) {
69
+ const normalized = source.toLowerCase().trim();
70
+ if (normalized.includes('falco')) {
71
+ return 'falco';
72
+ }
73
+ if (normalized.includes('suricata')) {
74
+ return 'suricata';
75
+ }
76
+ if (normalized.includes('syslog')) {
77
+ return 'syslog';
78
+ }
79
+ if (normalized.includes('network') || normalized.includes('wazuh')) {
80
+ return 'network';
81
+ }
82
+ if (normalized.includes('process')) {
83
+ return 'process';
84
+ }
85
+ if (normalized.includes('file')) {
86
+ return 'file';
87
+ }
88
+ // Default: Windows events for Defender, syslog for others
89
+ // 預設:Defender 使用 windows_event,其他使用 syslog
90
+ if (normalized.includes('defender') || normalized.includes('windows')) {
91
+ return 'windows_event';
92
+ }
93
+ return 'syslog';
94
+ }
95
+ /**
96
+ * Abstract base adapter providing shared implementation for security adapters
97
+ * 提供安全對接器共用實作的抽象基底對接器
98
+ *
99
+ * Subclasses must implement:
100
+ * - `isAvailable()`: Check if the underlying tool is reachable
101
+ * - `getAlerts(since?)`: Retrieve alerts from the underlying tool
102
+ *
103
+ * 子類別必須實作:
104
+ * - `isAvailable()`:檢查底層工具是否可連線
105
+ * - `getAlerts(since?)`:從底層工具取得告警
106
+ */
107
+ export class BaseAdapter {
108
+ /**
109
+ * Logger instance scoped to this adapter
110
+ * 範圍限定於此對接器的日誌記錄器實例
111
+ */
112
+ logger;
113
+ /**
114
+ * Adapter configuration
115
+ * 對接器配置
116
+ */
117
+ config;
118
+ /**
119
+ * Create a new BaseAdapter instance
120
+ * 建立新的 BaseAdapter 實例
121
+ *
122
+ * @param moduleName - Logger module name / 日誌記錄器模組名稱
123
+ * @param config - Adapter configuration / 對接器配置
124
+ */
125
+ constructor(moduleName, config) {
126
+ this.logger = createLogger(moduleName);
127
+ this.config = config;
128
+ }
129
+ /**
130
+ * Convert adapter alerts to standardized SecurityEvent format
131
+ * 將對接器告警轉換為標準化的 SecurityEvent 格式
132
+ *
133
+ * Uses shared mapping logic for severity and event source normalization.
134
+ * The host field defaults to the current system hostname.
135
+ * 使用共用映射邏輯進行嚴重等級和事件來源正規化。
136
+ * host 欄位預設為目前系統主機名稱。
137
+ *
138
+ * @param alerts - Array of adapter alerts to convert / 要轉換的對接器告警陣列
139
+ * @returns Array of SecurityEvent instances / SecurityEvent 實例陣列
140
+ */
141
+ toSecurityEvents(alerts) {
142
+ return alerts.map((alert) => ({
143
+ id: alert.id || randomUUID(),
144
+ timestamp: new Date(alert.timestamp),
145
+ source: mapEventSource(alert.source),
146
+ severity: mapSeverity(alert.severity),
147
+ category: `adapter/${alert.source}`,
148
+ description: `[${alert.title}] ${alert.description}`,
149
+ raw: alert.raw ?? alert,
150
+ host: os.hostname(),
151
+ metadata: {
152
+ adapterName: this.name,
153
+ adapterType: this.type,
154
+ originalSeverity: alert.severity,
155
+ alertId: alert.id,
156
+ },
157
+ }));
158
+ }
159
+ }
160
+ //# sourceMappingURL=base-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-adapter.js","sourceRoot":"","sources":["../../src/adapters/base-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Windows Defender adapter
3
+ * Windows Defender 對接器
4
+ *
5
+ * Integrates with Microsoft Windows Defender / Microsoft Defender Antivirus
6
+ * via PowerShell commands and MpCmdRun.exe for threat detection and scanning.
7
+ * Gracefully handles non-Windows platforms by returning empty results.
8
+ * 透過 PowerShell 命令和 MpCmdRun.exe 與 Microsoft Windows Defender /
9
+ * Microsoft Defender Antivirus 整合,進行威脅偵測和掃描。
10
+ * 在非 Windows 平台上優雅地處理並回傳空結果。
11
+ *
12
+ * @module @panguard-ai/core/adapters/defender-adapter
13
+ */
14
+ import type { AdapterConfig, AdapterAlert } from './types.js';
15
+ import { BaseAdapter } from './base-adapter.js';
16
+ /**
17
+ * Windows Defender security adapter
18
+ * Windows Defender 安全對接器
19
+ *
20
+ * Provides integration with Windows Defender through:
21
+ * - Threat detection retrieval via PowerShell `Get-MpThreatDetection`
22
+ * - Quick and full scans via `MpCmdRun.exe`
23
+ * - Graceful handling on non-Windows platforms
24
+ *
25
+ * 透過以下方式提供與 Windows Defender 的整合:
26
+ * - 透過 PowerShell `Get-MpThreatDetection` 取得威脅偵測
27
+ * - 透過 `MpCmdRun.exe` 進行快速和完整掃描
28
+ * - 在非 Windows 平台上優雅處理
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const adapter = new DefenderAdapter({ enabled: true });
33
+ * if (await adapter.isAvailable()) {
34
+ * const alerts = await adapter.getAlerts();
35
+ * const events = adapter.toSecurityEvents(alerts);
36
+ * }
37
+ * ```
38
+ */
39
+ export declare class DefenderAdapter extends BaseAdapter {
40
+ /** @inheritdoc */
41
+ readonly name = "Windows Defender";
42
+ /** @inheritdoc */
43
+ readonly type = "antivirus";
44
+ /**
45
+ * Create a new DefenderAdapter instance
46
+ * 建立新的 DefenderAdapter 實例
47
+ *
48
+ * @param config - Adapter configuration / 對接器配置
49
+ */
50
+ constructor(config?: AdapterConfig);
51
+ /**
52
+ * Check if Windows Defender is available on this system
53
+ * 檢查 Windows Defender 在此系統上是否可用
54
+ *
55
+ * Returns false immediately on non-Windows platforms.
56
+ * On Windows, attempts to run MpCmdRun.exe to verify availability.
57
+ * 在非 Windows 平台上立即回傳 false。
58
+ * 在 Windows 上,嘗試執行 MpCmdRun.exe 來驗證可用性。
59
+ *
60
+ * @returns True if Defender is available / 若 Defender 可用則回傳 true
61
+ */
62
+ isAvailable(): Promise<boolean>;
63
+ /**
64
+ * Retrieve threat detections from Windows Defender
65
+ * 從 Windows Defender 取得威脅偵測
66
+ *
67
+ * Uses PowerShell `Get-MpThreatDetection` to retrieve recent threats.
68
+ * Returns an empty array on non-Windows platforms or on failure.
69
+ * 使用 PowerShell `Get-MpThreatDetection` 取得最近的威脅。
70
+ * 在非 Windows 平台上或失敗時回傳空陣列。
71
+ *
72
+ * @param since - Optional cutoff date / 可選截止日期
73
+ * @returns Array of adapter alerts from Defender / 來自 Defender 的對接器告警陣列
74
+ */
75
+ getAlerts(since?: Date): Promise<AdapterAlert[]>;
76
+ /**
77
+ * Trigger a Windows Defender scan
78
+ * 觸發 Windows Defender 掃描
79
+ *
80
+ * Runs MpCmdRun.exe with the specified scan type.
81
+ * Returns false on non-Windows platforms or on failure.
82
+ * 以指定的掃描類型執行 MpCmdRun.exe。
83
+ * 在非 Windows 平台上或失敗時回傳 false。
84
+ *
85
+ * @param scanType - Scan type: 1 = Quick, 2 = Full (default: 1) / 掃描類型:1 = 快速,2 = 完整(預設:1)
86
+ * @returns True if scan started successfully / 若掃描成功啟動則回傳 true
87
+ */
88
+ triggerScan(scanType?: 1 | 2): Promise<boolean>;
89
+ }
90
+ //# sourceMappingURL=defender-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defender-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/defender-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA0EhD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,kBAAkB;IAClB,QAAQ,CAAC,IAAI,sBAAsB;IAEnC,kBAAkB;IAClB,QAAQ,CAAC,IAAI,eAAe;IAE5B;;;;;OAKG;gBACS,MAAM,GAAE,aAAiC;IAIrD;;;;;;;;;;OAUG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAkBrC;;;;;;;;;;;OAWG;IACG,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAgEtD;;;;;;;;;;;OAWG;IACG,WAAW,CAAC,QAAQ,GAAE,CAAC,GAAG,CAAK,GAAG,OAAO,CAAC,OAAO,CAAC;CAoBzD"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Windows Defender adapter
3
+ * Windows Defender 對接器
4
+ *
5
+ * Integrates with Microsoft Windows Defender / Microsoft Defender Antivirus
6
+ * via PowerShell commands and MpCmdRun.exe for threat detection and scanning.
7
+ * Gracefully handles non-Windows platforms by returning empty results.
8
+ * 透過 PowerShell 命令和 MpCmdRun.exe 與 Microsoft Windows Defender /
9
+ * Microsoft Defender Antivirus 整合,進行威脅偵測和掃描。
10
+ * 在非 Windows 平台上優雅地處理並回傳空結果。
11
+ *
12
+ * @module @panguard-ai/core/adapters/defender-adapter
13
+ */
14
+ import { execFile } from 'node:child_process';
15
+ import { randomUUID } from 'node:crypto';
16
+ import { BaseAdapter } from './base-adapter.js';
17
+ /**
18
+ * Default path to the Windows Defender command-line utility
19
+ * Windows Defender 命令列工具的預設路徑
20
+ */
21
+ const MPCMDRUN_PATH = 'C:\\Program Files\\Windows Defender\\MpCmdRun.exe';
22
+ /**
23
+ * Promisified wrapper around execFile
24
+ * execFile 的 Promise 化包裝器
25
+ *
26
+ * @param cmd - Command to execute / 要執行的命令
27
+ * @param args - Command arguments / 命令參數
28
+ * @returns Promise resolving to stdout/stderr / 解析為 stdout/stderr 的 Promise
29
+ */
30
+ function execFileAsync(cmd, args) {
31
+ return new Promise((resolve, reject) => {
32
+ execFile(cmd, args, { timeout: 60000 }, (error, stdout, stderr) => {
33
+ if (error) {
34
+ reject(error);
35
+ return;
36
+ }
37
+ resolve({ stdout: stdout ?? '', stderr: stderr ?? '' });
38
+ });
39
+ });
40
+ }
41
+ /**
42
+ * Map Windows Defender severity ID to severity string
43
+ * 將 Windows Defender 嚴重等級 ID 映射為嚴重等級字串
44
+ *
45
+ * @param severityId - Defender severity ID (1-5) / Defender 嚴重等級 ID (1-5)
46
+ * @returns Severity string for use in AdapterAlert / 用於 AdapterAlert 的嚴重等級字串
47
+ */
48
+ function mapDefenderSeverity(severityId) {
49
+ switch (severityId) {
50
+ case '5':
51
+ return 'critical';
52
+ case '4':
53
+ return 'high';
54
+ case '3':
55
+ return 'medium';
56
+ case '2':
57
+ return 'low';
58
+ case '1':
59
+ default:
60
+ return 'info';
61
+ }
62
+ }
63
+ /**
64
+ * Windows Defender security adapter
65
+ * Windows Defender 安全對接器
66
+ *
67
+ * Provides integration with Windows Defender through:
68
+ * - Threat detection retrieval via PowerShell `Get-MpThreatDetection`
69
+ * - Quick and full scans via `MpCmdRun.exe`
70
+ * - Graceful handling on non-Windows platforms
71
+ *
72
+ * 透過以下方式提供與 Windows Defender 的整合:
73
+ * - 透過 PowerShell `Get-MpThreatDetection` 取得威脅偵測
74
+ * - 透過 `MpCmdRun.exe` 進行快速和完整掃描
75
+ * - 在非 Windows 平台上優雅處理
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * const adapter = new DefenderAdapter({ enabled: true });
80
+ * if (await adapter.isAvailable()) {
81
+ * const alerts = await adapter.getAlerts();
82
+ * const events = adapter.toSecurityEvents(alerts);
83
+ * }
84
+ * ```
85
+ */
86
+ export class DefenderAdapter extends BaseAdapter {
87
+ /** @inheritdoc */
88
+ name = 'Windows Defender';
89
+ /** @inheritdoc */
90
+ type = 'antivirus';
91
+ /**
92
+ * Create a new DefenderAdapter instance
93
+ * 建立新的 DefenderAdapter 實例
94
+ *
95
+ * @param config - Adapter configuration / 對接器配置
96
+ */
97
+ constructor(config = { enabled: true }) {
98
+ super('adapter-defender', config);
99
+ }
100
+ /**
101
+ * Check if Windows Defender is available on this system
102
+ * 檢查 Windows Defender 在此系統上是否可用
103
+ *
104
+ * Returns false immediately on non-Windows platforms.
105
+ * On Windows, attempts to run MpCmdRun.exe to verify availability.
106
+ * 在非 Windows 平台上立即回傳 false。
107
+ * 在 Windows 上,嘗試執行 MpCmdRun.exe 來驗證可用性。
108
+ *
109
+ * @returns True if Defender is available / 若 Defender 可用則回傳 true
110
+ */
111
+ async isAvailable() {
112
+ if (process.platform !== 'win32') {
113
+ this.logger.debug('Not a Windows platform, Defender unavailable');
114
+ return false;
115
+ }
116
+ try {
117
+ await execFileAsync(MPCMDRUN_PATH, ['-h']);
118
+ this.logger.info('Windows Defender is available');
119
+ return true;
120
+ }
121
+ catch (err) {
122
+ this.logger.warn('Windows Defender MpCmdRun.exe not accessible', {
123
+ error: err instanceof Error ? err.message : String(err),
124
+ });
125
+ return false;
126
+ }
127
+ }
128
+ /**
129
+ * Retrieve threat detections from Windows Defender
130
+ * 從 Windows Defender 取得威脅偵測
131
+ *
132
+ * Uses PowerShell `Get-MpThreatDetection` to retrieve recent threats.
133
+ * Returns an empty array on non-Windows platforms or on failure.
134
+ * 使用 PowerShell `Get-MpThreatDetection` 取得最近的威脅。
135
+ * 在非 Windows 平台上或失敗時回傳空陣列。
136
+ *
137
+ * @param since - Optional cutoff date / 可選截止日期
138
+ * @returns Array of adapter alerts from Defender / 來自 Defender 的對接器告警陣列
139
+ */
140
+ async getAlerts(since) {
141
+ if (process.platform !== 'win32') {
142
+ return [];
143
+ }
144
+ try {
145
+ const psCommand = 'Get-MpThreatDetection | ConvertTo-Json -Depth 3';
146
+ const { stdout } = await execFileAsync('powershell', [
147
+ '-NoProfile',
148
+ '-NonInteractive',
149
+ '-Command',
150
+ psCommand,
151
+ ]);
152
+ if (!stdout.trim()) {
153
+ this.logger.debug('No threat detections returned from Defender');
154
+ return [];
155
+ }
156
+ const parsed = JSON.parse(stdout);
157
+ const threats = Array.isArray(parsed) ? parsed : [parsed];
158
+ const alerts = [];
159
+ for (const threat of threats) {
160
+ const detectionTime = threat.initialDetectionTime || new Date().toISOString();
161
+ // Filter by since date if provided / 若提供截止日期則過濾
162
+ if (since) {
163
+ const detectionDate = new Date(detectionTime);
164
+ if (detectionDate < since) {
165
+ continue;
166
+ }
167
+ }
168
+ alerts.push({
169
+ id: threat.detectionId || randomUUID(),
170
+ timestamp: detectionTime,
171
+ severity: mapDefenderSeverity(threat.severityId || '1'),
172
+ title: `Defender Threat: ${threat.threatName || 'Unknown'}`,
173
+ description: [
174
+ `Threat: ${threat.threatName || 'Unknown'}`,
175
+ `Action: ${threat.actionSuccess || 'Unknown'}`,
176
+ `Resources: ${threat.resources || 'N/A'}`,
177
+ ].join(' | '),
178
+ source: 'defender',
179
+ raw: threat,
180
+ });
181
+ }
182
+ this.logger.info(`Retrieved ${alerts.length} alerts from Defender`, {
183
+ total: threats.length,
184
+ filtered: alerts.length,
185
+ });
186
+ return alerts;
187
+ }
188
+ catch (err) {
189
+ this.logger.warn('Failed to retrieve Defender threat detections', {
190
+ error: err instanceof Error ? err.message : String(err),
191
+ });
192
+ return [];
193
+ }
194
+ }
195
+ /**
196
+ * Trigger a Windows Defender scan
197
+ * 觸發 Windows Defender 掃描
198
+ *
199
+ * Runs MpCmdRun.exe with the specified scan type.
200
+ * Returns false on non-Windows platforms or on failure.
201
+ * 以指定的掃描類型執行 MpCmdRun.exe。
202
+ * 在非 Windows 平台上或失敗時回傳 false。
203
+ *
204
+ * @param scanType - Scan type: 1 = Quick, 2 = Full (default: 1) / 掃描類型:1 = 快速,2 = 完整(預設:1)
205
+ * @returns True if scan started successfully / 若掃描成功啟動則回傳 true
206
+ */
207
+ async triggerScan(scanType = 1) {
208
+ if (process.platform !== 'win32') {
209
+ this.logger.warn('Cannot trigger scan on non-Windows platform');
210
+ return false;
211
+ }
212
+ const scanTypeLabel = scanType === 1 ? 'Quick' : 'Full';
213
+ this.logger.info(`Triggering ${scanTypeLabel} scan`);
214
+ try {
215
+ await execFileAsync(MPCMDRUN_PATH, ['-Scan', '-ScanType', String(scanType)]);
216
+ this.logger.info(`${scanTypeLabel} scan completed successfully`);
217
+ return true;
218
+ }
219
+ catch (err) {
220
+ this.logger.error(`${scanTypeLabel} scan failed`, {
221
+ error: err instanceof Error ? err.message : String(err),
222
+ });
223
+ return false;
224
+ }
225
+ }
226
+ }
227
+ //# sourceMappingURL=defender-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defender-adapter.js","sourceRoot":"","sources":["../../src/adapters/defender-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Security Tool Adapters
3
+ * 資安工具對接器
4
+ *
5
+ * Integrates with existing security tools such as Windows Defender,
6
+ * Wazuh, and syslog-based systems. Provides a unified adapter interface,
7
+ * an auto-detection registry, and standard alert-to-SecurityEvent conversion.
8
+ * 與現有資安工具整合,如 Windows Defender、Wazuh 和基於 syslog 的系統。
9
+ * 提供統一的對接器介面、自動偵測註冊表和標準告警到 SecurityEvent 的轉換。
10
+ *
11
+ * @module @panguard-ai/core/adapters
12
+ */
13
+ /** Adapters module version / 對接器模組版本 */
14
+ export declare const ADAPTERS_VERSION = "0.1.0";
15
+ export type { AdapterConfig, AdapterAlert, SecurityAdapter } from './types.js';
16
+ export { BaseAdapter, mapSeverity, mapEventSource } from './base-adapter.js';
17
+ export { DefenderAdapter } from './defender-adapter.js';
18
+ export { WazuhAdapter } from './wazuh-adapter.js';
19
+ export { SyslogAdapter, parseSyslogMessage } from './syslog-adapter.js';
20
+ export type { SyslogAlertCallback } from './syslog-adapter.js';
21
+ export { AdapterRegistry } from './adapter-registry.js';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,wCAAwC;AACxC,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAGxC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG/E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG7E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Security Tool Adapters
3
+ * 資安工具對接器
4
+ *
5
+ * Integrates with existing security tools such as Windows Defender,
6
+ * Wazuh, and syslog-based systems. Provides a unified adapter interface,
7
+ * an auto-detection registry, and standard alert-to-SecurityEvent conversion.
8
+ * 與現有資安工具整合,如 Windows Defender、Wazuh 和基於 syslog 的系統。
9
+ * 提供統一的對接器介面、自動偵測註冊表和標準告警到 SecurityEvent 的轉換。
10
+ *
11
+ * @module @panguard-ai/core/adapters
12
+ */
13
+ /** Adapters module version / 對接器模組版本 */
14
+ export const ADAPTERS_VERSION = '0.1.0';
15
+ // Base adapter / 基底對接器
16
+ export { BaseAdapter, mapSeverity, mapEventSource } from './base-adapter.js';
17
+ // Concrete adapters / 具體對接器
18
+ export { DefenderAdapter } from './defender-adapter.js';
19
+ export { WazuhAdapter } from './wazuh-adapter.js';
20
+ export { SyslogAdapter, parseSyslogMessage } from './syslog-adapter.js';
21
+ // Registry / 註冊表
22
+ export { AdapterRegistry } from './adapter-registry.js';
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,wCAAwC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAKxC,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE7E,4BAA4B;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGxE,iBAAiB;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}