
CLI de análisis estático que escanea código generado por IA en busca de vulnerabilidades como inyección SQL, reflexión insegura y secretos hardcodeados, con exportación SARIF y control de acceso en CI/CD.
Una herramienta de análisis estático rápida y autónoma diseñada específicamente para detectar vulnerabilidades introducidas por asistentes de codificación con IA. CanoP analiza tu base de código localmente para identificar riesgos de seguridad en código generado por IA.
fixes.json. Estos contienen prompts específicos diseñados para ser reinyectados en Modelos de Lenguaje Grande (LLM) para una remediación inmediata y consciente del contexto.
CanoP analiza tu código localmente y produce hallazgos de seguridad procesables con guía de remediación lista para IA.
CanoP carga sus reglas incluidas desde canop/rules/*.yml y ejecuta su escáner de patrones integrado localmente. Si el CLI de Semgrep está instalado, CanoP también puede usar las mismas reglas para análisis basado en AST. Semgrep es opcional; la instalación estándar del paquete no descarga ni requiere el CLI de Semgrep.
CanoP se distribuye como un paquete estándar de Python a través de PyPI.
En Windows, o si ya estás dentro de un entorno virtual activo, puedes usar el instalador estándar pip:
pip install canop
Las distribuciones modernas de macOS y Linux a menudo impiden las instalaciones globales de pip para proteger los paquetes del sistema (PEP 668). El estándar de la comunidad para instalar herramientas CLI de Python en entornos aislados es pipx:
pipx install canop
(Nota: pipx install canop también funciona perfectamente en Windows).
Verifica la instalación para asegurarte de que el CLI está disponible en la ruta de tu sistema:
canop --version
Inicializa los archivos de configuración en tu repositorio. Este comando crea un archivo de política .canop.yml y un archivo .canopignore para excluir directorios ruidosos como node_modules o venv del escaneo:
canop init
Ejecuta un escaneo de seguridad exhaustivo contra tu directorio actual. El escáner evalúa tu código contra el motor de reglas interno y muestra una tabla detallada con una puntuación de seguridad final:
canop scan .
Escanea solo los archivos que han sido modificados en git. Esto reduce drásticamente el tiempo de escaneo y es ideal para hooks de pre-commit, garantizando que el nuevo código sea seguro antes de ser confirmado:
canop scan . --changed
Por defecto, CanoP mantiene tu terminal limpia limitando los hallazgos mostrados a 50. Si alguna vez necesitas profundizar más o ajustar esto:
# Sin límite, muéstrame cada hallazgo:
canop scan . --all
# Establece un límite personalizado (por ejemplo, si solo quieres ver los 10 primeros resultados):
canop scan . --limit 10
CanoP está diseñado para actuar como guardián de seguridad en pipelines de despliegue automatizados (como GitHub Actions o GitLab CI). Puedes configurar el escáner para que devuelva un código de salida distinto de cero —lo que hace fallar automáticamente el build— si no se cumplen criterios de seguridad específicos.
# Hacer fallar el pipeline de despliegue si se encuentran vulnerabilidades CRITICAL o HIGH
canop scan . --fail-on HIGH
# Hacer fallar el pipeline de despliegue si la puntuación de seguridad agregada cae por debajo de 85
canop scan . --min-score 85
Para equipos que requieren seguimiento histórico, auditoría o integración con sistemas externos, CanoP admite múltiples formatos de salida.
# Exportar los datos nativos del diccionario de Python a un archivo JSON estándar para análisis personalizado
canop scan . --json-out results.json
# Exportar a SARIF (Static Analysis Results Interchange Format).
# Subir este archivo a GitHub permite que GitHub muestre las vulnerabilidades en línea en las Pull Requests.
canop scan . --sarif results.sarif
CanoP extrae los metadatos de remediación de su motor de reglas para generar prompts que instruyen a los asistentes de codificación con IA sobre exactamente cómo corregir las vulnerabilidades detectadas.
# Generar un archivo fixes.json que contenga prompts procesables para tu LLM
canop scan . --prescriptions fixes.json
El comportamiento de CanoP se puede codificar usando un archivo .canop.yml colocado en la raíz de tu proyecto. Este archivo actúa como una política de seguridad centralizada, garantizando que todos los desarrolladores y pipelines de CI/CD cumplan con los mismos umbrales.
# .canop.yml
# Requerir una calificación de seguridad mínima para pasar el pipeline
min_grade: B
# Tratar estos niveles de severidad específicos como fallos del pipeline
fail_on:
- CRITICAL
- HIGH
# Ignorar rutas específicas para que no sean escaneadas
ignore:
- "tests/**"
- "docs/**"
# Permitir un cierto número de hallazgos antes de devolver un código de salida distinto de cero (0 = estrictamente ilimitado)
max_findings: 0
También puedes confiar en .canopignore para definir archivos o directorios específicos que el escáner debe omitir. Utiliza patrones glob estándar, funcionando de forma idéntica a .gitignore.
Si deseas contribuir al CLI o probar cambios localmente, clona el repositorio e instálalo en modo editable. El modo editable asigna el comando de terminal canop directamente a tu código fuente en vivo.
git clone https://github.com/openbreach/CanoP.git canop
cd canop
pip install -e .
Ejecuta la suite de pruebas localmente antes de enviar cambios:
python -m unittest discover -s tests -v
Para construir los artefactos de distribución, instala las herramientas de release y ejecuta:
pip install -r requirements-dev.txt
python -m build
Las reglas de seguridad se definen en el formato YAML estándar de Semgrep y se encuentran dentro de canop/rules/*.yml. Consulta CONTRIBUTING.md para obtener pautas completas sobre cómo estructurar, probar y enviar nuevas reglas para ampliar las capacidades de detección del escáner.
Si encuentras algún error, tienes solicitudes de funciones o necesitas ayuda general, abre un issue en GitHub o contáctanos directamente en [email protected].
Este proyecto está licenciado bajo la Licencia MIT - consulta el archivo LICENSE para más detalles.