Java Security¶
本指南使用 Beacon Java 1.3.4;Security 自 1.1.0 起嵌入完整 Agent JAR。继续使用
Java 零代码指南中的同一个 -javaagent 配置;无需安装或维护
独立的 Security JAR。
先按Security 接收端配置准备 DataKit Logs 管道;接收端验证应以实际收到的记录为准。
启用 Security¶
启用前,先从 1.3.4 Release
下载完整 Agent JAR,并将其命名为 beacon-javaagent.jar。
export BEACON_SECURITY_ENABLED=true
export OTEL_SERVICE_NAME=orders
export OTEL_RESOURCE_ATTRIBUTES=service.namespace=shop
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:9529/otel
java -javaagent:./beacon-javaagent.jar -jar orders.jar
Agent 通过 OpenTelemetry Logs 导出安全发现和运行时依赖清单;本地 CycloneDX 文件需显式 启用诊断输出。Security 默认关闭。 安全发现表示已建模的运行时观测或候选风险,并非已经确认的漏洞。
安全发现与分析¶
Java 1.3.0
首次支持逐请求记录和请求级攻击证据。
Java 1.3.3
使用 schema v2:occurrence_id 替代 evidence_id,移除在线累计计数,允许省略空证据数组。
参见安全发现与证据,了解 Java 1.3.0 A/B/C 示例、v1 字段、v2 迁移、状态
含义及投递限制。请求记录导出、详细证据采样与 OpenTelemetry Trace 采样互相独立。
SQL 分析需要显式开启。仅对兼容 SQL 设置 BEACON_SECURITY_ANALYSIS_SQL_DIALECT=ansi,
默认值为 unknown。有边界的词法子集支持单引号字符串、双写引号转义、带引号的标识符、
十进制数、运算符、括号和注释。它不是完整 SQL 解析器,也不是关键词检测器。
反斜杠转义、dollar quoting、反引号、方括号引号、未闭合引号和仅受污点影响的标识符均
保持 unknown。固定模板单独绑定参数值,与准备语句前拼接不可信 SQL 不同;普通绑定值
不会产生 SQL 模板注入发现。
Shell 分析支持作为独立参数传给 sh、bash、dash、ksh、zsh 的简单 POSIX 脚本,
包括引号、转义和控制分隔符。展开、替换、重定向、复合语法、Windows Shell 以及通过
Runtime.exec(String) 重建的脚本仍为 unknown。普通 argv 输入不会被分类为 Shell
注入,但仍可能存在应用特定的参数风险。
分析最多处理 8,192 个 UTF-16 代码单元和 64 个精确污点范围。不支持的输入、不精确范围及
预算耗尽都保留不确定性。分析不会进行利用重放、网络探测、JDBC 元数据查询或文件系统
解析。Java 1.3.4 没有网络允许列表或文件系统根目录策略;依赖边界策略的 SSRF、可执行文件
选择及路径判断仍为 unknown,规范化不代表安全。参见
已发布的分析参考。
参数参考¶
| 环境变量 | 默认值 | 用途 |
|---|---|---|
BEACON_SECURITY_ENABLED |
false |
启用 Security 生命周期和运行时观测。 |
BEACON_SECURITY_EXPORT_NO_EVIDENCE_ENABLED |
false |
设为 true 后导出 attack_evidence.status=no_evidence 的安全发现。 |
BEACON_SECURITY_SBOM_ENABLED |
true |
在 Security 启用时采集运行时 SBOM。 |
BEACON_SECURITY_LOCAL_OUTPUT_ENABLED |
false |
启用进程本地诊断快照。 |
BEACON_SECURITY_OUTPUT |
./beacon-security-output/<instance-id> |
设置诊断快照目录。 |
BEACON_SECURITY_FINDINGS_SAMPLE_SECONDS |
300 |
每个发现的完整证据采样间隔(秒),不控制请求记录或 Trace 采样。 |
BEACON_SECURITY_ANALYSIS_SQL_DIALECT |
unknown |
设置为 ansi 以开启受支持的 SQL 词法子集。 |
BEACON_SECURITY_EVIDENCE_FILE |
未设置 | 设置可选的诊断 JSONL 文件。 |
常规 OpenTelemetry 变量负责资源身份、传输与认证。本地输出仅用于诊断,不是持久化或 集群级投递机制。
安全发现的导出策略¶
默认不导出 attack_evidence.status=no_evidence 的安全发现;unknown、suspected 和 SBOM 的导出资格不变。需要恢复旧行为时,设置 BEACON_SECURITY_EXPORT_NO_EVIDENCE_ENABLED=true。该开关影响 OpenTelemetry Logs 和证据 JSONL,不关闭内部检测、本地发现快照或 Span 摘要,也不阻止同一请求中的证据升级。参阅统一导出策略。
Java 也可通过 JVM 参数 -Dbeacon.security.export.no-evidence.enabled=true 启用;将参数放在 -jar 之前。
Kubernetes¶
可以将正式发布的完整 Agent JAR 放入应用镜像,或参考固定版本的 initContainer 示例。使用公开镜像时,将示例中的镜像版本改为 ghcr.io/beacon-observability/beacon-java:1.3.4,并按生产要求固定镜像摘要。init container 将同一个 JAR 复制到 emptyDir,应用通过 JAVA_TOOL_OPTIONS 加载它。普通工作负载应保持本地输出关闭。
移除 BEACON_SECURITY_ENABLED 或将其设为 false 即可关闭 Security,同时保留常规
零代码遥测。