跳转至

Ruby Security

Beacon Ruby v1.1.0 在源码包之外分发 beacon-security-0.1.0.gem。Security 默认关闭,需要显式配置 Rack 中间件和 SDK。先按 Ruby 下载指南校验四个 Release 资产。 gem 未推送 RubyGems,运行时依赖的 OTel gem 仍来自 RubyGems。

先按Security 接收端配置准备 DataKit Logs 管道;接收端验证应以实际收到的记录为准。

应用配置

安装已下载的 gem 后,在应用 Gemfile 中加入:

gem 'beacon-security', '= 0.1.0'
gem 'opentelemetry-sdk'
gem 'opentelemetry-logs-sdk'
gem 'opentelemetry-exporter-otlp-logs'

启动 Security 前加载 Rack 和可选客户端。在 Rack 应用的 config.ru 中配置应用的 OpenTelemetry provider 后接入:

require 'rack'
require 'net/http'
# require 'pg'
# require 'mysql2'
require 'opentelemetry/sdk'
require 'opentelemetry/sdk/logs'
require 'opentelemetry-exporter-otlp-logs'
require 'beacon/security'

OpenTelemetry::SDK.configure
security = Beacon::Security.start
use Beacon::Security::Middleware, runtime: security
run MyApplication

将 Security 中间件置于 OTel Rack 服务端 Span 中间件内部,以关联链路上下文。 使用应用已有的 OpenTelemetry 设置配置服务/资源身份和 Logs 接收端:

BEACON_SECURITY_ENABLED=true OTEL_LOGS_EXPORTER=otlp OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:9529/otel bundle exec rackup

每个 worker 在 fork 后启动一次。退出时先执行 security.force_flush、 security.shutdown,再刷新和关闭应用 OTel provider。晚加载客户端需显式调用 Beacon::Security::Hooks.install。

配置与范围

变量 默认值 含义
BEACON_SECURITY_ENABLED false 启用运行时。
BEACON_SECURITY_SBOM_ENABLED true Security 启用时收集已激活的 gem。
BEACON_SECURITY_SBOM_REFRESH_SECONDS 300 每轮完成后的正整数间隔;非法或零值回退到 300。
BEACON_SECURITY_LOCAL_OUTPUT_ENABLED false 启用进程本地诊断。
BEACON_SECURITY_OUTPUT beacon-security-output 诊断目录。
BEACON_SECURITY_EVIDENCE_FILE 未设置 可选 findings JSONL,仅本地输出开启时生效。

将 Rack 扁平查询参数和请求头值与部分 PG/mysql2 SQL 模板、Kernel system/spawn、 File 和 Net::HTTP 调用进行关联。SQL 绑定参数值不参与模板匹配,授权与 Cookie 头被 排除。不会导出原始请求值、SQL 或 Shell 文本。应用提供的路由元数据必须是静态模板, 不能使用原始请求路径。

这是有预算限制的子串关联:不相关的相同字符串可能匹配,转换后的值可能无法关联。 安全发现采用 schema v2、fingerprint v1、precision=approximate、 collection_complete=false 和 unknown 攻击证据。它表示调用观测,不确认漏洞。 请求体、异步传播、流式响应体、净化器/攻击分析、Rails 专属适配及其他客户端 API 不在 模型范围内。

每个请求最多保留 64 个输入源,每个 4096 字节、总计 65,536 字节,以及 128 个指纹和 1024 次敏感调用观测。超过 65,536 字节的查询或调用输入不参与分析。交付受 1024 条队列 和每条 65,536 字节限制,队列满时丢弃且不重放。运行时清单最多观测 10,000 个已激活 gem,周期重发未变化列表;大列表分片后,消费者必须收齐分片才能替换清单。 Linux procfs 和启动时钟提供进程时间;不支持的时间源不发送清单。Collector 交付为 尽力而为,不代表后端确认。

验证与关闭

在解压源码的 security 目录安装锁定的开发依赖,再使用 Docker 和已缓存的 Collector 0.135.0 镜像运行 python3 test/collector_smoke.py。开发依赖包含原生数据库 客户端,MySQL 需要客户端开发头文件和库。此检查验证真实 findings/inventory Logs、 scope、资源身份、事件名及 Trace 关联。

Security CI 通过 Linux CRuby 3.3/3.4/4.0,本地 Collector 验收使用 CRuby 3.3.12。 JRuby、其他操作系统、DataKit 和后端入库未验证。详见固定版本参考 和验收记录。

未收到记录时,检查启用配置、中间件位置、客户端加载顺序,以及应用实际的 Logs exporter 和接收管道。finding 需要匹配模型中的输入,没有事件不代表安全。设置 BEACON_SECURITY_ENABLED=false 并重启即可关闭;回滚时恢复此前源码/gem 和应用锁文件, v1.0.0 不包含 Security。

文档评价

文档内容是否对您有帮助?