Java Security¶
このガイドでは、Beacon Java 1.3.4 を使用します。セキュリティには、1.1.0 の時点で完全なエージェント JAR が組み込まれています。 Java ゼロコードガイド と同じ -javaagent 構成を引き続き使用します。別個のセキュリティ JAR をインストールしたり維持したりする必要はありません。
まず、Security 受信側の設定 に従って DataKit ログ パイプラインを準備します。受信側の検証は、実際に受信した記録に基づいて行う必要があります。
セキュリティを有効にする¶
有効にする前に、完全なエージェント JAR を 1.3.4 Release からダウンロードし、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
エージェントは、OpenTelemetry ログを通じてセキュリティ検出とランタイム依存関係マニフェストをエクスポートします。ローカルの CycloneDX ファイルでは、診断出力を明示的に有効にする必要があります。セキュリティはデフォルトでオフになっています。セキュリティの調査結果は、確認された脆弱性ではなく、モデル化された実行時の観察またはリスクの候補を表します。
セキュリティの発見と分析¶
Java 1.3.0 は、リクエストごとのロギングとリクエストレベルの攻撃証拠を初めてサポートします。 Java 1.3.3 はスキーマ v2 を使用します。occurrence_id は evidence_id を置き換え、オンライン累積カウントを削除し、空の証拠配列を省略できるようにします。 Java 1.3.0 A/B/C の例、v1 フィールド、v2 移行、ステータスの意味、および配信制限については、セキュリティ検出結果と証拠 を参照してください。リクエスト レコードのエクスポート、詳細な証拠のサンプリング、および OpenTelemetry トレースのサンプリングは相互に独立しています。
SQL 分析は明示的に有効にする必要があります。 SQL 互換性のみを目的として BEACON_SECURITY_ANALYSIS_SQL_DIALECT=ansi を設定します。デフォルトは unknown です。境界付き字句サブセットは、一重引用符で囲まれた文字列、二重引用符のエスケープ、引用符で囲まれた識別子、10 進数、演算子、括弧、およびコメントをサポートします。これは完全な SQL パーサーではなく、キーワード検出器でもありません。バックスラッシュのエスケープ、ドル引用符、バッククォート、角括弧引用符、閉じていない引用符、および汚染によってのみ影響を受ける識別子はすべて unknown のままです。固定テンプレートはパラメータ値を個別にバインドします。これは、ステートメントを準備する前に信頼できない SQL を結合するのとは異なります。通常のバインディング値では、SQL テンプレート インジェクションの検出は発生しません。
シェル分析は、引用符、エスケープ、制御区切り文字を含む、独立したパラメーターとして sh、bash、dash、ksh、zsh に渡される単純な POSIX スクリプトをサポートします。拡張、置換、リダイレクト、複合構文、Windows シェル、および Runtime.exec(String) から再構築されたスクリプトは、unknown のままです。通常の argv 入力はシェル インジェクションとして分類されませんが、アプリケーション固有の引数のリスクが依然として存在する可能性があります。
分析では、最大 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 |
リクエストのログ記録やトレース サンプリングを制御しない、ディスカバリーごとの完全な証拠サンプリング間隔 (秒)。 |
BEACON_SECURITY_ANALYSIS_SQL_DIALECT |
unknown |
サポートされている SQL レキシックスのサブセットを有効にするには、ansi に設定します。 |
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 に設定します。