typescript-virtual-container 1.5.3 → 1.5.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.
Files changed (371) hide show
  1. package/README.md +44 -532
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/SSHMimic/executor.js +23 -5
  4. package/dist/VirtualPackageManager/index.js +10 -0
  5. package/dist/VirtualShell/shell.js +158 -11
  6. package/dist/commands/basename.d.ts +13 -0
  7. package/dist/commands/basename.js +45 -0
  8. package/dist/commands/bc.d.ts +2 -0
  9. package/dist/commands/bc.js +28 -0
  10. package/dist/commands/file.d.ts +8 -0
  11. package/dist/commands/file.js +57 -0
  12. package/dist/commands/fun.d.ts +32 -0
  13. package/dist/commands/fun.js +172 -0
  14. package/dist/commands/ip.d.ts +7 -0
  15. package/dist/commands/ip.js +52 -0
  16. package/dist/commands/jobs.d.ts +4 -0
  17. package/dist/commands/jobs.js +27 -0
  18. package/dist/commands/last.d.ts +13 -0
  19. package/dist/commands/last.js +68 -0
  20. package/dist/commands/manuals-bundle.js +598 -6
  21. package/dist/commands/registry.js +30 -2
  22. package/dist/commands/runtime.js +24 -3
  23. package/dist/commands/set.js +20 -0
  24. package/dist/commands/sh.js +74 -1
  25. package/dist/commands/tput.d.ts +13 -0
  26. package/dist/commands/tput.js +76 -0
  27. package/dist/commands/w.d.ts +7 -0
  28. package/dist/commands/w.js +38 -0
  29. package/dist/utils/expand.d.ts +12 -0
  30. package/dist/utils/expand.js +87 -1
  31. package/package.json +9 -3
  32. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -50
  33. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -31
  34. package/.github/dependabot.yml +0 -27
  35. package/.github/pull_request_template.md +0 -21
  36. package/.github/workflows/create-pull-request.yml +0 -85
  37. package/.github/workflows/publish.yml +0 -25
  38. package/.github/workflows/test-battery.yml +0 -102
  39. package/.vscode/settings.json +0 -20
  40. package/CODE_OF_CONDUCT.md +0 -39
  41. package/CONTRIBUTING.md +0 -59
  42. package/HONEYPOT.md +0 -358
  43. package/SECURITY.md +0 -33
  44. package/benchmark-results.txt +0 -40
  45. package/benchmark-virtualshell.ts +0 -88
  46. package/biome.json +0 -37
  47. package/build.js +0 -22
  48. package/builds/fortune-nyx-v1.5.3-directbash-k6.1.0.mjs +0 -1764
  49. package/builds/fortune-nyx-v1.5.3-ssh-nosftp.js +0 -1764
  50. package/builds/fortune-nyx-v1.5.3-ssh.cjs +0 -1765
  51. package/builds/fortune-nyx-v1.5.3-web.min.js +0 -17036
  52. package/bun.lock +0 -244
  53. package/docs/.nojekyll +0 -1
  54. package/docs/app.js +0 -1751
  55. package/docs/assets/hierarchy.js +0 -1
  56. package/docs/assets/highlight.css +0 -162
  57. package/docs/assets/icons.js +0 -18
  58. package/docs/assets/icons.svg +0 -1
  59. package/docs/assets/main.js +0 -60
  60. package/docs/assets/navigation.js +0 -1
  61. package/docs/assets/search.js +0 -1
  62. package/docs/assets/style.css +0 -1633
  63. package/docs/classes/HoneyPot.html +0 -31
  64. package/docs/classes/IdleManager.html +0 -162
  65. package/docs/classes/SshClient.html +0 -66
  66. package/docs/classes/VirtualFileSystem.html +0 -279
  67. package/docs/classes/VirtualPackageManager.html +0 -63
  68. package/docs/classes/VirtualSftpServer.html +0 -169
  69. package/docs/classes/VirtualShell.html +0 -285
  70. package/docs/classes/VirtualSshServer.html +0 -182
  71. package/docs/classes/VirtualUserManager.html +0 -276
  72. package/docs/demo.html +0 -82
  73. package/docs/functions/assertDiff.html +0 -6
  74. package/docs/functions/diffSnapshots.html +0 -7
  75. package/docs/functions/formatDiff.html +0 -6
  76. package/docs/functions/getArg.html +0 -13
  77. package/docs/functions/getFlag.html +0 -15
  78. package/docs/functions/ifFlag.html +0 -11
  79. package/docs/hierarchy.html +0 -1
  80. package/docs/index.html +0 -1869
  81. package/docs/interfaces/AuditLogEntry.html +0 -6
  82. package/docs/interfaces/CommandContext.html +0 -22
  83. package/docs/interfaces/CommandResult.html +0 -26
  84. package/docs/interfaces/ExecStream.html +0 -11
  85. package/docs/interfaces/HoneyPotStats.html +0 -16
  86. package/docs/interfaces/IdleManagerOptions.html +0 -7
  87. package/docs/interfaces/InstalledPackage.html +0 -20
  88. package/docs/interfaces/NanoEditorSession.html +0 -8
  89. package/docs/interfaces/PackageDefinition.html +0 -30
  90. package/docs/interfaces/PackageFile.html +0 -8
  91. package/docs/interfaces/PasswordChallenge.html +0 -16
  92. package/docs/interfaces/RemoveOptions.html +0 -4
  93. package/docs/interfaces/ShellEnv.html +0 -6
  94. package/docs/interfaces/ShellModule.html +0 -14
  95. package/docs/interfaces/ShellProperties.html +0 -14
  96. package/docs/interfaces/ShellStream.html +0 -11
  97. package/docs/interfaces/SudoChallenge.html +0 -24
  98. package/docs/interfaces/VfsBaseNode.html +0 -12
  99. package/docs/interfaces/VfsDiff.html +0 -10
  100. package/docs/interfaces/VfsDiffEntry.html +0 -6
  101. package/docs/interfaces/VfsDiffModified.html +0 -10
  102. package/docs/interfaces/VfsDirectoryNode.html +0 -15
  103. package/docs/interfaces/VfsFileNode.html +0 -17
  104. package/docs/interfaces/VfsOptions.html +0 -26
  105. package/docs/interfaces/VfsSnapshot.html +0 -3
  106. package/docs/interfaces/VfsSnapshotBaseNode.html +0 -8
  107. package/docs/interfaces/VfsSnapshotDirectoryNode.html +0 -10
  108. package/docs/interfaces/VfsSnapshotFileNode.html +0 -12
  109. package/docs/interfaces/VirtualActiveSession.html +0 -12
  110. package/docs/interfaces/VirtualSftpServerOptions.html +0 -7
  111. package/docs/interfaces/VirtualShellVfsLike.html +0 -15
  112. package/docs/interfaces/VirtualShellVfsOptions.html +0 -3
  113. package/docs/interfaces/WriteFileOptions.html +0 -6
  114. package/docs/media/LICENSE +0 -21
  115. package/docs/modules.html +0 -1
  116. package/docs/types/ArgParseOptions.html +0 -4
  117. package/docs/types/CommandMode.html +0 -2
  118. package/docs/types/CommandOutcome.html +0 -2
  119. package/docs/types/IdleState.html +0 -1
  120. package/docs/types/VfsNodeStats.html +0 -2
  121. package/docs/types/VfsNodeType.html +0 -2
  122. package/docs/types/VfsPersistenceMode.html +0 -5
  123. package/docs/types/VfsSnapshotNode.html +0 -2
  124. package/examples/README.md +0 -288
  125. package/examples/app.js +0 -1751
  126. package/examples/app.ts +0 -299
  127. package/examples/build.js +0 -27
  128. package/examples/demo.html +0 -33
  129. package/examples/honeypot-audit.ts +0 -180
  130. package/examples/honeypot-export.ts +0 -253
  131. package/examples/honeypot-quickstart.ts +0 -110
  132. package/examples/index.html +0 -82
  133. package/examples/server.js +0 -55
  134. package/polyfills/buffer.js +0 -117
  135. package/polyfills/node_child_process/index.js +0 -2
  136. package/polyfills/node_crypto/index.js +0 -167
  137. package/polyfills/node_events/index.js +0 -9
  138. package/polyfills/node_fs/index.js +0 -202
  139. package/polyfills/node_fs/promises.js +0 -4
  140. package/polyfills/node_os/index.js +0 -9
  141. package/polyfills/node_path/index.js +0 -28
  142. package/polyfills/node_vm/index.js +0 -7
  143. package/polyfills/node_zlib/index.js +0 -3
  144. package/polyfills/process.js +0 -14
  145. package/polyfills/ssh2/index.js +0 -75
  146. package/scripts/build-all.mjs +0 -226
  147. package/scripts/build-names.mjs +0 -43
  148. package/scripts/generate-manuals-bundle.mjs +0 -49
  149. package/scripts/postinstall.js +0 -42
  150. package/scripts/publish-package.sh +0 -70
  151. package/src/Honeypot/index.ts +0 -457
  152. package/src/SSHClient/index.ts +0 -270
  153. package/src/SSHMimic/exec.ts +0 -49
  154. package/src/SSHMimic/executor.ts +0 -251
  155. package/src/SSHMimic/hostKey.ts +0 -21
  156. package/src/SSHMimic/index.ts +0 -337
  157. package/src/SSHMimic/loginBanner.ts +0 -36
  158. package/src/SSHMimic/loginFormat.ts +0 -10
  159. package/src/SSHMimic/prompt.ts +0 -14
  160. package/src/SSHMimic/sftp.ts +0 -883
  161. package/src/VirtualFileSystem/binaryPack.ts +0 -258
  162. package/src/VirtualFileSystem/index.ts +0 -1193
  163. package/src/VirtualFileSystem/internalTypes.ts +0 -43
  164. package/src/VirtualFileSystem/journal.ts +0 -171
  165. package/src/VirtualFileSystem/path.ts +0 -74
  166. package/src/VirtualPackageManager/index.ts +0 -996
  167. package/src/VirtualShell/idleManager.ts +0 -137
  168. package/src/VirtualShell/index.ts +0 -475
  169. package/src/VirtualShell/shell.ts +0 -700
  170. package/src/VirtualShell/shellParser.ts +0 -285
  171. package/src/VirtualUserManager/index.ts +0 -758
  172. package/src/bun.d.ts +0 -1
  173. package/src/commands/adduser.ts +0 -103
  174. package/src/commands/alias.ts +0 -69
  175. package/src/commands/apt.ts +0 -233
  176. package/src/commands/awk.ts +0 -168
  177. package/src/commands/base64.ts +0 -29
  178. package/src/commands/cat.ts +0 -52
  179. package/src/commands/cd.ts +0 -25
  180. package/src/commands/chmod.ts +0 -85
  181. package/src/commands/clear.ts +0 -15
  182. package/src/commands/command-helpers.ts +0 -286
  183. package/src/commands/cp.ts +0 -83
  184. package/src/commands/curl.ts +0 -147
  185. package/src/commands/cut.ts +0 -36
  186. package/src/commands/date.ts +0 -30
  187. package/src/commands/declare.ts +0 -49
  188. package/src/commands/deluser.ts +0 -98
  189. package/src/commands/df.ts +0 -23
  190. package/src/commands/diff.ts +0 -43
  191. package/src/commands/dpkg.ts +0 -180
  192. package/src/commands/du.ts +0 -56
  193. package/src/commands/echo.ts +0 -58
  194. package/src/commands/env.ts +0 -23
  195. package/src/commands/exit.ts +0 -18
  196. package/src/commands/export.ts +0 -34
  197. package/src/commands/find.ts +0 -68
  198. package/src/commands/free.ts +0 -47
  199. package/src/commands/grep.ts +0 -116
  200. package/src/commands/groups.ts +0 -19
  201. package/src/commands/gzip.ts +0 -88
  202. package/src/commands/head.ts +0 -52
  203. package/src/commands/help.ts +0 -152
  204. package/src/commands/helpers.ts +0 -234
  205. package/src/commands/history.ts +0 -34
  206. package/src/commands/hostname.ts +0 -14
  207. package/src/commands/htop.ts +0 -20
  208. package/src/commands/id.ts +0 -19
  209. package/src/commands/index.ts +0 -9
  210. package/src/commands/kill.ts +0 -19
  211. package/src/commands/ln.ts +0 -71
  212. package/src/commands/ls.ts +0 -243
  213. package/src/commands/lsb-release.ts +0 -63
  214. package/src/commands/man.ts +0 -31
  215. package/src/commands/manuals/adduser.txt +0 -11
  216. package/src/commands/manuals/apt-cache.txt +0 -12
  217. package/src/commands/manuals/apt.txt +0 -20
  218. package/src/commands/manuals/awk.txt +0 -13
  219. package/src/commands/manuals/cat.txt +0 -14
  220. package/src/commands/manuals/cd.txt +0 -16
  221. package/src/commands/manuals/chmod.txt +0 -16
  222. package/src/commands/manuals/clear.txt +0 -10
  223. package/src/commands/manuals/cp.txt +0 -10
  224. package/src/commands/manuals/curl.txt +0 -20
  225. package/src/commands/manuals/date.txt +0 -14
  226. package/src/commands/manuals/declare.txt +0 -12
  227. package/src/commands/manuals/deluser.txt +0 -10
  228. package/src/commands/manuals/df.txt +0 -10
  229. package/src/commands/manuals/dpkg-query.txt +0 -11
  230. package/src/commands/manuals/dpkg.txt +0 -14
  231. package/src/commands/manuals/du.txt +0 -11
  232. package/src/commands/manuals/echo.txt +0 -11
  233. package/src/commands/manuals/false.txt +0 -10
  234. package/src/commands/manuals/find.txt +0 -11
  235. package/src/commands/manuals/free.txt +0 -12
  236. package/src/commands/manuals/grep.txt +0 -13
  237. package/src/commands/manuals/groups.txt +0 -10
  238. package/src/commands/manuals/gzip.txt +0 -11
  239. package/src/commands/manuals/head.txt +0 -10
  240. package/src/commands/manuals/help.txt +0 -11
  241. package/src/commands/manuals/history.txt +0 -11
  242. package/src/commands/manuals/hostname.txt +0 -10
  243. package/src/commands/manuals/id.txt +0 -10
  244. package/src/commands/manuals/kill.txt +0 -13
  245. package/src/commands/manuals/ls.txt +0 -20
  246. package/src/commands/manuals/lsb_release.txt +0 -14
  247. package/src/commands/manuals/mkdir.txt +0 -10
  248. package/src/commands/manuals/mv.txt +0 -10
  249. package/src/commands/manuals/nano.txt +0 -11
  250. package/src/commands/manuals/neofetch.txt +0 -10
  251. package/src/commands/manuals/node.txt +0 -13
  252. package/src/commands/manuals/npm.txt +0 -13
  253. package/src/commands/manuals/npx.txt +0 -13
  254. package/src/commands/manuals/passwd.txt +0 -11
  255. package/src/commands/manuals/ping.txt +0 -10
  256. package/src/commands/manuals/printf.txt +0 -11
  257. package/src/commands/manuals/ps.txt +0 -10
  258. package/src/commands/manuals/pwd.txt +0 -10
  259. package/src/commands/manuals/python3.txt +0 -13
  260. package/src/commands/manuals/readlink.txt +0 -10
  261. package/src/commands/manuals/return.txt +0 -10
  262. package/src/commands/manuals/rm.txt +0 -10
  263. package/src/commands/manuals/sed.txt +0 -11
  264. package/src/commands/manuals/set.txt +0 -11
  265. package/src/commands/manuals/shift.txt +0 -10
  266. package/src/commands/manuals/sleep.txt +0 -10
  267. package/src/commands/manuals/sort.txt +0 -12
  268. package/src/commands/manuals/source.txt +0 -11
  269. package/src/commands/manuals/ssh.txt +0 -11
  270. package/src/commands/manuals/stat.txt +0 -10
  271. package/src/commands/manuals/su.txt +0 -13
  272. package/src/commands/manuals/sudo.txt +0 -11
  273. package/src/commands/manuals/tail.txt +0 -10
  274. package/src/commands/manuals/tar.txt +0 -19
  275. package/src/commands/manuals/tee.txt +0 -10
  276. package/src/commands/manuals/test.txt +0 -11
  277. package/src/commands/manuals/touch.txt +0 -11
  278. package/src/commands/manuals/tr.txt +0 -10
  279. package/src/commands/manuals/trap.txt +0 -10
  280. package/src/commands/manuals/true.txt +0 -10
  281. package/src/commands/manuals/type.txt +0 -10
  282. package/src/commands/manuals/uname.txt +0 -12
  283. package/src/commands/manuals/uniq.txt +0 -12
  284. package/src/commands/manuals/unset.txt +0 -10
  285. package/src/commands/manuals/uptime.txt +0 -11
  286. package/src/commands/manuals/wc.txt +0 -12
  287. package/src/commands/manuals/wget.txt +0 -12
  288. package/src/commands/manuals/which.txt +0 -10
  289. package/src/commands/manuals/whoami.txt +0 -10
  290. package/src/commands/manuals/xargs.txt +0 -10
  291. package/src/commands/manuals-bundle.ts +0 -898
  292. package/src/commands/mkdir.ts +0 -31
  293. package/src/commands/mv.ts +0 -50
  294. package/src/commands/nano.ts +0 -38
  295. package/src/commands/neofetch.ts +0 -53
  296. package/src/commands/node.ts +0 -341
  297. package/src/commands/npm.ts +0 -132
  298. package/src/commands/passwd.ts +0 -50
  299. package/src/commands/ping.ts +0 -32
  300. package/src/commands/printf.ts +0 -129
  301. package/src/commands/ps.ts +0 -58
  302. package/src/commands/pwd.ts +0 -9
  303. package/src/commands/python.ts +0 -2229
  304. package/src/commands/read.ts +0 -46
  305. package/src/commands/registry.ts +0 -249
  306. package/src/commands/rm.ts +0 -42
  307. package/src/commands/runtime.ts +0 -421
  308. package/src/commands/sed.ts +0 -68
  309. package/src/commands/seq.ts +0 -43
  310. package/src/commands/set.ts +0 -29
  311. package/src/commands/sh.ts +0 -467
  312. package/src/commands/shift.ts +0 -63
  313. package/src/commands/sleep.ts +0 -20
  314. package/src/commands/sort.ts +0 -46
  315. package/src/commands/source.ts +0 -52
  316. package/src/commands/stat.ts +0 -61
  317. package/src/commands/su.ts +0 -72
  318. package/src/commands/sudo.ts +0 -76
  319. package/src/commands/tail.ts +0 -53
  320. package/src/commands/tar.ts +0 -102
  321. package/src/commands/tee.ts +0 -36
  322. package/src/commands/test.ts +0 -137
  323. package/src/commands/touch.ts +0 -28
  324. package/src/commands/tr.ts +0 -70
  325. package/src/commands/tree.ts +0 -20
  326. package/src/commands/true.ts +0 -27
  327. package/src/commands/type.ts +0 -48
  328. package/src/commands/uname.ts +0 -29
  329. package/src/commands/uniq.ts +0 -39
  330. package/src/commands/unset.ts +0 -17
  331. package/src/commands/uptime.ts +0 -54
  332. package/src/commands/wc.ts +0 -55
  333. package/src/commands/wget.ts +0 -148
  334. package/src/commands/which.ts +0 -37
  335. package/src/commands/who.ts +0 -25
  336. package/src/commands/whoami.ts +0 -14
  337. package/src/commands/xargs.ts +0 -31
  338. package/src/index.ts +0 -67
  339. package/src/modules/linuxRootfs.ts +0 -1961
  340. package/src/modules/neofetch.ts +0 -358
  341. package/src/modules/shellInteractive.ts +0 -57
  342. package/src/modules/shellRuntime.ts +0 -76
  343. package/src/self-standalone.ts +0 -542
  344. package/src/standalone-wo-sftp.ts +0 -38
  345. package/src/standalone.ts +0 -72
  346. package/src/types/commands.ts +0 -146
  347. package/src/types/pipeline.ts +0 -52
  348. package/src/types/streams.ts +0 -32
  349. package/src/types/tar-stream.d.ts +0 -38
  350. package/src/types/vfs.ts +0 -98
  351. package/src/utils/expand.ts +0 -491
  352. package/src/utils/perfLogger.ts +0 -72
  353. package/src/utils/tokenize.ts +0 -98
  354. package/src/utils/vfsDiff.ts +0 -275
  355. package/tests/command-helpers.test.ts +0 -116
  356. package/tests/commands-admin-net.test.ts +0 -441
  357. package/tests/commands-advanced.test.ts +0 -456
  358. package/tests/commands-core.test.ts +0 -562
  359. package/tests/commands-missing.test.ts +0 -570
  360. package/tests/commands-specific-units.test.ts +0 -327
  361. package/tests/commands-text-sys.test.ts +0 -445
  362. package/tests/expand.test.ts +0 -170
  363. package/tests/helpers.test.ts +0 -97
  364. package/tests/new-features.test.ts +0 -1036
  365. package/tests/parser-executor.test.ts +0 -37
  366. package/tests/sftp.test.ts +0 -323
  367. package/tests/ssh-exec.test.ts +0 -45
  368. package/tests/test-helper.ts +0 -79
  369. package/tests/users.test.ts +0 -86
  370. package/tsconfig.json +0 -49
  371. package/typedoc.json +0 -47
package/HONEYPOT.md DELETED
@@ -1,358 +0,0 @@
1
- # HoneyPot Implementation Guide
2
-
3
- ## Overview
4
-
5
- The `HoneyPot` class is a comprehensive auditing and event tracking utility that monitors all activity across your virtual environment. It provides real-time event logging, statistics collection, and anomaly detection.
6
-
7
- ## Installation
8
-
9
- `HoneyPot` is included in the main `typescript-virtual-container` package:
10
-
11
- ```bash
12
- npm install typescript-virtual-container
13
- ```
14
-
15
- Then import it:
16
-
17
- ```typescript
18
- import { HoneyPot } from "typescript-virtual-container";
19
- ```
20
-
21
- ## Basic Setup
22
-
23
- ### Step 1: Create Your Environment
24
-
25
- ```typescript
26
- import {
27
- VirtualSshServer,
28
- VirtualShell,
29
- HoneyPot,
30
- } from "typescript-virtual-container";
31
-
32
- // Create shell and SSH server
33
- const shell = new VirtualShell("my-environment");
34
- const ssh = new VirtualSshServer({ port: 2222, shell });
35
- await ssh.start();
36
-
37
- // Get references to key components
38
- const users = ssh.getUsers()!;
39
- const vfs = ssh.getVfs()!;
40
- ```
41
-
42
- ### Step 2: Initialize HoneyPot
43
-
44
- ```typescript
45
- // Create HoneyPot with optional log size limit
46
- const honeypot = new HoneyPot(5000); // Keep last 5000 entries
47
- ```
48
-
49
- ### Step 3: Attach to Components
50
-
51
- ```typescript
52
- // Attach HoneyPot to all components
53
- // Now all events are automatically tracked
54
- honeypot.attach(shell, vfs, users, ssh);
55
- ```
56
-
57
- ## Core Operations
58
-
59
- ### Collecting Statistics
60
-
61
- ```typescript
62
- const stats = honeypot.getStats();
63
-
64
- console.log(`Successful logins: ${stats.authSuccesses}`);
65
- console.log(`Failed logins: ${stats.authFailures}`);
66
- console.log(`Commands executed: ${stats.commands}`);
67
- console.log(`File operations: ${stats.fileWrites + stats.fileReads}`);
68
- ```
69
-
70
- ### Retrieving Audit Logs
71
-
72
- ```typescript
73
- // Get all entries
74
- const allEntries = honeypot.getAuditLog();
75
-
76
- // Filter by event type
77
- const authFailures = honeypot.getAuditLog("auth:failure");
78
-
79
- // Filter by source component
80
- const sshEvents = honeypot.getAuditLog(undefined, "SshMimic");
81
-
82
- // Combined filter
83
- const sshAuthEvents = honeypot.getAuditLog("auth:success", "SshMimic");
84
- ```
85
-
86
- ### Getting Recent Events
87
-
88
- ```typescript
89
- // Last 10 events (default)
90
- const recent10 = honeypot.getRecent();
91
-
92
- // Last 100 events
93
- const recent100 = honeypot.getRecent(100);
94
-
95
- // Process events
96
- recent100.forEach((entry) => {
97
- console.log(`[${entry.timestamp}] ${entry.source}: ${entry.type}`);
98
- console.log(` Details: ${JSON.stringify(entry.details)}`);
99
- });
100
- ```
101
-
102
- ### Detecting Anomalies
103
-
104
- ```typescript
105
- const anomalies = honeypot.detectAnomalies();
106
-
107
- anomalies.forEach((anomaly) => {
108
- console.log(`Severity: ${anomaly.severity}`);
109
- console.log(`Type: ${anomaly.type}`);
110
- console.log(`Message: ${anomaly.message}`);
111
- });
112
-
113
- // Severity levels: "low", "medium", "high"
114
- ```
115
-
116
- ## Common Patterns
117
-
118
- ### Pattern 1: Real-Time Monitoring
119
-
120
- ```typescript
121
- async function monitorAuthAttempts() {
122
- const honeypot = new HoneyPot();
123
- honeypot.attach(shell, vfs, users, ssh);
124
-
125
- // Monitor continuously
126
- setInterval(() => {
127
- const stats = honeypot.getStats();
128
-
129
- if (stats.authFailures > 10) {
130
- console.log("🚨 High number of failed auth attempts!");
131
- const failures = honeypot.getAuditLog("auth:failure");
132
- console.log(failures.map((f) => f.details.username));
133
- }
134
- }, 5000); // Check every 5 seconds
135
- }
136
- ```
137
-
138
- ### Pattern 2: Post-Execution Analysis
139
-
140
- ```typescript
141
- async function runTestAndAnalyze() {
142
- const shell = new VirtualShell("test-env");
143
- const ssh = new VirtualSshServer({ port: 2222, shell });
144
- await ssh.start();
145
-
146
- const honeypot = new HoneyPot();
147
- honeypot.attach(shell, vfs, users, ssh);
148
-
149
- // ... run your tests/operations ...
150
-
151
- // Generate report
152
- const report = {
153
- executedAt: new Date().toISOString(),
154
- statistics: honeypot.getStats(),
155
- anomalies: honeypot.detectAnomalies(),
156
- allEvents: honeypot.getAuditLog(),
157
- };
158
-
159
- return report;
160
- }
161
- ```
162
-
163
- ### Pattern 3: Security Analysis by User
164
-
165
- ```typescript
166
- function analyzeUserActivity(honeypot, username) {
167
- // Get all events related to this user
168
- const userEvents = honeypot
169
- .getAuditLog()
170
- .filter((entry) => entry.details.username === username);
171
-
172
- const analysis = {
173
- totalActions: userEvents.length,
174
- fileWrites: userEvents.filter(
175
- (e) => e.type === "file:write",
176
- ).length,
177
- failedAuthAttempts: userEvents.filter(
178
- (e) => e.type === "auth:failure",
179
- ).length,
180
- commands: userEvents.filter((e) => e.type === "command").length,
181
- timeline: userEvents.map((e) => ({
182
- time: e.timestamp,
183
- action: e.type,
184
- details: e.details,
185
- })),
186
- };
187
-
188
- return analysis;
189
- }
190
- ```
191
-
192
- ### Pattern 4: Compliance Export
193
-
194
- ```typescript
195
- function generateComplianceReport(honeypot) {
196
- const timestamp = new Date().toISOString();
197
- const stats = honeypot.getStats();
198
-
199
- return {
200
- reportDate: timestamp,
201
- auditTrail: {
202
- totalEvents: stats.authAttempts + stats.commands,
203
- authenticationEvents: {
204
- attempts: stats.authAttempts,
205
- successes: stats.authSuccesses,
206
- failures: stats.authFailures,
207
- },
208
- commandExecution: {
209
- total: stats.commands,
210
- fileOperations: stats.fileWrites + stats.fileReads,
211
- },
212
- },
213
- anomalyDetection: honeypot.detectAnomalies(),
214
- detailedLog: honeypot.getAuditLog(),
215
- };
216
- }
217
- ```
218
-
219
- ## Event Types
220
-
221
- ### Authentication Events
222
-
223
- - `auth:success` - User authenticated successfully
224
- - `auth:failure` - Authentication failed
225
-
226
- ### File System Events
227
-
228
- - `file:read` - File read operation
229
- - `file:write` - File write operation
230
- - `dir:create` - Directory created
231
-
232
- ### User Management Events
233
-
234
- - `user:add` - User account created
235
- - `user:delete` - User account deleted
236
-
237
- ### Session Events
238
-
239
- - `session:register` - Session started
240
- - `session:unregister` - Session ended
241
-
242
- ### Command Execution
243
-
244
- - `command` - Command executed
245
-
246
- ## Integration Examples
247
-
248
- ### With a Database
249
-
250
- ```typescript
251
- const honeypot = new HoneyPot();
252
- honeypot.attach(shell, vfs, users, ssh);
253
-
254
- // Later, export to database
255
- async function exportToDatabase() {
256
- const entries = honeypot.getAuditLog();
257
-
258
- for (const entry of entries) {
259
- await db.collection("audit_logs").insertOne({
260
- timestamp: entry.timestamp,
261
- type: entry.type,
262
- source: entry.source,
263
- details: entry.details,
264
- });
265
- }
266
- }
267
- ```
268
-
269
- ### With a Logging Service
270
-
271
- ```typescript
272
- const honeypot = new HoneyPot();
273
- honeypot.attach(shell, vfs, users, ssh);
274
-
275
- // Export to external logging
276
- const report = honeypot.getRecent(1000);
277
- await loggingService.send({
278
- environment: "production",
279
- auditTrail: report,
280
- timestamp: new Date().toISOString(),
281
- });
282
- ```
283
-
284
- ### With Monitoring/Alerting
285
-
286
- ```typescript
287
- const honeypot = new HoneyPot();
288
- honeypot.attach(shell, vfs, users, ssh);
289
-
290
- // Check for anomalies periodically
291
- setInterval(() => {
292
- const anomalies = honeypot.detectAnomalies();
293
-
294
- anomalies.forEach((a) => {
295
- if (a.severity === "high") {
296
- alerting.triggerAlert({
297
- type: a.type,
298
- message: a.message,
299
- timestamp: new Date().toISOString(),
300
- });
301
- }
302
- });
303
- }, 10000);
304
- ```
305
-
306
- ## Performance Considerations
307
-
308
- - HoneyPot maintains an in-memory buffer with configurable max size
309
- - Older entries are automatically trimmed when limit is reached
310
- - All operations are O(1) or O(n) where n is reasonable
311
- - Statistics computation is cached and efficient
312
- - For long-running processes, consider periodic exports and resets
313
-
314
- ## Cleanup and Reset
315
-
316
- ```typescript
317
- // Clear all logs and reset statistics
318
- honeypot.reset();
319
-
320
- // Continues to listen for new events after reset
321
- // Useful for clearing after each test phase
322
- ```
323
-
324
- ## Best Practices
325
-
326
- 1. **Initialize Early**: Attach HoneyPot right after creating components
327
- 2. **Export Regularly**: Don't rely solely on in-memory storage
328
- 3. **Monitor Continuously**: Use periodic checks for real-time monitoring
329
- 4. **Archive Audit Trails**: Save audit logs for compliance/forensics
330
- 5. **Set Appropriate Log Size**: Balance memory usage with data retention
331
- 6. **Use Filters**: Filter large logs by type or source for analysis
332
- 7. **Automate Anomaly Response**: Set up automated responses to detected anomalies
333
-
334
- ## Troubleshooting
335
-
336
- ### No events recorded?
337
-
338
- - Ensure `honeypot.attach()` is called after all components are initialized
339
- - Verify that actual operations are being performed (commands, file ops, etc.)
340
- - Check that components extend EventEmitter (they should by default)
341
-
342
- ### Memory growing?
343
-
344
- - Reduce `maxLogSize` in the constructor
345
- - Call `honeypot.reset()` between test phases
346
- - Export logs periodically to external storage
347
-
348
- ### Missing specific events?
349
-
350
- - Check the exact event name in the events list
351
- - Use `honeypot.getAuditLog()` to verify events exist
352
- - Filter by source and type to narrow down search
353
-
354
- ## See Also
355
-
356
- - [API Reference](../README.md#honeypot-auditing--event-tracking)
357
- - [Example 8: Security Auditing](../README.md#example-8-security-auditing-with-honeypot)
358
- - [Examples Directory](./README.md)
package/SECURITY.md DELETED
@@ -1,33 +0,0 @@
1
- # Security Policy
2
-
3
- ## Supported Versions
4
-
5
- Security fixes are prioritized for the latest published release.
6
-
7
- ## Reporting a Vulnerability
8
-
9
- Please report vulnerabilities privately.
10
-
11
- Preferred channel:
12
-
13
- - Open a private GitHub security advisory for this repository.
14
-
15
- If advisory tooling is unavailable, open an issue with minimal details and request private contact.
16
- Do not include exploit details or sensitive information in a public issue.
17
-
18
- ## What to Include
19
-
20
- Please include:
21
-
22
- - A clear description of the issue
23
- - Impact assessment
24
- - Reproduction steps or proof of concept
25
- - Affected versions
26
- - Suggested remediation if available
27
-
28
- ## Disclosure Process
29
-
30
- - We will acknowledge receipt as soon as possible.
31
- - We will validate, triage, and work on a fix.
32
- - We may request additional technical details.
33
- - We will publish a patch and release notes after remediation.
@@ -1,40 +0,0 @@
1
- Benchmarking VirtualShell concurrency:
2
-
3
- Running 1 shells...
4
- Initialized 1 shells in 58ms, RSS 98 MB
5
- Executed shell commands in 5ms, RSS now 98 MB (+1 MB)
6
-
7
- Running 2 shells...
8
- Initialized 2 shells in 10ms, RSS 102 MB
9
- Executed shell commands in 1ms, RSS now 102 MB (+0 MB)
10
-
11
- Running 5 shells...
12
- Initialized 5 shells in 21ms, RSS 113 MB
13
- Executed shell commands in 1ms, RSS now 113 MB (+0 MB)
14
-
15
- Running 10 shells...
16
- Initialized 10 shells in 43ms, RSS 132 MB
17
- Executed shell commands in 6ms, RSS now 132 MB (+1 MB)
18
-
19
- Running 20 shells...
20
- Initialized 20 shells in 107ms, RSS 150 MB
21
- Executed shell commands in 4ms, RSS now 150 MB (+0 MB)
22
-
23
- Running 50 shells...
24
- Initialized 50 shells in 177ms, RSS 178 MB
25
- Executed shell commands in 5ms, RSS now 179 MB (+0 MB)
26
-
27
- Running 100 shells...
28
- Initialized 100 shells in 302ms, RSS 190 MB
29
- Executed shell commands in 9ms, RSS now 190 MB (+0 MB)
30
-
31
- Summary:
32
-
33
- count init_ms cmd_ms init_rss final_rss delta_rss
34
- 1 58 5 98 MB 98 MB 1 MB
35
- 2 10 1 102 MB 102 MB 0 MB
36
- 5 21 1 113 MB 113 MB 0 MB
37
- 10 43 6 132 MB 132 MB 1 MB
38
- 20 107 4 150 MB 150 MB 0 MB
39
- 50 177 5 178 MB 179 MB 0 MB
40
- 100 302 9 190 MB 190 MB 0 MB
@@ -1,88 +0,0 @@
1
- #!/usr/bin/env bun
2
- import { VirtualShell } from "./src/index.ts";
3
-
4
- const counts = [1, 2, 5, 10, 20, 50, 100];
5
-
6
- function bytesToMb(bytes: number): string {
7
- return `${Math.round(bytes / 1024 / 1024)} MB`;
8
- }
9
-
10
- async function createShell(baseName: string, index: number): Promise<VirtualShell> {
11
- const shell = new VirtualShell(`${baseName}-${index}`, undefined, {
12
- mode: "memory",
13
- });
14
- await shell.ensureInitialized();
15
- return shell;
16
- }
17
-
18
- async function runSingleBenchmark(count: number) {
19
- const label = `shells-${count}`;
20
- const start = Date.now();
21
- const shells: VirtualShell[] = await Promise.all(
22
- Array.from({ length: count }, (_, index) => createShell(label, index)),
23
- );
24
- const initMs = Date.now() - start;
25
- const initRss = process.memoryUsage().rss;
26
-
27
- const commandStart = Date.now();
28
- await Promise.all(
29
- shells.map(async (shell, index) => {
30
- const cwd = "/home/root";
31
- shell.executeCommand(`mkdir -p /tmp/benchmark-${index}`, "root", cwd);
32
- shell.executeCommand(
33
- `echo "hello ${index}" > /tmp/benchmark-${index}/result.txt`,
34
- "root",
35
- cwd,
36
- );
37
- shell.executeCommand(
38
- `cat /tmp/benchmark-${index}/result.txt`,
39
- "root",
40
- cwd,
41
- );
42
- }),
43
- );
44
- const commandMs = Date.now() - commandStart;
45
- const finalRss = process.memoryUsage().rss;
46
-
47
- return {
48
- count,
49
- initMs,
50
- commandMs,
51
- initRss,
52
- finalRss,
53
- deltaRss: finalRss - initRss,
54
- };
55
- }
56
-
57
- async function main() {
58
-
59
- console.log("Benchmarking VirtualShell concurrency:\n");
60
- const results = [];
61
- for (const count of counts) {
62
- console.log(`Running ${count} shells...`);
63
- const result = await runSingleBenchmark(count);
64
- results.push(result);
65
- console.log(
66
- ` Initialized ${count} shells in ${result.initMs}ms, RSS ${bytesToMb(result.initRss)}`,
67
- );
68
- console.log(
69
- ` Executed shell commands in ${result.commandMs}ms, RSS now ${bytesToMb(result.finalRss)} (+${bytesToMb(result.deltaRss)})`,
70
- );
71
- console.log("");
72
- }
73
-
74
- console.log("Summary:\n");
75
- console.log(
76
- "count\tinit_ms\tcmd_ms\tinit_rss\tfinal_rss\tdelta_rss",
77
- );
78
- for (const row of results) {
79
- console.log(
80
- `${row.count}\t${row.initMs}\t${row.commandMs}\t${bytesToMb(row.initRss)}\t${bytesToMb(row.finalRss)}\t${bytesToMb(row.deltaRss)}`,
81
- );
82
- }
83
- }
84
-
85
- main().catch((error) => {
86
- console.error(error);
87
- process.exit(1);
88
- });
package/biome.json DELETED
@@ -1,37 +0,0 @@
1
- {
2
- "assist": {
3
- "actions": {
4
- "source": {
5
- "organizeImports": "off"
6
- }
7
- }
8
- },
9
- "linter": {
10
- "rules": {
11
- "suspicious": {
12
- "noDebugger": "off"
13
- },
14
- "style": {
15
- "noShoutyConstants": "warn",
16
- "useNamingConvention": "error",
17
- "noNonNullAssertion": "off"
18
- }
19
- }
20
- },
21
- "formatter": {
22
- "enabled": false,
23
- "formatWithErrors": false,
24
- "attributePosition": "auto",
25
- "indentStyle": "tab",
26
- "indentWidth": 2,
27
- "lineWidth": 80,
28
- "lineEnding": "lf"
29
- },
30
- "files": {
31
- "ignoreUnknown": true,
32
- "includes": [
33
- "**/*.ts",
34
- "**/*.tsx"
35
- ]
36
- }
37
- }
package/build.js DELETED
@@ -1,22 +0,0 @@
1
- import esbuild from 'esbuild';
2
- import { NAMES } from './scripts/build-names.mjs';
3
-
4
- await esbuild.build({
5
- entryPoints: ['src/index.ts'],
6
- bundle: true,
7
- format: 'esm',
8
- outfile: `builds/${NAMES.web}`,
9
- platform: 'browser',
10
- alias: {
11
- 'node:events': './polyfills/node_events/index.js',
12
- 'node:path': './polyfills/node_path/index.js',
13
- 'node:os': './polyfills/node_os/index.js',
14
- 'node:fs': './polyfills/node_fs/index.js',
15
- 'node:fs/promises': './polyfills/node_fs/promises.js',
16
- 'node:crypto': './polyfills/node_crypto/index.js',
17
- 'node:child_process': './polyfills/node_child_process/index.js',
18
- 'node:zlib': './polyfills/node_zlib/index.js',
19
- 'node:vm': './polyfills/node_vm/index.js',
20
- 'ssh2': './polyfills/ssh2/index.js',
21
- }, inject: ['./polyfills/process.js', './polyfills/buffer.js'],
22
- });