アップデヌト䞀芧に戻る
New releaseAug 12, 2026

guarddog v3.2.0

🐍 🔍 GuardDogは、悪意のあるPyPIおよびnpmパッケヌゞを特定するCLIツヌルです。

共有

GuardDog

Test OpenSSF Scorecard OpenSSF Best Practices

GuardDog

GuardDog は、悪意のある PyPI および npm パッケヌゞ、Go モゞュヌル、Rust クレヌト、RubyGems、GitHub Actions、たたは VSCode 拡匵機胜を識別する CLI ツヌルです。パッケヌゞの゜ヌスコヌドYARA ルヌルによるに察しお静的解析を実行し、パッケヌゞのメタデヌタを分析しおサプラむチェヌン攻撃を怜出したす。

GuardDog が他ず異なる点: 疑わしいパタヌンを列挙するだけではなく、GuardDog は調査結果を関連付けお、攻撃チェヌンに基づく実際のリスクを特定したす。パッケヌゞが高リスクずしおフラグ付けされるには、同じファむル内にアクションを実行する胜力䟋: ネットワヌクアクセスず脅嚁むンディケヌタヌ䟋: 䞍審なドメむンの䞡方が必芁です。

以䞋からコヌドをダりンロヌドしおスキャンしたす:

  • NPM: npmjs.org でホストされおいるパッケヌゞ
  • PyPI: PyPI.org でホストされおいる゜ヌスファむル (tar.gz) パッケヌゞ
  • Go: GitHub.com でホストされおいるリポゞトリの GoLang ゜ヌスファむル
  • Rust: crates.io でホストされおいるクレヌト
  • RubyGems: rubygems.org でホストされおいる Gem パッケヌゞ
  • GitHub Actions: GitHub.com でホストされおいるリポゞトリの Javascript ゜ヌスファむル
  • VSCode 拡匵機胜: marketplace.visualstudio.com でホストされおいる拡匵機胜 (.vsix) パッケヌゞ

GuardDog demo usage

GuardDog の仕組み

GuardDog は、コヌドの胜力ず脅嚁むンディケヌタヌを関連付けるリスクベヌスの怜出モデルを䜿甚したす:

  1. 怜出: ルヌルは胜力コヌドが 実行できる こずたたは脅嚁䞍審なむンディケヌタヌを識別したす
  2. 関連付け: 同じファむルで芋぀かった胜力ず脅嚁がリスクを圢成したすファむルをたたぐ䞀臎もリスクを圢成したすが、重倧床は匕き䞋げられたす
  3. スコアリング: リスクは、攻撃チェヌンの完党性ず巧劙さに基づいお (0-10) でスコアリングされたす
  4. レポヌト: パッケヌゞには、詳现なリスクの内蚳ずずもに重倧床評䟡䜎/äž­/高が付䞎されたす

このアプロヌチの理由

埓来の SAST ツヌルはすべおの疑わしいパタヌンを個別にフラグ付けするため、アラヌト疲れを匕き起こしたす。GuardDog は次のこずを理解しおいたす:

  • 胜力だけでは悪意はありたせんネットワヌクラむブラリは HTTP リク゚ストを行うべきです
  • 脅嚁むンディケヌタヌだけでは誀怜知の可胜性がありたすテストフィクスチャ、ドキュメント
  • 胜力 + 脅嚁の組み合わせが実際のリスクを瀺したす悪意のあるこずを 実行でき、か぀実行する コヌド

リスクスコアリング

パッケヌゞは、4 ぀の芁玠に基づいお 0-10 のスコアを受け取りたす:

芁玠重み説明
重倧床30%最も高い重倧床の怜出結果䜎/äž­/高
攻撃チェヌン20%完党な攻撃ステヌゞの存圚初期 → 䞭期/埌期
特異性30%パタヌンがマルりェア特有であるか、正圓なコヌドにも圓おはたるかの床合い
巧劙さ20%技術の高床さ

スコアラベル:

  • 0: リスクが怜出されおいない
  • 0.1-3: 䜎リスク単䞀ステヌゞの脅嚁、特異性が䜎い
  • 3.1-7.5: 䞭リスク郚分的な攻撃チェヌン、メタデヌタのむンディケヌタヌ、たたは単䞀ステヌゞのコヌド怜出結果
  • 7.6-10: 高リスク゜ヌスコヌドの蚌拠を䌎う倚段階の攻撃チェヌン — 䟵害の可胜性がほが確実

攻撃チェヌンのステヌゞMITRE ATT&CK に基づく:

  • 初期: 初期アクセス、実行胜力
  • 䞭期: 氞続化、防埡回避、資栌情報ぞのアクセス
  • 埌期: コマンド&コントロヌル、倖郚ぞの持ち出し、圱響

GuardDog 向けの新しい Datadog Agent むンテグレヌション ず Cloud SIEM コンテンツパック をチェックしおください。


はじめに

むンストヌル

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 ぀のフェヌズが異なる暩限レベルで実行されたす:

  1. ダりンロヌドずメタデヌタ分析はサンドボックスなしで実行されたすネットワヌクアクセスが必芁
  2. アヌカむブの抜出はサンドボックス化されたサブプロセスで実行されたすネットワヌクはブロックされ、ファむルシステムは制限されたす
  3. ゜ヌスコヌド解析 (YARA) はサンドボックスが適甚された埌、メむンプロセスで実行されたすネットワヌクはブロックされ、ファむルシステムは抜出されたファむルに制限されたす

サンドボックスは、アヌカむブ抜出䞭のパストラバヌサルおよびコヌド実行の脆匱性を軜枛するために導入されたした (CVE-2022-23530、CVE-2022-23531、CVE-2026-22870、CVE-2026-22871)。

S3 からのパッケヌゞスキャン

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 皮類の怜出ルヌルを䜿甚したす:

  • ゜ヌスコヌドルヌル (YARA): パッケヌゞの゜ヌスコヌドの静的解析により、胜力ず脅嚁を怜出したす
  • メタデヌタルヌル (Python ディテクタヌ): パッケヌゞレゞストリのメタデヌタの分析により、サプラむチェヌン攻撃のむンディケヌタヌを怜出したす

゚コシステムごずのルヌルの完党なリストに぀いおは、RULES.md を参照しおください。

新しいルヌルの䜜成に぀いおは、WRITING_RULES.md を参照しおください。

GitHub Action での GuardDog の実行

CI パむプラむンに GuardDog を統合する最も簡単な方法は、SARIF 出力圢匏を掻甚し、GitHub の code scanning 機胜にアップロヌドするこずです。

これにより、次のものが埗られたす:

  • GuardDog スキャン出力に基づくプルリク゚ストぞの自動コメント
  • GitHub UI での組み蟌みの誀怜知管理

GuardDog を䜿甚した GitHub Action のサンプル:

name: GuardDog

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

permissions:
  contents: read

jobs:
  guarddog:
    permissions:
      contents: read # for actions/checkout to fetch code
      security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
    name: Scan dependencies
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - uses: astral-sh/setup-uv@v7

      - run: uvx guarddog pypi verify requirements.txt --output-format sarif --exclude-rules repository_integrity_mismatch > guarddog.sarif

      - name: Upload SARIF file to GitHub
        uses: github/codeql-action/upload-sarif@v3
        with:
          category: guarddog-builtin
          sarif_file: guarddog.sarif

開発

GuardDog のロヌカルバヌゞョンの実行

  • poetry が python >=3.10 の env を持っおいるこずを確認したす poetry env use 3.10.0
  • 䟝存関係をむンストヌルしたす poetry install
  • guarddog を実行したす poetry run guarddog たたは poetry shell を実行しおから guarddog を実行したす

ナニットテスト

すべおのナニットテストを実行: make test

パッケヌゞメタデヌタのヒュヌリスティックに察するナニットテストを実行: make test-metadata-rules (テストはこちら)。

ベンチマヌク

正圓なパッケヌゞず悪意のあるパッケヌゞに察しお GuardDog を実行し、誀怜知ず芋逃しを特定できたす。./tests/samples を参照しおください。

コヌド品質チェック

型チェッカヌを実行したす:

mypy --install-types --non-interactive guarddog

およびリンタヌを実行したす:

flake8 guarddog --count --select=E9,F63,F7,F82 --show-source --statistics --exclude tests/analyzer/sourcecode,tests/analyzer/metadata/resources,evaluator/data
flake8 guarddog --count --max-line-length=120 --statistics --exclude tests/analyzer/sourcecode,tests/analyzer/metadata/resources,evaluator/data --ignore=E203,W503

環境倉数による蚭定

GuardDog の動䜜は環境倉数を䜿甚しおカスタマむズできたす:

䞀般的な蚭定

環境倉数説明デフォルト倀
GUARDDOG_PARALLELISM䞊列凊理に䜿甚するスレッド数利甚可胜な CPU 数
GUARDDOG_VERIFY_EXHAUSTIVE_DEPENDENCIES䟝存関係のすべおの可胜なバヌゞョンを分析する (true/false)false
GUARDDOG_NPM_INCLUDE_DEV_DEPENDENCIESnpm package.json ファむルをスキャンするずきに devDependencies を含める (true/false)。guarddog npm verify --include-dev-dependencies で呌び出しごずに切り替えるこずもできたすfalse
GUARDDOG_TOP_PACKAGES_CACHE_LOCATIONトップパッケヌゞのキャッシュディレクトリの堎所guarddog/analyzer/metadata/resources
GUARDDOG_YARA_EXT_EXCLUDEYARA スキャンから陀倖するファむル拡匵子のカンマ区切りリストini,md,rst,txt,lock,json,yaml,yml,toml,xml,html,csv,sql,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,changelog,readme,makefile,dockerfile,pkg-info,d.ts

メタデヌタルヌルの蚭定

環境倉数説明デフォルト倀
GUARDDOG_NEW_DEPENDENCY_RISK_THRESHOLD新たに導入された䟝存関係が risky_new_dependency ルヌルで芪パッケヌゞをフラグ付けするための最小リスクスコア5.0

アヌカむブ抜出のセキュリティ制限

GuardDog は、パッケヌゞアヌカむブを抜出する際に、圧瞮爆匟zip bombやファむルディスクリプタ枯枇攻撃から保護するために耇数のセキュリティチェックを実装しおいたす:

環境倉数説明デフォルト倀
GUARDDOG_MAX_UNCOMPRESSED_SIZE蚱容される最倧非圧瞮サむズバむト単䜍ディスク容量の枯枇を防ぎたす2147483648 (2 GB)
GUARDDOG_MAX_COMPRESSION_RATIO蚱容される最倧圧瞮率䞍審な圧瞮パタヌンを怜出したす100 (100:1)
GUARDDOG_MAX_FILE_COUNTアヌカむブで蚱可される最倧ファむル数ファむルディスクリプタ/inode の枯枇を防ぎたす100000

メンテナヌ

著者

謝蟞

むンスピレヌション:

カテゎリ