@neurosec/sentry 1.0.20 → 1.1.1

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 (192) hide show
  1. package/README.md +4 -0
  2. package/dist/api-auth.d.ts +31 -0
  3. package/dist/api-auth.d.ts.map +1 -0
  4. package/dist/api-auth.js +105 -0
  5. package/dist/api-auth.js.map +1 -0
  6. package/dist/api-auth.test.d.ts +2 -0
  7. package/dist/api-auth.test.d.ts.map +1 -0
  8. package/dist/api-auth.test.js +89 -0
  9. package/dist/api-auth.test.js.map +1 -0
  10. package/dist/api.d.ts +8 -7
  11. package/dist/api.d.ts.map +1 -1
  12. package/dist/api.js +141 -134
  13. package/dist/api.js.map +1 -1
  14. package/dist/cli.d.ts +1 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +107 -14
  17. package/dist/cli.js.map +1 -1
  18. package/dist/cli.test.d.ts +2 -0
  19. package/dist/cli.test.d.ts.map +1 -0
  20. package/dist/cli.test.js +68 -0
  21. package/dist/cli.test.js.map +1 -0
  22. package/dist/config.d.ts +30 -0
  23. package/dist/config.d.ts.map +1 -1
  24. package/dist/config.js +68 -2
  25. package/dist/config.js.map +1 -1
  26. package/dist/config.test.d.ts +2 -0
  27. package/dist/config.test.d.ts.map +1 -0
  28. package/dist/config.test.js +121 -0
  29. package/dist/config.test.js.map +1 -0
  30. package/dist/discovery-win.d.ts +4 -0
  31. package/dist/discovery-win.d.ts.map +1 -0
  32. package/dist/discovery-win.js +153 -0
  33. package/dist/discovery-win.js.map +1 -0
  34. package/dist/discovery.d.ts.map +1 -1
  35. package/dist/discovery.js +23 -97
  36. package/dist/discovery.js.map +1 -1
  37. package/dist/discovery.test.js +18 -109
  38. package/dist/discovery.test.js.map +1 -1
  39. package/dist/enforcement/file-monitor.d.ts +9 -0
  40. package/dist/enforcement/file-monitor.d.ts.map +1 -1
  41. package/dist/enforcement/file-monitor.js +9 -2
  42. package/dist/enforcement/file-monitor.js.map +1 -1
  43. package/dist/enforcement/network-monitor.d.ts.map +1 -1
  44. package/dist/enforcement/network-monitor.js +350 -9
  45. package/dist/enforcement/network-monitor.js.map +1 -1
  46. package/dist/enforcement/network-monitor.test.d.ts +2 -0
  47. package/dist/enforcement/network-monitor.test.d.ts.map +1 -0
  48. package/dist/enforcement/network-monitor.test.js +52 -0
  49. package/dist/enforcement/network-monitor.test.js.map +1 -0
  50. package/dist/enforcement/policy-executor.d.ts +24 -1
  51. package/dist/enforcement/policy-executor.d.ts.map +1 -1
  52. package/dist/enforcement/policy-executor.js +213 -69
  53. package/dist/enforcement/policy-executor.js.map +1 -1
  54. package/dist/enforcement/policy-executor.test.d.ts +2 -0
  55. package/dist/enforcement/policy-executor.test.d.ts.map +1 -0
  56. package/dist/enforcement/policy-executor.test.js +46 -0
  57. package/dist/enforcement/policy-executor.test.js.map +1 -0
  58. package/dist/enforcement/target-validator.d.ts +37 -0
  59. package/dist/enforcement/target-validator.d.ts.map +1 -0
  60. package/dist/enforcement/target-validator.js +0 -0
  61. package/dist/enforcement/target-validator.js.map +1 -0
  62. package/dist/enforcement/target-validator.test.d.ts +2 -0
  63. package/dist/enforcement/target-validator.test.d.ts.map +1 -0
  64. package/dist/enforcement/target-validator.test.js +103 -0
  65. package/dist/enforcement/target-validator.test.js.map +1 -0
  66. package/dist/http-client.d.ts +35 -0
  67. package/dist/http-client.d.ts.map +1 -0
  68. package/dist/http-client.js +179 -0
  69. package/dist/http-client.js.map +1 -0
  70. package/dist/http-client.test.d.ts +2 -0
  71. package/dist/http-client.test.d.ts.map +1 -0
  72. package/dist/http-client.test.js +175 -0
  73. package/dist/http-client.test.js.map +1 -0
  74. package/dist/index.js +190 -114
  75. package/dist/index.js.map +1 -1
  76. package/dist/launcher.d.ts +33 -0
  77. package/dist/launcher.d.ts.map +1 -0
  78. package/dist/launcher.js +425 -0
  79. package/dist/launcher.js.map +1 -0
  80. package/dist/launcher.test.d.ts +2 -0
  81. package/dist/launcher.test.d.ts.map +1 -0
  82. package/dist/launcher.test.js +109 -0
  83. package/dist/launcher.test.js.map +1 -0
  84. package/dist/proxy/cert-manager.d.ts +24 -0
  85. package/dist/proxy/cert-manager.d.ts.map +1 -0
  86. package/dist/proxy/cert-manager.js +117 -0
  87. package/dist/proxy/cert-manager.js.map +1 -0
  88. package/dist/proxy/cert-manager.test.d.ts +2 -0
  89. package/dist/proxy/cert-manager.test.d.ts.map +1 -0
  90. package/dist/proxy/cert-manager.test.js +70 -0
  91. package/dist/proxy/cert-manager.test.js.map +1 -0
  92. package/dist/proxy/index.d.ts +61 -0
  93. package/dist/proxy/index.d.ts.map +1 -0
  94. package/dist/proxy/index.js +74 -0
  95. package/dist/proxy/index.js.map +1 -0
  96. package/dist/proxy/policy-enforcer.d.ts +30 -0
  97. package/dist/proxy/policy-enforcer.d.ts.map +1 -0
  98. package/dist/proxy/policy-enforcer.js +143 -0
  99. package/dist/proxy/policy-enforcer.js.map +1 -0
  100. package/dist/proxy/proxy-server.d.ts +42 -0
  101. package/dist/proxy/proxy-server.d.ts.map +1 -0
  102. package/dist/proxy/proxy-server.js +652 -0
  103. package/dist/proxy/proxy-server.js.map +1 -0
  104. package/dist/proxy/redaction-engine.d.ts +4 -0
  105. package/dist/proxy/redaction-engine.d.ts.map +1 -0
  106. package/dist/proxy/redaction-engine.js +50 -0
  107. package/dist/proxy/redaction-engine.js.map +1 -0
  108. package/dist/proxy/response-redaction.test.d.ts +2 -0
  109. package/dist/proxy/response-redaction.test.d.ts.map +1 -0
  110. package/dist/proxy/response-redaction.test.js +125 -0
  111. package/dist/proxy/response-redaction.test.js.map +1 -0
  112. package/dist/proxy/threat-engine.d.ts +22 -0
  113. package/dist/proxy/threat-engine.d.ts.map +1 -0
  114. package/dist/proxy/threat-engine.js +291 -0
  115. package/dist/proxy/threat-engine.js.map +1 -0
  116. package/dist/proxy/threat-engine.test.d.ts +2 -0
  117. package/dist/proxy/threat-engine.test.d.ts.map +1 -0
  118. package/dist/proxy/threat-engine.test.js +27 -0
  119. package/dist/proxy/threat-engine.test.js.map +1 -0
  120. package/dist/redirect/env-injector.d.ts +72 -0
  121. package/dist/redirect/env-injector.d.ts.map +1 -0
  122. package/dist/redirect/env-injector.js +177 -0
  123. package/dist/redirect/env-injector.js.map +1 -0
  124. package/dist/redirect/env-injector.test.d.ts +2 -0
  125. package/dist/redirect/env-injector.test.d.ts.map +1 -0
  126. package/dist/redirect/env-injector.test.js +91 -0
  127. package/dist/redirect/env-injector.test.js.map +1 -0
  128. package/dist/redirect/index.d.ts +3 -0
  129. package/dist/redirect/index.d.ts.map +1 -0
  130. package/dist/redirect/index.js +8 -0
  131. package/dist/redirect/index.js.map +1 -0
  132. package/dist/redirect/platform-redirect.d.ts +42 -0
  133. package/dist/redirect/platform-redirect.d.ts.map +1 -0
  134. package/dist/redirect/platform-redirect.js +229 -0
  135. package/dist/redirect/platform-redirect.js.map +1 -0
  136. package/dist/redirect/platform-redirect.test.d.ts +2 -0
  137. package/dist/redirect/platform-redirect.test.d.ts.map +1 -0
  138. package/dist/redirect/platform-redirect.test.js +76 -0
  139. package/dist/redirect/platform-redirect.test.js.map +1 -0
  140. package/dist/sandbox/index.d.ts +23 -2
  141. package/dist/sandbox/index.d.ts.map +1 -1
  142. package/dist/sandbox/index.js +24 -7
  143. package/dist/sandbox/index.js.map +1 -1
  144. package/dist/sandbox/linux-sandbox.d.ts +13 -2
  145. package/dist/sandbox/linux-sandbox.d.ts.map +1 -1
  146. package/dist/sandbox/linux-sandbox.js +61 -27
  147. package/dist/sandbox/linux-sandbox.js.map +1 -1
  148. package/dist/sandbox/macos-sandbox.d.ts +15 -4
  149. package/dist/sandbox/macos-sandbox.d.ts.map +1 -1
  150. package/dist/sandbox/macos-sandbox.js +36 -18
  151. package/dist/sandbox/macos-sandbox.js.map +1 -1
  152. package/dist/sandbox/sandbox-result.test.d.ts +2 -0
  153. package/dist/sandbox/sandbox-result.test.d.ts.map +1 -0
  154. package/dist/sandbox/sandbox-result.test.js +87 -0
  155. package/dist/sandbox/sandbox-result.test.js.map +1 -0
  156. package/dist/sandbox/windows-sandbox.d.ts +34 -0
  157. package/dist/sandbox/windows-sandbox.d.ts.map +1 -0
  158. package/dist/sandbox/windows-sandbox.js +161 -0
  159. package/dist/sandbox/windows-sandbox.js.map +1 -0
  160. package/dist/setup.d.ts.map +1 -1
  161. package/dist/setup.js +33 -43
  162. package/dist/setup.js.map +1 -1
  163. package/dist/skill-authz/skill-evaluator.d.ts +30 -0
  164. package/dist/skill-authz/skill-evaluator.d.ts.map +1 -1
  165. package/dist/skill-authz/skill-evaluator.js +161 -30
  166. package/dist/skill-authz/skill-evaluator.js.map +1 -1
  167. package/dist/skill-authz/skill-evaluator.test.d.ts +2 -0
  168. package/dist/skill-authz/skill-evaluator.test.d.ts.map +1 -0
  169. package/dist/skill-authz/skill-evaluator.test.js +127 -0
  170. package/dist/skill-authz/skill-evaluator.test.js.map +1 -0
  171. package/dist/telemetry.d.ts +2 -8
  172. package/dist/telemetry.d.ts.map +1 -1
  173. package/dist/telemetry.js +17 -147
  174. package/dist/telemetry.js.map +1 -1
  175. package/dist/types.d.ts +48 -105
  176. package/dist/types.d.ts.map +1 -1
  177. package/dist/types.js +34 -1
  178. package/dist/types.js.map +1 -1
  179. package/package.json +7 -3
  180. package/scripts/install-sentry-windows.ps1 +217 -0
  181. package/dist/action-logger.d.ts +0 -40
  182. package/dist/action-logger.d.ts.map +0 -1
  183. package/dist/action-logger.js +0 -252
  184. package/dist/action-logger.js.map +0 -1
  185. package/dist/agent-registry.d.ts +0 -24
  186. package/dist/agent-registry.d.ts.map +0 -1
  187. package/dist/agent-registry.js +0 -176
  188. package/dist/agent-registry.js.map +0 -1
  189. package/dist/anomaly-detector.d.ts +0 -26
  190. package/dist/anomaly-detector.d.ts.map +0 -1
  191. package/dist/anomaly-detector.js +0 -299
  192. package/dist/anomaly-detector.js.map +0 -1
@@ -1,176 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.AgentRegistry = void 0;
7
- const crypto_1 = require("crypto");
8
- const logger_1 = require("./logger");
9
- const promises_1 = __importDefault(require("fs/promises"));
10
- const path_1 = __importDefault(require("path"));
11
- class AgentRegistry {
12
- constructor(stateDir) {
13
- this.state = {
14
- identities: new Map(),
15
- constraints: new Map(),
16
- };
17
- this.dirty = false;
18
- this.stateDir = path_1.default.join(stateDir, 'agent-registry');
19
- }
20
- async init() {
21
- await promises_1.default.mkdir(this.stateDir, { recursive: true }).catch(() => { });
22
- await this.loadState();
23
- logger_1.logger.info('Agent registry initialized', { count: this.state.identities.size });
24
- }
25
- // ── Lifecycle: register / update / decommission ──────────────────────────
26
- registerOrUpdate(process, hostId) {
27
- const key = `${process.frameworkId}:${process.pid}`;
28
- const existing = this.state.identities.get(key);
29
- if (existing) {
30
- existing.lastSeenAt = Date.now();
31
- existing.pid = process.pid;
32
- this.dirty = true;
33
- return existing;
34
- }
35
- const identity = {
36
- id: (0, crypto_1.randomUUID)(),
37
- frameworkId: process.frameworkId,
38
- frameworkName: process.frameworkName,
39
- pid: process.pid,
40
- ppid: process.ppid,
41
- hostId,
42
- command: process.command,
43
- owner: '',
44
- ownerEmail: '',
45
- purpose: '',
46
- riskLevel: 'medium',
47
- status: 'active',
48
- firstDiscoveredAt: Date.now(),
49
- lastSeenAt: Date.now(),
50
- decommissionedAt: null,
51
- allowedTools: [],
52
- allowedDataClassifications: [],
53
- allowedDomains: [],
54
- maxDecisionScope: 'act_autonomously',
55
- documentation: {
56
- description: '',
57
- businessOwner: '',
58
- technicalContact: '',
59
- approvedUseCases: [],
60
- prohibitedUseCases: [],
61
- dataAccessRationale: '',
62
- escalationContact: '',
63
- reviewDate: '',
64
- complianceFrameworks: [],
65
- },
66
- };
67
- this.state.identities.set(key, identity);
68
- this.dirty = true;
69
- logger_1.logger.info('Agent registered', { framework: process.frameworkId, pid: process.pid });
70
- return identity;
71
- }
72
- decommission(frameworkId, pid) {
73
- const key = `${frameworkId}:${pid}`;
74
- const identity = this.state.identities.get(key);
75
- if (identity) {
76
- identity.status = 'decommissioned';
77
- identity.decommissionedAt = Date.now();
78
- this.dirty = true;
79
- logger_1.logger.info('Agent decommissioned', { framework: frameworkId, pid });
80
- }
81
- }
82
- quarantine(frameworkId, pid, reason) {
83
- const key = `${frameworkId}:${pid}`;
84
- const identity = this.state.identities.get(key);
85
- if (identity) {
86
- identity.status = 'quarantined';
87
- this.dirty = true;
88
- logger_1.logger.warn('Agent quarantined', { framework: frameworkId, pid, reason });
89
- }
90
- }
91
- // ── Documentation: Agent-on-a-Page ───────────────────────────────────────
92
- updateDocumentation(frameworkId, pid, docs) {
93
- const key = `${frameworkId}:${pid}`;
94
- const identity = this.state.identities.get(key);
95
- if (identity) {
96
- Object.assign(identity.documentation, docs);
97
- this.dirty = true;
98
- }
99
- }
100
- updateIdentity(frameworkId, pid, updates) {
101
- const key = `${frameworkId}:${pid}`;
102
- const identity = this.state.identities.get(key);
103
- if (identity) {
104
- Object.assign(identity, updates);
105
- this.dirty = true;
106
- }
107
- }
108
- // ── Constraints: AEGIS least-agency (Zero Trust Domain) ──────────────────
109
- setConstraint(constraint) {
110
- this.state.constraints.set(constraint.frameworkId, constraint);
111
- this.dirty = true;
112
- }
113
- getConstraint(frameworkId) {
114
- return this.state.constraints.get(frameworkId);
115
- }
116
- getMaxDecisionLevel(frameworkId) {
117
- return this.state.constraints.get(frameworkId)?.maxDecisionLevel ?? 'act_autonomously';
118
- }
119
- // ── Queries ──────────────────────────────────────────────────────────────
120
- getActiveIdentities() {
121
- return [...this.state.identities.values()]
122
- .filter(i => i.status === 'active' || i.status === 'idle');
123
- }
124
- getIdentity(frameworkId, pid) {
125
- return this.state.identities.get(`${frameworkId}:${pid}`);
126
- }
127
- getIdentityById(id) {
128
- return [...this.state.identities.values()].find(i => i.id === id);
129
- }
130
- getAllIdentities() {
131
- return [...this.state.identities.values()];
132
- }
133
- // AEGIS Agent-on-a-Page: return full documentation for governance review
134
- getAgentOnAPage(frameworkId, pid) {
135
- return this.getIdentity(frameworkId, pid) ?? null;
136
- }
137
- // ── Persistence ──────────────────────────────────────────────────────────
138
- async loadState() {
139
- try {
140
- const data = await promises_1.default.readFile(path_1.default.join(this.stateDir, 'registry.json'), 'utf8');
141
- const parsed = JSON.parse(data);
142
- if (parsed.identities) {
143
- for (const [k, v] of Object.entries(parsed.identities)) {
144
- this.state.identities.set(k, v);
145
- }
146
- }
147
- if (parsed.constraints) {
148
- for (const [k, v] of Object.entries(parsed.constraints)) {
149
- this.state.constraints.set(k, v);
150
- }
151
- }
152
- }
153
- catch {
154
- // fresh start
155
- }
156
- }
157
- async flush() {
158
- if (!this.dirty)
159
- return;
160
- try {
161
- const obj = {
162
- identities: Object.fromEntries(this.state.identities),
163
- constraints: Object.fromEntries(this.state.constraints),
164
- };
165
- const tmp = path_1.default.join(this.stateDir, `registry.tmp.${Date.now()}`);
166
- await promises_1.default.writeFile(tmp, JSON.stringify(obj, null, 2), 'utf8');
167
- await promises_1.default.rename(tmp, path_1.default.join(this.stateDir, 'registry.json'));
168
- this.dirty = false;
169
- }
170
- catch (err) {
171
- logger_1.logger.error('Failed to flush agent registry', { err: err.message });
172
- }
173
- }
174
- }
175
- exports.AgentRegistry = AgentRegistry;
176
- //# sourceMappingURL=agent-registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-registry.js","sourceRoot":"","sources":["../src/agent-registry.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import { AnomalyAlert, AgentAction, TaggedProcess } from './types';
2
- import { AuditLogger } from './audit';
3
- export declare class AnomalyDetector {
4
- private config;
5
- private auditLogger;
6
- private baselines;
7
- private actionBuffer;
8
- private alerts;
9
- private checkTimer;
10
- constructor(auditLogger: AuditLogger, hostId: string);
11
- start(): void;
12
- stop(): void;
13
- ingestAction(action: AgentAction): void;
14
- private establishBaseline;
15
- private detectDeviations;
16
- private checkFrequencyDeviation;
17
- private createAlert;
18
- private getRecommendation;
19
- private runCheck;
20
- getOpenAlerts(): AnomalyAlert[];
21
- getAllAlerts(): AnomalyAlert[];
22
- resolveAlert(alertId: string, resolvedBy: string): boolean;
23
- acknowledgeAlert(alertId: string): boolean;
24
- ingestProcesses(processes: TaggedProcess[]): void;
25
- }
26
- //# sourceMappingURL=anomaly-detector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"anomaly-detector.d.ts","sourceRoot":"","sources":["../src/anomaly-detector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAUtC,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,YAAY,CAAyC;IAC7D,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,UAAU,CAA+C;gBAErD,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM;IAUpD,KAAK,IAAI,IAAI;IAQb,IAAI,IAAI,IAAI;IASZ,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAgBvC,OAAO,CAAC,iBAAiB;IAqEzB,OAAO,CAAC,gBAAgB;IAsFxB,OAAO,CAAC,uBAAuB;IAwB/B,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,QAAQ;IA+ChB,aAAa,IAAI,YAAY,EAAE;IAI/B,YAAY,IAAI,YAAY,EAAE;IAI9B,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAW1D,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAS1C,eAAe,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI;CAUlD"}
@@ -1,299 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AnomalyDetector = void 0;
4
- const crypto_1 = require("crypto");
5
- const logger_1 = require("./logger");
6
- class AnomalyDetector {
7
- constructor(auditLogger, hostId) {
8
- this.baselines = new Map();
9
- this.actionBuffer = new Map();
10
- this.alerts = [];
11
- this.checkTimer = null;
12
- this.auditLogger = auditLogger;
13
- this.config = {
14
- hostId,
15
- minSamplesForBaseline: 10,
16
- deviationThreshold: 2.0,
17
- checkIntervalMs: 60000,
18
- };
19
- }
20
- start() {
21
- this.checkTimer = setInterval(() => this.runCheck(), this.config.checkIntervalMs);
22
- logger_1.logger.info('Anomaly detector started', {
23
- minSamples: this.config.minSamplesForBaseline,
24
- threshold: this.config.deviationThreshold,
25
- });
26
- }
27
- stop() {
28
- if (this.checkTimer) {
29
- clearInterval(this.checkTimer);
30
- this.checkTimer = null;
31
- }
32
- }
33
- // ── Feed actions into the detector ───────────────────────────────────────
34
- ingestAction(action) {
35
- const key = `${action.frameworkId}:${action.pid}`;
36
- if (!this.actionBuffer.has(key)) {
37
- this.actionBuffer.set(key, []);
38
- }
39
- this.actionBuffer.get(key).push(action);
40
- // Keep buffer bounded
41
- const buf = this.actionBuffer.get(key);
42
- if (buf.length > 1000) {
43
- buf.splice(0, buf.length - 500);
44
- }
45
- }
46
- // ── Behavioral baseline establishment ────────────────────────────────────
47
- establishBaseline(frameworkId, pid) {
48
- const key = `${frameworkId}:${pid}`;
49
- const actions = this.actionBuffer.get(key);
50
- if (!actions || actions.length < this.config.minSamplesForBaseline)
51
- return null;
52
- const now = Date.now();
53
- const windowMs = 300000; // 5 minute window for baseline
54
- const recent = actions.filter(a => (now - a.timestamp) < windowMs);
55
- if (recent.length < this.config.minSamplesForBaseline)
56
- return null;
57
- const minutesElapsed = Math.max(1, (now - recent[0].timestamp) / 60000);
58
- const fileReads = recent.filter(a => a.type === 'file_read').length;
59
- const fileWrites = recent.filter(a => a.type === 'file_write').length;
60
- const networkEgress = recent.filter(a => a.type === 'network_egress').length;
61
- const networkIngress = recent.filter(a => a.type === 'network_ingress').length;
62
- const toolCalls = recent.filter(a => a.type === 'tool_call').length;
63
- const childSpawns = recent.filter(a => a.type === 'child_spawn').length;
64
- return {
65
- frameworkId,
66
- pid,
67
- hostId: this.config.hostId,
68
- establishedAt: now,
69
- sampleCount: recent.length,
70
- avgActionsPerMinute: recent.length / minutesElapsed,
71
- avgFileReadsPerMinute: fileReads / minutesElapsed,
72
- avgFileWritesPerMinute: fileWrites / minutesElapsed,
73
- avgNetworkEgressPerMinute: networkEgress / minutesElapsed,
74
- avgNetworkIngressPerMinute: networkIngress / minutesElapsed,
75
- avgToolCallsPerMinute: toolCalls / minutesElapsed,
76
- avgChildSpawnsPerMinute: childSpawns / minutesElapsed,
77
- knownDomains: new Set(recent
78
- .filter(a => a.type === 'network_egress')
79
- .map(a => a.input)
80
- .filter(Boolean)),
81
- knownPorts: new Set(recent
82
- .filter(a => a.type === 'network_egress')
83
- .map(a => parseInt(a.input.split(':')[1], 10))
84
- .filter(n => !isNaN(n))),
85
- knownEndpoints: new Set(recent
86
- .filter(a => a.type === 'api_call' || a.type === 'tool_call')
87
- .map(a => a.input.split('?')[0])
88
- .filter(Boolean)),
89
- knownFilePaths: new Set(recent
90
- .filter(a => a.type === 'file_read' || a.type === 'file_write')
91
- .map(a => a.input)),
92
- knownDirectories: new Set(recent
93
- .filter(a => a.type === 'file_read' || a.type === 'file_write')
94
- .map(a => a.input.replace(/\/[^/]*$/, ''))
95
- .filter(Boolean)),
96
- activeHours: [...new Set(recent.map(a => new Date(a.timestamp).getHours()))],
97
- typicalSessionDurationMs: windowMs,
98
- maxDeviationScore: this.config.deviationThreshold,
99
- };
100
- }
101
- // ── Deviation detection ──────────────────────────────────────────────────
102
- detectDeviations(frameworkId, pid) {
103
- const key = `${frameworkId}:${pid}`;
104
- const existing = this.baselines.get(key);
105
- if (!existing) {
106
- const newBase = this.establishBaseline(frameworkId, pid);
107
- if (newBase) {
108
- this.baselines.set(key, newBase);
109
- logger_1.logger.debug('Baseline established', { framework: frameworkId, pid });
110
- }
111
- return [];
112
- }
113
- const baseline = existing;
114
- const actions = this.actionBuffer.get(key);
115
- if (!actions || actions.length === 0)
116
- return [];
117
- const now = Date.now();
118
- const windowMs = 60000;
119
- const recent = actions.filter(a => (now - a.timestamp) < windowMs);
120
- if (recent.length === 0)
121
- return [];
122
- const alerts = [];
123
- const minutesElapsed = Math.max(0.1, windowMs / 60000);
124
- // Check frequency deviations
125
- this.checkFrequencyDeviation(recent, baseline, 'file_reads', baseline.avgFileReadsPerMinute, recent.filter(a => a.type === 'file_read').length / minutesElapsed, alerts, frameworkId, pid);
126
- this.checkFrequencyDeviation(recent, baseline, 'file_writes', baseline.avgFileWritesPerMinute, recent.filter(a => a.type === 'file_write').length / minutesElapsed, alerts, frameworkId, pid);
127
- this.checkFrequencyDeviation(recent, baseline, 'network_egress', baseline.avgNetworkEgressPerMinute, recent.filter(a => a.type === 'network_egress').length / minutesElapsed, alerts, frameworkId, pid);
128
- this.checkFrequencyDeviation(recent, baseline, 'tool_calls', baseline.avgToolCallsPerMinute, recent.filter(a => a.type === 'tool_call').length / minutesElapsed, alerts, frameworkId, pid);
129
- // Check for unknown destinations
130
- for (const action of recent) {
131
- if (action.type === 'network_egress') {
132
- const host = action.input;
133
- if (host && ![...baseline.knownDomains].some(d => host.includes(d))) {
134
- alerts.push(this.createAlert(frameworkId, pid, 'network', host, 0, 1, action));
135
- }
136
- }
137
- if (action.type === 'file_read' || action.type === 'file_write') {
138
- const filePath = action.input;
139
- if (filePath && ![...baseline.knownFilePaths].some(p => filePath.startsWith(p))) {
140
- alerts.push(this.createAlert(frameworkId, pid, 'file_access', filePath, 0, 1, action));
141
- }
142
- }
143
- }
144
- // Check time pattern: active during unusual hours
145
- const currentHour = new Date().getHours();
146
- if (baseline.activeHours.length > 0 && !baseline.activeHours.includes(currentHour)) {
147
- const unusualActions = recent.filter(a => !baseline.activeHours.includes(new Date(a.timestamp).getHours()));
148
- if (unusualActions.length >= 3) {
149
- alerts.push(this.createAlert(frameworkId, pid, 'time_pattern', 'active_hours', baseline.activeHours.length, currentHour, unusualActions[0]));
150
- }
151
- }
152
- // Check for sensitive data exposure
153
- const sensitiveActions = recent.filter(a => a.sensitiveDataDetected);
154
- if (sensitiveActions.length > 0) {
155
- alerts.push(this.createAlert(frameworkId, pid, 'data_class', 'sensitive_data_exposure', 0, sensitiveActions.length, sensitiveActions[0]));
156
- }
157
- return alerts;
158
- }
159
- checkFrequencyDeviation(recent, baseline, metric, expectedRate, actualRate, alerts, frameworkId, pid) {
160
- // Only flag if baseline has samples
161
- if (expectedRate <= 0 && actualRate <= 0)
162
- return;
163
- if (expectedRate <= 0) {
164
- // No historical activity, any activity is deviation
165
- alerts.push(this.createAlert(frameworkId, pid, 'frequency', metric, 0, actualRate, recent[0]));
166
- return;
167
- }
168
- const deviation = actualRate / expectedRate;
169
- if (deviation > this.config.deviationThreshold && actualRate > expectedRate + 0.5) {
170
- alerts.push(this.createAlert(frameworkId, pid, 'frequency', metric, expectedRate, actualRate, recent[0]));
171
- }
172
- }
173
- createAlert(frameworkId, pid, deviationType, metric, expectedValue, actualValue, triggerAction) {
174
- const deviationScore = deviationType === 'frequency'
175
- ? Math.min(10, expectedValue > 0 ? actualValue / expectedValue : actualValue)
176
- : Math.min(10, actualValue);
177
- const severity = deviationScore >= 8 ? 'critical' :
178
- deviationScore >= 5 ? 'high' :
179
- deviationScore >= 3 ? 'medium' : 'low';
180
- return {
181
- id: (0, crypto_1.randomUUID)(),
182
- pid,
183
- frameworkId,
184
- hostId: this.config.hostId,
185
- timestamp: Date.now(),
186
- severity,
187
- deviationType,
188
- metric,
189
- expectedValue,
190
- actualValue,
191
- deviationScore,
192
- agentActionId: triggerAction.id,
193
- description: `AEGIS anomaly: ${deviationType} deviation in ${metric} for ${frameworkId} (pid ${pid})`,
194
- recommendation: this.getRecommendation(deviationType, metric),
195
- status: 'open',
196
- resolvedAt: null,
197
- resolvedBy: null,
198
- };
199
- }
200
- getRecommendation(deviationType, metric) {
201
- switch (deviationType) {
202
- case 'frequency':
203
- return `Investigate unusual ${metric} rate. Consider updating agent baseline or reviewing agent intent.`;
204
- case 'network':
205
- return `Unknown destination detected. Verify if agent has legitimate reason to access this endpoint. Add to allowlist if approved.`;
206
- case 'file_access':
207
- return `Unknown file path accessed. Verify data access rationale. Review if this aligns with agent's approved purpose.`;
208
- case 'time_pattern':
209
- return `Agent active outside normal hours. Verify if this is expected behavior or potential compromise.`;
210
- case 'data_class':
211
- return `Sensitive data detected in agent actions. Review for potential data leakage. Escalate if PII/credentials exposed.`;
212
- default:
213
- return 'Investigate anomalous agent behavior';
214
- }
215
- }
216
- // ── Run periodic check ──────────────────────────────────────────────────
217
- runCheck() {
218
- const keys = [...this.actionBuffer.keys()];
219
- for (const key of keys) {
220
- const [frameworkId, pidStr] = key.split(':');
221
- const pid = parseInt(pidStr, 10);
222
- if (!isNaN(pid)) {
223
- try {
224
- const newAlerts = this.detectDeviations(frameworkId, pid);
225
- for (const alert of newAlerts) {
226
- this.alerts.push(alert);
227
- this.auditLogger.log({
228
- id: alert.id,
229
- timestamp: alert.timestamp,
230
- type: 'process',
231
- action: alert.severity === 'critical' || alert.severity === 'high' ? 'deny' : 'allow',
232
- frameworkId: alert.frameworkId,
233
- frameworkName: null,
234
- pid: alert.pid,
235
- reason: `AEGIS anomaly: ${alert.description}`,
236
- detail: {
237
- deviationType: alert.deviationType,
238
- metric: alert.metric,
239
- expectedValue: alert.expectedValue,
240
- actualValue: alert.actualValue,
241
- deviationScore: alert.deviationScore,
242
- severity: alert.severity,
243
- },
244
- hostname: this.config.hostId,
245
- });
246
- logger_1.logger.warn('AEGIS anomaly detected', {
247
- framework: alert.frameworkId,
248
- pid: alert.pid,
249
- type: alert.deviationType,
250
- metric: alert.metric,
251
- score: alert.deviationScore,
252
- severity: alert.severity,
253
- });
254
- }
255
- }
256
- catch (err) {
257
- logger_1.logger.debug('Anomaly check failed for process', { key, err: err.message });
258
- }
259
- }
260
- }
261
- }
262
- // ── State queries ────────────────────────────────────────────────────────
263
- getOpenAlerts() {
264
- return this.alerts.filter(a => a.status === 'open');
265
- }
266
- getAllAlerts() {
267
- return [...this.alerts];
268
- }
269
- resolveAlert(alertId, resolvedBy) {
270
- const alert = this.alerts.find(a => a.id === alertId);
271
- if (alert) {
272
- alert.status = 'resolved';
273
- alert.resolvedAt = Date.now();
274
- alert.resolvedBy = resolvedBy;
275
- return true;
276
- }
277
- return false;
278
- }
279
- acknowledgeAlert(alertId) {
280
- const alert = this.alerts.find(a => a.id === alertId);
281
- if (alert && alert.status === 'open') {
282
- alert.status = 'acknowledged';
283
- return true;
284
- }
285
- return false;
286
- }
287
- ingestProcesses(processes) {
288
- // Remove baselines for departed processes
289
- const currentKeys = new Set(processes.map(p => `${p.frameworkId}:${p.pid}`));
290
- for (const key of this.baselines.keys()) {
291
- if (!currentKeys.has(key)) {
292
- this.baselines.delete(key);
293
- this.actionBuffer.delete(key);
294
- }
295
- }
296
- }
297
- }
298
- exports.AnomalyDetector = AnomalyDetector;
299
- //# sourceMappingURL=anomaly-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"anomaly-detector.js","sourceRoot":"","sources":["../src/anomaly-detector.ts"],"names":[],"mappings":"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"}