Skip to main content

Herramienta autocontenida de análisis estático de seguridad para múltiples lenguajes

Project description

SemBicho CLI

🔒 Static Application Security Testing + Code Quality Analysis Tool

Herramienta completa de línea de comandos para análisis estático de seguridad y calidad de código.

✨ Características

  • 🔐 Security Scanning: SAST para 12+ lenguajes
  • 📝 Code Linting: Análisis de estilo y formato (Python, JavaScript/TypeScript)
  • Complexity Analysis: Métricas de complejidad ciclomática y cognitiva
  • 📊 Quality Reports: Reportes unificados con scoring y grading
  • 🔄 CI/CD Integration: GitHub Actions, GitLab CI, Jenkins
  • 📈 Multi-format Output: JSON, HTML, Console, Summary

�🚀 Instalación

Desde PyPI (Recomendado)

# Instalación básica (solo seguridad)
pip install sembicho-cli

# Con herramientas de calidad (recomendado)
pip install sembicho-cli[quality]

# Instalación completa
pip install sembicho-cli[all]

Desde el código fuente

cd sembicho-cli
pip install -e .[all]

Con Docker

docker build -t sembicho-cli .
docker run --rm -v $(pwd):/workspace sembicho-cli scan --path /workspace

🔧 Herramientas Adicionales

Para aprovechar todas las características de análisis de calidad:

# Python
pip install radon flake8 black pylint

# JavaScript/TypeScript
npm install -g eslint prettier escomplex

📖 Uso

🔐 Security Scanning

# Escaneo básico de seguridad
sembicho scan --path .

# Escaneo con reporte JSON
sembicho scan --path ./mi-proyecto --output security.json --format json

# Escaneo con reporte HTML
sembicho scan --path ./mi-proyecto --output security.html --format html

# Modo CI/CD
sembicho scan --path . --ci-mode --fail-on critical,high

📝 Code Linting

# Linting de código Python
sembicho lint --path ./backend --language python

# Linting de código JavaScript
sembicho lint --path ./frontend/src --language javascript

# Con reporte JSON
sembicho lint --path ./src --output linting-report.json --format json

🔢 Complexity Analysis

# Análisis de complejidad
sembicho complexity --path ./src --language python

# Con umbral personalizado
sembicho complexity --path ./src --threshold 15

# Guardar reporte
sembicho complexity --path ./src --output complexity.json --format json

📊 Complete Quality Analysis

# Análisis completo de calidad (linting + complexity + more)
sembicho quality --path .

# Con grado mínimo para CI/CD
sembicho quality --path . --fail-on-grade B+

# Reporte completo JSON
sembicho quality --path . --output quality-report.json --format json

Integración con Backend

# Enviar resultados al backend
sembicho scan --path . --api-url http://localhost:8000/api/results --token abc123

# Con configuración
sembicho config --init
# Editar .sembicho.json con tu configuración
sembicho scan --path .

Filtros y opciones avanzadas

# Filtrar por severidad
sembicho scan --path . --severity high

# Modo verbose
sembicho scan --path . --verbose

# Herramientas específicas
sembicho scan --path . --tools bandit,semgrep

# Fallar en CI con vulnerabilidades críticas
sembicho scan --path . --ci-mode --fail-on critical

🛠️ Herramientas Integradas

  • Bandit: Análisis de seguridad para Python
  • ESLint: Análisis de JavaScript/TypeScript
  • Semgrep: Análisis multi-lenguaje con reglas OWASP

📊 Formatos de Salida

JSON

sembicho scan --path . --format json --output results.json

Estructura del JSON:

{
  "project_name": "mi-proyecto",
  "scan_date": "2024-01-15T10:30:00Z",
  "language": "python",
  "total_vulnerabilities": 5,
  "severity_counts": {
    "critical": 1,
    "high": 2,
    "medium": 2,
    "low": 0
  },
  "tools_used": ["bandit", "semgrep"],
  "vulnerabilities": [
    {
      "file": "app/auth.py",
      "line": 25,
      "rule_id": "B101",
      "severity": "high",
      "message": "Hardcoded password detected",
      "cwe": "CWE-798",
      "tool": "bandit"
    }
  ]
}

HTML

sembicho scan --path . --format html --output report.html

Genera un reporte HTML completo con:

  • Resumen ejecutivo con métricas
  • Lista detallada de vulnerabilidades
  • Filtros por severidad
  • Información de herramientas utilizadas

Console

sembicho scan --path .

Salida de consola con colores y formato legible.

⚙️ Configuración

Crear configuración inicial

sembicho config --init

Esto crea un archivo .sembicho.json:

{
  "api_url": "http://localhost:8000/api/results",
  "token": "",
  "default_format": "console",
  "fail_on": ["critical", "high"],
  "tools": ["bandit", "eslint", "semgrep"],
  "exclude_patterns": [
    "*.min.js",
    "node_modules/*",
    ".git/*",
    "__pycache__/*"
  ]
}

Ver configuración actual

sembicho config --show

🔧 Integración CI/CD

GitHub Actions

- name: Security Scan
  run: |
    pip install -r sembicho-cli/requirements.txt
    python sembicho-cli/main.py scan --path . --ci-mode --fail-on critical,high

GitLab CI

security_scan:
  script:
    - cd sembicho-cli
    - pip install -r requirements.txt
    - python main.py scan --path .. --ci-mode --fail-on critical,high

Jenkins

stage('Security Scan') {
    steps {
        sh '''
            cd sembicho-cli
            pip install -r requirements.txt
            python main.py scan --path .. --ci-mode --fail-on critical,high
        '''
    }
}

🐳 Docker

Dockerfile incluido

El proyecto incluye un Dockerfile optimizado para análisis de seguridad.

# Construir imagen
docker build -t sembicho-cli .

# Ejecutar escaneo
docker run --rm -v $(pwd):/workspace sembicho-cli scan --path /workspace

# Con configuración personalizada
docker run --rm -v $(pwd):/workspace -v $(pwd)/.sembicho.json:/app/.sembicho.json sembicho-cli scan --path /workspace

📝 Códigos de Salida

  • 0: Escaneo exitoso sin errores críticos
  • 1: Error en argumentos o ejecución
  • 1: Vulnerabilidades encontradas (cuando se usa --fail-on)

🔍 Lenguajes Soportados

  • Python (.py) - Bandit, Semgrep
  • JavaScript/TypeScript (.js, .ts, .jsx, .tsx) - ESLint, Semgrep
  • Java (.java) - Semgrep
  • PHP (.php) - Semgrep
  • Go (.go) - Semgrep
  • C/C++ (.c, .cpp) - Semgrep
  • Ruby (.rb) - Semgrep
  • C# (.cs) - Semgrep

🤝 Contribución

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/nueva-funcionalidad)
  3. Commit tus cambios (git commit -am 'Agregar nueva funcionalidad')
  4. Push a la rama (git push origin feature/nueva-funcionalidad)
  5. Abre un Pull Request

📄 Licencia

MIT License - ver LICENSE para detalles.

🆘 Soporte

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sembicho_cli-2.2.2.tar.gz (81.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sembicho_cli-2.2.2-py3-none-any.whl (71.8 kB view details)

Uploaded Python 3

File details

Details for the file sembicho_cli-2.2.2.tar.gz.

File metadata

  • Download URL: sembicho_cli-2.2.2.tar.gz
  • Upload date:
  • Size: 81.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for sembicho_cli-2.2.2.tar.gz
Algorithm Hash digest
SHA256 6736f00e92968fc1bb1f898168c000d3cf7ba05854b378875637a2f301218957
MD5 5b87b76b3848f527f721dabfa4fa7c75
BLAKE2b-256 de0c889d32406f05e7fd436d87d1f6f08f7c32b6f19ef16d0585daddcaf23351

See more details on using hashes here.

File details

Details for the file sembicho_cli-2.2.2-py3-none-any.whl.

File metadata

  • Download URL: sembicho_cli-2.2.2-py3-none-any.whl
  • Upload date:
  • Size: 71.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for sembicho_cli-2.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 68912118da42d55ddb8235d077a62ac74a4610d608b2f09b408404d07ddb060e
MD5 20d9c3bfc1db3c6a8112c29601022a45
BLAKE2b-256 77b39df8d95ce4b8bd654400d8382b0f3bc0d510a266d0f9c7f3bccb2f58555e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page