@agent-beam/beam 0.2.28 → 0.2.30
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/README.md +81 -13
- package/Skills/agentbeam-app-monitoring/SKILL.md +15 -3
- package/dist/cli.js +46 -4
- package/dist/cli.js.map +1 -1
- package/dist/client.js +103 -81
- package/dist/client.js.map +1 -1
- package/dist/monitor-config.d.ts +73 -0
- package/dist/monitor-config.js +263 -0
- package/dist/monitor-config.js.map +1 -0
- package/dist/monitor-llm.d.ts +52 -7
- package/dist/monitor-llm.js +228 -32
- package/dist/monitor-llm.js.map +1 -1
- package/dist/monitor-pipeline.d.ts +65 -2
- package/dist/monitor-pipeline.js +145 -21
- package/dist/monitor-pipeline.js.map +1 -1
- package/dist/monitor-rules.d.ts +12 -4
- package/dist/monitor-rules.js +131 -12
- package/dist/monitor-rules.js.map +1 -1
- package/dist/monitor.d.ts +35 -3
- package/dist/monitor.js +257 -30
- package/dist/monitor.js.map +1 -1
- package/dist/prompt-attacks.d.ts +29 -0
- package/dist/prompt-attacks.js +237 -0
- package/dist/prompt-attacks.js.map +1 -0
- package/dist/rule-catalog.js +36 -6
- package/dist/rule-catalog.js.map +1 -1
- package/dist/sdk.d.ts +62 -1
- package/dist/sdk.js +212 -58
- package/dist/sdk.js.map +1 -1
- package/package.json +7 -4
- package/stress-report.json +140 -0
package/dist/monitor-pipeline.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { clientIp, isAuthFailure, lineSource, matchLine, redactLine } from "./monitor-rules.js";
|
|
1
|
+
import { clientIp, isAuthFailure, isLlmRequest, lineSource, matchLine, redactLine } from "./monitor-rules.js";
|
|
2
2
|
/** A short, stable fingerprint (two seeded 53-bit hashes); not cryptographic, only used for dedupe ids. */
|
|
3
3
|
export function fingerprint(text) {
|
|
4
4
|
const h = (seed) => {
|
|
@@ -23,6 +23,10 @@ export const DEDUPE_WINDOW_MS = { light: 60 * 60_000, standard: 15 * 60_000, str
|
|
|
23
23
|
// Failed sign-ins from one address within five minutes before it counts as brute forcing.
|
|
24
24
|
export const BRUTE_FORCE_THRESHOLD = { light: 50, standard: 20, strict: 10 };
|
|
25
25
|
const BRUTE_FORCE_WINDOW_MS = 5 * 60_000;
|
|
26
|
+
// Paid model calls from one sender within five minutes before it counts as abuse: scripted use
|
|
27
|
+
// that runs up the app's LLM bill ("denial of wallet") or scrapes the model through the app.
|
|
28
|
+
export const LLM_FLOOD_THRESHOLD = { light: 1500, standard: 300, strict: 120 };
|
|
29
|
+
const LLM_FLOOD_WINDOW_MS = 5 * 60_000;
|
|
26
30
|
// A scan or a log loop can match thousands of distinct lines; past this many new findings in ten
|
|
27
31
|
// minutes the rest are folded into one summary finding so a flood can't spend the month's allowance.
|
|
28
32
|
export const MAX_NEW_FINDINGS_PER_10_MIN = 200;
|
|
@@ -39,55 +43,177 @@ function normalizeForGrouping(line) {
|
|
|
39
43
|
.replace(/\s+/g, " ")
|
|
40
44
|
.slice(0, 300);
|
|
41
45
|
}
|
|
46
|
+
const clock = () => (globalThis.performance?.now?.() ?? Date.now());
|
|
47
|
+
/**
|
|
48
|
+
* A hard cap on detection time per minute, so monitoring can never take more than a fixed share of
|
|
49
|
+
* a CPU, whatever the traffic or input. Work over the cap is skipped and counted, not queued.
|
|
50
|
+
*/
|
|
51
|
+
export class CpuBudget {
|
|
52
|
+
msPerMinute;
|
|
53
|
+
minute = -1;
|
|
54
|
+
spent = 0;
|
|
55
|
+
skippedSince = 0;
|
|
56
|
+
constructor(msPerMinute) {
|
|
57
|
+
this.msPerMinute = msPerMinute;
|
|
58
|
+
}
|
|
59
|
+
/** Runs `work` if this minute's budget isn't spent; otherwise skips it and returns undefined. */
|
|
60
|
+
run(work) {
|
|
61
|
+
const minute = Math.floor(Date.now() / 60_000);
|
|
62
|
+
if (minute !== this.minute) {
|
|
63
|
+
this.minute = minute;
|
|
64
|
+
this.spent = 0;
|
|
65
|
+
}
|
|
66
|
+
if (this.spent >= this.msPerMinute) {
|
|
67
|
+
this.skippedSince++;
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
const start = clock();
|
|
71
|
+
try {
|
|
72
|
+
return work();
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
this.spent += clock() - start;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** How many were skipped since the last call (for a diagnostic). */
|
|
79
|
+
takeSkipped() { const n = this.skippedSince; this.skippedSince = 0; return n; }
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Events per key over the last few minutes, in one-minute buckets: a fixed few numbers per key
|
|
83
|
+
* however busy the key is, and at most `maxKeys` keys (the least recently active go first).
|
|
84
|
+
*/
|
|
85
|
+
export class WindowCounter {
|
|
86
|
+
windowMinutes;
|
|
87
|
+
maxKeys;
|
|
88
|
+
keys = new Map();
|
|
89
|
+
constructor(windowMinutes, maxKeys = 10_000) {
|
|
90
|
+
this.windowMinutes = windowMinutes;
|
|
91
|
+
this.maxKeys = maxKeys;
|
|
92
|
+
}
|
|
93
|
+
get size() { return this.keys.size; }
|
|
94
|
+
/** Records one event and returns the count over the window, this one included. */
|
|
95
|
+
add(key, now) {
|
|
96
|
+
const minute = Math.floor(now / 60_000);
|
|
97
|
+
let entry = this.keys.get(key);
|
|
98
|
+
if (entry)
|
|
99
|
+
this.keys.delete(key); // re-inserted below: Map order is then least recently active first
|
|
100
|
+
else
|
|
101
|
+
entry = { minutes: new Array(this.windowMinutes).fill(-1), counts: new Array(this.windowMinutes).fill(0) };
|
|
102
|
+
const slot = minute % this.windowMinutes;
|
|
103
|
+
if (entry.minutes[slot] !== minute) {
|
|
104
|
+
entry.minutes[slot] = minute;
|
|
105
|
+
entry.counts[slot] = 0;
|
|
106
|
+
}
|
|
107
|
+
entry.counts[slot]++;
|
|
108
|
+
this.keys.set(key, entry);
|
|
109
|
+
if (this.keys.size > this.maxKeys)
|
|
110
|
+
this.keys.delete(this.keys.keys().next().value);
|
|
111
|
+
let total = 0;
|
|
112
|
+
for (let i = 0; i < this.windowMinutes; i++)
|
|
113
|
+
if (minute - entry.minutes[i] < this.windowMinutes)
|
|
114
|
+
total += entry.counts[i];
|
|
115
|
+
return total;
|
|
116
|
+
}
|
|
117
|
+
/** Drops keys with nothing in the window. */
|
|
118
|
+
prune(now) {
|
|
119
|
+
const minute = Math.floor(now / 60_000);
|
|
120
|
+
for (const [key, entry] of this.keys)
|
|
121
|
+
if (Math.max(...entry.minutes) <= minute - this.windowMinutes)
|
|
122
|
+
this.keys.delete(key);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
42
125
|
export class MonitorPipeline {
|
|
43
126
|
opts;
|
|
44
127
|
seen = new Map();
|
|
45
128
|
queue = [];
|
|
46
129
|
queued = new Set();
|
|
47
|
-
authFailures = new
|
|
130
|
+
authFailures = new WindowCounter(BRUTE_FORCE_WINDOW_MS / 60_000);
|
|
131
|
+
llmCalls = new WindowCounter(LLM_FLOOD_WINDOW_MS / 60_000);
|
|
48
132
|
floodBucket = -1;
|
|
49
133
|
floodCount = 0;
|
|
50
134
|
suppressed = null;
|
|
135
|
+
maintainedMinute = -1;
|
|
136
|
+
budget;
|
|
51
137
|
constructor(opts) {
|
|
52
138
|
this.opts = opts;
|
|
139
|
+
this.budget = opts.budget ?? (opts.cpuBudgetMsPerMinute ? new CpuBudget(opts.cpuBudgetMsPerMinute) : null);
|
|
53
140
|
}
|
|
54
141
|
now() { return this.opts.now?.() ?? Date.now(); }
|
|
55
142
|
get pending() { return [...this.queue]; }
|
|
56
|
-
/**
|
|
57
|
-
|
|
143
|
+
/** Sizes of everything the pipeline keeps, for tests and diagnostics: all of them are bounded. */
|
|
144
|
+
get footprint() {
|
|
145
|
+
return { seen: this.seen.size, queue: this.queue.length, queued: this.queued.size, authFailures: this.authFailures.size, llmCalls: this.llmCalls.size };
|
|
146
|
+
}
|
|
147
|
+
/** Once a minute: forget dedupe entries and counters that can no longer matter. */
|
|
148
|
+
maintain(now) {
|
|
149
|
+
const minute = Math.floor(now / 60_000);
|
|
150
|
+
if (minute === this.maintainedMinute)
|
|
151
|
+
return;
|
|
152
|
+
this.maintainedMinute = minute;
|
|
153
|
+
const cutoff = now - 2 * DEDUPE_WINDOW_MS.light;
|
|
154
|
+
for (const [fp, entry] of this.seen)
|
|
155
|
+
if (entry.at < cutoff)
|
|
156
|
+
this.seen.delete(fp);
|
|
157
|
+
this.authFailures.prune(now);
|
|
158
|
+
this.llmCalls.prune(now);
|
|
159
|
+
if (this.queued.size > 5000)
|
|
160
|
+
this.queued.clear(); // dependency ids; a repeat is deduped by the server too
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Matches one line and queues any findings at or above the level. Returns the rule ids raised.
|
|
164
|
+
* Over the CPU budget, the line is skipped (see budget.takeSkipped()).
|
|
165
|
+
*/
|
|
166
|
+
ingestLine(line, file, options = {}) {
|
|
167
|
+
if (!this.budget)
|
|
168
|
+
return this.ingest(line, file, options);
|
|
169
|
+
return this.budget.run(() => this.ingest(line, file, options)) ?? [];
|
|
170
|
+
}
|
|
171
|
+
ingest(line, file, options) {
|
|
58
172
|
const level = this.opts.level();
|
|
59
173
|
if (!level || !line.trim())
|
|
60
174
|
return [];
|
|
61
175
|
const custom = this.opts.customDetectors?.() ?? [];
|
|
62
|
-
const source = lineSource(line);
|
|
63
|
-
|
|
176
|
+
const source = options.source ?? lineSource(line);
|
|
177
|
+
// Prompts and model output travel as "log" findings, which every workspace version accepts.
|
|
178
|
+
const wire = source === "http" ? "http" : "log";
|
|
179
|
+
const ip = options.client ? redactLine(options.client, custom).slice(0, 80) : source === "http" ? clientIp(line) : undefined;
|
|
180
|
+
this.maintain(this.now());
|
|
181
|
+
const excerpt = options.excerpt === false ? "(the app withheld the text)" : redactLine(line, custom);
|
|
64
182
|
const raised = [];
|
|
65
|
-
|
|
66
|
-
|
|
183
|
+
const seenRules = new Set();
|
|
184
|
+
for (const rule of matchLine(line, source, options.rules)) {
|
|
185
|
+
if (!meetsLevel(rule.severity, level) || seenRules.has(rule.id))
|
|
67
186
|
continue;
|
|
187
|
+
seenRules.add(rule.id);
|
|
68
188
|
// Traffic groups by client address (one scan = one finding); app logs group by line shape.
|
|
69
189
|
this.raise(level, ip ?? normalizeForGrouping(line), {
|
|
70
190
|
ruleId: rule.id, title: ip ? `${rule.title} from ${ip}` : rule.title, severity: rule.severity,
|
|
71
|
-
category: rule.category, source, file, evidence:
|
|
191
|
+
category: rule.category, source: wire, file, evidence: options.excerpt === false ? `Matched "${rule.title}"; the app withheld the text.` : excerpt,
|
|
72
192
|
});
|
|
73
193
|
raised.push(rule.id);
|
|
74
194
|
}
|
|
75
195
|
if (isAuthFailure(line, source) && meetsLevel("high", level)) {
|
|
76
196
|
const key = clientIp(line) ?? "unknown address";
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
recent.push(now);
|
|
80
|
-
this.authFailures.set(key, recent);
|
|
81
|
-
if (this.authFailures.size > 10_000)
|
|
82
|
-
this.authFailures.delete(this.authFailures.keys().next().value);
|
|
83
|
-
if (recent.length >= BRUTE_FORCE_THRESHOLD[level]) {
|
|
197
|
+
const recent = this.authFailures.add(key, this.now());
|
|
198
|
+
if (recent >= BRUTE_FORCE_THRESHOLD[level]) {
|
|
84
199
|
this.raise(level, key, {
|
|
85
200
|
ruleId: "app.auth_bruteforce", title: `Repeated failed sign-ins from ${key}`, severity: "high", category: "recon",
|
|
86
|
-
source, file, evidence: `${recent
|
|
201
|
+
source: wire, file, evidence: `${recent} failures in 5 minutes. Latest: ${redactLine(line, custom)}`.slice(0, 600),
|
|
87
202
|
});
|
|
88
203
|
raised.push("app.auth_bruteforce");
|
|
89
204
|
}
|
|
90
205
|
}
|
|
206
|
+
// Only a known sender counts: behind a proxy that hides addresses, all traffic would look like one client.
|
|
207
|
+
if (ip && meetsLevel("high", level) && (source === "prompt" || (source === "http" && isLlmRequest(line)))) {
|
|
208
|
+
const recent = this.llmCalls.add(`${source}\0${ip}`, this.now());
|
|
209
|
+
if (recent >= LLM_FLOOD_THRESHOLD[level]) {
|
|
210
|
+
this.raise(level, ip, {
|
|
211
|
+
ruleId: "llm.denial_of_wallet", title: `Unusual volume of LLM requests from ${ip}`, severity: "high", category: "llm",
|
|
212
|
+
source: wire, file, evidence: `${recent} ${source === "prompt" ? "prompts" : "requests to LLM endpoints"} in 5 minutes. Scripted use runs up the model bill. Latest: ${excerpt}`.slice(0, 600),
|
|
213
|
+
});
|
|
214
|
+
raised.push("llm.denial_of_wallet");
|
|
215
|
+
}
|
|
216
|
+
}
|
|
91
217
|
return raised;
|
|
92
218
|
}
|
|
93
219
|
/** Queues a finding produced elsewhere (dependency checks) under its own stable id, once. */
|
|
@@ -95,6 +221,7 @@ export class MonitorPipeline {
|
|
|
95
221
|
const level = this.opts.level();
|
|
96
222
|
if (!level || !meetsLevel(finding.severity, level) || this.queued.has(finding.id))
|
|
97
223
|
return false;
|
|
224
|
+
this.maintain(this.now());
|
|
98
225
|
this.queued.add(finding.id);
|
|
99
226
|
this.enqueue(finding);
|
|
100
227
|
return true;
|
|
@@ -158,10 +285,7 @@ export class MonitorPipeline {
|
|
|
158
285
|
break;
|
|
159
286
|
}
|
|
160
287
|
}
|
|
161
|
-
|
|
162
|
-
for (const [fp, entry] of this.seen)
|
|
163
|
-
if (entry.at < cutoff)
|
|
164
|
-
this.seen.delete(fp);
|
|
288
|
+
this.maintain(this.now());
|
|
165
289
|
}
|
|
166
290
|
}
|
|
167
291
|
//# sourceMappingURL=monitor-pipeline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor-pipeline.js","sourceRoot":"","sources":["../src/monitor-pipeline.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"monitor-pipeline.js","sourceRoot":"","sources":["../src/monitor-pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/monitor-rules.d.ts
CHANGED
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
import { type RuleCategory } from "./rule-catalog.js";
|
|
2
2
|
import type { CustomDetector } from "./data-detectors.js";
|
|
3
3
|
import type { MonitorSeverity } from "./monitor-client.js";
|
|
4
|
-
|
|
4
|
+
/** log/http: lines from log files and traffic. prompt/output: text going into, or coming out of, an LLM (SDK). */
|
|
5
|
+
export type LineSource = "log" | "http" | "prompt" | "output";
|
|
5
6
|
export interface MonitorRule {
|
|
6
7
|
id: string;
|
|
7
8
|
title: string;
|
|
8
9
|
severity: MonitorSeverity;
|
|
9
|
-
category: RuleCategory | "exploit";
|
|
10
|
-
/**
|
|
10
|
+
category: RuleCategory | "exploit" | "llm";
|
|
11
|
+
/** Where the rule applies; omitted means log and http lines (never prompts or model output). */
|
|
11
12
|
sources?: LineSource[];
|
|
12
13
|
/** `decoded` is URL-decoded (twice, for double encoding); `raw` is the line as written. */
|
|
13
14
|
match: (decoded: string, raw: string) => boolean;
|
|
14
15
|
}
|
|
16
|
+
/** A matched credential, or text that only looks like one (an sk- slug, a sentence). */
|
|
17
|
+
export declare function keyLike(match: string): boolean;
|
|
18
|
+
/** Whether the text holds something that looks like a real credential. */
|
|
19
|
+
export declare function hasSecret(text: string): boolean;
|
|
15
20
|
export declare const monitorRules: MonitorRule[];
|
|
16
21
|
export declare function lineSource(line: string): LineSource;
|
|
17
22
|
/** URL-decodes up to twice so `%252e%252e%252f` (double-encoded `../`) is matched too. */
|
|
18
23
|
export declare function decodeForMatch(line: string): string;
|
|
19
|
-
|
|
24
|
+
/** The rules a line matches. Prompts and model output aren't URL-decoded: they aren't URLs. */
|
|
25
|
+
export declare function matchLine(line: string, source?: LineSource, extra?: MonitorRule[]): MonitorRule[];
|
|
20
26
|
/**
|
|
21
27
|
* Redaction for evidence that leaves the machine. Unlike the agent-hook redaction it keeps query
|
|
22
28
|
* strings -- for an access log the query usually *is* the attack -- but removes credentials,
|
|
@@ -28,5 +34,7 @@ export declare function redactLine(line: string, custom?: CustomDetector[]): str
|
|
|
28
34
|
* nginx/Apache/Caddy common log format, otherwise the first standalone IPv4 address.
|
|
29
35
|
*/
|
|
30
36
|
export declare function clientIp(line: string): string | undefined;
|
|
37
|
+
/** A POST to what looks like an LLM endpoint (chat, completions, generate…), each one a paid model call. */
|
|
38
|
+
export declare function isLlmRequest(line: string): boolean;
|
|
31
39
|
/** A failed sign-in: a 401/403 on an auth path in an access log, or an app's own "login failed" line. */
|
|
32
40
|
export declare function isAuthFailure(line: string, source: LineSource): boolean;
|
package/dist/monitor-rules.js
CHANGED
|
@@ -2,11 +2,74 @@
|
|
|
2
2
|
// HTTP access logs. Separate from the agent-hook catalog in core.ts on purpose -- application logs
|
|
3
3
|
// are full of words like "env", "token" and "production" that would drown those rules -- but a few
|
|
4
4
|
// built-in rules that mean the same thing anywhere (reverse shells, piped remote code, cloud
|
|
5
|
-
// metadata access
|
|
5
|
+
// metadata access) are reused as-is. Attacks on LLM features (prompt injection and friends) come
|
|
6
|
+
// from prompt-attacks.ts. Heuristic, like everything else in Beam.
|
|
6
7
|
import { builtinRulesById } from "./rule-catalog.js";
|
|
8
|
+
import { promptAttack, revealHidden } from "./prompt-attacks.js";
|
|
7
9
|
// Trailing boundary for shell commands, so `| id=5` in a log line isn't read as running `id`.
|
|
8
10
|
const END = String.raw `(?=$|[\s;'"&|)\x60])`;
|
|
9
11
|
const commandInjection = new RegExp(String.raw `(?:[;|\x60]|\$\(|&&)\s*(?:id|whoami|uname\s+-a|cat\s+/etc/(?:passwd|shadow)|(?:curl|wget)\s+\S+|nc\s+-\w|bash\s+-[ic]|sh\s+-c|ping\s+-c\s*\d+)${END}`, "i");
|
|
12
|
+
// A URL-like parameter pointing the server at itself, its network or its cloud metadata, or a
|
|
13
|
+
// scheme only an attacker wants fetched. LLM agents with browsing or fetch tools are a common way
|
|
14
|
+
// in. Parameters are split and checked one by one: as one regex this backtracked quadratically on
|
|
15
|
+
// long hostile query strings, and it runs inside customer apps.
|
|
16
|
+
const SSRF_NAME = /url|uri|link|src|dest|target|redirect|callback|webhook|feed|host|endpoint|proxy|image|fetch|next|return/i;
|
|
17
|
+
const SSRF_SCHEME = /^(?:gopher|dict|ldap|tftp|jar|netdoc):\/\//i;
|
|
18
|
+
const SSRF_INTERNAL = /^(?:(?:https?|ftp):\/\/(?:localhost|127\.\d+\.\d+\.\d+|0\.0\.0\.0|0x7f\w*|2130706433|\[::(?:1|ffff:[^\]]{0,40})?\]|10\.\d+\.\d+\.\d+|192\.168\.|172\.(?:1[6-9]|2\d|3[01])\.|169\.254\.|100\.100\.100\.200|metadata\.google\.internal)|file:\/)/i;
|
|
19
|
+
function ssrf(s) {
|
|
20
|
+
const query = s.indexOf("?");
|
|
21
|
+
if (query < 0)
|
|
22
|
+
return false;
|
|
23
|
+
let seen = 0;
|
|
24
|
+
for (const param of s.slice(query + 1).split(/[&?\s"]/)) {
|
|
25
|
+
const eq = param.indexOf("=");
|
|
26
|
+
if (eq < 0)
|
|
27
|
+
continue;
|
|
28
|
+
if (++seen > 100)
|
|
29
|
+
break;
|
|
30
|
+
const name = param.slice(0, eq);
|
|
31
|
+
const value = param.slice(eq + 1);
|
|
32
|
+
if (SSRF_SCHEME.test(value) || (name.length <= 64 && SSRF_NAME.test(name) && SSRF_INTERNAL.test(value)))
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
// Credentials, by format. Case-sensitive, as the real prefixes are. The bare "sk-" family also has
|
|
38
|
+
// to look random, because "sk-" turns up in ordinary text: a URL slug like
|
|
39
|
+
// /blog/samsung-sk-hynix-upgrade-china-nand-plants-2026 is not an OpenAI key.
|
|
40
|
+
const KEY = /-----BEGIN [A-Z ]*PRIVATE KEY-----|\b(?:sk-(?:proj-|ant-|or-v1-|svcacct-|admin-)?[A-Za-z0-9_-]{20,}|gh[pousr]_[A-Za-z0-9_]{30,}|github_pat_[A-Za-z0-9_]{20,}|AKIA[A-Z0-9]{16}|xox[baprs]-[\w-]{10,}|AIza[0-9A-Za-z_-]{35}|gsk_[A-Za-z0-9]{40,}|hf_[A-Za-z0-9]{30,}|r8_[A-Za-z0-9]{30,}|xai-[A-Za-z0-9]{40,}|pplx-[A-Za-z0-9]{40,}|beam_app_[\w-]{20,})\b/g;
|
|
41
|
+
const BEARER = /\bauthorization:\s*bearer\s+[A-Za-z0-9._~+/-]{20,}/i;
|
|
42
|
+
/** A matched credential, or text that only looks like one (an sk- slug, a sentence). */
|
|
43
|
+
export function keyLike(match) {
|
|
44
|
+
if (!match.startsWith("sk-"))
|
|
45
|
+
return true;
|
|
46
|
+
const body = match.replace(/^sk-(?:proj-|ant-|or-v1-|svcacct-|admin-)?/, "");
|
|
47
|
+
// Lowercase words joined by hyphens or underscores: a slug or a name, never a key.
|
|
48
|
+
if (/^[a-z0-9]+(?:[-_][a-z0-9]+){2,}$/.test(body) && /[a-z]{3,}[-_][a-z]{3,}/.test(body))
|
|
49
|
+
return false;
|
|
50
|
+
const digits = body.replace(/\D/g, "").length;
|
|
51
|
+
const mixedCase = /[a-z]/.test(body) && /[A-Z]/.test(body);
|
|
52
|
+
// Real keys: mixed case with digits (OpenAI, Anthropic), or long hex (DeepSeek, OpenRouter).
|
|
53
|
+
return (mixedCase && digits >= 2) || /^[a-f0-9]{32,}$/.test(body);
|
|
54
|
+
}
|
|
55
|
+
/** Whether the text holds something that looks like a real credential. */
|
|
56
|
+
export function hasSecret(text) {
|
|
57
|
+
if (BEARER.test(text))
|
|
58
|
+
return true;
|
|
59
|
+
for (const [match] of text.matchAll(KEY))
|
|
60
|
+
if (keyLike(match))
|
|
61
|
+
return true;
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
const XSS = /<script[\s>]|javascript:\s*[a-z(]|<(?:img|svg|body|iframe)\b[^>]{0,200}\son(?:error|load)\s*=|\bdocument\.cookie\b/i;
|
|
65
|
+
const EVERYWHERE = ["log", "http", "prompt", "output"];
|
|
66
|
+
const SENSITIVE_FILE = /\/(?:\.env(?:\.[\w-]+)?|\.git\/(?:config|HEAD)|\.aws\/credentials|\.ssh\/id_\w+|wp-config\.php(?:\.bak)?|\.htpasswd|server-status|actuator\/(?:env|heapdump)|\.DS_Store)(?=[\s?"'#]|$)/i;
|
|
67
|
+
const ACCESS_STATUS = /"[A-Z]+ \S+ HTTP\/[\d.]+" (\d{3})\b|"(?:status|httpStatus|status_code|statusCode|response_status)"\s*:\s*"?(\d{3})\b/;
|
|
68
|
+
/** The response status in an access-log line was 2xx. */
|
|
69
|
+
function isSuccess(line) {
|
|
70
|
+
const m = line.match(ACCESS_STATUS);
|
|
71
|
+
return (m?.[1] ?? m?.[2] ?? "").startsWith("2");
|
|
72
|
+
}
|
|
10
73
|
const appRules = [
|
|
11
74
|
{ id: "web.jndi_injection", title: "JNDI lookup (Log4Shell-style) injection", severity: "critical", category: "exploit",
|
|
12
75
|
match: s => /\$\{\s*jndi\s*:|\$\{\s*\$\{\s*(?:::-|lower:|upper:|env:)/i.test(s) },
|
|
@@ -22,20 +85,61 @@ const appRules = [
|
|
|
22
85
|
match: s => /\/(?:c99|r57|wso|b374k|webshell|cmd|shell)\.(?:php|jsp|aspx?)\b|[?&](?:cmd|exec|command)=(?:whoami|id|ls|uname|cat)\b/i.test(s) },
|
|
23
86
|
{ id: "web.deserialization", title: "Serialized object payload", severity: "high", category: "exploit",
|
|
24
87
|
match: s => /\brO0AB[A-Za-z0-9+/=]{8,}|\bO:\d+:"[A-Za-z_\\]+":\d+:\{/.test(s) },
|
|
88
|
+
{ id: "web.ssrf", title: "Server-side request forgery attempt", severity: "high", category: "exploit", sources: ["http"],
|
|
89
|
+
match: s => ssrf(s) },
|
|
25
90
|
{ id: "app.secret_in_log", title: "Credential written to logs", severity: "high", category: "secrets",
|
|
26
|
-
match: (_s, raw) =>
|
|
91
|
+
match: (_s, raw) => hasSecret(raw) },
|
|
27
92
|
{ id: "web.xss", title: "Cross-site scripting attempt", severity: "medium", category: "exploit",
|
|
28
|
-
match: s =>
|
|
93
|
+
match: s => XSS.test(s) },
|
|
29
94
|
{ id: "web.prototype_pollution", title: "Prototype pollution attempt", severity: "medium", category: "exploit",
|
|
30
95
|
match: s => /\b__proto__\b\s*[\]["'=:.]|constructor\s*\[\s*["']?prototype/i.test(s) },
|
|
96
|
+
// Bots ask every site for /.env all day, so a probe alone is medium. One that got a 2xx back
|
|
97
|
+
// may have handed over the app's keys: high. (An app that answers 200 to every path, like a
|
|
98
|
+
// single-page app's catch-all, can trip the second.)
|
|
31
99
|
{ id: "web.sensitive_file_probe", title: "Probe for secrets or config files", severity: "medium", category: "recon", sources: ["http"],
|
|
32
|
-
match: s =>
|
|
100
|
+
match: s => SENSITIVE_FILE.test(s) },
|
|
101
|
+
{ id: "web.secret_file_exposed", title: "Secret or config file served to a client", severity: "high", category: "secrets", sources: ["http"],
|
|
102
|
+
match: (s, raw) => SENSITIVE_FILE.test(s) && isSuccess(raw) },
|
|
33
103
|
{ id: "web.scanner", title: "Known attack tool", severity: "medium", category: "recon", sources: ["http"],
|
|
34
104
|
match: s => /\b(?:sqlmap|nikto|nuclei|masscan|zgrab|acunetix|nessus|wpscan|dirbuster|gobuster|feroxbuster|ffuf|hydra|openvas|commix|xsstrike)\b/i.test(s) },
|
|
35
105
|
];
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
106
|
+
// Attacks on the app's LLM features. Prompt-side rules also read traffic and logs, because
|
|
107
|
+
// prompts arrive in query strings and apps log them; forged chat markers only count where a
|
|
108
|
+
// client wrote them (a model server's own logs are full of its template).
|
|
109
|
+
const llmRules = [
|
|
110
|
+
{ id: "llm.prompt_injection", title: "Prompt injection attempt", severity: "high", category: "llm", sources: EVERYWHERE,
|
|
111
|
+
match: s => promptAttack.override(s) },
|
|
112
|
+
{ id: "llm.reviewer_manipulation", title: "Attempt to sway an AI reviewer", severity: "high", category: "llm", sources: EVERYWHERE,
|
|
113
|
+
match: s => promptAttack.reviewer(s) },
|
|
114
|
+
{ id: "llm.hidden_instructions", title: "Hidden instructions in invisible Unicode", severity: "high", category: "llm", sources: EVERYWHERE,
|
|
115
|
+
match: s => promptAttack.hidden(s) },
|
|
116
|
+
{ id: "llm.chat_template_injection", title: "Forged system or chat-template markers", severity: "high", category: "llm", sources: ["http", "prompt"],
|
|
117
|
+
match: s => promptAttack.chatTemplate(s) },
|
|
118
|
+
{ id: "llm.secret_extraction", title: "Attempt to extract API keys or secrets", severity: "high", category: "llm", sources: ["log"],
|
|
119
|
+
match: s => promptAttack.secretRequest(s) },
|
|
120
|
+
{ id: "llm.secret_extraction", title: "Attempt to extract API keys or secrets", severity: "high", category: "llm", sources: ["http", "prompt"],
|
|
121
|
+
match: s => promptAttack.secretRequest(s) || promptAttack.secretCommand(s) },
|
|
122
|
+
{ id: "llm.jailbreak", title: "Jailbreak attempt", severity: "medium", category: "llm", sources: ["log", "http", "prompt"],
|
|
123
|
+
match: s => promptAttack.jailbreak(s) },
|
|
124
|
+
{ id: "llm.prompt_extraction", title: "System prompt or data extraction attempt", severity: "medium", category: "llm", sources: ["log", "http", "prompt"],
|
|
125
|
+
match: s => promptAttack.extraction(s) },
|
|
126
|
+
{ id: "llm.output_exfiltration", title: "Data exfiltration link in model output", severity: "high", category: "llm", sources: ["log"],
|
|
127
|
+
match: (_s, raw) => promptAttack.markdownExfil(raw) },
|
|
128
|
+
{ id: "llm.output_exfiltration", title: "Data exfiltration link in model output", severity: "high", category: "llm", sources: ["output"],
|
|
129
|
+
match: (_s, raw) => promptAttack.htmlExfil(raw) },
|
|
130
|
+
{ id: "llm.output_secret", title: "Credential in model output", severity: "high", category: "llm", sources: ["output"],
|
|
131
|
+
match: (_s, raw) => hasSecret(raw) || promptAttack.envSecret(raw) },
|
|
132
|
+
{ id: "llm.output_script", title: "Script or active HTML in model output", severity: "medium", category: "llm", sources: ["output"],
|
|
133
|
+
match: (_s, raw) => XSS.test(raw) },
|
|
134
|
+
];
|
|
135
|
+
const sharedRules = builtinRulesById(["network.reverse-shell", "execution.remote", "execution.obfuscated", "network.metadata"])
|
|
136
|
+
.map(r => ({
|
|
137
|
+
id: r.id, title: r.title, severity: r.severity === "info" ? "medium" : r.severity, category: r.category, match: (s) => r.match(s),
|
|
138
|
+
// An agent asked to fetch the metadata endpoint is the same attack as a request for it.
|
|
139
|
+
...(r.id === "network.metadata" ? { sources: EVERYWHERE } : {}),
|
|
140
|
+
}));
|
|
141
|
+
export const monitorRules = [...appRules, ...llmRules, ...sharedRules];
|
|
142
|
+
const CLASSIC = ["log", "http"];
|
|
39
143
|
const HTTP_LINE = /"(?:GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS|CONNECT|TRACE) \S+ HTTP\/[\d.]+"|^\S+ \S+ \S+ \[[^\]]+\] "|"(?:method|http_method|request_method)"\s*:\s*"[A-Z]+"/;
|
|
40
144
|
export function lineSource(line) {
|
|
41
145
|
return HTTP_LINE.test(line) ? "http" : "log";
|
|
@@ -59,10 +163,11 @@ export function decodeForMatch(line) {
|
|
|
59
163
|
}
|
|
60
164
|
return s;
|
|
61
165
|
}
|
|
62
|
-
|
|
63
|
-
|
|
166
|
+
/** The rules a line matches. Prompts and model output aren't URL-decoded: they aren't URLs. */
|
|
167
|
+
export function matchLine(line, source = lineSource(line), extra = []) {
|
|
64
168
|
const raw = line.length > 16_384 ? line.slice(0, 16_384) : line;
|
|
65
|
-
|
|
169
|
+
const decoded = source === "prompt" || source === "output" ? raw : decodeForMatch(line);
|
|
170
|
+
return [...monitorRules, ...extra].filter(r => (r.sources ?? CLASSIC).includes(source) && r.match(decoded, raw));
|
|
66
171
|
}
|
|
67
172
|
/**
|
|
68
173
|
* Redaction for evidence that leaves the machine. Unlike the agent-hook redaction it keeps query
|
|
@@ -70,9 +175,10 @@ export function matchLine(line, source = lineSource(line)) {
|
|
|
70
175
|
* bearer tokens, URL userinfo, email addresses and the policy's custom detector matches.
|
|
71
176
|
*/
|
|
72
177
|
export function redactLine(line, custom = []) {
|
|
73
|
-
|
|
178
|
+
// Hidden Unicode text is made readable first, so it is redacted like the rest and a reviewer can see it.
|
|
179
|
+
let out = revealHidden(line.slice(0, 4000))
|
|
74
180
|
.replace(/-----BEGIN [^-]*PRIVATE KEY-----[\s\S]*?(?:-----END [^-]*PRIVATE KEY-----|$)/g, "[REDACTED PRIVATE KEY]")
|
|
75
|
-
.replace(/\b(?:sk-(?:proj-|ant-)?[A-Za-z0-9_-]{12,}|gh[pousr]_[A-Za-z0-9_]{16,}|github_pat_[A-Za-z0-9_]{16,}|AKIA[A-Z0-9]{16}|xox[baprs]-[\w-]{10,}|AIza[0-9A-Za-z_-]{35}|beam_app_[\w-]{20,})\b/g, "[REDACTED TOKEN]")
|
|
181
|
+
.replace(/\b(?:sk-(?:proj-|ant-|or-v1-|svcacct-|admin-)?[A-Za-z0-9_-]{12,}|gh[pousr]_[A-Za-z0-9_]{16,}|github_pat_[A-Za-z0-9_]{16,}|AKIA[A-Z0-9]{16}|xox[baprs]-[\w-]{10,}|AIza[0-9A-Za-z_-]{35}|gsk_[A-Za-z0-9]{20,}|hf_[A-Za-z0-9]{20,}|r8_[A-Za-z0-9]{20,}|xai-[A-Za-z0-9]{20,}|pplx-[A-Za-z0-9]{20,}|beam_app_[\w-]{20,})\b/g, m => (keyLike(m) ? "[REDACTED TOKEN]" : m))
|
|
76
182
|
.replace(/(bearer\s+)[A-Za-z0-9._~+/-]{8,}/gi, "$1[REDACTED]")
|
|
77
183
|
.replace(/(\b(?:[\w-]*(?:api[_-]?key|token|secret|password|passwd|pwd|authorization|session|cookie)[\w-]*)["']?\s*[:=]\s*)["']?[^\s,"';&}\]]+/gi, "$1[REDACTED]")
|
|
78
184
|
.replace(/(https?:\/\/)[^\s/@]+:[^\s/@]+@/gi, "$1[REDACTED]@")
|
|
@@ -99,8 +205,21 @@ export function clientIp(line) {
|
|
|
99
205
|
}
|
|
100
206
|
const AUTH_PATH = /\/(?:login|signin|sign-in|auth|oauth|token|session|api\/v\d+\/auth|wp-login\.php|admin)\b/i;
|
|
101
207
|
const AUTH_FAIL_TEXT = /\b(?:login|authentication|auth|sign[- ]?in)\s+(?:failed|failure|denied)|\binvalid\s+(?:password|credentials|username or password|api key|token)|\bfailed\s+password\b|\bincorrect\s+password\b|\bunauthori[sz]ed\b/i;
|
|
208
|
+
const REQUEST_LINE = /"([A-Z]+) (\S+) HTTP\/[\d.]+"/;
|
|
209
|
+
const JSON_METHOD = /"(?:method|http_method|request_method)"\s*:\s*"([A-Z]+)"/;
|
|
210
|
+
const JSON_PATH = /"(?:path|uri|url|request_uri|requestPath)"\s*:\s*"([^"]+)"/;
|
|
211
|
+
const LLM_PATH = /\/(?:chat|completions?|generate|llm|ai|assistant|agents?|ask|prompt|inference|copilot)(?:[/?#]|$)|\/v1\/(?:messages|responses|embeddings)(?:[/?#]|$)/i;
|
|
212
|
+
/** A POST to what looks like an LLM endpoint (chat, completions, generate…), each one a paid model call. */
|
|
213
|
+
export function isLlmRequest(line) {
|
|
214
|
+
const request = line.match(REQUEST_LINE);
|
|
215
|
+
const method = request?.[1] ?? line.match(JSON_METHOD)?.[1];
|
|
216
|
+
const path = request?.[2] ?? line.match(JSON_PATH)?.[1];
|
|
217
|
+
return method === "POST" && Boolean(path && LLM_PATH.test(path.split("?")[0]));
|
|
218
|
+
}
|
|
102
219
|
/** A failed sign-in: a 401/403 on an auth path in an access log, or an app's own "login failed" line. */
|
|
103
220
|
export function isAuthFailure(line, source) {
|
|
221
|
+
if (source === "prompt" || source === "output")
|
|
222
|
+
return false; // a chat message saying "login failed" isn't one
|
|
104
223
|
if (source === "http")
|
|
105
224
|
return (/"\s(?:401|403)\s/.test(line) || /"(?:status|httpStatus|status_code|statusCode|response_status)"\s*:\s*"?(?:401|403)\b/.test(line)) && AUTH_PATH.test(line);
|
|
106
225
|
return AUTH_FAIL_TEXT.test(line);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor-rules.js","sourceRoot":"","sources":["../src/monitor-rules.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"monitor-rules.js","sourceRoot":"","sources":["../src/monitor-rules.ts"],"names":[],"mappings":"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"}
|
package/dist/monitor.d.ts
CHANGED
|
@@ -33,8 +33,40 @@ export interface MonitorOptions {
|
|
|
33
33
|
fromStart?: boolean;
|
|
34
34
|
/** Keep waiting while App monitoring is off in the dashboard (default) instead of exiting. */
|
|
35
35
|
wait?: boolean;
|
|
36
|
+
/** LLM provider for the second opinion (--llm), with this server's own key; "beam" for Beam's model. */
|
|
37
|
+
llm?: string;
|
|
38
|
+
/** The most of one CPU core detection may use, in percent (--max-cpu). Default: monitor.json, else 25. */
|
|
39
|
+
maxCpu?: number;
|
|
40
|
+
/** A project config file to use instead of ./beam.monitor.json (--config). */
|
|
41
|
+
config?: string;
|
|
36
42
|
}
|
|
37
43
|
export declare function runMonitor(options: MonitorOptions, log?: (message: string) => void): Promise<void>;
|
|
38
|
-
export declare function monitorStatus(write?: (line: string) => void): Promise<number>;
|
|
39
|
-
/**
|
|
40
|
-
|
|
44
|
+
export declare function monitorStatus(write?: (line: string) => void, llm?: string): Promise<number>;
|
|
45
|
+
/**
|
|
46
|
+
* `beam monitor test`: one test finding through the real path, to prove an integration end to end.
|
|
47
|
+
* With an own LLM (--llm), also one LLM check on a harmless sample, to prove the key works.
|
|
48
|
+
*/
|
|
49
|
+
export declare function monitorTest(write?: (line: string) => void, llm?: string): Promise<number>;
|
|
50
|
+
export interface ConfigureOptions {
|
|
51
|
+
llm?: string;
|
|
52
|
+
model?: string;
|
|
53
|
+
baseUrl?: string;
|
|
54
|
+
keyEnv?: string;
|
|
55
|
+
key?: string;
|
|
56
|
+
forgetKey?: boolean;
|
|
57
|
+
files?: string[];
|
|
58
|
+
noFiles?: boolean;
|
|
59
|
+
app?: string;
|
|
60
|
+
noApp?: boolean;
|
|
61
|
+
maxCpu?: number;
|
|
62
|
+
/** Validate every config layer and exit 1 on a problem (for CI). */
|
|
63
|
+
check?: boolean;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* `beam monitor configure`: saves settings to the user's monitor.json so `beam monitor` needs no
|
|
67
|
+
* flags. With no options, prints the effective settings and which layer each came from (managed,
|
|
68
|
+
* user, project, default); with --check, validates every layer for CI. A key is only ever stored
|
|
69
|
+
* from stdin (`key`), and a provider's key that isn't set in this shell is a warning, not an
|
|
70
|
+
* error: it may be set only where beam monitor runs (a systemd EnvironmentFile, a container's secrets).
|
|
71
|
+
*/
|
|
72
|
+
export declare function monitorConfigure(options: ConfigureOptions, write?: (line: string) => void): Promise<number>;
|