Ruby Security¶
Beacon Ruby v1.1.0 は、ソース パッケージの外で beacon-security-0.1.0.gem を配布します。セキュリティはデフォルトでオフになっており、Rack ミドルウェアと SDK の明示的な構成が必要です。まず Ruby ダウンロードガイド を押して 4 つのリリース アセットを確認します。 gem は RubyGems にプッシュされず、ランタイムが依存する OTel gem は依然として RubyGems からのものです。
まず、Security 受信側の設定 に従って DataKit ログ パイプラインを準備します。受信側の検証は、実際に受信した記録に基づいて行う必要があります。
アプリケーション構成¶
ダウンロードした 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 プロバイダーを構成し、それにアクセスします。
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
セキュリティ ミドルウェアを OTel Rack サーバー側の Span ミドルウェア内に配置して、リンク コンテキストを関連付けます。アプリケーションの既存の OpenTelemetry 設定を使用して、サービス/リソース ID とログ シンクを構成します。
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
各ワーカーはフォーク後に 1 回起動されます。終了するときは、まず security.force_flush および security.shutdown を実行し、次にアプリケーション OTel プロバイダーを更新して閉じます。遅延読み込みクライアントは、明示的に Beacon::Security::Hooks.install を呼び出す必要があります。
構成と範囲¶
| 変数 | 既定値 | 意味 |
|---|---|---|
BEACON_SECURITY_ENABLED |
false |
ランタイムを有効にします。 |
BEACON_SECURITY_SBOM_ENABLED |
true |
セキュリティが有効になっている場合は、アクティブ化されたジェムを収集します。 |
BEACON_SECURITY_SBOM_REFRESH_SECONDS |
300 |
各ラウンドの完了後の正の整数の間隔。不正な値またはゼロの値の場合は 300 にフォールバックします。 |
BEACON_SECURITY_LOCAL_OUTPUT_ENABLED |
false |
プロセスのローカル診断を有効にします。 |
BEACON_SECURITY_OUTPUT |
beacon-security-output |
診断カタログ。 |
BEACON_SECURITY_EVIDENCE_FILE |
未設定 | オプションの検出結果 JSONL。ローカル出力が有効な場合にのみ有効です。 |
Rack フラット クエリ パラメーターとリクエスト ヘッダー値をいくつかの PG/mysql2 SQL テンプレート、カーネル システム/スポーン、ファイルおよび Net::HTTP 呼び出しに関連付けます。 SQL バインド パラメーター値はテンプレート マッチングに関与せず、承認ヘッダーと Cookie ヘッダーは除外されます。生のリクエスト値、SQL、またはシェル テキストはエクスポートされません。アプリケーションによって提供されるルーティング メタデータは静的テンプレートである必要があり、元のリクエスト パスを使用することはできません。
これは予算に制約のある部分文字列の関連付けです。関連性のない同一の文字列は一致する可能性があり、変換された値は関連性がない場合があります。スキーマ v2、フィンガープリント v1、precision=approximate、collection_complete=false、および unknown 攻撃証拠を使用したセキュリティ検出。これは観察が呼び出されたことを示しており、脆弱性を確認するものではありません。リクエスト本文、非同期伝播、ストリーミング応答本文、サニタイザー/攻撃分析、Rails 固有の適応、およびその他のクライアント API は、モデルの範囲外です。
各リクエストは、それぞれ 4096 バイトの最大 64 個の入力ソース (合計 65,536 バイト) に加えて、128 個の指紋と 1024 個のセキュリティ上重要な呼び出し監視を保持します。 65,536 バイトを超えるクエリまたは呼び出し入力は分析に含まれません。配信は 1024 キューとそれぞれ 65,536 バイトに制限されており、キューがいっぱいになると再実行せずに破棄されます。ランタイム リストは最大 10,000 個のアクティブ化された gem を監視し、変更されていないリストを定期的に再送信します。大きなリストが断片化された後、コンシューマーはリストを置き換える前にすべての断片を収集する必要があります。 Linux の procf とブート クロックはプロセス時間を提供します。サポートされていないタイム ソースはマニフェストを送信しません。コレクターの配信はベスト エフォート ベースであり、バックエンドの検証を表すものではありません。
確認して閉じる¶
ソース コードが解凍された security ディレクトリにロックされた開発依存関係をインストールし、Docker とキャッシュされた Collector 0.135.0 イメージを使用して python3 test/collector_smoke.py を実行します。開発依存関係にはネイティブ データベース クライアントが含まれており、MySQL にはクライアント開発ヘッダー ファイルとライブラリが必要です。このチェックでは、真の検出結果/インベントリ ログ、スコープ、リソース ID、イベント名、およびトレースの関連付けが検証されます。
Linux CRuby 3.3/3.4/4.0によるセキュリティCI、CRuby 3.3.12を使用したローカルコレクタ受け入れ。 JRuby、その他のオペレーティング システム、DataKit、およびバックエンド ウェアハウジングは検証されていません。詳細については、「固定バージョンのリファレンス」および「検証記録」を参照してください。
レコードが受信されない場合は、有効化構成、ミドルウェアの場所、クライアントの読み込み順序を確認し、実際のログ エクスポーターと受信パイプラインを適用します。検出はモデルの入力と一致する必要があり、イベントがないことが安全を意味するわけではありません。 BEACON_SECURITY_ENABLED=false を設定し、再起動してシャットダウンします。ロールバック時に以前のソース コード/Gem とアプリケーション ロック ファイルを復元します。v1.0.0 にはセキュリティが含まれていません。