
foxguard v0.13.0
๋น ๋ฅธ ๋ฒ์ฉ ์ฝ๋ ๋ณด์ ์ค์บ๋๋ก, Rust๋ก ์์ฑ๋์์ต๋๋ค. ๋ชจ๋ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค: 14๊ฐ ์ธ์ด ์ง์, ๋ถ๋ฅ๋ฅผ ์ํ TUI, ๋น๋ฐ ์ ๋ณด, ์์ ์ดํ ๊ฐ์ฌ, ์ฐจ์ด ์ธ์ ์ค์บ ๋ฑ ๐ฅ
foxguard
์ฝ๋, ์ํฌ๋ฆฟ, ์์กด์ฑ, ์ํธํ ์ํ์ ์ํ ๋น ๋ฅธ ๋ก์ปฌ ๋ณด์ ์ค์บ๋.
์คํ ์ฌ์ด๋ฒ๋ณด์ ํ๋ค์ค์ธ 0sec์ ํตํฉ๋์ด ์์ต๋๋ค.
npx foxguard .
์ ํ์ํ๊ฐ
ย 12๊ฐ ์์ค ์ธ์ด์ ๊ฑธ์น 200๊ฐ ์ด์์ ๋ด์ฅ ๊ท์น๊ณผ ๊ตฌ์ฑ ๋ฐ ๋งค๋ํ์คํธ ๊ฒ์ฌ
ย 14๊ฐ ์ธ์ด์ ๋ํ ํ
์ธํธ ์ถ์ , Python, JavaScript, Go, Java, Ruby, PHP, C#, Kotlin์ ๋ํ ํ์ผ ๊ฐ ๋ถ์ ์ง์
ย ๋น ๋ฅธ ๋ก์ปฌ ๋ฐ CI ์ค์บ, "์ด ๋ธ๋์น๊ฐ ๋ฌด์์ ์ถ๊ฐํ๋๊ฐ?"๋ฅผ ์ํ diff ๋ชจ๋ ์ง์
ย ์ํฌ๋ฆฟ ์ค์บ๋, OSV ๊ธฐ๋ฐ ์์กด์ฑ ์ค์บ๋, ํฌ์คํธ ์์ ์ํธํ ๊ฐ์ฌ
ย ๊ณต๊ฐ ๋ ์ง์คํธ๋ฆฌ์ ์ฝ 98%๋ฅผ ๋ก๋ํ๋ Semgrep/OpenGrep ํธํ YAML ๋ธ๋ฆฌ์ง (์ปค๋ฒ๋ฆฌ์ง ๋ณด๊ณ ์)
ย ํฐ๋ฏธ๋, JSON, SARIF, CycloneDX 1.6 CBOM, Semgrep ํธํ JSON ์ถ๋ ฅ
์ค์น
npx foxguard . # ์ค์น ๋ถํ์
pipx install foxguard # PyPI์ ์ฌ์ ๋น๋๋ CLI
curl -fsSL https://foxguard.dev/install.sh | sh # ์ฌ์ ๋น๋๋ ๋ฐ์ด๋๋ฆฌ (macOS/Linux)
cargo install foxguard # ์์ค์์ ์ค์น
๋
๋ฆฝ ์คํํ ๋ฐ์ด๋๋ฆฌ ์ค์น ํ๋ก๊ทธ๋จ์ GitHub ๋ฆด๋ฆฌ์ค ๋ฐ์ด๋๋ฆฌ๋ฅผ checksums.txt์ ๋์กฐํ์ฌ ๊ฒ์ฆํฉ๋๋ค. ๋ฆด๋ฆฌ์ค ๋ฐ์ด๋๋ฆฌ๋ GitHub ์ํฐํฉํธ ์ฆ๋ช
๋ ๊ฒ์ํฉ๋๋ค. ์๋ ๊ฒ์ฆ์๋ gh attestation verify๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ฆด๋ฆฌ์ค ์ถ์ฒ๋ฅผ ์ฐธ์กฐํ์ธ์.
PyPI ํ ์ Linux glibc 2.28+ (x86_64/ARM64), macOS (Intel/Apple Silicon), Windows x86_64์์ Python 3.9+๋ฅผ ์ง์ํฉ๋๋ค. ๊ธฐ์กด Python ๊ฐ์ ํ๊ฒฝ์์๋ python -m pip install foxguard๋ฅผ ๋์ ์ฌ์ฉํ์ธ์. ์ด๋ค์ Rust ์ปดํ์ผ๋ฌ๋ ๋ฐํ์ ๋ฐ์ด๋๋ฆฌ ๋ค์ด๋ก๋ ์์ด ๋ค์ดํฐ๋ธ CLI๋ฅผ ์ค์นํฉ๋๋ค. Python API๋ ์ ๊ณต๋์ง ์์ต๋๋ค. Alpine/musl ์ฌ์ฉ์๋ ๋
๋ฆฝ ์คํํ Linux ๋ฆด๋ฆฌ์ค ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
GitHub Action:
- uses: 0sec-labs/foxguard/[email protected]
with:
path: .
severity: medium
fail-on-findings: "true"
upload-sarif: "true"
pre-commit:
repos:
- repo: https://github.com/0sec-labs/foxguard
rev: v0.14.0
hooks:
- id: foxguard
ํตํฉ: GitHub App, VS Code, Claude Code ํ๋ฌ๊ทธ์ธ, MCP ์๋ฒ.
ํธ์คํ ๋ GitHub App ์ด์
foxguard-github-app์ ์ค๋ฐ๊ฟ์ผ๋ก ๊ตฌ๋ถ๋ JSON ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ์๋ฃ ๋ฐ ์คํจํ ์ค์บ์ event=foxguard.scan.completed์ event=foxguard.scan.failed๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์๊ด ๊ด๊ณ๋ฅผ ์ํ ์ ๋ฌ, ์ค์น, ์ ์ฅ์, PR, ์ปค๋ฐ, ๊ธฐ๊ฐ, usage_scope ํ๋๋ฅผ ํฌํจํฉ๋๋ค. ์๋ณ์๋ ๋ฉํธ๋ฆญ ๋ ์ด๋ธ์ด ์๋ ๋ก๊ทธ ํ๋๋ก ์ ์งํ์ธ์.
FOXGUARD_INTERNAL_ACCOUNTS๋ฅผ ์์ ์ GitHub ๊ณ์ ๋ฐ ์กฐ์ง์ ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ชฉ๋ก์ผ๋ก ์ค์ ํ์ธ์. ์ผ์น ์ฌ๋ถ๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค. ๋ค๋ฅธ ์์ ์๋ external๋ก ๋ถ๋ฅ๋๋ฉฐ, ๋ชฉ๋ก์ด ์ค์ ๋์ง ์์๊ฑฐ๋ ์์ ์๊ฐ ๋๋ฝ๋ ๊ฒฝ์ฐ unknown์ด ์์ฑ๋ฉ๋๋ค. ์ธ๋ถ ํ๋์ ์ ๋ฃ ๊ณ ๊ฐ์ ์ฆ๊ฑฐ๊ฐ ์๋๋ฉฐ, ์ค์บ์ ์ฌ๋์ด ์๋๋๋ค.
์ค์น ๋ ์ง์คํธ๋ฆฌ๋ ์์ ์ ๋ฐ ๋งค์๊ฐ GitHub์ App ์ค์น API์ ๋ชจ๋ ํ์ด์ง์ ๋์กฐํ์ฌ ์กฐ์ ๋ฉ๋๋ค. ์๋ก ๊ณ ์นจ ์คํจ ์ ๊ธฐ์กด ์ํ๊ฐ ์ ์ง๋๋ฉฐ, ๋์ ์นํ ์ด ์ฐ์ ํฉ๋๋ค. ํฌ์ํ ์นํ ๋ฉํ๋ฐ์ดํฐ๋ ์๋ ค์ง ๊ณ์ ์ธ๋ถ ์ ๋ณด์ ๊ด์ฐฐ๋ ์ ์ฅ์ ์ด๋ฆ์ ๋ณด์กดํฉ๋๋ค. ์ด๋ฌํ ์ด๋ฆ์ ์ค์น์ ์ ๊ทผ ๊ฐ๋ฅํ ์ ์ฅ์์ ๋ํ ์์ ํ ์ธ๋ฒคํ ๋ฆฌ๊ฐ ์๋๋๋ค.
FOXGUARD_INSTALLATIONS_PATH์ FOXGUARD_PULL_REQUEST_JOBS_PATH๋ฅผ ์๊ตฌ ์ ์ฅ์์ ์ ์งํ์ธ์. ์ค์บ ์คํจ์ ํจ๊ป foxguard.installations.reconcile_failed๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์. foxguard.installations.reconciled๋ ์ฑ๊ณต์ ์ธ ์๋ก ๊ณ ์นจ ํ ์ด ์ค์น ์์ ๋ด๋ถ/์ธ๋ถ/์ ์ ์๋ ์ค์น ์๋ฅผ ๋ณด๊ณ ํฉ๋๋ค. FOXGUARD_PR_WORKERS๋ ์ธก์ ๋ ์ค์บ๋ ์ต๋ ๋ฉ๋ชจ๋ฆฌ์ ์ปจํ
์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋ง๊ฒ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ์ธ์. ์์ ํ๋ก์ธ์ค์ OOM ์ข
๋ฃ๋ ํธ์คํ
๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์์ํ์ง ์๊ณ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋น ๋ฅธ ์์
foxguard . # ๋ชจ๋ ํญ๋ชฉ ์ค์บ
foxguard diff main . # main ๋๋น ์๋ก์ด ๋ฐ๊ฒฌ๋ง
foxguard tui . # ๋ํํ ํฐ๋ฏธ๋ ๊ฒํ
foxguard secrets . # ์ ์ถ๋ ์๊ฒฉ ์ฆ๋ช
๋ฐ ํค
foxguard sca . # OSV์ ์์กด์ฑ ์ทจ์ฝ์
foxguard pqc . # ํฌ์คํธ ์์ ์ํธํ ๊ฐ์ฌ
foxguard --format sarif . > results.sarif
foxguard --format semgrep-json . # Semgrep CLI ํธํ JSON
foxguard --fix src/ ๋๋ foxguard --fix src/app.py๋ฅผ ์ฌ์ฉํ์ฌ ์ง์๋๋ ํ
์ธํธ ์์ ์ ์ ์๋ฆฌ์์ ์ ์ฉํ์ธ์. ๋์์ ํ์ค ์ค์บ ๋๋ ํฐ๋ฆฌ ๋๋ ์ ํํ ํ์ผ๊ณผ ๋์กฐํ์ฌ ํ์ธ๋๋ฉฐ, ํด๋น ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋ฐ๊ฒฌ์ ๊ฑด๋๋๋๋ค. Python ๋ช
๋ น ์ฃผ์
์์ ์ ํ์ํ ๋ import subprocess๋ฅผ ์ถ๊ฐํ๋ฉฐ, ๋ชจ๋ docstring๊ณผ future import๋ฅผ ๋ณด์กดํฉ๋๋ค. ์ปค๋ฐํ๊ธฐ ์ ์ ์์ฑ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒํ ํ์ธ์.
๋ค์ดํฐ๋ธ ์ฝ๋ ์ค์บ๋์ ํ์ผ ์ฝ๊ธฐ, ๋ฉํ๋ฐ์ดํฐ, ๋๋ ํฐ๋ฆฌ ์ํ ์คํจ๋ ์ฑ๊ณต์ ์ธ ๋ณด๊ณ ์๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ฒ ์ด์ค๋ผ์ธ์ ๋ฎ์ด์ฐ๋ ๋์ ์ข
๋ฃ ์ฝ๋ 2๋ก ์ข
๋ฃ๋ฉ๋๋ค. ์๋์ ์ธ ์ ์ธ์ ์ง์๋์ง ์๊ฑฐ๋ ๋ฐ์ด๋๋ฆฌ์ด๊ฑฐ๋ ํฌ๊ธฐ๊ฐ ํฐ ํ์ผ์ ๊ฑด๋๋ฐ๊ธฐ๋ก ์ ์ง๋ฉ๋๋ค. ์ค์บ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ํ์ธํ ๋ ๊ฑด๋๋ด ํ์ผ ์๋ฆผ์ ๊ฒ์ฌํ์ธ์.
ํฐ๋ฏธ๋ ๊ฒํ
foxguard tui .๋ฅผ ์คํํ๊ณ ํ์ดํ ๋๋ Tab์ผ๋ก Scan, Diff, Secrets, PQC๋ฅผ ์ ํํ์ธ์. Diff ๋ชจ๋์์๋ Enter๋ฅผ ๋๋ฅด๊ธฐ ์ ์ ๋์ ๋ธ๋์น๋ฅผ ์
๋ ฅํ์ธ์. ๋์ ํฐ๋ฏธ๋์ ๋ฐ๊ฒฌ ํญ๋ชฉ์ ์ธ๋ถ ์ ๋ณด ์์ ํ์ํ๊ณ , ์์ ํฐ๋ฏธ๋์ ํ์ฅ ๊ฐ๋ฅํ ์ธ๋ถ ์ ๋ณด ๋ณด๊ธฐ๊ฐ ์๋ ๋ชฉ๋ก์ ์ฌ์ฉํฉ๋๋ค. ์์ค ์ปจํ
์คํธ, ๋ฐ์ดํฐ ํ๋ฆ, ์์ ์ฌํญ์ ๋ฐ๊ฒฌ ํญ๋ชฉ์ด ์ ๊ณตํ๋ ๊ฒฝ์ฐ ํญ์ ์คํฌ๋กคํ ์ ์์ต๋๋ค.
ํค๋๋ ์ค์บ ํต๊ณ์ ๋ฒ ์ด์ค๋ผ์ธ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค. ์ ํ๋ ์์ค ๋ฒ์๋ ์ถ๊ฐ ์ฃผ์ ํ ์์ด ์ธ๋ผ์ธ์ผ๋ก ๊ฐ์กฐ ํ์๋ฉ๋๋ค. ์ด๊ธฐ ์ปจํธ๋กค์ ์ฝํ ์ธ ๊ฐ ์คํฌ๋กค๋๋ ๋์ ๋ผ์ด๋ธ ์ธ๋ถ ์ ๋ณด ์ฐฝ ์๋์ ์ ์ง๋๋ฉฐ, ์ถ์ฝ๋ ํ์ผ ์์น๋ ์ค ๋ฐ ์ด ์ ๋ฏธ์ฌ๋ฅผ ์ ์งํฉ๋๋ค. ๊ฒ์ ๋ฐ ๋ํ ์์๋ ํ์ฑ ์ํ์ผ ๋ ์์ฒด ๋จ์ถํค๋ฅผ ์์ ํฉ๋๋ค.
์์ค ์ปจํ ์คํธ๋ฅผ ๋ก๋ํ ์ ์๋ ๊ฒฝ์ฐ ์ ์ฅ๋ ๋ฐ๊ฒฌ ์ค๋ํซ์ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ํฌ๋ฆฟ์ ์์ ์์ค๋ฅผ ์ธ๋ถ ์ ๋ณด ์ฐฝ์ ๋ก๋ํ๋ ๋์ ์์ ๋ ์ค๋ํซ์ ์ฌ์ฉํฉ๋๋ค.
๋ก๋ฉ ์นด๋๋ ๋ฐฑ๋ถ์จ ์ถ์ ์น๊ฐ ์๋ ๋ถํ์ ํ๋๊ณผ ์ค์ ๊ฒฝ๊ณผ ์๊ฐ์ ํ์ํฉ๋๋ค. ์ค์บ ์ค์๋ Ctrl+C๋ก ์ข ๋ฃํฉ๋๋ค.
| ํค | ๋์ |
|---|---|
j / k, ํ์ดํ, Home / End | ๋ฐ๊ฒฌ ํญ๋ชฉ ๊ฐ ์ด๋ |
v | ์ธ๋ถ ์ ๋ณด ํ์ฅ ๋๋ ๋ชฉ๋ก/๋ถํ ๋ณด๊ธฐ๋ก ๋์๊ฐ๊ธฐ |
| PageUp / PageDown | ๋ชฉ๋ก ํ์ด์ง ์ด๋ ๋๋ ๋ณด์ด๋ ์ธ๋ถ ์ ๋ณด ์คํฌ๋กค |
/, Enter | ๊ฒ์ ํธ์ง ๋ฐ ์ ์ฉ |
| Ctrl+U | ํธ์ง ์ค์ธ ๊ฒ์ ์ง์ฐ๊ธฐ |
| Esc | ๋ชจ๋ฌ ๋ซ๊ธฐ, ๊ฒ์ ํธ์ง ์ทจ์, ํ์ฅ๋ ์ธ๋ถ ์ ๋ณด ๋๊ฐ๊ธฐ ๋๋ ์ ์ฉ๋ ํํฐ ์ง์ฐ๊ธฐ |
0โ4, c, Shift+C | ์ต์ ์ฌ๊ฐ๋, ์ ๋ขฐ๋ ์๊ณ๊ฐ, ์ ๋ ฌ ์์ |
f | All โ Unreviewed โ Todo โ Reviewed โ Ignore ์ํ |
i | ๋ถ๋ฅ ์์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋ฐ ์ ์ฉ |
Space, a, x | ๋ฐ๊ฒฌ ํญ๋ชฉ ํ๋ ์ฒดํฌ, ๋ณด์ด๋ ์ ํ ํ ๊ธ, ์ผ๊ด ์์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ |
| Shift+F | ๋ช ๋ช ๋ ํํฐ ์ ์ฅ, ๋ก๋, ๊ต์ฒด ๋๋ ์ญ์ ; ๊ฒํ ์ ์ฅ์ ๋ณต๊ตฌ |
b | ๋น๊ต๊ฐ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ฒ ์ด์ค๋ผ์ธ ์นดํ ๊ณ ๋ฆฌ ์ํ |
Tab, Enter / o | ๋ฐ๊ฒฌ ํญ๋ชฉ/์์ค/์ฑํฌ ์ ํ ๋ฐ ํธ์ง๊ธฐ์์ ์ด๊ธฐ |
w, [ / ] | ์๋ฆผ ํ์ ๋ฐ ๊ธฐ๋ก ์คํฌ๋กค; ์ต์ ์๋ฆผ์ด ๋จผ์ ํ์๋จ |
e | CBOM, JSON ๋๋ SARIF ๋ด๋ณด๋ด๊ธฐ |
?, q / Ctrl+C | ๋์๋ง ๋ฐ ์ข ๋ฃ; Ctrl+C๋ ๋ชจ๋ ๋ชจ๋ฌ ๋ด์์๋ ์๋ |
Enter์ o๋ ๋น์ด ์์ง ์์ $VISUAL์ ์ฌ์ฉํ ๋ค์ $EDITOR๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ ์ค์ ์ด ๋ชจ๋ ์์ผ๋ฉด foxguard๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐ์คํฌํฑ ์คํ๋๋ฅผ ๊ณ ๋ คํ๊ธฐ ์ ์ PATH์์ nvim, vim, nano, vi๋ฅผ ์ฐพ์ต๋๋ค. ํค๋๋ฆฌ์ค ํฐ๋ฏธ๋์ xdg-open์ด ํ์ํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด VISUAL="nvim" foxguard tui .๋ฅผ ์คํํ๊ฑฐ๋ EDITOR='code --wait'๋ฅผ ์ค์ ํ์ธ์. ์๋ชป๋ ๋ช
์์ ํธ์ง๊ธฐ ์ค์ ์ ์กฐ์ฉํ ๋์ฒด๋์ง ์๊ณ ๋ณด๊ณ ๋ฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ํธ์ง๊ธฐ๊ฐ ์์ผ๋ฉด TUI๋ ์ค์ ์๋ด์ ํจ๊ป ์ด๋ฆฐ ์ํ๋ก ์ ์ง๋ฉ๋๋ค. ์ง์๋๋ ํธ์ง๊ธฐ๋ ์ ํํ ๋ฐ๊ฒฌ ํญ๋ชฉ/์์ค/์ฑํฌ ์ค๋ก ์ด๋ํฉ๋๋ค.