
guarddog v3.2.0
ð ð GuardDogã¯ãæªæã®ããPyPIããã³npmããã±ãŒãžãç¹å®ããCLIããŒã«ã§ãã
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 ã®ä»çµã¿
GuardDog ã¯ãã³ãŒãã®èœåãšè åšã€ã³ãã£ã±ãŒã¿ãŒãé¢é£ä»ãããªã¹ã¯ããŒã¹ã®æ€åºã¢ãã«ã䜿çšããŸã:
- æ€åº: ã«ãŒã«ã¯èœåïŒã³ãŒãã å®è¡ã§ãã ããšïŒãŸãã¯è åšïŒäžå¯©ãªã€ã³ãã£ã±ãŒã¿ãŒïŒãèå¥ããŸã
- é¢é£ä»ã: åããã¡ã€ã«ã§èŠã€ãã£ãèœåãšè åšããªã¹ã¯ã圢æããŸãïŒãã¡ã€ã«ããŸããäžèŽããªã¹ã¯ã圢æããŸãããé倧床ã¯åŒãäžããããŸãïŒ
- ã¹ã³ã¢ãªã³ã°: ãªã¹ã¯ã¯ãæ»æãã§ãŒã³ã®å®å šæ§ãšå·§åŠãã«åºã¥ã㊠(0-10) ã§ã¹ã³ã¢ãªã³ã°ãããŸã
- ã¬ããŒã: ããã±ãŒãžã«ã¯ã詳现ãªãªã¹ã¯ã®å èš³ãšãšãã«é倧床è©äŸ¡ïŒäœ/äž/é«ïŒãä»äžãããŸã
ãã®ã¢ãããŒãã®çç±
åŸæ¥ã® 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 ã€ã®ãã§ãŒãºãç°ãªãæš©éã¬ãã«ã§å®è¡ãããŸã:
- ããŠã³ããŒããšã¡ã¿ããŒã¿åæã¯ãµã³ãããã¯ã¹ãªãã§å®è¡ãããŸãïŒãããã¯ãŒã¯ã¢ã¯ã»ã¹ãå¿ èŠïŒ
- ã¢ãŒã«ã€ãã®æœåºã¯ãµã³ãããã¯ã¹åããããµãããã»ã¹ã§å®è¡ãããŸãïŒãããã¯ãŒã¯ã¯ãããã¯ããããã¡ã€ã«ã·ã¹ãã ã¯å¶éãããŸãïŒ
- ãœãŒã¹ã³ãŒãè§£æ (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