@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,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":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;GAGG;AACH,MAAM,aAAa,GAAG,mDAAmD,CAAC;AAE1E;;;;;;;GAOG;AACH,SAAS,aAAa,CAAC,GAAW,EAAE,IAAc;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAChE,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAyBD;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,UAAkB;IAC7C,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,GAAG;YACN,OAAO,UAAU,CAAC;QACpB,KAAK,GAAG;YACN,OAAO,MAAM,CAAC;QAChB,KAAK,GAAG;YACN,OAAO,QAAQ,CAAC;QAClB,KAAK,GAAG;YACN,OAAO,KAAK,CAAC;QACf,KAAK,GAAG,CAAC;QACT;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9C,kBAAkB;IACT,IAAI,GAAG,kBAAkB,CAAC;IAEnC,kBAAkB;IACT,IAAI,GAAG,WAAW,CAAC;IAE5B;;;;;OAKG;IACH,YAAY,SAAwB,EAAE,OAAO,EAAE,IAAI,EAAE;QACnD,KAAK,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE;gBAC/D,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,SAAS,CAAC,KAAY;QAC1B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,iDAAiD,CAAC;YACpE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE;gBACnD,YAAY;gBACZ,iBAAiB;gBACjB,UAAU;gBACV,SAAS;aACV,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBACjE,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,MAAM,GAAsC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACrE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAE1D,MAAM,MAAM,GAAmB,EAAE,CAAC;YAElC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,aAAa,GAAG,MAAM,CAAC,oBAAoB,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAE9E,gDAAgD;gBAChD,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC9C,IAAI,aAAa,GAAG,KAAK,EAAE,CAAC;wBAC1B,SAAS;oBACX,CAAC;gBACH,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,MAAM,CAAC,WAAW,IAAI,UAAU,EAAE;oBACtC,SAAS,EAAE,aAAa;oBACxB,QAAQ,EAAE,mBAAmB,CAAC,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC;oBACvD,KAAK,EAAE,oBAAoB,MAAM,CAAC,UAAU,IAAI,SAAS,EAAE;oBAC3D,WAAW,EAAE;wBACX,WAAW,MAAM,CAAC,UAAU,IAAI,SAAS,EAAE;wBAC3C,WAAW,MAAM,CAAC,aAAa,IAAI,SAAS,EAAE;wBAC9C,cAAc,MAAM,CAAC,SAAS,IAAI,KAAK,EAAE;qBAC1C,CAAC,IAAI,CAAC,KAAK,CAAC;oBACb,MAAM,EAAE,UAAU;oBAClB,GAAG,EAAE,MAAM;iBACZ,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,uBAAuB,EAAE;gBAClE,KAAK,EAAE,OAAO,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,MAAM;aACxB,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+CAA+C,EAAE;gBAChE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,WAAW,CAAC,WAAkB,CAAC;QACnC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,aAAa,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,aAAa,OAAO,CAAC,CAAC;QAErD,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC7E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,8BAA8B,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,cAAc,EAAE;gBAChD,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
|
@@ -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"}
|