
AI가 생성한 코드에서 SQL 인젝션, 안전하지 않은 리플렉션, 하드코딩된 시크릿과 같은 취약점을 스캔하는 정적 분석 CLI로, SARIF 내보내기와 CI/CD 게이팅을 지원합니다.
AI 코딩 어시스턴트로 인해 발생하는 취약점을 탐지하기 위해 특별히 설계된 빠르고 독립적인 정적 분석 도구입니다. CanoP는 코드베이스를 로컬에서 분석하여 AI가 생성한 코드의 보안 위험을 식별합니다.
fixes.json 페이로드를 자동으로 생성합니다. 여기에는 즉각적이고 상황에 맞는 교정을 위해 대규모 언어 모델(LLM)에 다시 입력하도록 설계된 특정 프롬프트가 포함되어 있습니다.
CanoP는 코드를 로컬에서 분석하고 AI 기반 교정 지침과 함께 실행 가능한 보안 결과를 생성합니다.
CanoP는 canop/rules/*.yml에서 번들된 규칙을 로드하고 내장된 패턴 스캐너를 로컬에서 실행합니다. Semgrep CLI가 설치되어 있으면 CanoP는 동일한 규칙을 AST 기반 분석에도 사용할 수 있습니다. Semgrep은 선택 사항이며, 표준 패키지 설치 시 Semgrep CLI를 다운로드하거나 요구하지 않습니다.
CanoP는 PyPI를 통해 표준 Python 패키지로 배포됩니다.
Windows에서 또는 이미 활성화된 가상 환경 내에 있는 경우 표준 pip 설치 프로그램을 사용할 수 있습니다:
pip install canop
최신 macOS 및 Linux 배포판은 시스템 패키지를 보호하기 위해 전역 pip 설치를 차단하는 경우가 많습니다(PEP 668). 격리된 환경에서 Python CLI 도구를 설치하는 커뮤니티 표준은 pipx입니다:
pipx install canop
(참고: pipx install canop은 Windows에서도 완벽하게 작동합니다!)
CLI가 시스템 경로에서 사용 가능한지 확인하려면 설치를 검증하세요:
canop --version
저장소에서 구성 파일을 초기화합니다. 이 명령은 .canop.yml 정책 파일과 node_modules 또는 venv와 같이 잡음이 많은 디렉터리를 스캔에서 제외하는 .canopignore 파일을 생성합니다:
canop init
현재 디렉터리에 대해 포괄적인 보안 스캔을 실행합니다. 스캐너는 내부 규칙 엔진에 대해 코드를 평가하고 최종 보안 점수와 함께 상세한 테이블을 출력합니다:
canop scan .
git에서 수정된 파일만 스캔합니다. 이는 스캔 시간을 크게 줄여주며 pre-commit 훅에 이상적이어서, 커밋되기 전에 새 코드가 안전한지 보장합니다:
canop scan . --changed
기본적으로 CanoP는 표시되는 결과를 50개로 제한하여 터미널을 깨끗하게 유지합니다. 더 깊이 파고들거나 이 값을 조정해야 하는 경우:
# 제한 없음, 모든 결과를 보여주세요:
canop scan . --all
# 사용자 지정 제한 설정 (예: 상위 10개 결과만 보고 싶은 경우):
canop scan . --limit 10
CanoP는 자동화된 배포 파이프라인(예: GitHub Actions 또는 GitLab CI)에서 보안 게이트키퍼 역할을 하도록 만들어졌습니다. 특정 보안 기준이 충족되지 않으면 빌드를 자동으로 실패시키는 0이 아닌 종료 코드를 반환하도록 스캐너를 구성할 수 있습니다.
# CRITICAL 또는 HIGH 취약점이 발견되면 배포 파이프라인 실패
canop scan . --fail-on HIGH
# 종합 보안 점수가 85 미만이면 배포 파이프라인 실패
canop scan . --min-score 85
이력 추적, 감사 또는 외부 시스템과의 통합이 필요한 팀을 위해 CanoP는 여러 출력 형식을 지원합니다.
# 사용자 지정 파싱을 위해 원시 네이티브 Python 딕셔너리 데이터를 표준 JSON 파일로 내보내기
canop scan . --json-out results.json
# SARIF(Static Analysis Results Interchange Format)로 내보내기.
# 이 파일을 GitHub에 업로드하면 GitHub가 Pull Request에서 취약점을 인라인으로 표시할 수 있습니다.
canop scan . --sarif results.sarif
CanoP는 규칙 엔진에서 교정 메타데이터를 추출하여 AI 코딩 어시스턴트에게 탐지된 취약점을 정확히 어떻게 수정해야 하는지 지시하는 프롬프트를 생성합니다.
# LLM을 위한 실행 가능한 프롬프트가 포함된 fixes.json 파일 생성
canop scan . --prescriptions fixes.json
CanoP 동작은 프로젝트 루트에 배치된 .canop.yml 파일을 사용하여 코드화할 수 있습니다. 이 파일은 중앙 집중식 보안 정책 역할을 하여 모든 개발자와 CI/CD 파이프라인이 동일한 임계값을 준수하도록 보장합니다.
# .canop.yml
# 파이프라인을 통과하기 위한 최소 보안 등급 요구
min_grade: B
# 다음 특정 심각도 수준을 파이프라인 실패로 처리
fail_on:
- CRITICAL
- HIGH
# 스캔에서 특정 경로 무시
ignore:
- "tests/**"
- "docs/**"
# 0이 아닌 종료 코드를 반환하기 전에 특정 수의 결과 허용 (0 = 엄격히 무제한)
max_findings: 0
또한 .canopignore를 사용하여 스캐너가 건너뛰어야 할 특정 파일이나 디렉터리를 정의할 수 있습니다. 표준 glob 패턴을 사용하며 .gitignore와 동일하게 작동합니다.
CLI에 기여하거나 변경 사항을 로컬에서 테스트하려면 저장소를 복제하고 편집 가능 모드로 설치하세요. 편집 가능 모드는 canop 터미널 명령을 라이브 소스 코드에 직접 매핑합니다.
git clone https://github.com/openbreach/CanoP.git canop
cd canop
pip install -e .
변경 사항을 제출하기 전에 로컬에서 테스트 스위트를 실행하세요:
python -m unittest discover -s tests -v
배포 아티팩트를 빌드하려면 릴리스 도구를 설치하고 실행하세요:
pip install -r requirements-dev.txt
python -m build
보안 규칙은 표준 Semgrep YAML 형식으로 정의되며 canop/rules/*.yml 내에 위치합니다. 스캐너의 탐지 기능을 확장하기 위해 새 규칙을 구조화, 테스트 및 제출하는 방법에 대한 포괄적인 지침은 CONTRIBUTING.md를 참조하세요.
버그를 발견하거나 기능 요청이 있거나 일반적인 도움이 필요한 경우 GitHub에 이슈를 열거나 [email protected]으로 직접 문의하세요.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다 - 자세한 내용은 LICENSE 파일을 참조하세요.