
🐍 🔍 GuardDog दुर्भावनापूर्ण PyPI और npm पैकेजों की पहचान करने के लिए एक CLI उपकरण है।
GuardDog एक CLI उपकरण है जो दुर्भावनापूर्ण PyPI और npm पैकेजों, Go मॉड्यूल, Rust क्रेट्स, RubyGems, GitHub एक्शन, या VSCode एक्सटेंशन की पहचान करता है। यह पैकेज स्रोत कोड पर स्थिर विश्लेषण (YARA नियमों के माध्यम से) चलाता है और सप्लाई चेन हमलों का पता लगाने के लिए पैकेज मेटाडेटा का विश्लेषण करता है।
GuardDog को क्या अलग बनाता है: केवल संदिग्ध पैटर्न सूचीबद्ध करने के बजाय, GuardDog वास्तविक जोखिमों की पहचान करने के लिए निष्कर्षों को सहसंबंधित करता है, जो हमला श्रृंखलाओं पर आधारित होते हैं। एक पैकेज को उच्च जोखिम के रूप में फ़्लैग करने के लिए उसी फ़ाइल में किसी क्रिया को करने की क्षमता (जैसे, नेटवर्क एक्सेस) और एक खतरा संकेतक (जैसे, संदिग्ध डोमेन) दोनों की आवश्यकता होती है।
यह कोड डाउनलोड करके स्कैन करता है:

GuardDog एक जोखिम-आधारित पहचान मॉडल का उपयोग करता है जो कोड क्षमताओं को खतरे वाले संकेतकों के साथ सहसंबंधित करता है:
पारंपरिक SAST उपकरण हर संदिग्ध पैटर्न को स्वतंत्र रूप से फ़्लैग करते हैं, जिससे अलर्ट थकान होती है। GuardDog समझता है कि:
पैकेजों को चार कारकों के आधार पर 0-10 का स्कोर मिलता है:
स्कोर लेबल:
हमला श्रृंखला चरण (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
रिमोट पैकेजों के लिए, तीन चरण विभिन्न विशेषाधिकार स्तरों के साथ चलते हैं:
सैंडबॉक्स को आर्काइव निष्कर्षण के दौरान पथ ट्रैवर्सल और कोड निष्पादन कमजोरियों को कम करने के लिए पेश किया गया था (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 दो प्रकार के पहचान नियमों का उपयोग करता है, दोनों जोखिम-आधारित स्कोरिंग इंजन में भाग लेते हैं:
प्रत्येक इकोसिस्टम के लिए नियमों की पूरी सूची के लिए, RULES.md देखें।
नए नियम लिखने के मार्गदर्शन के लिए, WRITING_RULES.md देखें।
GuardDog को अपनी CI पाइपलाइन में एकीकृत करने का सबसे आसान तरीका SARIF आउटपुट प्रारूप का लाभ उठाना है, और इसे GitHub की code scanning सुविधा पर अपलोड करना है।
इसका उपयोग करके, आपको मिलता है:
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
python >=3.10 वाला env है poetry env use 3.10.0poetry installpoetry run guarddog या poetry shell चलाएँ फिर guarddog चलाएँसभी यूनिट परीक्षण चलाना: make test
पैकेज मेटाडेटा ह्यूरिस्टिक्स के विरुद्ध यूनिट परीक्षण चलाना: make test-metadata-rules (परीक्षण यहाँ हैं)।
आप false positives और false negatives निर्धारित करने के लिए वैध और दुर्भावनापूर्ण पैकेजों पर 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_NEW_DEPENDENCY_RISK_THRESHOLD | risky_new_dependency नियम में मूल पैकेज को फ़्लैग करने के लिए नई शुरू की गई निर्भरता के लिए न्यूनतम जोखिम स्कोर | 5.0 |
GuardDog पैकेज आर्काइव निकालते समय कई सुरक्षा जाँच लागू करता है, ताकि कम्प्रेशन बम और फ़ाइल डिस्क्रिप्टर थकावट हमलों से सुरक्षा मिल सके:
| पर्यावरण चर |
|---|
प्रेरणा:
| कारक | भार | विवरण |
|---|
| गंभीरता | 30% | उच्चतम गंभीरता निष्कर्ष (low/medium/high) |
| हमला श्रृंखला | 20% | पूर्ण हमले के चरणों की उपस्थिति (प्रारंभिक → मध्य/अंतिम) |
| विशिष्टता | 30% | पैटर्न वैध कोड की तुलना में मैलवेयर के लिए कितने विशिष्ट हैं |
| परिष्कार | 20% | तकनीक उन्नति स्तर |
| पर्यावरण चर | विवरण | डिफ़ॉल्ट मान |
|---|
GUARDDOG_PARALLELISM | समानांतर प्रसंस्करण के लिए उपयोग किए जाने वाले थ्रेड्स की संख्या | उपलब्ध CPU की संख्या |
GUARDDOG_VERIFY_EXHAUSTIVE_DEPENDENCIES | निर्भरताओं के सभी संभावित संस्करणों का विश्लेषण करें (true/false) | false |
GUARDDOG_NPM_INCLUDE_DEV_DEPENDENCIES | npm package.json फ़ाइलों को स्कैन करते समय devDependencies शामिल करें (true/false); इसे प्रति-आह्वान guarddog npm verify --include-dev-dependencies के साथ भी टॉगल किया जा सकता है | false |
GUARDDOG_TOP_PACKAGES_CACHE_LOCATION | शीर्ष पैकेज कैश निर्देशिका का स्थान | guarddog/analyzer/metadata/resources |
GUARDDOG_YARA_EXT_EXCLUDE | YARA स्कैनिंग से बाहर रखने के लिए फ़ाइल एक्सटेंशन की अल्पविराम-पृथक सूची | 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_MAX_UNCOMPRESSED_SIZE | बाइट्स में अधिकतम अनुमत असम्पीडित आकार (डिस्क स्थान की कमी को रोकता है) | 2147483648 (2 GB) |
GUARDDOG_MAX_COMPRESSION_RATIO | अधिकतम अनुमत कम्प्रेशन अनुपात (संदिग्ध कम्प्रेशन पैटर्न का पता लगाता है) | 100 (100:1) |
GUARDDOG_MAX_FILE_COUNT | आर्काइव में अनुमत फ़ाइलों की अधिकतम संख्या (फ़ाइल डिस्क्रिप्टर/inode थकावट को रोकता है) | 100000 |