@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.
- package/dist/adapters/adapter-registry.d.ts +150 -0
- package/dist/adapters/adapter-registry.d.ts.map +1 -0
- package/dist/adapters/adapter-registry.js +271 -0
- package/dist/adapters/adapter-registry.js.map +1 -0
- package/dist/adapters/base-adapter.d.ts +101 -0
- package/dist/adapters/base-adapter.d.ts.map +1 -0
- package/dist/adapters/base-adapter.js +160 -0
- package/dist/adapters/base-adapter.js.map +1 -0
- package/dist/adapters/defender-adapter.d.ts +90 -0
- package/dist/adapters/defender-adapter.d.ts.map +1 -0
- package/dist/adapters/defender-adapter.js +227 -0
- package/dist/adapters/defender-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +22 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +23 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/syslog-adapter.d.ts +207 -0
- package/dist/adapters/syslog-adapter.d.ts.map +1 -0
- package/dist/adapters/syslog-adapter.js +432 -0
- package/dist/adapters/syslog-adapter.js.map +1 -0
- package/dist/adapters/types.d.ts +135 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +13 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/wazuh-adapter.d.ts +120 -0
- package/dist/adapters/wazuh-adapter.d.ts.map +1 -0
- package/dist/adapters/wazuh-adapter.js +266 -0
- package/dist/adapters/wazuh-adapter.js.map +1 -0
- package/dist/ai/claude-provider.d.ts +66 -0
- package/dist/ai/claude-provider.d.ts.map +1 -0
- package/dist/ai/claude-provider.js +166 -0
- package/dist/ai/claude-provider.js.map +1 -0
- package/dist/ai/funnel-router.d.ts +75 -0
- package/dist/ai/funnel-router.d.ts.map +1 -0
- package/dist/ai/funnel-router.js +173 -0
- package/dist/ai/funnel-router.js.map +1 -0
- package/dist/ai/index.d.ts +77 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +95 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/ollama-provider.d.ts +73 -0
- package/dist/ai/ollama-provider.d.ts.map +1 -0
- package/dist/ai/ollama-provider.js +200 -0
- package/dist/ai/ollama-provider.js.map +1 -0
- package/dist/ai/openai-provider.d.ts +70 -0
- package/dist/ai/openai-provider.d.ts.map +1 -0
- package/dist/ai/openai-provider.js +175 -0
- package/dist/ai/openai-provider.js.map +1 -0
- package/dist/ai/prompts/event-classifier.d.ts +25 -0
- package/dist/ai/prompts/event-classifier.d.ts.map +1 -0
- package/dist/ai/prompts/event-classifier.js +94 -0
- package/dist/ai/prompts/event-classifier.js.map +1 -0
- package/dist/ai/prompts/index.d.ts +13 -0
- package/dist/ai/prompts/index.d.ts.map +1 -0
- package/dist/ai/prompts/index.js +13 -0
- package/dist/ai/prompts/index.js.map +1 -0
- package/dist/ai/prompts/report-generator.d.ts +25 -0
- package/dist/ai/prompts/report-generator.d.ts.map +1 -0
- package/dist/ai/prompts/report-generator.js +131 -0
- package/dist/ai/prompts/report-generator.js.map +1 -0
- package/dist/ai/prompts/threat-analyzer.d.ts +26 -0
- package/dist/ai/prompts/threat-analyzer.d.ts.map +1 -0
- package/dist/ai/prompts/threat-analyzer.js +75 -0
- package/dist/ai/prompts/threat-analyzer.js.map +1 -0
- package/dist/ai/provider-base.d.ts +100 -0
- package/dist/ai/provider-base.d.ts.map +1 -0
- package/dist/ai/provider-base.js +166 -0
- package/dist/ai/provider-base.js.map +1 -0
- package/dist/ai/response-parser.d.ts +36 -0
- package/dist/ai/response-parser.d.ts.map +1 -0
- package/dist/ai/response-parser.js +195 -0
- package/dist/ai/response-parser.js.map +1 -0
- package/dist/ai/token-tracker.d.ts +72 -0
- package/dist/ai/token-tracker.d.ts.map +1 -0
- package/dist/ai/token-tracker.js +145 -0
- package/dist/ai/token-tracker.js.map +1 -0
- package/dist/ai/types.d.ts +138 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +12 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/cli/index.d.ts +146 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +515 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/prompts.d.ts +58 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +327 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/cli/wizard.d.ts +58 -0
- package/dist/cli/wizard.d.ts.map +1 -0
- package/dist/cli/wizard.js +200 -0
- package/dist/cli/wizard.js.map +1 -0
- package/dist/discovery/firewall-checker.d.ts +28 -0
- package/dist/discovery/firewall-checker.d.ts.map +1 -0
- package/dist/discovery/firewall-checker.js +379 -0
- package/dist/discovery/firewall-checker.js.map +1 -0
- package/dist/discovery/index.d.ts +23 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +29 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/network-scanner.d.ts +60 -0
- package/dist/discovery/network-scanner.d.ts.map +1 -0
- package/dist/discovery/network-scanner.js +640 -0
- package/dist/discovery/network-scanner.js.map +1 -0
- package/dist/discovery/os-detector.d.ts +24 -0
- package/dist/discovery/os-detector.d.ts.map +1 -0
- package/dist/discovery/os-detector.js +253 -0
- package/dist/discovery/os-detector.js.map +1 -0
- package/dist/discovery/osquery-provider.d.ts +127 -0
- package/dist/discovery/osquery-provider.d.ts.map +1 -0
- package/dist/discovery/osquery-provider.js +214 -0
- package/dist/discovery/osquery-provider.js.map +1 -0
- package/dist/discovery/risk-scorer.d.ts +66 -0
- package/dist/discovery/risk-scorer.d.ts.map +1 -0
- package/dist/discovery/risk-scorer.js +294 -0
- package/dist/discovery/risk-scorer.js.map +1 -0
- package/dist/discovery/security-tools.d.ts +31 -0
- package/dist/discovery/security-tools.d.ts.map +1 -0
- package/dist/discovery/security-tools.js +346 -0
- package/dist/discovery/security-tools.js.map +1 -0
- package/dist/discovery/service-detector.d.ts +28 -0
- package/dist/discovery/service-detector.d.ts.map +1 -0
- package/dist/discovery/service-detector.js +300 -0
- package/dist/discovery/service-detector.js.map +1 -0
- package/dist/discovery/types.d.ts +502 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +12 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/discovery/user-auditor.d.ts +28 -0
- package/dist/discovery/user-auditor.d.ts.map +1 -0
- package/dist/discovery/user-auditor.js +385 -0
- package/dist/discovery/user-auditor.js.map +1 -0
- package/dist/i18n/config.d.ts +45 -0
- package/dist/i18n/config.d.ts.map +1 -0
- package/dist/i18n/config.js +135 -0
- package/dist/i18n/config.js.map +1 -0
- package/dist/i18n/index.d.ts +8 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +8 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/monitor/event-normalizer.d.ts +102 -0
- package/dist/monitor/event-normalizer.d.ts.map +1 -0
- package/dist/monitor/event-normalizer.js +195 -0
- package/dist/monitor/event-normalizer.js.map +1 -0
- package/dist/monitor/file-monitor.d.ts +90 -0
- package/dist/monitor/file-monitor.d.ts.map +1 -0
- package/dist/monitor/file-monitor.js +222 -0
- package/dist/monitor/file-monitor.js.map +1 -0
- package/dist/monitor/index.d.ts +147 -0
- package/dist/monitor/index.d.ts.map +1 -0
- package/dist/monitor/index.js +293 -0
- package/dist/monitor/index.js.map +1 -0
- package/dist/monitor/log-monitor.d.ts +102 -0
- package/dist/monitor/log-monitor.d.ts.map +1 -0
- package/dist/monitor/log-monitor.js +245 -0
- package/dist/monitor/log-monitor.js.map +1 -0
- package/dist/monitor/network-monitor.d.ts +103 -0
- package/dist/monitor/network-monitor.d.ts.map +1 -0
- package/dist/monitor/network-monitor.js +336 -0
- package/dist/monitor/network-monitor.js.map +1 -0
- package/dist/monitor/process-monitor.d.ts +108 -0
- package/dist/monitor/process-monitor.d.ts.map +1 -0
- package/dist/monitor/process-monitor.js +245 -0
- package/dist/monitor/process-monitor.js.map +1 -0
- package/dist/monitor/threat-intel-feeds.d.ts +141 -0
- package/dist/monitor/threat-intel-feeds.d.ts.map +1 -0
- package/dist/monitor/threat-intel-feeds.js +430 -0
- package/dist/monitor/threat-intel-feeds.js.map +1 -0
- package/dist/monitor/threat-intel.d.ts +83 -0
- package/dist/monitor/threat-intel.d.ts.map +1 -0
- package/dist/monitor/threat-intel.js +215 -0
- package/dist/monitor/threat-intel.js.map +1 -0
- package/dist/monitor/types.d.ts +65 -0
- package/dist/monitor/types.d.ts.map +1 -0
- package/dist/monitor/types.js +20 -0
- package/dist/monitor/types.js.map +1 -0
- package/dist/rules/index.d.ts +115 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +244 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/rule-loader.d.ts +54 -0
- package/dist/rules/rule-loader.d.ts.map +1 -0
- package/dist/rules/rule-loader.js +167 -0
- package/dist/rules/rule-loader.js.map +1 -0
- package/dist/rules/sigma-matcher.d.ts +40 -0
- package/dist/rules/sigma-matcher.d.ts.map +1 -0
- package/dist/rules/sigma-matcher.js +447 -0
- package/dist/rules/sigma-matcher.js.map +1 -0
- package/dist/rules/sigma-parser.d.ts +36 -0
- package/dist/rules/sigma-parser.d.ts.map +1 -0
- package/dist/rules/sigma-parser.js +180 -0
- package/dist/rules/sigma-parser.js.map +1 -0
- package/dist/rules/types.d.ts +112 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +11 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/rules/yara-scanner.d.ts +103 -0
- package/dist/rules/yara-scanner.d.ts.map +1 -0
- package/dist/rules/yara-scanner.js +421 -0
- package/dist/rules/yara-scanner.js.map +1 -0
- package/dist/scoring/achievements.d.ts +76 -0
- package/dist/scoring/achievements.d.ts.map +1 -0
- package/dist/scoring/achievements.js +211 -0
- package/dist/scoring/achievements.js.map +1 -0
- package/dist/scoring/index.d.ts +3 -0
- package/dist/scoring/index.d.ts.map +1 -0
- package/dist/scoring/index.js +3 -0
- package/dist/scoring/index.js.map +1 -0
- package/dist/scoring/security-score.d.ts +60 -0
- package/dist/scoring/security-score.d.ts.map +1 -0
- package/dist/scoring/security-score.js +211 -0
- package/dist/scoring/security-score.js.map +1 -0
- package/dist/types.d.ts +71 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +38 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +71 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validation.d.ts +35 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +56 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security adapter registry for auto-detection and management
|
|
3
|
+
* 安全對接器註冊表,用於自動偵測和管理
|
|
4
|
+
*
|
|
5
|
+
* Provides centralized management of security tool adapters, including
|
|
6
|
+
* manual registration, auto-detection from discovery results, and
|
|
7
|
+
* unified alert collection across all registered adapters.
|
|
8
|
+
* 提供安全工具對接器的集中管理,包括手動註冊、從偵察結果自動偵測,
|
|
9
|
+
* 以及跨所有已註冊對接器的統一告警收集。
|
|
10
|
+
*
|
|
11
|
+
* @module @panguard-ai/core/adapters/adapter-registry
|
|
12
|
+
*/
|
|
13
|
+
import type { SecurityEvent } from '../types.js';
|
|
14
|
+
import type { DiscoveryResult } from '../discovery/types.js';
|
|
15
|
+
import type { SecurityAdapter } from './types.js';
|
|
16
|
+
/**
|
|
17
|
+
* Centralized registry for security tool adapters
|
|
18
|
+
* 安全工具對接器的集中註冊表
|
|
19
|
+
*
|
|
20
|
+
* The AdapterRegistry manages the lifecycle of security adapters:
|
|
21
|
+
* - Manual registration of custom adapters
|
|
22
|
+
* - Auto-detection of available adapters based on environment discovery
|
|
23
|
+
* - Unified alert collection from all registered adapters
|
|
24
|
+
* - Conversion of all alerts to the standardized SecurityEvent format
|
|
25
|
+
*
|
|
26
|
+
* AdapterRegistry 管理安全對接器的生命週期:
|
|
27
|
+
* - 手動註冊自訂對接器
|
|
28
|
+
* - 基於環境偵察的可用對接器自動偵測
|
|
29
|
+
* - 從所有已註冊對接器統一收集告警
|
|
30
|
+
* - 將所有告警轉換為標準化的 SecurityEvent 格式
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const registry = new AdapterRegistry();
|
|
35
|
+
*
|
|
36
|
+
* // Auto-detect adapters from discovery results / 從偵察結果自動偵測對接器
|
|
37
|
+
* await registry.autoDetect(discoveryResult);
|
|
38
|
+
*
|
|
39
|
+
* // Or register manually / 或手動註冊
|
|
40
|
+
* registry.register(new WazuhAdapter({ enabled: true, endpoint: 'https://wazuh:55000' }));
|
|
41
|
+
*
|
|
42
|
+
* // Collect alerts from all adapters / 從所有對接器收集告警
|
|
43
|
+
* const events = await registry.collectAlerts(new Date(Date.now() - 3600000));
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare class AdapterRegistry {
|
|
47
|
+
/**
|
|
48
|
+
* Map of registered adapters keyed by adapter name
|
|
49
|
+
* 以對接器名稱為鍵的已註冊對接器映射
|
|
50
|
+
*/
|
|
51
|
+
private adapters;
|
|
52
|
+
/**
|
|
53
|
+
* Create a new AdapterRegistry instance
|
|
54
|
+
* 建立新的 AdapterRegistry 實例
|
|
55
|
+
*/
|
|
56
|
+
constructor();
|
|
57
|
+
/**
|
|
58
|
+
* Register an adapter manually
|
|
59
|
+
* 手動註冊對接器
|
|
60
|
+
*
|
|
61
|
+
* Adds the adapter to the registry. If an adapter with the same name
|
|
62
|
+
* is already registered, it will be replaced.
|
|
63
|
+
* 將對接器新增到註冊表。若已有同名對接器,則會被取代。
|
|
64
|
+
*
|
|
65
|
+
* @param adapter - Security adapter to register / 要註冊的安全對接器
|
|
66
|
+
*/
|
|
67
|
+
register(adapter: SecurityAdapter): void;
|
|
68
|
+
/**
|
|
69
|
+
* Remove a registered adapter by name
|
|
70
|
+
* 依名稱移除已註冊的對接器
|
|
71
|
+
*
|
|
72
|
+
* @param name - Adapter name to remove / 要移除的對接器名稱
|
|
73
|
+
* @returns True if the adapter was removed / 若對接器已移除則回傳 true
|
|
74
|
+
*/
|
|
75
|
+
unregister(name: string): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Auto-detect and register available security adapters
|
|
78
|
+
* 自動偵測並註冊可用的安全對接器
|
|
79
|
+
*
|
|
80
|
+
* Creates adapter instances based on detected security tools from
|
|
81
|
+
* the discovery result. Each adapter is checked for availability
|
|
82
|
+
* before being registered.
|
|
83
|
+
*
|
|
84
|
+
* Default adapters checked:
|
|
85
|
+
* - Windows Defender (on Windows systems)
|
|
86
|
+
* - Wazuh (if detected in discovery results)
|
|
87
|
+
* - Syslog Receiver (always available as a generic receiver)
|
|
88
|
+
*
|
|
89
|
+
* 根據偵察結果中偵測到的安全工具建立對接器實例。
|
|
90
|
+
* 每個對接器在註冊前都會檢查可用性。
|
|
91
|
+
*
|
|
92
|
+
* 檢查的預設對接器:
|
|
93
|
+
* - Windows Defender(在 Windows 系統上)
|
|
94
|
+
* - Wazuh(若在偵察結果中偵測到)
|
|
95
|
+
* - Syslog 接收器(作為通用接收器始終可用)
|
|
96
|
+
*
|
|
97
|
+
* @param discoveryResult - Optional discovery result for context-aware detection / 可選的偵察結果,用於上下文感知偵測
|
|
98
|
+
*/
|
|
99
|
+
autoDetect(discoveryResult?: DiscoveryResult): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Get a registered adapter by name
|
|
102
|
+
* 依名稱取得已註冊的對接器
|
|
103
|
+
*
|
|
104
|
+
* @param name - Adapter name / 對接器名稱
|
|
105
|
+
* @returns The adapter instance, or undefined if not found / 對接器實例,若找不到則為 undefined
|
|
106
|
+
*/
|
|
107
|
+
getAdapter(name: string): SecurityAdapter | undefined;
|
|
108
|
+
/**
|
|
109
|
+
* Get all registered (available) adapters
|
|
110
|
+
* 取得所有已註冊(可用)的對接器
|
|
111
|
+
*
|
|
112
|
+
* @returns Array of registered security adapters / 已註冊的安全對接器陣列
|
|
113
|
+
*/
|
|
114
|
+
getAvailableAdapters(): SecurityAdapter[];
|
|
115
|
+
/**
|
|
116
|
+
* Get the names of all registered adapters
|
|
117
|
+
* 取得所有已註冊對接器的名稱
|
|
118
|
+
*
|
|
119
|
+
* @returns Array of adapter names / 對接器名稱陣列
|
|
120
|
+
*/
|
|
121
|
+
getAdapterNames(): string[];
|
|
122
|
+
/**
|
|
123
|
+
* Get the number of registered adapters
|
|
124
|
+
* 取得已註冊對接器的數量
|
|
125
|
+
*
|
|
126
|
+
* @returns Number of registered adapters / 已註冊對接器的數量
|
|
127
|
+
*/
|
|
128
|
+
get size(): number;
|
|
129
|
+
/**
|
|
130
|
+
* Collect alerts from all registered adapters and convert to SecurityEvents
|
|
131
|
+
* 從所有已註冊對接器收集告警並轉換為 SecurityEvent
|
|
132
|
+
*
|
|
133
|
+
* Iterates over all registered adapters, retrieves their alerts,
|
|
134
|
+
* converts them to the standardized SecurityEvent format, and
|
|
135
|
+
* returns a merged array. Errors from individual adapters are
|
|
136
|
+
* logged and do not prevent collection from other adapters.
|
|
137
|
+
* 遍歷所有已註冊對接器,取得其告警,轉換為標準化的 SecurityEvent 格式,
|
|
138
|
+
* 並回傳合併的陣列。個別對接器的錯誤會被記錄,不會阻止從其他對接器收集。
|
|
139
|
+
*
|
|
140
|
+
* @param since - Optional cutoff date for all adapters / 所有對接器的可選截止日期
|
|
141
|
+
* @returns Merged array of SecurityEvents from all adapters / 來自所有對接器的合併 SecurityEvent 陣列
|
|
142
|
+
*/
|
|
143
|
+
collectAlerts(since?: Date): Promise<SecurityEvent[]>;
|
|
144
|
+
/**
|
|
145
|
+
* Clear all registered adapters
|
|
146
|
+
* 清除所有已註冊的對接器
|
|
147
|
+
*/
|
|
148
|
+
clear(): void;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=adapter-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-registry.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAOlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,eAAe;IAC1B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAA2C;IAE3D;;;OAGG;;IAKH;;;;;;;;;OASG;IACH,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAWxC;;;;;;OAMG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAUjC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,UAAU,CAAC,eAAe,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAkElE;;;;;;OAMG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIrD;;;;;OAKG;IACH,oBAAoB,IAAI,eAAe,EAAE;IAIzC;;;;;OAKG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;;;;OAKG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;;;;;;;;OAaG;IACG,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA6C3D;;;OAGG;IACH,KAAK,IAAI,IAAI;CAKd"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security adapter registry for auto-detection and management
|
|
3
|
+
* 安全對接器註冊表,用於自動偵測和管理
|
|
4
|
+
*
|
|
5
|
+
* Provides centralized management of security tool adapters, including
|
|
6
|
+
* manual registration, auto-detection from discovery results, and
|
|
7
|
+
* unified alert collection across all registered adapters.
|
|
8
|
+
* 提供安全工具對接器的集中管理,包括手動註冊、從偵察結果自動偵測,
|
|
9
|
+
* 以及跨所有已註冊對接器的統一告警收集。
|
|
10
|
+
*
|
|
11
|
+
* @module @panguard-ai/core/adapters/adapter-registry
|
|
12
|
+
*/
|
|
13
|
+
import { createLogger } from '../utils/logger.js';
|
|
14
|
+
import { DefenderAdapter } from './defender-adapter.js';
|
|
15
|
+
import { WazuhAdapter } from './wazuh-adapter.js';
|
|
16
|
+
import { SyslogAdapter } from './syslog-adapter.js';
|
|
17
|
+
const logger = createLogger('adapter-registry');
|
|
18
|
+
/**
|
|
19
|
+
* Centralized registry for security tool adapters
|
|
20
|
+
* 安全工具對接器的集中註冊表
|
|
21
|
+
*
|
|
22
|
+
* The AdapterRegistry manages the lifecycle of security adapters:
|
|
23
|
+
* - Manual registration of custom adapters
|
|
24
|
+
* - Auto-detection of available adapters based on environment discovery
|
|
25
|
+
* - Unified alert collection from all registered adapters
|
|
26
|
+
* - Conversion of all alerts to the standardized SecurityEvent format
|
|
27
|
+
*
|
|
28
|
+
* AdapterRegistry 管理安全對接器的生命週期:
|
|
29
|
+
* - 手動註冊自訂對接器
|
|
30
|
+
* - 基於環境偵察的可用對接器自動偵測
|
|
31
|
+
* - 從所有已註冊對接器統一收集告警
|
|
32
|
+
* - 將所有告警轉換為標準化的 SecurityEvent 格式
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const registry = new AdapterRegistry();
|
|
37
|
+
*
|
|
38
|
+
* // Auto-detect adapters from discovery results / 從偵察結果自動偵測對接器
|
|
39
|
+
* await registry.autoDetect(discoveryResult);
|
|
40
|
+
*
|
|
41
|
+
* // Or register manually / 或手動註冊
|
|
42
|
+
* registry.register(new WazuhAdapter({ enabled: true, endpoint: 'https://wazuh:55000' }));
|
|
43
|
+
*
|
|
44
|
+
* // Collect alerts from all adapters / 從所有對接器收集告警
|
|
45
|
+
* const events = await registry.collectAlerts(new Date(Date.now() - 3600000));
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export class AdapterRegistry {
|
|
49
|
+
/**
|
|
50
|
+
* Map of registered adapters keyed by adapter name
|
|
51
|
+
* 以對接器名稱為鍵的已註冊對接器映射
|
|
52
|
+
*/
|
|
53
|
+
adapters = new Map();
|
|
54
|
+
/**
|
|
55
|
+
* Create a new AdapterRegistry instance
|
|
56
|
+
* 建立新的 AdapterRegistry 實例
|
|
57
|
+
*/
|
|
58
|
+
constructor() {
|
|
59
|
+
logger.info('AdapterRegistry initialized');
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Register an adapter manually
|
|
63
|
+
* 手動註冊對接器
|
|
64
|
+
*
|
|
65
|
+
* Adds the adapter to the registry. If an adapter with the same name
|
|
66
|
+
* is already registered, it will be replaced.
|
|
67
|
+
* 將對接器新增到註冊表。若已有同名對接器,則會被取代。
|
|
68
|
+
*
|
|
69
|
+
* @param adapter - Security adapter to register / 要註冊的安全對接器
|
|
70
|
+
*/
|
|
71
|
+
register(adapter) {
|
|
72
|
+
const existing = this.adapters.has(adapter.name);
|
|
73
|
+
this.adapters.set(adapter.name, adapter);
|
|
74
|
+
if (existing) {
|
|
75
|
+
logger.info(`Replaced existing adapter: ${adapter.name}`, { type: adapter.type });
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
logger.info(`Registered adapter: ${adapter.name}`, { type: adapter.type });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Remove a registered adapter by name
|
|
83
|
+
* 依名稱移除已註冊的對接器
|
|
84
|
+
*
|
|
85
|
+
* @param name - Adapter name to remove / 要移除的對接器名稱
|
|
86
|
+
* @returns True if the adapter was removed / 若對接器已移除則回傳 true
|
|
87
|
+
*/
|
|
88
|
+
unregister(name) {
|
|
89
|
+
const removed = this.adapters.delete(name);
|
|
90
|
+
if (removed) {
|
|
91
|
+
logger.info(`Unregistered adapter: ${name}`);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
logger.warn(`Adapter not found for removal: ${name}`);
|
|
95
|
+
}
|
|
96
|
+
return removed;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Auto-detect and register available security adapters
|
|
100
|
+
* 自動偵測並註冊可用的安全對接器
|
|
101
|
+
*
|
|
102
|
+
* Creates adapter instances based on detected security tools from
|
|
103
|
+
* the discovery result. Each adapter is checked for availability
|
|
104
|
+
* before being registered.
|
|
105
|
+
*
|
|
106
|
+
* Default adapters checked:
|
|
107
|
+
* - Windows Defender (on Windows systems)
|
|
108
|
+
* - Wazuh (if detected in discovery results)
|
|
109
|
+
* - Syslog Receiver (always available as a generic receiver)
|
|
110
|
+
*
|
|
111
|
+
* 根據偵察結果中偵測到的安全工具建立對接器實例。
|
|
112
|
+
* 每個對接器在註冊前都會檢查可用性。
|
|
113
|
+
*
|
|
114
|
+
* 檢查的預設對接器:
|
|
115
|
+
* - Windows Defender(在 Windows 系統上)
|
|
116
|
+
* - Wazuh(若在偵察結果中偵測到)
|
|
117
|
+
* - Syslog 接收器(作為通用接收器始終可用)
|
|
118
|
+
*
|
|
119
|
+
* @param discoveryResult - Optional discovery result for context-aware detection / 可選的偵察結果,用於上下文感知偵測
|
|
120
|
+
*/
|
|
121
|
+
async autoDetect(discoveryResult) {
|
|
122
|
+
logger.info('Starting adapter auto-detection');
|
|
123
|
+
const candidates = [];
|
|
124
|
+
// Always try Windows Defender / 總是嘗試 Windows Defender
|
|
125
|
+
candidates.push(new DefenderAdapter({ enabled: true }));
|
|
126
|
+
// Check discovery results for known security tools
|
|
127
|
+
// 檢查偵察結果中的已知安全工具
|
|
128
|
+
if (discoveryResult) {
|
|
129
|
+
const tools = discoveryResult.security.existingTools;
|
|
130
|
+
// Look for Wazuh in detected tools / 在偵測到的工具中尋找 Wazuh
|
|
131
|
+
const wazuhTool = tools.find((tool) => tool.name.toLowerCase().includes('wazuh') || tool.vendor.toLowerCase().includes('wazuh'));
|
|
132
|
+
if (wazuhTool) {
|
|
133
|
+
logger.info('Wazuh detected in discovery results, adding adapter');
|
|
134
|
+
candidates.push(new WazuhAdapter({ enabled: true }));
|
|
135
|
+
}
|
|
136
|
+
// Look for SIEM tools that might expose syslog
|
|
137
|
+
// 尋找可能暴露 syslog 的 SIEM 工具
|
|
138
|
+
const syslogCapable = tools.some((tool) => tool.type === 'siem' ||
|
|
139
|
+
tool.type === 'ids' ||
|
|
140
|
+
tool.name.toLowerCase().includes('syslog') ||
|
|
141
|
+
tool.name.toLowerCase().includes('rsyslog') ||
|
|
142
|
+
tool.name.toLowerCase().includes('syslog-ng'));
|
|
143
|
+
if (syslogCapable) {
|
|
144
|
+
logger.info('Syslog-capable tool detected, adding syslog adapter');
|
|
145
|
+
candidates.push(new SyslogAdapter({ enabled: true }));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Check availability for each candidate and register if available
|
|
149
|
+
// 檢查每個候選者的可用性,若可用則註冊
|
|
150
|
+
let registered = 0;
|
|
151
|
+
for (const candidate of candidates) {
|
|
152
|
+
try {
|
|
153
|
+
const available = await candidate.isAvailable();
|
|
154
|
+
if (available) {
|
|
155
|
+
this.register(candidate);
|
|
156
|
+
registered++;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
logger.debug(`Adapter not available: ${candidate.name}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
logger.warn(`Error checking adapter availability: ${candidate.name}`, {
|
|
164
|
+
error: err instanceof Error ? err.message : String(err),
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
logger.info(`Auto-detection complete: ${registered} adapters registered`, {
|
|
169
|
+
candidates: candidates.length,
|
|
170
|
+
registered,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get a registered adapter by name
|
|
175
|
+
* 依名稱取得已註冊的對接器
|
|
176
|
+
*
|
|
177
|
+
* @param name - Adapter name / 對接器名稱
|
|
178
|
+
* @returns The adapter instance, or undefined if not found / 對接器實例,若找不到則為 undefined
|
|
179
|
+
*/
|
|
180
|
+
getAdapter(name) {
|
|
181
|
+
return this.adapters.get(name);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get all registered (available) adapters
|
|
185
|
+
* 取得所有已註冊(可用)的對接器
|
|
186
|
+
*
|
|
187
|
+
* @returns Array of registered security adapters / 已註冊的安全對接器陣列
|
|
188
|
+
*/
|
|
189
|
+
getAvailableAdapters() {
|
|
190
|
+
return Array.from(this.adapters.values());
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get the names of all registered adapters
|
|
194
|
+
* 取得所有已註冊對接器的名稱
|
|
195
|
+
*
|
|
196
|
+
* @returns Array of adapter names / 對接器名稱陣列
|
|
197
|
+
*/
|
|
198
|
+
getAdapterNames() {
|
|
199
|
+
return Array.from(this.adapters.keys());
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get the number of registered adapters
|
|
203
|
+
* 取得已註冊對接器的數量
|
|
204
|
+
*
|
|
205
|
+
* @returns Number of registered adapters / 已註冊對接器的數量
|
|
206
|
+
*/
|
|
207
|
+
get size() {
|
|
208
|
+
return this.adapters.size;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Collect alerts from all registered adapters and convert to SecurityEvents
|
|
212
|
+
* 從所有已註冊對接器收集告警並轉換為 SecurityEvent
|
|
213
|
+
*
|
|
214
|
+
* Iterates over all registered adapters, retrieves their alerts,
|
|
215
|
+
* converts them to the standardized SecurityEvent format, and
|
|
216
|
+
* returns a merged array. Errors from individual adapters are
|
|
217
|
+
* logged and do not prevent collection from other adapters.
|
|
218
|
+
* 遍歷所有已註冊對接器,取得其告警,轉換為標準化的 SecurityEvent 格式,
|
|
219
|
+
* 並回傳合併的陣列。個別對接器的錯誤會被記錄,不會阻止從其他對接器收集。
|
|
220
|
+
*
|
|
221
|
+
* @param since - Optional cutoff date for all adapters / 所有對接器的可選截止日期
|
|
222
|
+
* @returns Merged array of SecurityEvents from all adapters / 來自所有對接器的合併 SecurityEvent 陣列
|
|
223
|
+
*/
|
|
224
|
+
async collectAlerts(since) {
|
|
225
|
+
const allEvents = [];
|
|
226
|
+
const adapterNames = this.getAdapterNames();
|
|
227
|
+
if (adapterNames.length === 0) {
|
|
228
|
+
logger.debug('No adapters registered, no alerts to collect');
|
|
229
|
+
return allEvents;
|
|
230
|
+
}
|
|
231
|
+
logger.info(`Collecting alerts from ${adapterNames.length} adapters`, {
|
|
232
|
+
adapters: adapterNames,
|
|
233
|
+
since: since?.toISOString(),
|
|
234
|
+
});
|
|
235
|
+
// Collect from all adapters in parallel for efficiency
|
|
236
|
+
// 為了效率,同時從所有對接器收集
|
|
237
|
+
const results = await Promise.allSettled(Array.from(this.adapters.entries()).map(async ([name, adapter]) => {
|
|
238
|
+
try {
|
|
239
|
+
const alerts = await adapter.getAlerts(since);
|
|
240
|
+
const events = adapter.toSecurityEvents(alerts);
|
|
241
|
+
logger.debug(`Collected ${events.length} events from ${name}`);
|
|
242
|
+
return events;
|
|
243
|
+
}
|
|
244
|
+
catch (err) {
|
|
245
|
+
logger.error(`Failed to collect alerts from ${name}`, {
|
|
246
|
+
error: err instanceof Error ? err.message : String(err),
|
|
247
|
+
});
|
|
248
|
+
return [];
|
|
249
|
+
}
|
|
250
|
+
}));
|
|
251
|
+
for (const result of results) {
|
|
252
|
+
if (result.status === 'fulfilled') {
|
|
253
|
+
allEvents.push(...result.value);
|
|
254
|
+
}
|
|
255
|
+
// Rejected promises are already handled in the catch above
|
|
256
|
+
// 被拒絕的 Promise 已在上面的 catch 中處理
|
|
257
|
+
}
|
|
258
|
+
logger.info(`Collected ${allEvents.length} total events from all adapters`);
|
|
259
|
+
return allEvents;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Clear all registered adapters
|
|
263
|
+
* 清除所有已註冊的對接器
|
|
264
|
+
*/
|
|
265
|
+
clear() {
|
|
266
|
+
const count = this.adapters.size;
|
|
267
|
+
this.adapters.clear();
|
|
268
|
+
logger.info(`Cleared ${count} adapters from registry`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=adapter-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-registry.js","sourceRoot":"","sources":["../../src/adapters/adapter-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
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 type { Logger } from '../utils/logger.js';
|
|
13
|
+
import type { SecurityEvent, Severity, EventSource } from '../types.js';
|
|
14
|
+
import type { AdapterConfig, AdapterAlert, SecurityAdapter } from './types.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 declare function mapSeverity(severity: string): Severity;
|
|
28
|
+
/**
|
|
29
|
+
* Map an adapter source string to the standard EventSource type
|
|
30
|
+
* 將對接器來源字串映射為標準 EventSource 型別
|
|
31
|
+
*
|
|
32
|
+
* @param source - Raw source string from the adapter / 來自對接器的原始來源字串
|
|
33
|
+
* @returns Normalized EventSource value / 正規化的 EventSource 值
|
|
34
|
+
*/
|
|
35
|
+
export declare function mapEventSource(source: string): EventSource;
|
|
36
|
+
/**
|
|
37
|
+
* Abstract base adapter providing shared implementation for security adapters
|
|
38
|
+
* 提供安全對接器共用實作的抽象基底對接器
|
|
39
|
+
*
|
|
40
|
+
* Subclasses must implement:
|
|
41
|
+
* - `isAvailable()`: Check if the underlying tool is reachable
|
|
42
|
+
* - `getAlerts(since?)`: Retrieve alerts from the underlying tool
|
|
43
|
+
*
|
|
44
|
+
* 子類別必須實作:
|
|
45
|
+
* - `isAvailable()`:檢查底層工具是否可連線
|
|
46
|
+
* - `getAlerts(since?)`:從底層工具取得告警
|
|
47
|
+
*/
|
|
48
|
+
export declare abstract class BaseAdapter implements SecurityAdapter {
|
|
49
|
+
/**
|
|
50
|
+
* Human-readable adapter name
|
|
51
|
+
* 人類可讀的對接器名稱
|
|
52
|
+
*/
|
|
53
|
+
abstract readonly name: string;
|
|
54
|
+
/**
|
|
55
|
+
* Adapter type identifier
|
|
56
|
+
* 對接器類型識別碼
|
|
57
|
+
*/
|
|
58
|
+
abstract readonly type: string;
|
|
59
|
+
/**
|
|
60
|
+
* Logger instance scoped to this adapter
|
|
61
|
+
* 範圍限定於此對接器的日誌記錄器實例
|
|
62
|
+
*/
|
|
63
|
+
protected readonly logger: Logger;
|
|
64
|
+
/**
|
|
65
|
+
* Adapter configuration
|
|
66
|
+
* 對接器配置
|
|
67
|
+
*/
|
|
68
|
+
protected readonly config: AdapterConfig;
|
|
69
|
+
/**
|
|
70
|
+
* Create a new BaseAdapter instance
|
|
71
|
+
* 建立新的 BaseAdapter 實例
|
|
72
|
+
*
|
|
73
|
+
* @param moduleName - Logger module name / 日誌記錄器模組名稱
|
|
74
|
+
* @param config - Adapter configuration / 對接器配置
|
|
75
|
+
*/
|
|
76
|
+
constructor(moduleName: string, config: AdapterConfig);
|
|
77
|
+
/**
|
|
78
|
+
* Check if the underlying security tool is available
|
|
79
|
+
* 檢查底層安全工具是否可用
|
|
80
|
+
*/
|
|
81
|
+
abstract isAvailable(): Promise<boolean>;
|
|
82
|
+
/**
|
|
83
|
+
* Retrieve alerts from the security tool
|
|
84
|
+
* 從安全工具取得告警
|
|
85
|
+
*/
|
|
86
|
+
abstract getAlerts(since?: Date): Promise<AdapterAlert[]>;
|
|
87
|
+
/**
|
|
88
|
+
* Convert adapter alerts to standardized SecurityEvent format
|
|
89
|
+
* 將對接器告警轉換為標準化的 SecurityEvent 格式
|
|
90
|
+
*
|
|
91
|
+
* Uses shared mapping logic for severity and event source normalization.
|
|
92
|
+
* The host field defaults to the current system hostname.
|
|
93
|
+
* 使用共用映射邏輯進行嚴重等級和事件來源正規化。
|
|
94
|
+
* host 欄位預設為目前系統主機名稱。
|
|
95
|
+
*
|
|
96
|
+
* @param alerts - Array of adapter alerts to convert / 要轉換的對接器告警陣列
|
|
97
|
+
* @returns Array of SecurityEvent instances / SecurityEvent 實例陣列
|
|
98
|
+
*/
|
|
99
|
+
toSecurityEvents(alerts: AdapterAlert[]): SecurityEvent[];
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=base-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/base-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE/E;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAuCtD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CA4B1D;AAED;;;;;;;;;;;GAWG;AACH,8BAAsB,WAAY,YAAW,eAAe;IAC1D;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAElC;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAEzC;;;;;;OAMG;gBACS,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;IAKrD;;;OAGG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAExC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAEzD;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE;CAkB1D"}
|