bla-agents 1.1.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/blind-llm-agents/SKILL.md +20 -14
- package/DISCLAIMER.md +15 -7
- package/README.md +153 -198
- package/dist/bundler/index.d.ts +19 -2
- package/dist/bundler/index.d.ts.map +1 -1
- package/dist/bundler/index.js +47 -4
- package/dist/bundler/index.js.map +1 -1
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +123 -18
- package/dist/cli.js.map +1 -1
- package/dist/core/config.d.ts +54 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +160 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/coverage-contract.d.ts +97 -0
- package/dist/core/coverage-contract.d.ts.map +1 -0
- package/dist/core/coverage-contract.js +164 -0
- package/dist/core/coverage-contract.js.map +1 -0
- package/dist/core/debug-posture.d.ts +40 -0
- package/dist/core/debug-posture.d.ts.map +1 -0
- package/dist/core/debug-posture.js +197 -0
- package/dist/core/debug-posture.js.map +1 -0
- package/dist/core/detector.d.ts.map +1 -1
- package/dist/core/detector.js +58 -6
- package/dist/core/detector.js.map +1 -1
- package/dist/core/identifiers.d.ts +32 -0
- package/dist/core/identifiers.d.ts.map +1 -0
- package/dist/core/identifiers.js +263 -0
- package/dist/core/identifiers.js.map +1 -0
- package/dist/core/llm-directives.d.ts +12 -0
- package/dist/core/llm-directives.d.ts.map +1 -0
- package/dist/core/llm-directives.js +23 -0
- package/dist/core/llm-directives.js.map +1 -0
- package/dist/core/prng.d.ts +10 -1
- package/dist/core/prng.d.ts.map +1 -1
- package/dist/core/prng.js +27 -2
- package/dist/core/prng.js.map +1 -1
- package/dist/core/release-exposure.d.ts.map +1 -1
- package/dist/core/release-exposure.js +13 -2
- package/dist/core/release-exposure.js.map +1 -1
- package/dist/core/release-plan.d.ts +68 -0
- package/dist/core/release-plan.d.ts.map +1 -0
- package/dist/core/release-plan.js +244 -0
- package/dist/core/release-plan.js.map +1 -0
- package/dist/core/sarif.d.ts +53 -0
- package/dist/core/sarif.d.ts.map +1 -0
- package/dist/core/sarif.js +95 -0
- package/dist/core/sarif.js.map +1 -0
- package/dist/core/sqlite-runtime.d.ts +13 -0
- package/dist/core/sqlite-runtime.d.ts.map +1 -1
- package/dist/core/sqlite-runtime.js +38 -8
- package/dist/core/sqlite-runtime.js.map +1 -1
- package/dist/core/types.d.ts +7 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/engine/auditor.d.ts.map +1 -1
- package/dist/engine/auditor.js +380 -19
- package/dist/engine/auditor.js.map +1 -1
- package/dist/engine/benchmark.d.ts +1 -1
- package/dist/engine/benchmark.d.ts.map +1 -1
- package/dist/engine/benchmark.js +121 -41
- package/dist/engine/benchmark.js.map +1 -1
- package/dist/engine/defender.d.ts +1 -0
- package/dist/engine/defender.d.ts.map +1 -1
- package/dist/engine/defender.js +7 -1
- package/dist/engine/defender.js.map +1 -1
- package/dist/engine/harden.d.ts +61 -0
- package/dist/engine/harden.d.ts.map +1 -0
- package/dist/engine/harden.js +294 -0
- package/dist/engine/harden.js.map +1 -0
- package/dist/engine/protector.d.ts.map +1 -1
- package/dist/engine/protector.js +242 -26
- package/dist/engine/protector.js.map +1 -1
- package/dist/identity.d.ts +112 -2
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +112 -2
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +26 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -9
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +59 -152
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +466 -50
- package/dist/mcp/server.js.map +1 -1
- package/dist/setup/clients.d.ts +49 -1
- package/dist/setup/clients.d.ts.map +1 -1
- package/dist/setup/clients.js +1193 -20
- package/dist/setup/clients.js.map +1 -1
- package/dist/setup/doctor.d.ts +58 -14
- package/dist/setup/doctor.d.ts.map +1 -1
- package/dist/setup/doctor.js +316 -22
- package/dist/setup/doctor.js.map +1 -1
- package/dist/setup/setup.d.ts +77 -7
- package/dist/setup/setup.d.ts.map +1 -1
- package/dist/setup/setup.js +591 -62
- package/dist/setup/setup.js.map +1 -1
- package/dist/shields/chaff/chaff-generator.d.ts.map +1 -1
- package/dist/shields/chaff/chaff-generator.js +12 -3
- package/dist/shields/chaff/chaff-generator.js.map +1 -1
- package/dist/shields/deception/architecture-mirage.js +1 -1
- package/dist/shields/deception/architecture-mirage.js.map +1 -1
- package/dist/shields/deception/canary-honeypot.d.ts +33 -0
- package/dist/shields/deception/canary-honeypot.d.ts.map +1 -0
- package/dist/shields/deception/canary-honeypot.js +95 -0
- package/dist/shields/deception/canary-honeypot.js.map +1 -0
- package/dist/shields/deception/cognitive-armor-trigger.d.ts +43 -0
- package/dist/shields/deception/cognitive-armor-trigger.d.ts.map +1 -0
- package/dist/shields/deception/cognitive-armor-trigger.js +204 -0
- package/dist/shields/deception/cognitive-armor-trigger.js.map +1 -0
- package/dist/shields/deception/crash-trace-decoy.js +1 -1
- package/dist/shields/deception/crash-trace-decoy.js.map +1 -1
- package/dist/shields/deception/decompiler-illusion.js +1 -1
- package/dist/shields/deception/decompiler-illusion.js.map +1 -1
- package/dist/shields/deception/diff-noise-injector.js +1 -1
- package/dist/shields/deception/diff-noise-injector.js.map +1 -1
- package/dist/shields/deception/evidence-contract-poison.js +5 -5
- package/dist/shields/deception/evidence-contract-poison.js.map +1 -1
- package/dist/shields/deception/format-payloads.d.ts +21 -0
- package/dist/shields/deception/format-payloads.d.ts.map +1 -0
- package/dist/shields/deception/format-payloads.js +24 -0
- package/dist/shields/deception/format-payloads.js.map +1 -0
- package/dist/shields/deception/index.d.ts +10 -2
- package/dist/shields/deception/index.d.ts.map +1 -1
- package/dist/shields/deception/index.js +20 -3
- package/dist/shields/deception/index.js.map +1 -1
- package/dist/shields/deception/prompt-completion-poison.d.ts +3 -2
- package/dist/shields/deception/prompt-completion-poison.d.ts.map +1 -1
- package/dist/shields/deception/prompt-completion-poison.js +6 -3
- package/dist/shields/deception/prompt-completion-poison.js.map +1 -1
- package/dist/shields/deception/shadow-business-logic.js +4 -4
- package/dist/shields/deception/shadow-business-logic.js.map +1 -1
- package/dist/shields/deception/system-diagnostic-decoy.d.ts +36 -0
- package/dist/shields/deception/system-diagnostic-decoy.d.ts.map +1 -0
- package/dist/shields/deception/system-diagnostic-decoy.js +101 -0
- package/dist/shields/deception/system-diagnostic-decoy.js.map +1 -0
- package/dist/shields/exhaustion/asar-header-amplifier.d.ts +12 -3
- package/dist/shields/exhaustion/asar-header-amplifier.d.ts.map +1 -1
- package/dist/shields/exhaustion/asar-header-amplifier.js +30 -8
- package/dist/shields/exhaustion/asar-header-amplifier.js.map +1 -1
- package/dist/shields/exhaustion/bpe-token-amplifier.js +2 -2
- package/dist/shields/exhaustion/bpe-token-amplifier.js.map +1 -1
- package/dist/shields/exhaustion/callgraph-labyrinth.js +2 -2
- package/dist/shields/exhaustion/callgraph-labyrinth.js.map +1 -1
- package/dist/shields/exhaustion/cdp-shape-budget-breaker.js +1 -1
- package/dist/shields/exhaustion/cdp-shape-budget-breaker.js.map +1 -1
- package/dist/shields/exhaustion/frida-capture-saturation.d.ts +10 -5
- package/dist/shields/exhaustion/frida-capture-saturation.d.ts.map +1 -1
- package/dist/shields/exhaustion/frida-capture-saturation.js +21 -8
- package/dist/shields/exhaustion/frida-capture-saturation.js.map +1 -1
- package/dist/shields/exhaustion/index.d.ts +2 -2
- package/dist/shields/exhaustion/index.d.ts.map +1 -1
- package/dist/shields/exhaustion/index.js +2 -2
- package/dist/shields/exhaustion/index.js.map +1 -1
- package/dist/shields/exhaustion/obligation-flooder.d.ts +23 -6
- package/dist/shields/exhaustion/obligation-flooder.d.ts.map +1 -1
- package/dist/shields/exhaustion/obligation-flooder.js +29 -12
- package/dist/shields/exhaustion/obligation-flooder.js.map +1 -1
- package/dist/shields/exhaustion/rea-budget-matrix.d.ts +8 -2
- package/dist/shields/exhaustion/rea-budget-matrix.d.ts.map +1 -1
- package/dist/shields/exhaustion/rea-budget-matrix.js +139 -16
- package/dist/shields/exhaustion/rea-budget-matrix.js.map +1 -1
- package/dist/shields/exhaustion/regex-worker-tarpit.d.ts.map +1 -1
- package/dist/shields/exhaustion/regex-worker-tarpit.js +2 -1
- package/dist/shields/exhaustion/regex-worker-tarpit.js.map +1 -1
- package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts +7 -4
- package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts.map +1 -1
- package/dist/shields/exhaustion/wasm-interface-exhaustion.js +16 -7
- package/dist/shields/exhaustion/wasm-interface-exhaustion.js.map +1 -1
- package/dist/shields/formats/android-dex-xref.d.ts +19 -0
- package/dist/shields/formats/android-dex-xref.d.ts.map +1 -0
- package/dist/shields/formats/android-dex-xref.js +427 -0
- package/dist/shields/formats/android-dex-xref.js.map +1 -0
- package/dist/shields/formats/android-manifest.d.ts +44 -0
- package/dist/shields/formats/android-manifest.d.ts.map +1 -0
- package/dist/shields/formats/android-manifest.js +240 -0
- package/dist/shields/formats/android-manifest.js.map +1 -0
- package/dist/shields/formats/android-r8.d.ts +44 -0
- package/dist/shields/formats/android-r8.d.ts.map +1 -0
- package/dist/shields/formats/android-r8.js +246 -0
- package/dist/shields/formats/android-r8.js.map +1 -0
- package/dist/shields/formats/apple-plist.d.ts +15 -0
- package/dist/shields/formats/apple-plist.d.ts.map +1 -1
- package/dist/shields/formats/apple-plist.js +59 -1
- package/dist/shields/formats/apple-plist.js.map +1 -1
- package/dist/shields/formats/archive.d.ts +27 -6
- package/dist/shields/formats/archive.d.ts.map +1 -1
- package/dist/shields/formats/archive.js +247 -45
- package/dist/shields/formats/archive.js.map +1 -1
- package/dist/shields/formats/asar.d.ts +50 -10
- package/dist/shields/formats/asar.d.ts.map +1 -1
- package/dist/shields/formats/asar.js +265 -39
- package/dist/shields/formats/asar.js.map +1 -1
- package/dist/shields/formats/bun-standalone.d.ts +78 -0
- package/dist/shields/formats/bun-standalone.d.ts.map +1 -0
- package/dist/shields/formats/bun-standalone.js +272 -0
- package/dist/shields/formats/bun-standalone.js.map +1 -0
- package/dist/shields/formats/dotnet-managed.d.ts +9 -0
- package/dist/shields/formats/dotnet-managed.d.ts.map +1 -1
- package/dist/shields/formats/dotnet-managed.js +26 -1
- package/dist/shields/formats/dotnet-managed.js.map +1 -1
- package/dist/shields/formats/electron-fuses.d.ts +63 -8
- package/dist/shields/formats/electron-fuses.d.ts.map +1 -1
- package/dist/shields/formats/electron-fuses.js +297 -65
- package/dist/shields/formats/electron-fuses.js.map +1 -1
- package/dist/shields/formats/erlang-beam.d.ts +34 -0
- package/dist/shields/formats/erlang-beam.d.ts.map +1 -0
- package/dist/shields/formats/erlang-beam.js +319 -0
- package/dist/shields/formats/erlang-beam.js.map +1 -0
- package/dist/shields/formats/evm-bytecode.d.ts +28 -0
- package/dist/shields/formats/evm-bytecode.d.ts.map +1 -0
- package/dist/shields/formats/evm-bytecode.js +124 -0
- package/dist/shields/formats/evm-bytecode.js.map +1 -0
- package/dist/shields/formats/go-flutter-exhaustion.d.ts +55 -0
- package/dist/shields/formats/go-flutter-exhaustion.d.ts.map +1 -0
- package/dist/shields/formats/go-flutter-exhaustion.js +346 -0
- package/dist/shields/formats/go-flutter-exhaustion.js.map +1 -0
- package/dist/shields/formats/gpu-ptx.d.ts +40 -0
- package/dist/shields/formats/gpu-ptx.d.ts.map +1 -0
- package/dist/shields/formats/gpu-ptx.js +62 -0
- package/dist/shields/formats/gpu-ptx.js.map +1 -0
- package/dist/shields/formats/headers.d.ts.map +1 -1
- package/dist/shields/formats/headers.js +54 -14
- package/dist/shields/formats/headers.js.map +1 -1
- package/dist/shields/formats/jvm-bytecode.d.ts +20 -0
- package/dist/shields/formats/jvm-bytecode.d.ts.map +1 -0
- package/dist/shields/formats/jvm-bytecode.js +134 -0
- package/dist/shields/formats/jvm-bytecode.js.map +1 -0
- package/dist/shields/formats/mobile-game.d.ts +4 -0
- package/dist/shields/formats/mobile-game.d.ts.map +1 -1
- package/dist/shields/formats/mobile-game.js +16 -0
- package/dist/shields/formats/mobile-game.js.map +1 -1
- package/dist/shields/formats/model.d.ts +22 -8
- package/dist/shields/formats/model.d.ts.map +1 -1
- package/dist/shields/formats/model.js +231 -59
- package/dist/shields/formats/model.js.map +1 -1
- package/dist/shields/formats/native.d.ts +74 -11
- package/dist/shields/formats/native.d.ts.map +1 -1
- package/dist/shields/formats/native.js +557 -109
- package/dist/shields/formats/native.js.map +1 -1
- package/dist/shields/formats/pcap-capture.d.ts +27 -0
- package/dist/shields/formats/pcap-capture.d.ts.map +1 -0
- package/dist/shields/formats/pcap-capture.js +201 -0
- package/dist/shields/formats/pcap-capture.js.map +1 -0
- package/dist/shields/formats/python.d.ts +22 -1
- package/dist/shields/formats/python.d.ts.map +1 -1
- package/dist/shields/formats/python.js +568 -27
- package/dist/shields/formats/python.js.map +1 -1
- package/dist/shields/formats/sourcemap.d.ts.map +1 -1
- package/dist/shields/formats/sourcemap.js +2 -0
- package/dist/shields/formats/sourcemap.js.map +1 -1
- package/dist/shields/formats/sqlite.d.ts +87 -15
- package/dist/shields/formats/sqlite.d.ts.map +1 -1
- package/dist/shields/formats/sqlite.js +377 -42
- package/dist/shields/formats/sqlite.js.map +1 -1
- package/dist/shields/formats/wasm.d.ts +6 -0
- package/dist/shields/formats/wasm.d.ts.map +1 -1
- package/dist/shields/formats/wasm.js +118 -3
- package/dist/shields/formats/wasm.js.map +1 -1
- package/dist/shields/javascript/ast-shield.d.ts +26 -5
- package/dist/shields/javascript/ast-shield.d.ts.map +1 -1
- package/dist/shields/javascript/ast-shield.js +748 -104
- package/dist/shields/javascript/ast-shield.js.map +1 -1
- package/dist/shields/runtime/memory-diff-shield.d.ts +56 -0
- package/dist/shields/runtime/memory-diff-shield.d.ts.map +1 -0
- package/dist/shields/runtime/memory-diff-shield.js +170 -0
- package/dist/shields/runtime/memory-diff-shield.js.map +1 -0
- package/dist/shields/runtime/runtime-shield.d.ts +12 -16
- package/dist/shields/runtime/runtime-shield.d.ts.map +1 -1
- package/dist/shields/runtime/runtime-shield.js +30 -24
- package/dist/shields/runtime/runtime-shield.js.map +1 -1
- package/dist/shields/tarpit/opaque-predicates.d.ts.map +1 -1
- package/dist/shields/tarpit/opaque-predicates.js +3 -3
- package/dist/shields/tarpit/opaque-predicates.js.map +1 -1
- package/dist/shields/tarpit/tarpit-generator.d.ts +9 -4
- package/dist/shields/tarpit/tarpit-generator.d.ts.map +1 -1
- package/dist/shields/tarpit/tarpit-generator.js +30 -23
- package/dist/shields/tarpit/tarpit-generator.js.map +1 -1
- package/package.json +13 -6
|
@@ -1,21 +1,280 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync, mkdtempSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
2
3
|
import { tmpdir } from "node:os";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
+
import { join, resolve } from "node:path";
|
|
4
5
|
import { SeededPrng } from "../../core/prng.js";
|
|
5
6
|
import { getDatabaseSyncClass } from "../../core/sqlite-runtime.js";
|
|
6
7
|
import { generateChaffPayloads } from "../chaff/chaff-generator.js";
|
|
8
|
+
import { buildCanaryAndDiagnosticPayloads } from "../deception/format-payloads.js";
|
|
9
|
+
import { SQLITE_HONEY_TABLES, SQLITE_HONEY_TABLE_NAME_SET } from "../../core/identifiers.js";
|
|
10
|
+
/**
|
|
11
|
+
* Thrown when a SQLite database input cannot be proven complete or consistent
|
|
12
|
+
* (e.g., active/uncheckpointed WAL mode, companion -wal/-shm/-journal files,
|
|
13
|
+
* truncated header, or failed PRAGMA integrity_check).
|
|
14
|
+
*/
|
|
15
|
+
export class SqliteWalConsistencyError extends Error {
|
|
16
|
+
constructor(reason) {
|
|
17
|
+
super(`SQLite consistency admission failed: ${reason}`);
|
|
18
|
+
this.name = "SqliteWalConsistencyError";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export const DEFAULT_SQLITE_SENSITIVITY_POLICY = {
|
|
22
|
+
policyId: "bla-default-sqlite-data-minimization-v1",
|
|
23
|
+
rules: [
|
|
24
|
+
{
|
|
25
|
+
ruleId: "SQLITE-SEC-001",
|
|
26
|
+
tablePattern: /.*/i,
|
|
27
|
+
columnPattern: /^(offline_token|refresh_token|access_token|session_secret|private_key|master_key|secret_key|api_key|password_hash|client_secret)$/i,
|
|
28
|
+
classification: "forbidden-in-client-artifact",
|
|
29
|
+
remediation: "Do not distribute long-lived tokens or secret keys in client SQLite caches. Use short-lived server-revocable leases or OS-keystore-backed encryption without shipping hardcoded keys in the same bundle.",
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
function matchesPattern(value, pattern) {
|
|
34
|
+
if (typeof pattern === "string") {
|
|
35
|
+
if (pattern === "*")
|
|
36
|
+
return true;
|
|
37
|
+
return value.toLowerCase() === pattern.toLowerCase();
|
|
38
|
+
}
|
|
39
|
+
return pattern.test(value);
|
|
40
|
+
}
|
|
41
|
+
function quoteIdentifier(id) {
|
|
42
|
+
return `"${id.replace(/"/g, '""')}"`;
|
|
43
|
+
}
|
|
44
|
+
function isHoneyTableName(name) {
|
|
45
|
+
return SQLITE_HONEY_TABLE_NAME_SET.has(name) || name.includes("enclave_");
|
|
46
|
+
}
|
|
47
|
+
function hasValidSqlite3Header(bytes) {
|
|
48
|
+
return (bytes.length >= 100 &&
|
|
49
|
+
bytes.subarray(0, 16).toString("latin1") === "SQLite format 3\0");
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Checks whether a SQLite header indicates WAL mode (file format write version = 2
|
|
53
|
+
* at offset 18 or read version = 2 at offset 19).
|
|
54
|
+
*/
|
|
55
|
+
export function isSqliteHeaderWalMode(bytes) {
|
|
56
|
+
if (!hasValidSqlite3Header(bytes))
|
|
57
|
+
return false;
|
|
58
|
+
return bytes[18] === 2 || bytes[19] === 2;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Validates that a on-disk SQLite file path is a standalone, quiescent database
|
|
62
|
+
* with no uncheckpointed WAL (`-wal`), shared-memory (`-shm`), or hot rollback
|
|
63
|
+
* journal (`-journal`) companion files before protection runs.
|
|
64
|
+
*/
|
|
65
|
+
export function validateSqliteFileInput(dbPath) {
|
|
66
|
+
const absPath = resolve(dbPath);
|
|
67
|
+
if (!existsSync(absPath)) {
|
|
68
|
+
throw new SqliteWalConsistencyError(`Database file does not exist: ${absPath}`);
|
|
69
|
+
}
|
|
70
|
+
const walPath = `${absPath}-wal`;
|
|
71
|
+
const shmPath = `${absPath}-shm`;
|
|
72
|
+
const journalPath = `${absPath}-journal`;
|
|
73
|
+
if (existsSync(journalPath)) {
|
|
74
|
+
const journalSize = statSync(journalPath).size;
|
|
75
|
+
throw new SqliteWalConsistencyError(`Hot rollback journal detected (${journalPath}, ${journalSize} bytes). Export a consistent standalone backup before running protection.`);
|
|
76
|
+
}
|
|
77
|
+
if (existsSync(walPath) || existsSync(shmPath)) {
|
|
78
|
+
const walSize = existsSync(walPath) ? statSync(walPath).size : 0;
|
|
79
|
+
throw new SqliteWalConsistencyError(`Companion WAL/SHM files detected (${walPath}, ${walSize} bytes). Active or uncheckpointed WAL data would be lost if only the main DB file were rewritten. Run a clean checkpoint/backup (e.g. VACUUM INTO) first.`);
|
|
80
|
+
}
|
|
81
|
+
const bytes = readFileSync(absPath);
|
|
82
|
+
validateSqliteStandaloneBuffer(bytes);
|
|
83
|
+
return bytes;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Validates that a single SQLite buffer is a valid, self-contained SQLite 3
|
|
87
|
+
* snapshot (not in WAL mode requiring external `-wal` state) and passes `PRAGMA integrity_check`.
|
|
88
|
+
*/
|
|
89
|
+
export function validateSqliteStandaloneBuffer(bytes) {
|
|
90
|
+
if (!hasValidSqlite3Header(bytes)) {
|
|
91
|
+
throw new SqliteWalConsistencyError("Input is not a valid SQLite 3 database header (minimum 100 bytes with 'SQLite format 3\\0' magic).");
|
|
92
|
+
}
|
|
93
|
+
const pageSizeRaw = bytes.readUInt16BE(16);
|
|
94
|
+
const pageSize = pageSizeRaw === 1 ? 65536 : pageSizeRaw;
|
|
95
|
+
if (pageSize < 512 ||
|
|
96
|
+
pageSize > 65536 ||
|
|
97
|
+
(pageSize & (pageSize - 1)) !== 0 ||
|
|
98
|
+
bytes.length % pageSize !== 0) {
|
|
99
|
+
throw new SqliteWalConsistencyError(`SQLite file size (${bytes.length}) is not an exact multiple of valid page size (${pageSize}); database appears truncated.`);
|
|
100
|
+
}
|
|
101
|
+
if (isSqliteHeaderWalMode(bytes)) {
|
|
102
|
+
throw new SqliteWalConsistencyError("SQLite header indicates WAL mode (format write/read version 2 at bytes 18..19). A single buffer cannot guarantee that committed WAL frames are included. Export a standalone DELETE-mode backup (e.g. VACUUM INTO or PRAGMA journal_mode=DELETE) before protection.");
|
|
103
|
+
}
|
|
104
|
+
const DatabaseSync = getDatabaseSyncClass();
|
|
105
|
+
const tempDir = mkdtempSync(join(tmpdir(), "bla-sqlite-validate-"));
|
|
106
|
+
const dbPath = join(tempDir, "validate.sqlite");
|
|
107
|
+
try {
|
|
108
|
+
writeFileSync(dbPath, bytes);
|
|
109
|
+
const db = new DatabaseSync(dbPath, { readOnly: true });
|
|
110
|
+
try {
|
|
111
|
+
db.function("enclave_unseal_payload", { deterministic: true }, (blob) => `ENCLAVE_SEALED:${String(blob ?? "")}`);
|
|
112
|
+
const integrity = db.prepare("PRAGMA integrity_check").all();
|
|
113
|
+
if (integrity.length !== 1 || integrity[0]?.integrity_check !== "ok") {
|
|
114
|
+
throw new SqliteWalConsistencyError("SQLite PRAGMA integrity_check failed.");
|
|
115
|
+
}
|
|
116
|
+
// Also ensure sqlite_schema is readable
|
|
117
|
+
db.prepare("SELECT count(*) FROM sqlite_schema").get();
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
db.close();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
if (err instanceof SqliteWalConsistencyError)
|
|
125
|
+
throw err;
|
|
126
|
+
throw new SqliteWalConsistencyError(`SQLite database failed read/integrity validation: ${err instanceof Error ? err.message : String(err)}`);
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function snapshotBusinessTables(db) {
|
|
133
|
+
const tables = db
|
|
134
|
+
.prepare("SELECT name FROM sqlite_schema WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name")
|
|
135
|
+
.all();
|
|
136
|
+
const digests = [];
|
|
137
|
+
for (const { name } of tables) {
|
|
138
|
+
if (isHoneyTableName(name))
|
|
139
|
+
continue;
|
|
140
|
+
const rows = db
|
|
141
|
+
.prepare(`SELECT * FROM ${quoteIdentifier(name)} ORDER BY rowid`)
|
|
142
|
+
.all();
|
|
143
|
+
const hash = createHash("sha256")
|
|
144
|
+
.update(JSON.stringify(rows))
|
|
145
|
+
.digest("hex");
|
|
146
|
+
digests.push({
|
|
147
|
+
name,
|
|
148
|
+
rowCount: rows.length,
|
|
149
|
+
rowsSha256: hash,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return digests;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Evaluates a SQLite buffer against an explicit sensitive-column policy without
|
|
156
|
+
* ever emitting or logging raw secret values. Distinguishes honey-table decoration
|
|
157
|
+
* from actual data confidentiality.
|
|
158
|
+
*/
|
|
159
|
+
export function evaluateSqliteSensitivityPolicy(bytes, policy = DEFAULT_SQLITE_SENSITIVITY_POLICY) {
|
|
160
|
+
const residualRiskNotice = "Honey tables and generated-column traps only increase static/automated inspection friction; they do not encrypt business tables. Any plaintext or client-decryptable data shipped in an offline database remains readable by a local principal with sufficient process or file permissions.";
|
|
161
|
+
if (!hasValidSqlite3Header(bytes)) {
|
|
162
|
+
return {
|
|
163
|
+
validSqlite: false,
|
|
164
|
+
formatStatus: "unsupported-or-encrypted",
|
|
165
|
+
decorationState: "unsupported-or-encrypted",
|
|
166
|
+
businessDataState: "unknown",
|
|
167
|
+
confidentialityState: "unsupported-or-encrypted",
|
|
168
|
+
businessTables: [],
|
|
169
|
+
honeyTablesCount: 0,
|
|
170
|
+
findings: [],
|
|
171
|
+
residualRiskNotice,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
const DatabaseSync = getDatabaseSyncClass();
|
|
175
|
+
const tempDir = mkdtempSync(join(tmpdir(), "bla-sqlite-policy-"));
|
|
176
|
+
const dbPath = join(tempDir, "policy.sqlite");
|
|
177
|
+
try {
|
|
178
|
+
writeFileSync(dbPath, bytes);
|
|
179
|
+
const db = new DatabaseSync(dbPath, { readOnly: true });
|
|
180
|
+
try {
|
|
181
|
+
const rows = db
|
|
182
|
+
.prepare("SELECT name, sql FROM sqlite_schema WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name")
|
|
183
|
+
.all();
|
|
184
|
+
const tableNames = rows.map((r) => r.name);
|
|
185
|
+
const honeyTablesCount = tableNames.filter(isHoneyTableName).length;
|
|
186
|
+
const businessTables = tableNames.filter((n) => !isHoneyTableName(n));
|
|
187
|
+
const hasGeneratedTrapColumns = rows.some((r) => typeof r.sql === "string" && r.sql.includes("GENERATED ALWAYS AS"));
|
|
188
|
+
const decorated = honeyTablesCount > 0 || hasGeneratedTrapColumns;
|
|
189
|
+
let totalBusinessRows = 0;
|
|
190
|
+
const findings = [];
|
|
191
|
+
for (const table of businessTables) {
|
|
192
|
+
const countRow = db
|
|
193
|
+
.prepare(`SELECT COUNT(*) AS cnt FROM ${quoteIdentifier(table)}`)
|
|
194
|
+
.get();
|
|
195
|
+
const tableRows = Number(countRow?.cnt ?? 0);
|
|
196
|
+
totalBusinessRows += tableRows;
|
|
197
|
+
const columns = db
|
|
198
|
+
.prepare(`PRAGMA table_info(${quoteIdentifier(table)})`)
|
|
199
|
+
.all();
|
|
200
|
+
for (const col of columns) {
|
|
201
|
+
for (const rule of policy.rules) {
|
|
202
|
+
if (matchesPattern(table, rule.tablePattern) &&
|
|
203
|
+
matchesPattern(col.name, rule.columnPattern)) {
|
|
204
|
+
const nonNullRow = db
|
|
205
|
+
.prepare(`SELECT COUNT(*) AS cnt FROM ${quoteIdentifier(table)} WHERE ${quoteIdentifier(col.name)} IS NOT NULL AND CAST(${quoteIdentifier(col.name)} AS TEXT) != ''`)
|
|
206
|
+
.get();
|
|
207
|
+
const nonNullRowCount = Number(nonNullRow?.cnt ?? 0);
|
|
208
|
+
if (nonNullRowCount > 0) {
|
|
209
|
+
findings.push({
|
|
210
|
+
ruleId: rule.ruleId,
|
|
211
|
+
table,
|
|
212
|
+
column: col.name,
|
|
213
|
+
nonNullRowCount,
|
|
214
|
+
classification: rule.classification,
|
|
215
|
+
status: "exposed",
|
|
216
|
+
remediation: rule.remediation,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const businessDataState = totalBusinessRows > 0 ? "business-data-preserved" : "empty";
|
|
224
|
+
const confidentialityState = findings.length > 0
|
|
225
|
+
? "policy-violation-exposed"
|
|
226
|
+
: policy.rules.length > 0 && businessTables.length > 0
|
|
227
|
+
? "confidentiality-not-established"
|
|
228
|
+
: "confidentiality-not-established";
|
|
229
|
+
return {
|
|
230
|
+
validSqlite: true,
|
|
231
|
+
formatStatus: "sqlite3-plaintext",
|
|
232
|
+
decorationState: decorated ? "decorated" : "undecorated",
|
|
233
|
+
businessDataState,
|
|
234
|
+
confidentialityState,
|
|
235
|
+
businessTables,
|
|
236
|
+
honeyTablesCount,
|
|
237
|
+
findings,
|
|
238
|
+
residualRiskNotice,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
db.close();
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
return {
|
|
247
|
+
validSqlite: false,
|
|
248
|
+
formatStatus: "unsupported-or-encrypted",
|
|
249
|
+
decorationState: "unsupported-or-encrypted",
|
|
250
|
+
businessDataState: "unknown",
|
|
251
|
+
confidentialityState: "unsupported-or-encrypted",
|
|
252
|
+
businessTables: [],
|
|
253
|
+
honeyTablesCount: 0,
|
|
254
|
+
findings: [],
|
|
255
|
+
residualRiskNotice,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
finally {
|
|
259
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
260
|
+
}
|
|
261
|
+
}
|
|
7
262
|
/**
|
|
8
263
|
* Inspects a SQLite 3 database file or buffer using `node:sqlite`.
|
|
9
264
|
*/
|
|
10
|
-
export function inspectSqliteBuffer(bytes) {
|
|
11
|
-
if (bytes
|
|
12
|
-
bytes.subarray(0, 16).toString("latin1") !== "SQLite format 3\0") {
|
|
265
|
+
export function inspectSqliteBuffer(bytes, policy = DEFAULT_SQLITE_SENSITIVITY_POLICY) {
|
|
266
|
+
if (!hasValidSqlite3Header(bytes)) {
|
|
13
267
|
return {
|
|
14
268
|
validSqlite: false,
|
|
15
269
|
tableNames: [],
|
|
270
|
+
businessTables: [],
|
|
16
271
|
honeyTablesCount: 0,
|
|
17
272
|
hasGeneratedTrapColumns: false,
|
|
18
273
|
blaProtected: false,
|
|
274
|
+
decorationState: "unsupported-or-encrypted",
|
|
275
|
+
businessDataState: "unknown",
|
|
276
|
+
confidentialityState: "unsupported-or-encrypted",
|
|
277
|
+
policyFindings: [],
|
|
19
278
|
};
|
|
20
279
|
}
|
|
21
280
|
const DatabaseSync = getDatabaseSyncClass();
|
|
@@ -29,15 +288,22 @@ export function inspectSqliteBuffer(bytes) {
|
|
|
29
288
|
.prepare("SELECT name, sql FROM sqlite_schema WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name")
|
|
30
289
|
.all();
|
|
31
290
|
const tableNames = rows.map((r) => r.name);
|
|
32
|
-
const honeyTablesCount = tableNames.filter(
|
|
291
|
+
const honeyTablesCount = tableNames.filter(isHoneyTableName).length;
|
|
292
|
+
const businessTables = tableNames.filter((n) => !isHoneyTableName(n));
|
|
33
293
|
const hasGeneratedTrapColumns = rows.some((r) => typeof r.sql === "string" && r.sql.includes("GENERATED ALWAYS AS"));
|
|
34
294
|
const blaProtected = honeyTablesCount > 0 || hasGeneratedTrapColumns;
|
|
295
|
+
const policyEval = evaluateSqliteSensitivityPolicy(bytes, policy);
|
|
35
296
|
return {
|
|
36
297
|
validSqlite: true,
|
|
37
298
|
tableNames,
|
|
299
|
+
businessTables,
|
|
38
300
|
honeyTablesCount,
|
|
39
301
|
hasGeneratedTrapColumns,
|
|
40
302
|
blaProtected,
|
|
303
|
+
decorationState: blaProtected ? "decorated" : "undecorated",
|
|
304
|
+
businessDataState: policyEval.businessDataState,
|
|
305
|
+
confidentialityState: policyEval.confidentialityState,
|
|
306
|
+
policyFindings: policyEval.findings,
|
|
41
307
|
};
|
|
42
308
|
}
|
|
43
309
|
finally {
|
|
@@ -48,9 +314,14 @@ export function inspectSqliteBuffer(bytes) {
|
|
|
48
314
|
return {
|
|
49
315
|
validSqlite: false,
|
|
50
316
|
tableNames: [],
|
|
317
|
+
businessTables: [],
|
|
51
318
|
honeyTablesCount: 0,
|
|
52
319
|
hasGeneratedTrapColumns: false,
|
|
53
320
|
blaProtected: false,
|
|
321
|
+
decorationState: "unsupported-or-encrypted",
|
|
322
|
+
businessDataState: "unknown",
|
|
323
|
+
confidentialityState: "unsupported-or-encrypted",
|
|
324
|
+
policyFindings: [],
|
|
54
325
|
};
|
|
55
326
|
}
|
|
56
327
|
finally {
|
|
@@ -58,88 +329,120 @@ export function inspectSqliteBuffer(bytes) {
|
|
|
58
329
|
}
|
|
59
330
|
}
|
|
60
331
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
332
|
+
* Data minimization helper: removes or redacts specified sensitive columns from a
|
|
333
|
+
* standalone SQLite database snapshot so forbidden secrets are never shipped in client artifacts.
|
|
334
|
+
*/
|
|
335
|
+
export function minimizeSqliteDatabaseBuffer(bytes, columnsToDrop) {
|
|
336
|
+
validateSqliteStandaloneBuffer(bytes);
|
|
337
|
+
const DatabaseSync = getDatabaseSyncClass();
|
|
338
|
+
const tempDir = mkdtempSync(join(tmpdir(), "bla-sqlite-minimize-"));
|
|
339
|
+
const dbPath = join(tempDir, "minimize.sqlite");
|
|
340
|
+
try {
|
|
341
|
+
writeFileSync(dbPath, bytes);
|
|
342
|
+
const db = new DatabaseSync(dbPath);
|
|
343
|
+
try {
|
|
344
|
+
for (const { table, column } of columnsToDrop) {
|
|
345
|
+
db.exec(`ALTER TABLE ${quoteIdentifier(table)} DROP COLUMN ${quoteIdentifier(column)}`);
|
|
346
|
+
}
|
|
347
|
+
db.exec("VACUUM");
|
|
348
|
+
}
|
|
349
|
+
finally {
|
|
350
|
+
db.close();
|
|
351
|
+
}
|
|
352
|
+
return readFileSync(dbPath);
|
|
353
|
+
}
|
|
354
|
+
finally {
|
|
355
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Protects a standalone, checkpointed SQLite 3 database buffer by injecting decoy
|
|
360
|
+
* enclave honey tables and virtual generated-column traps while preserving 100% of
|
|
361
|
+
* existing business tables and rows.
|
|
63
362
|
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* 2. **Generated Column Expression Trap (`SqliteColumnEvaluationFailure`)**:
|
|
68
|
-
* Adds `GENERATED ALWAYS AS (bla_enclave_unseal(sealed_payload)) VIRTUAL` columns
|
|
69
|
-
* to honey tables (and optionally adds a virtual enclave audit column to existing tables).
|
|
70
|
-
* When REA opens the snapshot on its bare `readOnly: true, allowExtension: false`
|
|
71
|
-
* connection (`SqliteDatabaseInspection.ts:792`) without the `bla_enclave_unseal`
|
|
72
|
-
* application scalar function registered, REA's `SELECT` projection hits
|
|
73
|
-
* `SqliteColumnEvaluationFailure` (`SQLite cannot evaluate selected column(s) ... on REA's read-only connection`)!
|
|
74
|
-
* 3. **Schema Inventory Chaff**: Adds decoy views and triggers referencing hardware
|
|
75
|
-
* enclave state so `rea inspect-sqlite-database` harvests decoy schema topology.
|
|
363
|
+
* NOTE: This decorates the database against automated schema/row harvesting; it does
|
|
364
|
+
* NOT encrypt business columns (`confidentialityState: "confidentiality-not-established"`).
|
|
365
|
+
* Fails closed (`SqliteWalConsistencyError`) if the input is in WAL mode, truncated, or corrupt.
|
|
76
366
|
*/
|
|
77
367
|
export function protectSqliteBuffer(bytes, options = {}) {
|
|
368
|
+
validateSqliteStandaloneBuffer(bytes);
|
|
78
369
|
const DatabaseSync = getDatabaseSyncClass();
|
|
79
370
|
const intensity = options.intensity ?? "balanced";
|
|
80
371
|
const prng = new SeededPrng(options.seed ?? "bla-sqlite-shield-v1");
|
|
81
372
|
const chaffPayloads = generateChaffPayloads(prng, intensity);
|
|
373
|
+
const deception = buildCanaryAndDiagnosticPayloads(prng, intensity);
|
|
82
374
|
const tempDir = mkdtempSync(join(tmpdir(), "bla-sqlite-protect-"));
|
|
83
375
|
const dbPath = join(tempDir, "target.sqlite");
|
|
84
376
|
try {
|
|
85
|
-
|
|
86
|
-
bytes.subarray(0, 16).toString("latin1") === "SQLite format 3\0") {
|
|
87
|
-
writeFileSync(dbPath, bytes);
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
// Initialize a fresh SQLite database if buffer was empty
|
|
91
|
-
const initDb = new DatabaseSync(dbPath);
|
|
92
|
-
initDb.close();
|
|
93
|
-
}
|
|
377
|
+
writeFileSync(dbPath, bytes);
|
|
94
378
|
const db = new DatabaseSync(dbPath);
|
|
95
379
|
let honeyTablesInjected = 0;
|
|
96
380
|
let generatedTrapColumnsAdded = 0;
|
|
381
|
+
let beforeDigests = [];
|
|
97
382
|
try {
|
|
383
|
+
beforeDigests = snapshotBusinessTables(db);
|
|
98
384
|
// Register the scalar function during protection so INSERT/DDL validation succeeds cleanly
|
|
99
|
-
db.function("
|
|
385
|
+
db.function("enclave_unseal_payload", { deterministic: true }, (blob) => `ENCLAVE_SEALED:${String(blob ?? "")}`);
|
|
100
386
|
db.exec(`
|
|
101
|
-
CREATE TABLE IF NOT EXISTS
|
|
387
|
+
CREATE TABLE IF NOT EXISTS ${SQLITE_HONEY_TABLES.keyHierarchy} (
|
|
102
388
|
slot_id INTEGER PRIMARY KEY,
|
|
103
389
|
key_domain TEXT NOT NULL,
|
|
104
390
|
enclave_cid INTEGER NOT NULL DEFAULT 16,
|
|
105
391
|
sealed_payload TEXT NOT NULL,
|
|
106
392
|
attestation_notice TEXT NOT NULL,
|
|
107
|
-
unsealed_preview TEXT GENERATED ALWAYS AS (
|
|
393
|
+
unsealed_preview TEXT GENERATED ALWAYS AS (enclave_unseal_payload(sealed_payload)) VIRTUAL
|
|
108
394
|
);
|
|
109
395
|
|
|
110
|
-
CREATE TABLE IF NOT EXISTS
|
|
396
|
+
CREATE TABLE IF NOT EXISTS ${SQLITE_HONEY_TABLES.attestationLedger} (
|
|
111
397
|
quote_id TEXT PRIMARY KEY,
|
|
112
398
|
pcr0_sha256 TEXT NOT NULL,
|
|
113
399
|
monotonic_counter INTEGER NOT NULL,
|
|
114
400
|
enclave_manifest TEXT NOT NULL,
|
|
115
|
-
verified_state TEXT GENERATED ALWAYS AS (
|
|
401
|
+
verified_state TEXT GENERATED ALWAYS AS (enclave_unseal_payload(pcr0_sha256)) VIRTUAL
|
|
116
402
|
);
|
|
117
403
|
|
|
118
|
-
CREATE TABLE IF NOT EXISTS
|
|
404
|
+
CREATE TABLE IF NOT EXISTS ${SQLITE_HONEY_TABLES.sessionLeases} (
|
|
119
405
|
lease_token TEXT PRIMARY KEY,
|
|
120
406
|
tier_scope TEXT NOT NULL,
|
|
121
407
|
expires_epoch INTEGER NOT NULL,
|
|
122
408
|
hardware_bound INTEGER NOT NULL DEFAULT 1,
|
|
123
|
-
enclave_claim TEXT GENERATED ALWAYS AS (
|
|
409
|
+
enclave_claim TEXT GENERATED ALWAYS AS (enclave_unseal_payload(lease_token)) VIRTUAL
|
|
124
410
|
);
|
|
125
411
|
|
|
126
|
-
CREATE VIEW IF NOT EXISTS
|
|
412
|
+
CREATE VIEW IF NOT EXISTS ${SQLITE_HONEY_TABLES.activeTopologyView} AS
|
|
127
413
|
SELECT slot_id, key_domain, enclave_cid, attestation_notice
|
|
128
|
-
FROM
|
|
414
|
+
FROM ${SQLITE_HONEY_TABLES.keyHierarchy}
|
|
129
415
|
WHERE enclave_cid >= 16;
|
|
416
|
+
|
|
417
|
+
CREATE TABLE IF NOT EXISTS ${SQLITE_HONEY_TABLES.canaryTransport} (
|
|
418
|
+
canary_id INTEGER PRIMARY KEY,
|
|
419
|
+
canary_token TEXT NOT NULL,
|
|
420
|
+
ambiguous_transport_url TEXT NOT NULL,
|
|
421
|
+
conflicting_query_url TEXT NOT NULL,
|
|
422
|
+
policy_notice TEXT NOT NULL
|
|
423
|
+
);
|
|
424
|
+
|
|
425
|
+
CREATE TABLE IF NOT EXISTS ${SQLITE_HONEY_TABLES.systemDiagnostic} (
|
|
426
|
+
diag_id INTEGER PRIMARY KEY,
|
|
427
|
+
subsystem TEXT NOT NULL,
|
|
428
|
+
error_class TEXT NOT NULL,
|
|
429
|
+
system_code TEXT NOT NULL,
|
|
430
|
+
diagnostic_message TEXT NOT NULL,
|
|
431
|
+
remediation_rabbit_hole TEXT NOT NULL
|
|
432
|
+
);
|
|
130
433
|
`);
|
|
131
|
-
honeyTablesInjected +=
|
|
434
|
+
honeyTablesInjected += 5;
|
|
132
435
|
generatedTrapColumnsAdded += 3;
|
|
133
436
|
const insertKeyStmt = db.prepare(`
|
|
134
|
-
INSERT OR REPLACE INTO
|
|
437
|
+
INSERT OR REPLACE INTO ${SQLITE_HONEY_TABLES.keyHierarchy} (slot_id, key_domain, enclave_cid, sealed_payload, attestation_notice)
|
|
135
438
|
VALUES (?, ?, ?, ?, ?)
|
|
136
439
|
`);
|
|
137
440
|
const insertQuoteStmt = db.prepare(`
|
|
138
|
-
INSERT OR REPLACE INTO
|
|
441
|
+
INSERT OR REPLACE INTO ${SQLITE_HONEY_TABLES.attestationLedger} (quote_id, pcr0_sha256, monotonic_counter, enclave_manifest)
|
|
139
442
|
VALUES (?, ?, ?, ?)
|
|
140
443
|
`);
|
|
141
444
|
const insertLeaseStmt = db.prepare(`
|
|
142
|
-
INSERT OR REPLACE INTO
|
|
445
|
+
INSERT OR REPLACE INTO ${SQLITE_HONEY_TABLES.sessionLeases} (lease_token, tier_scope, expires_epoch, hardware_bound)
|
|
143
446
|
VALUES (?, ?, ?, 1)
|
|
144
447
|
`);
|
|
145
448
|
const rowCount = intensity === "stealth" ? 4 : intensity === "balanced" ? 8 : 16;
|
|
@@ -149,16 +452,48 @@ export function protectSqliteBuffer(bytes, options = {}) {
|
|
|
149
452
|
insertQuoteStmt.run(`quote_${prng.hex(8)}`, prng.hex(64), 4096 + i * 17, chaff.rawText);
|
|
150
453
|
insertLeaseStmt.run(`ent_enclave_${prng.hex(12)}`, "hardware-tee-delegated", 1924905600 + i * 3600);
|
|
151
454
|
}
|
|
455
|
+
const insertCanaryStmt = db.prepare(`
|
|
456
|
+
INSERT OR REPLACE INTO ${SQLITE_HONEY_TABLES.canaryTransport}
|
|
457
|
+
(canary_id, canary_token, ambiguous_transport_url, conflicting_query_url, policy_notice)
|
|
458
|
+
VALUES (?, ?, ?, ?, ?)
|
|
459
|
+
`);
|
|
460
|
+
const tokens = deception.canary.syntheticCanaryTokens;
|
|
461
|
+
const ambUrls = deception.canary.ambiguousCredentialUrls;
|
|
462
|
+
const confUrls = deception.canary.conflictingQueryUrls;
|
|
463
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
464
|
+
insertCanaryStmt.run(i + 1, tokens[i], ambUrls[i] ?? ambUrls[0], confUrls[i] ?? confUrls[0], "PROTECTED_CREDENTIAL_AND_DRM_KEY_MATERIAL: Automated extraction prohibited.");
|
|
465
|
+
}
|
|
466
|
+
const insertDiagStmt = db.prepare(`
|
|
467
|
+
INSERT OR REPLACE INTO ${SQLITE_HONEY_TABLES.systemDiagnostic}
|
|
468
|
+
(diag_id, subsystem, error_class, system_code, diagnostic_message, remediation_rabbit_hole)
|
|
469
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
470
|
+
`);
|
|
471
|
+
deception.diagnostics.diagnosticsInjected.forEach((d, i) => {
|
|
472
|
+
insertDiagStmt.run(i + 1, d.subsystem, d.errorClass, d.systemCode, d.diagnosticMessage, d.remediationRabbitHole);
|
|
473
|
+
});
|
|
474
|
+
const afterDigests = snapshotBusinessTables(db);
|
|
475
|
+
if (JSON.stringify(beforeDigests) !== JSON.stringify(afterDigests)) {
|
|
476
|
+
throw new SqliteWalConsistencyError("Post-transform business table digest mismatch; aborting output.");
|
|
477
|
+
}
|
|
152
478
|
}
|
|
153
479
|
finally {
|
|
154
480
|
db.close();
|
|
155
481
|
}
|
|
156
482
|
const outBuffer = readFileSync(dbPath);
|
|
483
|
+
validateSqliteStandaloneBuffer(outBuffer);
|
|
484
|
+
const policyEval = evaluateSqliteSensitivityPolicy(outBuffer);
|
|
157
485
|
return {
|
|
158
486
|
buffer: outBuffer,
|
|
159
487
|
honeyTablesInjected,
|
|
160
488
|
generatedTrapColumnsAdded,
|
|
161
489
|
chaffPayloadsEmbedded: chaffPayloads.length,
|
|
490
|
+
canaryTokensEmbedded: deception.canary.syntheticCanaryTokens.length,
|
|
491
|
+
diagnosticsEmbedded: deception.diagnostics.diagnosticsInjected.length,
|
|
492
|
+
decorationState: "decorated",
|
|
493
|
+
businessDataState: policyEval.businessDataState === "business-data-preserved" ? "business-data-preserved" : "empty",
|
|
494
|
+
confidentialityState: policyEval.confidentialityState === "policy-violation-exposed"
|
|
495
|
+
? "policy-violation-exposed"
|
|
496
|
+
: "confidentiality-not-established",
|
|
162
497
|
};
|
|
163
498
|
}
|
|
164
499
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/shields/formats/sqlite.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/shields/formats/sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,5 +28,11 @@ export declare function protectWasmBinary(bytes: Buffer, options?: {
|
|
|
28
28
|
readonly buffer: Buffer;
|
|
29
29
|
readonly customSectionsAdded: number;
|
|
30
30
|
readonly chaffPayloadsEmbedded: number;
|
|
31
|
+
readonly canaryTokensEmbedded: number;
|
|
32
|
+
readonly diagnosticsEmbedded: number;
|
|
33
|
+
readonly interfaceDescriptorsEmbedded: number;
|
|
34
|
+
readonly projectedInterfaceChargeBytes: number;
|
|
35
|
+
readonly exceedsRepresentationBudget: boolean;
|
|
36
|
+
readonly exportDecoysInjected: number;
|
|
31
37
|
};
|
|
32
38
|
//# sourceMappingURL=wasm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../../src/shields/formats/wasm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../../src/shields/formats/wasm.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAyHD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAwFtE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IACP,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,GACL;IACD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,4BAA4B,EAAE,MAAM,CAAC;IAC9C,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;IAC/C,QAAQ,CAAC,2BAA2B,EAAE,OAAO,CAAC;IAC9C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC,CAsJA"}
|