typescript-virtual-container 1.1.4 → 1.1.5
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/CHANGELOG.md +42 -0
- package/HONEYPOT.md +358 -0
- package/README.md +471 -16
- package/dist/SSHMimic/index.d.ts +2 -1
- package/dist/SSHMimic/index.d.ts.map +1 -1
- package/dist/SSHMimic/index.js +12 -1
- package/dist/SSHMimic/sftp.d.ts +3 -1
- package/dist/SSHMimic/sftp.d.ts.map +1 -1
- package/dist/SSHMimic/sftp.js +20 -1
- package/dist/VirtualFileSystem/index.d.ts +2 -1
- package/dist/VirtualFileSystem/index.d.ts.map +1 -1
- package/dist/VirtualFileSystem/index.js +8 -1
- package/dist/VirtualShell/index.d.ts +2 -1
- package/dist/VirtualShell/index.d.ts.map +1 -1
- package/dist/VirtualShell/index.js +6 -1
- package/dist/VirtualUserManager/index.d.ts +2 -1
- package/dist/VirtualUserManager/index.d.ts.map +1 -1
- package/dist/VirtualUserManager/index.js +19 -1
- package/dist/honeypot.d.ts +132 -0
- package/dist/honeypot.d.ts.map +1 -0
- package/dist/honeypot.js +289 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/examples/README.md +210 -0
- package/examples/honeypot-audit.ts +180 -0
- package/examples/honeypot-export.ts +253 -0
- package/examples/honeypot-quickstart.ts +110 -0
- package/package.json +1 -1
- package/src/Honeypot/index.ts +422 -0
- package/src/SSHMimic/index.ts +13 -1
- package/src/SSHMimic/sftp.ts +21 -1
- package/src/VirtualFileSystem/index.ts +8 -1
- package/src/VirtualShell/index.ts +6 -1
- package/src/VirtualUserManager/index.ts +21 -3
- package/src/index.ts +6 -0
package/dist/honeypot.js
ADDED
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Honeypot tracking and auditing module for virtual shell events.
|
|
3
|
+
*
|
|
4
|
+
* Attaches listeners to VirtualShell, VirtualFileSystem, VirtualUserManager,
|
|
5
|
+
* SshMimic, and SftpMimic instances to log all activity for security auditing,
|
|
6
|
+
* anomaly detection, and forensic analysis.
|
|
7
|
+
*
|
|
8
|
+
* @module honeypot
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* HoneyPot audit and event tracking utility.
|
|
12
|
+
*
|
|
13
|
+
* Singleton-like helper that attaches listeners to virtual shell components
|
|
14
|
+
* and maintains an audit log of all activity.
|
|
15
|
+
*/
|
|
16
|
+
export class HoneyPot {
|
|
17
|
+
auditLog = [];
|
|
18
|
+
stats = {
|
|
19
|
+
authAttempts: 0,
|
|
20
|
+
authSuccesses: 0,
|
|
21
|
+
authFailures: 0,
|
|
22
|
+
commands: 0,
|
|
23
|
+
fileWrites: 0,
|
|
24
|
+
fileReads: 0,
|
|
25
|
+
sessionStarts: 0,
|
|
26
|
+
sessionEnds: 0,
|
|
27
|
+
userCreated: 0,
|
|
28
|
+
userDeleted: 0,
|
|
29
|
+
clientConnects: 0,
|
|
30
|
+
clientDisconnects: 0,
|
|
31
|
+
};
|
|
32
|
+
maxLogSize;
|
|
33
|
+
/**
|
|
34
|
+
* Creates a new HoneyPot instance.
|
|
35
|
+
*
|
|
36
|
+
* @param maxLogSize Maximum audit log entries to retain (default: 10000).
|
|
37
|
+
*/
|
|
38
|
+
constructor(maxLogSize = 10000) {
|
|
39
|
+
this.maxLogSize = maxLogSize;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Attaches honeypot listeners to all provided event emitters.
|
|
43
|
+
*
|
|
44
|
+
* @param shell VirtualShell instance.
|
|
45
|
+
* @param vfs VirtualFileSystem instance.
|
|
46
|
+
* @param users VirtualUserManager instance.
|
|
47
|
+
* @param ssh SshMimic instance (optional).
|
|
48
|
+
* @param sftp SftpMimic instance (optional).
|
|
49
|
+
*/
|
|
50
|
+
attach(shell, vfs, users, ssh, sftp) {
|
|
51
|
+
this.attachVirtualShell(shell);
|
|
52
|
+
this.attachVirtualFileSystem(vfs);
|
|
53
|
+
this.attachVirtualUserManager(users);
|
|
54
|
+
if (ssh) {
|
|
55
|
+
this.attachSshMimic(ssh);
|
|
56
|
+
}
|
|
57
|
+
if (sftp) {
|
|
58
|
+
this.attachSftpMimic(sftp);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Attaches to VirtualShell events.
|
|
63
|
+
*/
|
|
64
|
+
attachVirtualShell(shell) {
|
|
65
|
+
shell.on("initialized", () => {
|
|
66
|
+
this.log("VirtualShell", "initialized", {});
|
|
67
|
+
});
|
|
68
|
+
shell.on("command", (data) => {
|
|
69
|
+
this.stats.commands++;
|
|
70
|
+
this.log("VirtualShell", "command", data);
|
|
71
|
+
});
|
|
72
|
+
shell.on("session:start", (data) => {
|
|
73
|
+
this.stats.sessionStarts++;
|
|
74
|
+
this.log("VirtualShell", "session:start", data);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Attaches to VirtualFileSystem events.
|
|
79
|
+
*/
|
|
80
|
+
attachVirtualFileSystem(vfs) {
|
|
81
|
+
vfs.on("file:read", (data) => {
|
|
82
|
+
this.stats.fileReads++;
|
|
83
|
+
this.log("VirtualFileSystem", "file:read", data);
|
|
84
|
+
});
|
|
85
|
+
vfs.on("file:write", (data) => {
|
|
86
|
+
this.stats.fileWrites++;
|
|
87
|
+
this.log("VirtualFileSystem", "file:write", data);
|
|
88
|
+
});
|
|
89
|
+
vfs.on("dir:create", (data) => {
|
|
90
|
+
this.log("VirtualFileSystem", "dir:create", data);
|
|
91
|
+
});
|
|
92
|
+
vfs.on("mirror:flush", () => {
|
|
93
|
+
this.log("VirtualFileSystem", "mirror:flush", {});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Attaches to VirtualUserManager events.
|
|
98
|
+
*/
|
|
99
|
+
attachVirtualUserManager(users) {
|
|
100
|
+
users.on("initialized", () => {
|
|
101
|
+
this.log("VirtualUserManager", "initialized", {});
|
|
102
|
+
});
|
|
103
|
+
users.on("user:add", (data) => {
|
|
104
|
+
this.stats.userCreated++;
|
|
105
|
+
this.log("VirtualUserManager", "user:add", data);
|
|
106
|
+
});
|
|
107
|
+
users.on("user:delete", (data) => {
|
|
108
|
+
this.stats.userDeleted++;
|
|
109
|
+
this.log("VirtualUserManager", "user:delete", data);
|
|
110
|
+
});
|
|
111
|
+
users.on("session:register", (data) => {
|
|
112
|
+
this.log("VirtualUserManager", "session:register", data);
|
|
113
|
+
});
|
|
114
|
+
users.on("session:unregister", (data) => {
|
|
115
|
+
this.stats.sessionEnds++;
|
|
116
|
+
this.log("VirtualUserManager", "session:unregister", data);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Attaches to SshMimic events.
|
|
121
|
+
*/
|
|
122
|
+
attachSshMimic(ssh) {
|
|
123
|
+
ssh.on("start", (data) => {
|
|
124
|
+
this.log("SshMimic", "start", data);
|
|
125
|
+
});
|
|
126
|
+
ssh.on("stop", () => {
|
|
127
|
+
this.log("SshMimic", "stop", {});
|
|
128
|
+
});
|
|
129
|
+
ssh.on("auth:success", (data) => {
|
|
130
|
+
this.stats.authAttempts++;
|
|
131
|
+
this.stats.authSuccesses++;
|
|
132
|
+
this.log("SshMimic", "auth:success", data);
|
|
133
|
+
});
|
|
134
|
+
ssh.on("auth:failure", (data) => {
|
|
135
|
+
this.stats.authAttempts++;
|
|
136
|
+
this.stats.authFailures++;
|
|
137
|
+
this.log("SshMimic", "auth:failure", data);
|
|
138
|
+
});
|
|
139
|
+
ssh.on("client:connect", () => {
|
|
140
|
+
this.stats.clientConnects++;
|
|
141
|
+
this.log("SshMimic", "client:connect", {});
|
|
142
|
+
});
|
|
143
|
+
ssh.on("client:disconnect", (data) => {
|
|
144
|
+
this.stats.clientDisconnects++;
|
|
145
|
+
this.log("SshMimic", "client:disconnect", data);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Attaches to SftpMimic events.
|
|
150
|
+
*/
|
|
151
|
+
attachSftpMimic(sftp) {
|
|
152
|
+
sftp.on("start", (data) => {
|
|
153
|
+
this.log("SftpMimic", "start", data);
|
|
154
|
+
});
|
|
155
|
+
sftp.on("stop", () => {
|
|
156
|
+
this.log("SftpMimic", "stop", {});
|
|
157
|
+
});
|
|
158
|
+
sftp.on("auth:success", (data) => {
|
|
159
|
+
this.stats.authAttempts++;
|
|
160
|
+
this.stats.authSuccesses++;
|
|
161
|
+
this.log("SftpMimic", "auth:success", data);
|
|
162
|
+
});
|
|
163
|
+
sftp.on("auth:failure", (data) => {
|
|
164
|
+
this.stats.authAttempts++;
|
|
165
|
+
this.stats.authFailures++;
|
|
166
|
+
this.log("SftpMimic", "auth:failure", data);
|
|
167
|
+
});
|
|
168
|
+
sftp.on("client:connect", () => {
|
|
169
|
+
this.stats.clientConnects++;
|
|
170
|
+
this.log("SftpMimic", "client:connect", {});
|
|
171
|
+
});
|
|
172
|
+
sftp.on("client:disconnect", (data) => {
|
|
173
|
+
this.stats.clientDisconnects++;
|
|
174
|
+
this.log("SftpMimic", "client:disconnect", data);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Records an audit log entry.
|
|
179
|
+
*
|
|
180
|
+
* @param source Event source (e.g., "SshMimic", "VirtualFileSystem").
|
|
181
|
+
* @param type Event type.
|
|
182
|
+
* @param details Event-specific data.
|
|
183
|
+
*/
|
|
184
|
+
log(source, type, details) {
|
|
185
|
+
const entry = {
|
|
186
|
+
timestamp: new Date().toISOString(),
|
|
187
|
+
type,
|
|
188
|
+
source,
|
|
189
|
+
details,
|
|
190
|
+
};
|
|
191
|
+
this.auditLog.push(entry);
|
|
192
|
+
// Trim log if exceeds max size
|
|
193
|
+
if (this.auditLog.length > this.maxLogSize) {
|
|
194
|
+
this.auditLog = this.auditLog.slice(-this.maxLogSize);
|
|
195
|
+
}
|
|
196
|
+
// Console output for real-time monitoring
|
|
197
|
+
console.log(`[AUDIT] ${entry.timestamp} | ${source} | ${type}`, details);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Returns audit log entries matching optional filters.
|
|
201
|
+
*
|
|
202
|
+
* @param type Optional event type filter.
|
|
203
|
+
* @param source Optional source filter.
|
|
204
|
+
* @returns Filtered audit log entries.
|
|
205
|
+
*/
|
|
206
|
+
getAuditLog(type, source) {
|
|
207
|
+
return this.auditLog.filter((entry) => (!type || entry.type === type) && (!source || entry.source === source));
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Returns current activity statistics.
|
|
211
|
+
*
|
|
212
|
+
* @returns Snapshot of honeypot stats.
|
|
213
|
+
*/
|
|
214
|
+
getStats() {
|
|
215
|
+
return Object.freeze({ ...this.stats });
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Clears audit log and resets statistics.
|
|
219
|
+
*/
|
|
220
|
+
reset() {
|
|
221
|
+
this.auditLog = [];
|
|
222
|
+
this.stats = {
|
|
223
|
+
authAttempts: 0,
|
|
224
|
+
authSuccesses: 0,
|
|
225
|
+
authFailures: 0,
|
|
226
|
+
commands: 0,
|
|
227
|
+
fileWrites: 0,
|
|
228
|
+
fileReads: 0,
|
|
229
|
+
sessionStarts: 0,
|
|
230
|
+
sessionEnds: 0,
|
|
231
|
+
userCreated: 0,
|
|
232
|
+
userDeleted: 0,
|
|
233
|
+
clientConnects: 0,
|
|
234
|
+
clientDisconnects: 0,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Returns recent log entries in reverse chronological order.
|
|
239
|
+
*
|
|
240
|
+
* @param limit Number of recent entries to return (default: 100).
|
|
241
|
+
* @returns Recent audit log entries.
|
|
242
|
+
*/
|
|
243
|
+
getRecent(limit = 100) {
|
|
244
|
+
return this.auditLog.slice(Math.max(0, this.auditLog.length - limit));
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Detects potential security issues based on activity patterns.
|
|
248
|
+
*
|
|
249
|
+
* @returns Array of anomalies detected.
|
|
250
|
+
*/
|
|
251
|
+
detectAnomalies() {
|
|
252
|
+
const anomalies = [];
|
|
253
|
+
// High auth failure rate
|
|
254
|
+
if (this.stats.authAttempts > 0 &&
|
|
255
|
+
this.stats.authFailures / this.stats.authAttempts > 0.5) {
|
|
256
|
+
anomalies.push({
|
|
257
|
+
type: "high_auth_failure_rate",
|
|
258
|
+
severity: "medium",
|
|
259
|
+
message: `Auth failure rate: ${((this.stats.authFailures / this.stats.authAttempts) * 100).toFixed(1)}%`,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
// Excessive auth failures in short time
|
|
263
|
+
if (this.stats.authFailures > 10) {
|
|
264
|
+
anomalies.push({
|
|
265
|
+
type: "excessive_auth_failures",
|
|
266
|
+
severity: "high",
|
|
267
|
+
message: `${this.stats.authFailures} authentication failures detected`,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
// Unusual command execution volume
|
|
271
|
+
if (this.stats.commands > 1000) {
|
|
272
|
+
anomalies.push({
|
|
273
|
+
type: "high_command_volume",
|
|
274
|
+
severity: "low",
|
|
275
|
+
message: `${this.stats.commands} commands executed`,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
// Unusual file write volume
|
|
279
|
+
if (this.stats.fileWrites > 500) {
|
|
280
|
+
anomalies.push({
|
|
281
|
+
type: "high_write_volume",
|
|
282
|
+
severity: "medium",
|
|
283
|
+
message: `${this.stats.fileWrites} file write operations`,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
return anomalies;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
export default HoneyPot;
|
package/dist/index.d.ts
CHANGED
|
@@ -3,9 +3,11 @@ import { SftpMimic, SshMimic } from "./SSHMimic/index";
|
|
|
3
3
|
import VirtualFileSystem from "./VirtualFileSystem";
|
|
4
4
|
import { VirtualShell } from "./VirtualShell";
|
|
5
5
|
import { VirtualUserManager } from "./VirtualUserManager";
|
|
6
|
+
import { HoneyPot } from "./honeypot";
|
|
6
7
|
export type { CommandContext, CommandMode, CommandOutcome, CommandResult, NanoEditorSession, ShellModule, SudoChallenge, } from "./types/commands";
|
|
7
8
|
export type { ExecStream, ShellStream } from "./types/streams";
|
|
8
9
|
export type { RemoveOptions, VfsBaseNode, VfsDirectoryNode, VfsFileNode, VfsNodeStats, VfsNodeType, VfsSnapshot, VfsSnapshotBaseNode, VfsSnapshotDirectoryNode, VfsSnapshotFileNode, VfsSnapshotNode, WriteFileOptions, } from "./types/vfs";
|
|
9
|
-
export {
|
|
10
|
+
export type { AuditLogEntry, HoneyPotStats, } from "./honeypot";
|
|
11
|
+
export { SshClient, VirtualFileSystem, SftpMimic as VirtualSftpServer, VirtualShell, SshMimic as VirtualSshServer, VirtualUserManager, HoneyPot, };
|
|
10
12
|
export { getArg, getFlag, ifFlag, } from "./commands/command-helpers";
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,YAAY,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,aAAa,GACb,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,YAAY,EACX,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EACX,aAAa,EACb,aAAa,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EACN,SAAS,EACT,iBAAiB,EACjB,SAAS,IAAI,iBAAiB,EAC9B,YAAY,EACZ,QAAQ,IAAI,gBAAgB,EAC5B,kBAAkB,EAClB,QAAQ,GACR,CAAC;AAEF,OAAO,EACN,MAAM,EACN,OAAO,EACP,MAAM,GACN,MAAM,4BAA4B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,5 +3,6 @@ import { SftpMimic, SshMimic } from "./SSHMimic/index";
|
|
|
3
3
|
import VirtualFileSystem from "./VirtualFileSystem";
|
|
4
4
|
import { VirtualShell } from "./VirtualShell";
|
|
5
5
|
import { VirtualUserManager } from "./VirtualUserManager";
|
|
6
|
-
|
|
6
|
+
import { HoneyPot } from "./honeypot";
|
|
7
|
+
export { SshClient, VirtualFileSystem, SftpMimic as VirtualSftpServer, VirtualShell, SshMimic as VirtualSshServer, VirtualUserManager, HoneyPot, };
|
|
7
8
|
export { getArg, getFlag, ifFlag, } from "./commands/command-helpers";
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# HoneyPot Examples
|
|
2
|
+
|
|
3
|
+
This directory contains practical examples demonstrating how to use the `HoneyPot` auditing and event tracking utility.
|
|
4
|
+
|
|
5
|
+
## Quick Start with HoneyPot
|
|
6
|
+
|
|
7
|
+
### 1. Basic Introduction (Recommended First)
|
|
8
|
+
|
|
9
|
+
**File:** `honeypot-quickstart.ts`
|
|
10
|
+
|
|
11
|
+
A beginner-friendly, step-by-step introduction to HoneyPot:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
bun run examples/honeypot-quickstart.ts
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**What it covers:**
|
|
18
|
+
- Creating a virtual environment
|
|
19
|
+
- Initializing HoneyPot
|
|
20
|
+
- Attaching HoneyPot to components
|
|
21
|
+
- Collecting statistics
|
|
22
|
+
- Viewing recent events
|
|
23
|
+
- Querying filtered logs
|
|
24
|
+
- Detecting anomalies
|
|
25
|
+
|
|
26
|
+
**Output:** Console display with colored examples and activity statistics
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
### 2. Comprehensive Auditing
|
|
31
|
+
|
|
32
|
+
**File:** `honeypot-audit.ts`
|
|
33
|
+
|
|
34
|
+
A complete auditing scenario with multiple users and suspicious activities:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
bun run examples/honeypot-audit.ts
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**What it covers:**
|
|
41
|
+
- Normal user activity tracking
|
|
42
|
+
- Suspicious operation attempts
|
|
43
|
+
- Detailed activity summaries
|
|
44
|
+
- Event filtering by type and source
|
|
45
|
+
- File system activity tracking
|
|
46
|
+
- Anomaly detection with severity levels
|
|
47
|
+
- Audit log export preparation
|
|
48
|
+
|
|
49
|
+
**Output:** Detailed audit report with sections for each component
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
### 3. Advanced: Export & Analysis
|
|
54
|
+
|
|
55
|
+
**File:** `honeypot-export.ts`
|
|
56
|
+
|
|
57
|
+
Professional audit report generation with file exports:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
bun run examples/honeypot-export.ts
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**What it covers:**
|
|
64
|
+
- Generating structured audit reports
|
|
65
|
+
- Exporting to JSON format
|
|
66
|
+
- Exporting to CSV format (for spreadsheet analysis)
|
|
67
|
+
- Exporting statistics
|
|
68
|
+
- Integration patterns with external systems
|
|
69
|
+
- Query examples for custom analysis
|
|
70
|
+
|
|
71
|
+
**Output:**
|
|
72
|
+
- `audit_report.json` - Complete audit report
|
|
73
|
+
- `audit_events.csv` - Timeline in spreadsheet format
|
|
74
|
+
- `audit_stats.json` - Summary statistics
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## HoneyPot API Quick Reference
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
// Create instance
|
|
82
|
+
const honeypot = new HoneyPot(maxLogSize);
|
|
83
|
+
|
|
84
|
+
// Attach to components
|
|
85
|
+
honeypot.attach(shell, vfs, users, ssh, sftp);
|
|
86
|
+
|
|
87
|
+
// Get statistics
|
|
88
|
+
const stats = honeypot.getStats();
|
|
89
|
+
|
|
90
|
+
// Get audit log
|
|
91
|
+
const allLogs = honeypot.getAuditLog();
|
|
92
|
+
const typeFiltered = honeypot.getAuditLog("auth:failure");
|
|
93
|
+
const sourceFiltered = honeypot.getAuditLog(undefined, "SshMimic");
|
|
94
|
+
|
|
95
|
+
// Get recent entries
|
|
96
|
+
const recent = honeypot.getRecent(50);
|
|
97
|
+
|
|
98
|
+
// Detect anomalies
|
|
99
|
+
const anomalies = honeypot.detectAnomalies();
|
|
100
|
+
|
|
101
|
+
// Reset tracking
|
|
102
|
+
honeypot.reset();
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Common Use Cases
|
|
106
|
+
|
|
107
|
+
### Use Case 1: Real-Time Monitoring
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
honeypot.on("auth:failure", (count) => {
|
|
111
|
+
if (count > 3) {
|
|
112
|
+
console.log("⚠️ Potential brute-force attack detected!");
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Use Case 2: Post-Execution Audit Report
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// After operations complete
|
|
121
|
+
const report = {
|
|
122
|
+
timestamp: new Date(),
|
|
123
|
+
stats: honeypot.getStats(),
|
|
124
|
+
anomalies: honeypot.detectAnomalies(),
|
|
125
|
+
auditLog: honeypot.getAuditLog(),
|
|
126
|
+
};
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Use Case 3: Security Analysis
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
// Find all failed auth attempts by user
|
|
133
|
+
const failures = honeypot
|
|
134
|
+
.getAuditLog("auth:failure")
|
|
135
|
+
.reduce((map, entry) => {
|
|
136
|
+
const user = entry.details.username;
|
|
137
|
+
map[user] = (map[user] || 0) + 1;
|
|
138
|
+
return map;
|
|
139
|
+
}, {});
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Use Case 4: Compliance & Audit Trail
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
// Export complete trail for compliance
|
|
146
|
+
const auditData = {
|
|
147
|
+
exportDate: new Date().toISOString(),
|
|
148
|
+
entries: honeypot.getAuditLog(),
|
|
149
|
+
stats: honeypot.getStats(),
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
// Store in database, send to SIEM, or archive
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Integration Examples
|
|
156
|
+
|
|
157
|
+
### With Database
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
const entries = honeypot.getAuditLog();
|
|
161
|
+
await database.insertMany("audit_logs", entries);
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### With Monitoring System
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
const anomalies = honeypot.detectAnomalies();
|
|
168
|
+
if (anomalies.length > 0) {
|
|
169
|
+
await monitoring.alert({
|
|
170
|
+
type: "security",
|
|
171
|
+
level: "high",
|
|
172
|
+
anomalies,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### With Message Queue
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
const report = honeypot.getRecent(1000);
|
|
181
|
+
await queue.publish("audit-topic", report);
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Performance Notes
|
|
185
|
+
|
|
186
|
+
- HoneyPot maintains an in-memory log with configurable size limit
|
|
187
|
+
- Older entries are automatically trimmed when max size is exceeded
|
|
188
|
+
- Statistics are computed efficiently and cached
|
|
189
|
+
- Anomaly detection runs in O(1) time
|
|
190
|
+
|
|
191
|
+
## Troubleshooting
|
|
192
|
+
|
|
193
|
+
**No events logged?**
|
|
194
|
+
- Ensure `honeypot.attach()` is called after all components are created
|
|
195
|
+
- Check that operations are actually performed (file writes, auth attempts, etc.)
|
|
196
|
+
|
|
197
|
+
**Memory growth?**
|
|
198
|
+
- Adjust `maxLogSize` in the constructor to limit retention
|
|
199
|
+
- Call `honeypot.reset()` to clear logs between test phases
|
|
200
|
+
|
|
201
|
+
**Missing events?**
|
|
202
|
+
- Use `honeypot.getAuditLog(type, source)` to filter and verify
|
|
203
|
+
- Check the exact event names in the [API Reference](../README.md#honeypot-auditing--event-tracking)
|
|
204
|
+
|
|
205
|
+
## More Information
|
|
206
|
+
|
|
207
|
+
See the main [README.md](../README.md) for:
|
|
208
|
+
- [HoneyPot API Reference](../README.md#honeypot-auditing--event-tracking)
|
|
209
|
+
- [Example 8: Security Auditing with HoneyPot](../README.md#example-8-security-auditing-with-honeypot)
|
|
210
|
+
- Complete [Event Types Documentation](../README.md#events)
|