@panguard-ai/panguard-trap 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 (69) hide show
  1. package/dist/cli/index.d.ts +45 -0
  2. package/dist/cli/index.d.ts.map +1 -0
  3. package/dist/cli/index.js +298 -0
  4. package/dist/cli/index.js.map +1 -0
  5. package/dist/index.d.ts +23 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +26 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/intel/index.d.ts +38 -0
  10. package/dist/intel/index.d.ts.map +1 -0
  11. package/dist/intel/index.js +157 -0
  12. package/dist/intel/index.js.map +1 -0
  13. package/dist/profiler/attacker-profiler.d.ts +68 -0
  14. package/dist/profiler/attacker-profiler.d.ts.map +1 -0
  15. package/dist/profiler/attacker-profiler.js +316 -0
  16. package/dist/profiler/attacker-profiler.js.map +1 -0
  17. package/dist/profiler/index.d.ts +8 -0
  18. package/dist/profiler/index.d.ts.map +1 -0
  19. package/dist/profiler/index.js +8 -0
  20. package/dist/profiler/index.js.map +1 -0
  21. package/dist/services/base-service.d.ts +61 -0
  22. package/dist/services/base-service.d.ts.map +1 -0
  23. package/dist/services/base-service.js +190 -0
  24. package/dist/services/base-service.js.map +1 -0
  25. package/dist/services/generic-trap.d.ts +22 -0
  26. package/dist/services/generic-trap.d.ts.map +1 -0
  27. package/dist/services/generic-trap.js +439 -0
  28. package/dist/services/generic-trap.js.map +1 -0
  29. package/dist/services/http-trap.d.ts +36 -0
  30. package/dist/services/http-trap.d.ts.map +1 -0
  31. package/dist/services/http-trap.js +218 -0
  32. package/dist/services/http-trap.js.map +1 -0
  33. package/dist/services/index.d.ts +26 -0
  34. package/dist/services/index.d.ts.map +1 -0
  35. package/dist/services/index.js +52 -0
  36. package/dist/services/index.js.map +1 -0
  37. package/dist/services/mysql-trap.d.ts +22 -0
  38. package/dist/services/mysql-trap.d.ts.map +1 -0
  39. package/dist/services/mysql-trap.js +374 -0
  40. package/dist/services/mysql-trap.js.map +1 -0
  41. package/dist/services/rdp-trap.d.ts +21 -0
  42. package/dist/services/rdp-trap.d.ts.map +1 -0
  43. package/dist/services/rdp-trap.js +299 -0
  44. package/dist/services/rdp-trap.js.map +1 -0
  45. package/dist/services/redis-trap.d.ts +21 -0
  46. package/dist/services/redis-trap.d.ts.map +1 -0
  47. package/dist/services/redis-trap.js +321 -0
  48. package/dist/services/redis-trap.js.map +1 -0
  49. package/dist/services/smb-trap.d.ts +21 -0
  50. package/dist/services/smb-trap.d.ts.map +1 -0
  51. package/dist/services/smb-trap.js +358 -0
  52. package/dist/services/smb-trap.js.map +1 -0
  53. package/dist/services/ssh-trap.d.ts +43 -0
  54. package/dist/services/ssh-trap.d.ts.map +1 -0
  55. package/dist/services/ssh-trap.js +397 -0
  56. package/dist/services/ssh-trap.js.map +1 -0
  57. package/dist/threat-cloud-uploader.d.ts +48 -0
  58. package/dist/threat-cloud-uploader.d.ts.map +1 -0
  59. package/dist/threat-cloud-uploader.js +125 -0
  60. package/dist/threat-cloud-uploader.js.map +1 -0
  61. package/dist/trap-engine.d.ts +80 -0
  62. package/dist/trap-engine.d.ts.map +1 -0
  63. package/dist/trap-engine.js +279 -0
  64. package/dist/trap-engine.js.map +1 -0
  65. package/dist/types.d.ts +229 -0
  66. package/dist/types.d.ts.map +1 -0
  67. package/dist/types.js +89 -0
  68. package/dist/types.js.map +1 -0
  69. package/package.json +37 -0
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * PanguardTrap CLI
4
+ * PanguardTrap 命令列介面
5
+ *
6
+ * @module @panguard-ai/panguard-trap/cli
7
+ */
8
+ import type { TrapConfig, TrapServiceType, TrapStatistics } from '../types.js';
9
+ /** Available CLI commands / 可用的 CLI 命令 */
10
+ export type TrapCliCommand = 'start' | 'stop' | 'status' | 'deploy' | 'profiles' | 'intel' | 'config' | 'help';
11
+ /** CLI options / CLI 選項 */
12
+ export interface TrapCliOptions {
13
+ command: TrapCliCommand;
14
+ services?: TrapServiceType[];
15
+ port?: number;
16
+ dataDir?: string;
17
+ noCloud?: boolean;
18
+ verbose?: boolean;
19
+ }
20
+ /**
21
+ * Parse CLI arguments
22
+ * 解析 CLI 參數
23
+ */
24
+ export declare function parseCliArgs(args: string[]): TrapCliOptions;
25
+ /**
26
+ * Build trap config from CLI options
27
+ * 從 CLI 選項建立蜜罐配置
28
+ */
29
+ export declare function buildConfigFromOptions(options: TrapCliOptions): TrapConfig;
30
+ /**
31
+ * Format statistics for display
32
+ * 格式化統計資料以供顯示
33
+ */
34
+ export declare function formatStatistics(stats: TrapStatistics): string;
35
+ /**
36
+ * Get help text
37
+ * 取得說明文字
38
+ */
39
+ export declare function getHelpText(): string;
40
+ /**
41
+ * Execute CLI command
42
+ * 執行 CLI 命令
43
+ */
44
+ export declare function executeCli(args: string[]): Promise<void>;
45
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI/E,0CAA0C;AAC1C,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,QAAQ,GACR,MAAM,CAAC;AAEX,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,cAAc,CAuB3D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CAoB1E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAiD9D;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAgCpC;AAgBD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyI9D"}
@@ -0,0 +1,298 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * PanguardTrap CLI
4
+ * PanguardTrap 命令列介面
5
+ *
6
+ * @module @panguard-ai/panguard-trap/cli
7
+ */
8
+ import { DEFAULT_TRAP_CONFIG, DEFAULT_SERVICE_CONFIGS } from '../types.js';
9
+ import { TrapEngine } from '../trap-engine.js';
10
+ /**
11
+ * Parse CLI arguments
12
+ * 解析 CLI 參數
13
+ */
14
+ export function parseCliArgs(args) {
15
+ const command = args[0] || 'help';
16
+ const options = { command };
17
+ for (let i = 1; i < args.length; i++) {
18
+ const arg = args[i];
19
+ if (arg === '--services' && args[i + 1]) {
20
+ options.services = args[i + 1].split(',');
21
+ i++;
22
+ }
23
+ else if (arg === '--port' && args[i + 1]) {
24
+ options.port = parseInt(args[i + 1], 10);
25
+ i++;
26
+ }
27
+ else if (arg === '--data-dir' && args[i + 1]) {
28
+ options.dataDir = args[i + 1];
29
+ i++;
30
+ }
31
+ else if (arg === '--no-cloud') {
32
+ options.noCloud = true;
33
+ }
34
+ else if (arg === '--verbose' || arg === '-v') {
35
+ options.verbose = true;
36
+ }
37
+ }
38
+ return options;
39
+ }
40
+ /**
41
+ * Build trap config from CLI options
42
+ * 從 CLI 選項建立蜜罐配置
43
+ */
44
+ export function buildConfigFromOptions(options) {
45
+ const config = { ...DEFAULT_TRAP_CONFIG };
46
+ if (options.dataDir) {
47
+ config.dataDir = options.dataDir;
48
+ }
49
+ if (options.noCloud) {
50
+ config.feedThreatCloud = false;
51
+ }
52
+ // Enable only specified services
53
+ if (options.services && options.services.length > 0) {
54
+ config.services = options.services.map((type) => ({
55
+ ...DEFAULT_SERVICE_CONFIGS[type],
56
+ enabled: true,
57
+ }));
58
+ }
59
+ return config;
60
+ }
61
+ /**
62
+ * Format statistics for display
63
+ * 格式化統計資料以供顯示
64
+ */
65
+ export function formatStatistics(stats) {
66
+ const lines = [];
67
+ lines.push('=== PanguardTrap Status / PanguardTrap 狀態 ===');
68
+ lines.push('');
69
+ lines.push(`Total Sessions / 總連線數: ${stats.totalSessions}`);
70
+ lines.push(`Active Sessions / 活動中連線: ${stats.activeSessions}`);
71
+ lines.push(`Unique Source IPs / 不重複 IP: ${stats.uniqueSourceIPs}`);
72
+ lines.push(`Credential Attempts / 認證嘗試: ${stats.totalCredentialAttempts}`);
73
+ lines.push(`Commands Captured / 捕獲指令: ${stats.totalCommandsCaptured}`);
74
+ lines.push(`Uptime / 運作時間: ${formatDuration(stats.uptimeMs)}`);
75
+ lines.push('');
76
+ // Sessions by service
77
+ lines.push('--- Sessions by Service / 依服務分類 ---');
78
+ for (const [service, count] of Object.entries(stats.sessionsByService)) {
79
+ if (count > 0) {
80
+ lines.push(` ${service}: ${count}`);
81
+ }
82
+ }
83
+ lines.push('');
84
+ // Top attacker IPs
85
+ if (stats.topAttackerIPs.length > 0) {
86
+ lines.push('--- Top Attacker IPs / 前幾名攻擊者 ---');
87
+ for (const entry of stats.topAttackerIPs.slice(0, 5)) {
88
+ lines.push(` ${entry.ip}: ${entry.sessions} sessions (risk=${entry.riskScore})`);
89
+ }
90
+ lines.push('');
91
+ }
92
+ // Top credentials
93
+ if (stats.topUsernames.length > 0) {
94
+ lines.push('--- Top Usernames / 前幾名使用者名稱 ---');
95
+ for (const entry of stats.topUsernames.slice(0, 5)) {
96
+ lines.push(` ${entry.username}: ${entry.count}`);
97
+ }
98
+ lines.push('');
99
+ }
100
+ // Skill distribution
101
+ lines.push('--- Attacker Skill Distribution / 攻擊者技術分布 ---');
102
+ for (const [skill, count] of Object.entries(stats.skillDistribution)) {
103
+ if (count > 0) {
104
+ lines.push(` ${skill}: ${count}`);
105
+ }
106
+ }
107
+ return lines.join('\n');
108
+ }
109
+ /**
110
+ * Get help text
111
+ * 取得說明文字
112
+ */
113
+ export function getHelpText() {
114
+ return `
115
+ PanguardTrap - Smart Honeypot System / 智慧蜜罐系統
116
+ Panguard AI (https://panguard.ai)
117
+
118
+ Usage / 用法:
119
+ panguard-trap <command> [options]
120
+
121
+ Commands / 命令:
122
+ start Start honeypot services / 啟動蜜罐服務
123
+ stop Stop honeypot services / 停止蜜罐服務
124
+ status Show current status and statistics / 顯示目前狀態和統計
125
+ deploy Deploy specific trap services / 部署特定蜜罐服務
126
+ profiles Show attacker profiles / 顯示攻擊者 profiles
127
+ intel Show threat intelligence summary / 顯示威脅情報摘要
128
+ config Show current configuration / 顯示目前配置
129
+ help Show this help message / 顯示此說明
130
+
131
+ Options / 選項:
132
+ --services <types> Comma-separated service types / 逗號分隔的服務類型
133
+ (ssh,http,ftp,telnet,mysql,redis,smb,rdp)
134
+ --port <number> Override port for single service / 覆寫單一服務的埠
135
+ --data-dir <path> Data directory for logs / 日誌資料目錄
136
+ --no-cloud Disable Threat Cloud upload / 停用 Threat Cloud 上傳
137
+ --verbose, -v Verbose output / 詳細輸出
138
+
139
+ Examples / 範例:
140
+ panguard-trap start --services ssh,http
141
+ panguard-trap status
142
+ panguard-trap profiles
143
+ panguard-trap intel
144
+ `.trim();
145
+ }
146
+ /** Format duration / 格式化持續時間 */
147
+ function formatDuration(ms) {
148
+ if (ms < 1000)
149
+ return `${ms}ms`;
150
+ const seconds = Math.floor(ms / 1000);
151
+ if (seconds < 60)
152
+ return `${seconds}s`;
153
+ const minutes = Math.floor(seconds / 60);
154
+ if (minutes < 60)
155
+ return `${minutes}m ${seconds % 60}s`;
156
+ const hours = Math.floor(minutes / 60);
157
+ return `${hours}h ${minutes % 60}m`;
158
+ }
159
+ /** Singleton engine instance for the running process */
160
+ let activeEngine = null;
161
+ /**
162
+ * Execute CLI command
163
+ * 執行 CLI 命令
164
+ */
165
+ export async function executeCli(args) {
166
+ const options = parseCliArgs(args);
167
+ switch (options.command) {
168
+ case 'help':
169
+ console.log(getHelpText());
170
+ break;
171
+ case 'config': {
172
+ const config = buildConfigFromOptions(options);
173
+ console.log('=== PanguardTrap Configuration / PanguardTrap 配置 ===');
174
+ console.log('');
175
+ console.log(`Data Directory / 資料目錄: ${config.dataDir}`);
176
+ console.log(`Threat Cloud / 威脅雲端: ${config.feedThreatCloud ? 'enabled / 啟用' : 'disabled / 停用'}`);
177
+ console.log(`Fake Access / 假存取: ${config.grantFakeAccess ? `after ${config.fakeAccessAfterAttempts} attempts` : 'disabled'}`);
178
+ console.log('');
179
+ console.log('Enabled Services / 已啟用服務:');
180
+ for (const svc of config.services.filter((s) => s.enabled)) {
181
+ console.log(` ${svc.type}: port ${svc.port}`);
182
+ }
183
+ break;
184
+ }
185
+ case 'start': {
186
+ const config = buildConfigFromOptions(options);
187
+ console.log('Starting PanguardTrap... / 啟動 PanguardTrap...');
188
+ const engine = new TrapEngine(config);
189
+ activeEngine = engine;
190
+ // Register session handler for verbose output
191
+ engine.onSession((session) => {
192
+ console.log(`[Session] ${session.sourceIP}:${session.sourcePort} -> ${session.serviceType} ` +
193
+ `(creds=${session.credentials.length}, cmds=${session.commands.length})`);
194
+ });
195
+ await engine.start();
196
+ const running = engine.getRunningServices();
197
+ console.log(`Services running / 已啟動服務: ${running.join(', ') || '(none)'}`);
198
+ console.log('Press Ctrl+C to stop / 按 Ctrl+C 停止');
199
+ // Graceful shutdown
200
+ const shutdown = async () => {
201
+ console.log('\nStopping PanguardTrap... / 停止 PanguardTrap...');
202
+ await engine.stop();
203
+ console.log('PanguardTrap stopped / PanguardTrap 已停止');
204
+ process.exit(0);
205
+ };
206
+ process.on('SIGINT', shutdown);
207
+ process.on('SIGTERM', shutdown);
208
+ // Keep process alive
209
+ await new Promise(() => { });
210
+ break;
211
+ }
212
+ case 'stop':
213
+ if (activeEngine) {
214
+ await activeEngine.stop();
215
+ activeEngine = null;
216
+ console.log('PanguardTrap stopped / PanguardTrap 已停止');
217
+ }
218
+ else {
219
+ console.log('PanguardTrap is not running. / PanguardTrap 未運行。');
220
+ }
221
+ break;
222
+ case 'status':
223
+ if (activeEngine && activeEngine.status === 'running') {
224
+ const stats = activeEngine.getStatistics();
225
+ console.log(formatStatistics(stats));
226
+ }
227
+ else {
228
+ console.log('PanguardTrap is not running. Use panguard-trap start to begin.');
229
+ console.log('PanguardTrap 未運行。使用 panguard-trap start 開始。');
230
+ }
231
+ break;
232
+ case 'deploy': {
233
+ const deployConfig = buildConfigFromOptions(options);
234
+ console.log('Deploying trap services... / 部署蜜罐服務...');
235
+ const deployEngine = new TrapEngine(deployConfig);
236
+ await deployEngine.start();
237
+ const deployRunning = deployEngine.getRunningServices();
238
+ console.log(`Deployed services / 已部署服務: ${deployRunning.join(', ') || '(none)'}`);
239
+ await deployEngine.stop();
240
+ console.log('Deploy test complete / 部署測試完成');
241
+ break;
242
+ }
243
+ case 'profiles':
244
+ if (activeEngine) {
245
+ const profiler = activeEngine.getProfiler();
246
+ const profiles = profiler.getAllProfiles();
247
+ if (profiles.length === 0) {
248
+ console.log('No attacker profiles yet. / 尚無攻擊者 profiles。');
249
+ }
250
+ else {
251
+ console.log(`=== Attacker Profiles (${profiles.length}) / 攻擊者分析 ===`);
252
+ for (const p of profiles) {
253
+ console.log(` [${p.profileId}] ${p.skillLevel} / ${p.intent} (risk=${p.riskScore})`);
254
+ }
255
+ }
256
+ }
257
+ else {
258
+ console.log('PanguardTrap is not running. Start it first.');
259
+ console.log('PanguardTrap 未運行。請先啟動。');
260
+ }
261
+ break;
262
+ case 'intel':
263
+ if (activeEngine) {
264
+ const reports = activeEngine.getIntelReports();
265
+ if (reports.length === 0) {
266
+ console.log('No intel reports yet. / 尚無情報報告。');
267
+ }
268
+ else {
269
+ console.log(`=== Intel Reports (${reports.length}) / 情報報告 ===`);
270
+ for (const r of reports) {
271
+ console.log(` [${r.serviceType}] ${r.sourceIP} - ${r.attackType} (${r.skillLevel}/${r.intent})`);
272
+ }
273
+ }
274
+ }
275
+ else {
276
+ console.log('PanguardTrap is not running. Start it first.');
277
+ console.log('PanguardTrap 未運行。請先啟動。');
278
+ }
279
+ break;
280
+ default:
281
+ console.log(`Unknown command: ${options.command}`);
282
+ console.log(getHelpText());
283
+ }
284
+ }
285
+ // ---------------------------------------------------------------------------
286
+ // CLI entry point (when run directly)
287
+ // CLI 進入點(直接執行時)
288
+ // ---------------------------------------------------------------------------
289
+ const isDirectRun = process.argv[1] &&
290
+ (process.argv[1].endsWith('/panguard-trap') ||
291
+ process.argv[1].includes('panguard-trap/dist/cli'));
292
+ if (isDirectRun) {
293
+ executeCli(process.argv.slice(2)).catch((err) => {
294
+ console.error('Error:', err instanceof Error ? err.message : String(err));
295
+ process.exit(1);
296
+ });
297
+ }
298
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * PanguardTrap - Smart Honeypot System
3
+ * PanguardTrap - 智慧蜜罐系統
4
+ *
5
+ * Deploys fake services to lure and profile attackers,
6
+ * recording their tools, techniques, and intentions.
7
+ * 部署假服務來誘捕並分析攻擊者,記錄其工具、技術和意圖。
8
+ *
9
+ * @module @panguard-ai/panguard-trap
10
+ */
11
+ export declare const PANGUARD_TRAP_VERSION = "0.1.0";
12
+ export declare const CLAWTRAP_NAME = "PanguardTrap";
13
+ export type { TrapServiceType, TrapServiceStatus, TrapEngineStatus, TrapServiceConfig, TrapEvent, TrapEventType, TrapSession, CredentialAttempt, AttackerSkillLevel, AttackerIntent, AttackerProfile, TrapIntelligence, TrapConfig, TrapService, SessionHandler, TrapStatistics, } from './types.js';
14
+ export { DEFAULT_SERVICE_CONFIGS, DEFAULT_TRAP_CONFIG } from './types.js';
15
+ export { createTrapService, BaseTrapService, SSHTrapService, HTTPTrapService, GenericTrapService, } from './services/index.js';
16
+ export { AttackerProfiler, estimateSkillLevel, classifyIntent, detectTools, } from './profiler/index.js';
17
+ export { buildTrapIntel, buildBatchIntel, generateIntelSummary } from './intel/index.js';
18
+ export type { IntelSummary } from './intel/index.js';
19
+ export { TrapEngine } from './trap-engine.js';
20
+ export { ThreatCloudUploader } from './threat-cloud-uploader.js';
21
+ export { executeCli, parseCliArgs, buildConfigFromOptions, formatStatistics, getHelpText, } from './cli/index.js';
22
+ export type { TrapCliCommand, TrapCliOptions } from './cli/index.js';
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAC7C,eAAO,MAAM,aAAa,iBAAiB,CAAC;AAG5C,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAG1E,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACzF,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EACL,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * PanguardTrap - Smart Honeypot System
3
+ * PanguardTrap - 智慧蜜罐系統
4
+ *
5
+ * Deploys fake services to lure and profile attackers,
6
+ * recording their tools, techniques, and intentions.
7
+ * 部署假服務來誘捕並分析攻擊者,記錄其工具、技術和意圖。
8
+ *
9
+ * @module @panguard-ai/panguard-trap
10
+ */
11
+ export const PANGUARD_TRAP_VERSION = '0.1.0';
12
+ export const CLAWTRAP_NAME = 'PanguardTrap';
13
+ export { DEFAULT_SERVICE_CONFIGS, DEFAULT_TRAP_CONFIG } from './types.js';
14
+ // Services
15
+ export { createTrapService, BaseTrapService, SSHTrapService, HTTPTrapService, GenericTrapService, } from './services/index.js';
16
+ // Profiler
17
+ export { AttackerProfiler, estimateSkillLevel, classifyIntent, detectTools, } from './profiler/index.js';
18
+ // Intel
19
+ export { buildTrapIntel, buildBatchIntel, generateIntelSummary } from './intel/index.js';
20
+ // Engine
21
+ export { TrapEngine } from './trap-engine.js';
22
+ // Threat Cloud uploader
23
+ export { ThreatCloudUploader } from './threat-cloud-uploader.js';
24
+ // CLI
25
+ export { executeCli, parseCliArgs, buildConfigFromOptions, formatStatistics, getHelpText, } from './cli/index.js';
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAC7C,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAsB5C,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE1E,WAAW;AACX,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,WAAW;AACX,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAE7B,QAAQ;AACR,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGzF,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,wBAAwB;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM;AACN,OAAO,EACL,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,GACZ,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Trap Intelligence Module
3
+ * 蜜罐情報模組
4
+ *
5
+ * Converts trap sessions to anonymized intelligence data
6
+ * for upload to Panguard Threat Cloud.
7
+ * 將蜜罐連線轉換為匿名化情報資料,用於上傳到 Panguard Threat Cloud。
8
+ *
9
+ * @module @panguard-ai/panguard-trap/intel
10
+ */
11
+ import type { TrapSession, TrapIntelligence, AttackerProfile } from '../types.js';
12
+ /**
13
+ * Convert a trap session to anonymized intelligence
14
+ * 將蜜罐連線轉換為匿名化情報
15
+ */
16
+ export declare function buildTrapIntel(session: TrapSession, profile?: AttackerProfile): TrapIntelligence | null;
17
+ /**
18
+ * Build batch intel from multiple sessions
19
+ * 從多個連線建構批次情報
20
+ */
21
+ export declare function buildBatchIntel(sessions: TrapSession[], profiles: Map<string, AttackerProfile>): TrapIntelligence[];
22
+ /** Intel summary / 情報摘要 */
23
+ export interface IntelSummary {
24
+ totalIntelReports: number;
25
+ uniqueSourceIPs: number;
26
+ attackTypeDistribution: Record<string, number>;
27
+ topSourceIPs: {
28
+ ip: string;
29
+ count: number;
30
+ }[];
31
+ serviceDistribution: Record<string, number>;
32
+ }
33
+ /**
34
+ * Generate intel summary from collected reports
35
+ * 從收集的報告生成情報摘要
36
+ */
37
+ export declare function generateIntelSummary(reports: TrapIntelligence[]): IntelSummary;
38
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/intel/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA4BlF;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,eAAe,GACxB,gBAAgB,GAAG,IAAI,CA2CzB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,WAAW,EAAE,EACvB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GACrC,gBAAgB,EAAE,CAYpB;AA8CD,2BAA2B;AAC3B,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9C,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,YAAY,CAuB9E"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Trap Intelligence Module
3
+ * 蜜罐情報模組
4
+ *
5
+ * Converts trap sessions to anonymized intelligence data
6
+ * for upload to Panguard Threat Cloud.
7
+ * 將蜜罐連線轉換為匿名化情報資料,用於上傳到 Panguard Threat Cloud。
8
+ *
9
+ * @module @panguard-ai/panguard-trap/intel
10
+ */
11
+ import { createLogger } from '@panguard-ai/core';
12
+ const logger = createLogger('panguard-trap:intel');
13
+ // ---------------------------------------------------------------------------
14
+ // IP Anonymization
15
+ // IP 匿名化
16
+ // ---------------------------------------------------------------------------
17
+ /** Check if IP is private / 檢查是否為私有 IP */
18
+ function isPrivateIP(ip) {
19
+ const cleanIP = ip.replace('::ffff:', '');
20
+ if (cleanIP.startsWith('10.'))
21
+ return true;
22
+ if (cleanIP.startsWith('172.')) {
23
+ const secondOctet = parseInt(cleanIP.split('.')[1] ?? '0', 10);
24
+ if (secondOctet >= 16 && secondOctet <= 31)
25
+ return true;
26
+ }
27
+ if (cleanIP.startsWith('192.168.'))
28
+ return true;
29
+ if (cleanIP === '127.0.0.1' || cleanIP === 'localhost')
30
+ return true;
31
+ if (cleanIP === '::1')
32
+ return true;
33
+ return false;
34
+ }
35
+ // ---------------------------------------------------------------------------
36
+ // Intelligence Builder
37
+ // 情報建構器
38
+ // ---------------------------------------------------------------------------
39
+ /**
40
+ * Convert a trap session to anonymized intelligence
41
+ * 將蜜罐連線轉換為匿名化情報
42
+ */
43
+ export function buildTrapIntel(session, profile) {
44
+ // Don't report private IPs
45
+ if (isPrivateIP(session.sourceIP)) {
46
+ logger.debug('Skipping private IP for intel / 跳過私有 IP');
47
+ return null;
48
+ }
49
+ // Need at least some activity to report
50
+ if (session.events.length < 2) {
51
+ return null;
52
+ }
53
+ // Build top credentials (generic patterns only)
54
+ const usernameCounts = new Map();
55
+ for (const cred of session.credentials) {
56
+ if (cred.username) {
57
+ usernameCounts.set(cred.username, (usernameCounts.get(cred.username) ?? 0) + 1);
58
+ }
59
+ }
60
+ const topCredentials = Array.from(usernameCounts.entries())
61
+ .sort((a, b) => b[1] - a[1])
62
+ .slice(0, 5)
63
+ .map(([username, count]) => ({ username, count }));
64
+ // Determine attack type
65
+ const attackType = determineAttackType(session);
66
+ const intel = {
67
+ timestamp: session.startTime,
68
+ serviceType: session.serviceType,
69
+ sourceIP: session.sourceIP,
70
+ attackType,
71
+ mitreTechniques: [...session.mitreTechniques],
72
+ skillLevel: profile?.skillLevel ?? 'script_kiddie',
73
+ intent: profile?.intent ?? 'unknown',
74
+ tools: profile?.toolsDetected ?? [],
75
+ topCredentials,
76
+ region: profile?.geoHints?.country,
77
+ };
78
+ logger.info(`Trap intel built for ${session.sourceIP} (${attackType}) / 蜜罐情報已建立`);
79
+ return intel;
80
+ }
81
+ /**
82
+ * Build batch intel from multiple sessions
83
+ * 從多個連線建構批次情報
84
+ */
85
+ export function buildBatchIntel(sessions, profiles) {
86
+ const results = [];
87
+ for (const session of sessions) {
88
+ const profile = session.attackerProfileId ? profiles.get(session.attackerProfileId) : undefined;
89
+ const intel = buildTrapIntel(session, profile);
90
+ if (intel) {
91
+ results.push(intel);
92
+ }
93
+ }
94
+ return results;
95
+ }
96
+ /**
97
+ * Determine the primary attack type from a session
98
+ * 從連線判定主要攻擊類型
99
+ */
100
+ function determineAttackType(session) {
101
+ // Check for specific attack types based on events and techniques
102
+ if (session.mitreTechniques.includes('T1110')) {
103
+ return 'brute_force';
104
+ }
105
+ if (session.mitreTechniques.includes('T1190')) {
106
+ return 'exploit_attempt';
107
+ }
108
+ if (session.mitreTechniques.includes('T1496')) {
109
+ return 'cryptomining';
110
+ }
111
+ if (session.mitreTechniques.includes('T1505.003')) {
112
+ return 'webshell_upload';
113
+ }
114
+ if (session.mitreTechniques.includes('T1485')) {
115
+ return 'data_destruction';
116
+ }
117
+ if (session.mitreTechniques.includes('T1105')) {
118
+ return 'malware_download';
119
+ }
120
+ if (session.mitreTechniques.includes('T1595')) {
121
+ return 'reconnaissance';
122
+ }
123
+ // Fallback by service type
124
+ if (session.serviceType === 'ssh' || session.serviceType === 'telnet') {
125
+ return session.credentials.length > 0 ? 'brute_force' : 'reconnaissance';
126
+ }
127
+ if (session.serviceType === 'http') {
128
+ return 'web_attack';
129
+ }
130
+ return 'unknown';
131
+ }
132
+ /**
133
+ * Generate intel summary from collected reports
134
+ * 從收集的報告生成情報摘要
135
+ */
136
+ export function generateIntelSummary(reports) {
137
+ const ipCounts = new Map();
138
+ const attackTypes = {};
139
+ const services = {};
140
+ for (const report of reports) {
141
+ ipCounts.set(report.sourceIP, (ipCounts.get(report.sourceIP) ?? 0) + 1);
142
+ attackTypes[report.attackType] = (attackTypes[report.attackType] ?? 0) + 1;
143
+ services[report.serviceType] = (services[report.serviceType] ?? 0) + 1;
144
+ }
145
+ const topSourceIPs = Array.from(ipCounts.entries())
146
+ .sort((a, b) => b[1] - a[1])
147
+ .slice(0, 10)
148
+ .map(([ip, count]) => ({ ip, count }));
149
+ return {
150
+ totalIntelReports: reports.length,
151
+ uniqueSourceIPs: ipCounts.size,
152
+ attackTypeDistribution: attackTypes,
153
+ topSourceIPs,
154
+ serviceDistribution: services,
155
+ };
156
+ }
157
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/intel/index.ts"],"names":[],"mappings":"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"}