빠른 범용 코드 보안 스캐너로, Rust로 작성되었습니다. 모든 기능이 포함되어 있습니다: 14개 언어 지원, 분류를 위한 TUI, 비밀 정보, 양자 이후 감사, 차이 인식 스캔 등 𓃥
코드, 시크릿, 의존성, 암호화 위험을 위한 빠른 로컬 보안 스캐닝.
오픈 사이버보안 하네스인 0sec에 통합되어 있습니다.
npx foxguard .
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 서버.
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는 설정 안내와 함께 열린 상태로 유지됩니다. 지원되는 편집기는 선택한 발견 항목/소스/싱크 줄로 이동합니다.