
🐍 🔍 GuardDogは、悪意のあるPyPIおよびnpmパッケージを特定するCLIツールです。
GuardDog は、悪意のある PyPI および npm パッケージ、Go モジュール、Rust クレート、RubyGems、GitHub Actions、または VSCode 拡張機能を識別する CLI ツールです。パッケージのソースコード(YARA ルールによる)に対して静的解析を実行し、パッケージのメタデータを分析してサプライチェーン攻撃を検出します。
GuardDog が他と異なる点: 疑わしいパターンを列挙するだけではなく、GuardDog は調査結果を関連付けて、攻撃チェーンに基づく実際のリスクを特定します。パッケージが高リスクとしてフラグ付けされるには、同じファイル内にアクションを実行する能力(例: ネットワークアクセス)と脅威インディケーター(例: 不審なドメイン)の両方が必要です。
以下からコードをダウンロードしてスキャンします:

GuardDog は、コードの能力と脅威インディケーターを関連付けるリスクベースの検出モデルを使用します:
従来の SAST ツールはすべての疑わしいパターンを個別にフラグ付けするため、アラート疲れを引き起こします。GuardDog は次のことを理解しています:
パッケージは、4 つの要素に基づいて 0-10 のスコアを受け取ります:
| 要素 | 重み | 説明 |
|---|---|---|
| 重大度 | 30% | 最も高い重大度の検出結果(低/中/高) |
| 攻撃チェーン | 20% | 完全な攻撃ステージの存在(初期 → 中期/後期) |
| 特異性 | 30% | パターンがマルウェア特有であるか、正当なコードにも当てはまるかの度合い |
| 巧妙さ | 20% | 技術の高度さ |
スコアラベル:
攻撃チェーンのステージ(MITRE ATT&CK に基づく):
GuardDog を実行する最も簡単な方法は uvx を使用することです:
uvx guarddog pypi scan requests
ローカルにインストールするには:
uv tool install guarddog
# or
pip install guarddog
または Docker イメージを使用します:
docker pull ghcr.io/datadog/guarddog
alias guarddog='docker run --rm ghcr.io/datadog/guarddog'
注: Windows でサポートされているインストール方法は Docker のみです。
# Scan the most recent version of the 'requests' package
guarddog pypi scan requests
# Scan a specific version of the 'requests' package
guarddog pypi scan requests --version 2.28.1
# Scan the 'request' package using 2 specific heuristics
guarddog pypi scan requests --rules exec-base64 --rules code-execution
# Scan the 'requests' package using all rules but one
guarddog pypi scan requests --exclude-rules exec-base64
# Scan a local package archive
guarddog pypi scan /tmp/triage.tar.gz
# Scan a local package directory
guarddog pypi scan /tmp/triage/
# Scan a package stored in S3 (a folder/prefix or a single archive object)
guarddog pypi scan s3://my-bucket/path/to/package/
guarddog pypi scan s3://my-bucket/path/to/package.tar.gz
# Scan every package referenced in a requirements.txt file of a local folder
guarddog pypi verify workspace/guarddog/requirements.txt
# Scan every package referenced in a requirements.txt file and output a sarif file - works only for verify
guarddog pypi verify --output-format=sarif workspace/guarddog/requirements.txt
# Output JSON to standard output - works for every command
guarddog pypi scan requests --output-format=json
# All the commands also work on npm, go, crates, rubygems
guarddog npm scan express
guarddog go scan github.com/DataDog/dd-trace-go
guarddog go verify /tmp/repo/go.mod
# Scan Rust crates
guarddog crates scan serde
guarddog crates verify /tmp/repo/Cargo.lock
# Scan RubyGems packages
guarddog rubygems scan rails
guarddog rubygems verify /tmp/repo/Gemfile.lock
# Additionally can support scanning GitHub actions that are implemented in JavaScript
guarddog github_action scan DataDog/synthetics-ci-github-action
guarddog github_action verify /tmp/repo/.github/workflows/main.yml
# Scan VSCode extensions from the marketplace
guarddog extension scan ms-python.python
# Scan a specific version of a VSCode extension
guarddog extension scan ms-python.python --version 2023.20.0
# Scan a local VSCode extension directory or VSIX archive
guarddog extension scan /tmp/my-extension/
# Run in debug mode
guarddog --log-level debug npm scan express
パッケージをスキャンする際、GuardDog はカーネルレベルのサンドボックス(Linux では Landlock、macOS では Seatbelt を nono を使用して利用)内でソースコード解析を実行します。サンドボックスはすべてのネットワークアクセスをブロックし、ファイルシステム操作を解析に必要なパスのみに制限します。これにより、アーカイブの抽出やスキャン中にコードを実行しようとする悪意のあるパッケージから保護されます。
デフォルトではサンドボックスが必須です。プラットフォームで利用できない場合、保護なしで実行する代わりにスキャンは失敗します。サンドボックスなしでスキャンするには、明示的に --no-sandbox を渡す必要があります:
# Default: require the sandbox, exit with an error if it's unavailable
guarddog pypi scan requests
# Explicitly disable the sandbox
guarddog pypi scan requests --no-sandbox
リモートパッケージの場合、3 つのフェーズが異なる権限レベルで実行されます:
サンドボックスは、アーカイブ抽出中のパストラバーサルおよびコード実行の脆弱性を軽減するために導入されました (CVE-2022-23530、CVE-2022-23531、CVE-2026-22870、CVE-2026-22871)。
GuardDog は、S3 に保存されているパッケージを、フォルダー/プレフィックスまたは単一のアーカイブオブジェクトとしてスキャンできます:
guarddog npm scan s3://my-bucket/path/to/package/
guarddog npm scan s3://my-bucket/path/to/package.tar.gz
これは既存の AWS 認証情報(環境変数、~/.aws、SSO、または IAM ロール)を使用します。GuardDog は何かを行う前に STS 経由で認証を検証し、有効な認証情報が見つからない場合はエラーで終了します。オブジェクトは一時ディレクトリに同期され、他の信頼できないコンテンツと同様にサンドボックス下でスキャンされた後、ディスクから削除されます。
GuardDog は、リスクベースのスコアリングエンジンに参加する 2 種類の検出ルールを使用します:
エコシステムごとのルールの完全なリストについては、RULES.md を参照してください。
新しいルールの作成については、WRITING_RULES.md を参照してください。
CI パイプラインに GuardDog を統合する最も簡単な方法は、SARIF 出力形式を活用し、GitHub の code scanning 機能にアップロードすることです。
これにより、次のものが得られます:
GuardDog を使用した GitHub Action のサンプル:
name: GuardDog
on:
push:
branches:
- main
pull_request:
branches:
- main
permissions:
contents: read