コンテンツにスキップ

Python Security

Beacon Python 1.2.4 には、beacon-otel ホイールにセキュリティがすでに含まれています。 CPython 3.11 ~ 3.14 の標準 GIL をサポートし、スタンドアロンのセキュリティ ディストリビューションを必要とせずに既存の beacon コマンドを引き続き使用します。

まず、Security 受信側の設定 に従って DataKit ログ パイプラインを準備します。受信側の検証は、実際に受信した記録に基づいて行う必要があります。

セキュリティを有効にする

まず、アプリケーションの既存の仮想環境内で 1.2.4 にアップグレードします。アプリケーションで使用される追加フレームワークを保持しながら、オプションの beacon-profiling がインストールされている場合は、それも 1.2.4 にアップグレードします。

pip install 'beacon-otel==1.2.4'
beacon --version
export BEACON_SECURITY_ENABLED=true
export BEACON_SECURITY_PYTHON_INCLUDE=orders
export OTEL_SERVICE_NAME=orders
export OTEL_RESOURCE_ATTRIBUTES=service.namespace=shop
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4317
beacon uvicorn orders.asgi:application --host 0.0.0.0 --port 8000

BEACON_SECURITY_PYTHON_INCLUDE には、ファイルシステムのパスではなく Python モジュールのプレフィックスを指定します。未設定の場合、有効なライフサイクルからランタイム SBOM はエクスポートできますが、アプリケーションモジュールの変換や、モデル化されたデータフローの検出結果は生成されません。

セキュリティの発見と分析

リクエストごとのロギングとリクエストレベルの攻撃証拠は 1.2.0 以降で利用可能であり、スキーマ v2 は 1.2.3 以降で利用可能です。このページでは 1.2.4 を使用し、リクエスト レコードを occurrence_id で識別します。詳細な証拠のサンプリングは、リクエスト レコードのエクスポートやトレース サンプリングとは独立しています。空の証拠配列は省略でき、サンプリング自体は切り捨てを表しません。オンライン読み込みの累積発生数はありません。コンシューマは、重複排除後に受信したオカレンスを集約する必要があります。 unknown、no_evidence、suspected、証拠のアップグレードと配信制限については、セキュリティ検出結果と証拠 を参照してください。どのステータスであっても悪用の成功を保証するものではありません。

SQL 解析のデフォルトは unknown です。互換性のある SQL に対してのみ BEACON_SECURITY_ANALYSIS_SQL_DIALECT=ansi を設定し、引用符で囲まれた文字列と識別子、二重引用符のエスケープ、数値、単純な演算子、およびコメントの制限された字句サブセットを有効にします。これは完全なパーサーではありません。他の方言、バックスラッシュまたはドル引用符、サポートされていない構文、不正確なテイント、および 8,192 を超える Unicode コード ポイントまたは 64 のテイント マーカーを含む入力は、unknown のままです。準備されたステートメントを個別に処理する必要がある前に、テンプレートのバインド値と信頼できないテンプレートの結合を修正しました。

シェル解析は、単純な POSIX sh、bash、dash、ksh、zsh コマンド、引用符、エスケープ、および制御区切り文字をサポートします。展開、リダイレクト、複合構文、およびその他のシェルは unknown を維持します。通常の argv は、固定ターゲットのパス/クエリ入力からの独立した観測値です。ネットワーク許可リストまたはファイル システムのルート ディレクトリ ポリシーは実装されておらず、関連する境界判断は依然として unknown です。正規化はセキュリティを意味するものではありません。バイト文字列は、既知のテキスト方言に対して解析されません。詳細については、固定バージョンの分析リファレンスを参照してください。

攻撃証拠を発見せずにエクスポートする

1.2.4 デフォルトでは、no_evidence の結果を OpenTelemetry ログおよび証拠の JSONL にエクスポートしません。 BEACON_SECURITY_EXPORT_NO_EVIDENCE_ENABLED=true を設定してエクスポートを再開します。 unknown、suspected は引き続きエクスポートでき、SBOM は影響を受けません。フィルタリングはキューに参加する前に行われ、エクスポート損失としてカウントされません。内部検出、同じリクエストの重複排除、証拠のアップグレードは引き続き実行されます。ローカル検出スナップショットとスパン概要には、エクスポートされていない観測値が保存されます。 no_evidence は安全性を示すものではなく、エクスポートされたイベントがないことはリスクが検出されなかったことを証明するものではありません。

パラメータリファレンス

環境変数 既定値 用途
BEACON_SECURITY_ENABLED false Security のライフサイクルとランタイム SBOM を有効にします。
BEACON_SECURITY_PYTHON_INCLUDE 空 セキュリティ検出の収集対象となるアプリケーションモジュールのプレフィックスを選択します。
BEACON_SECURITY_PYTHON_EXCLUDE 空 除外するモジュールプレフィックス。include より優先されます。
BEACON_SECURITY_FINDINGS_SAMPLE_SECONDS 300 各検出の完全な証拠のサンプリング間隔 (秒)。
BEACON_SECURITY_ANALYSIS_SQL_DIALECT unknown ansi は、サポートされている SQL レキシックスのサブセットを有効にします。
BEACON_SECURITY_EXPORT_NO_EVIDENCE_ENABLED false 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_EVIDENCE_FILE 未設定 任意の診断 JSONL ファイルを指定します。

セキュリティ検出結果と SBOM レコードは OpenTelemetry Logs パイプラインで送信されます。ローカル出力は診断用であり、既定では無効のままにしてください。

Kubernetes と Gunicorn

アプリケーションイメージに beacon-otel==1.2.4 をインストールし、固定バージョンの Deployment サンプル を参照してください。 Security サイドカーや init コンテナは必要ありません。

Gunicorn は、ワーカーがフォークされるたびにテレメトリを初期化する必要があります。このバージョンで提供されている beacon_security.gunicorn 構成を使用し、このコマンドの前に beacon を追加したり、preload_app を有効にしたりしないでください。

通常のゼロコード テレメトリを保持しながらセキュリティをオフにするには、BEACON_SECURITY_ENABLED を削除するか、false に設定します。

フィードバック

このページは役に立ちましたか?