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.1.5.tar.gz (75.0 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.1.5-py3-none-any.whl (65.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sembicho_cli-2.1.5.tar.gz
  • Upload date:
  • Size: 75.0 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.1.5.tar.gz
Algorithm Hash digest
SHA256 eaef272bcf0142a8ca984edd87c57a85976fe933631889cac9dd71fe2990c905
MD5 35c457e7e10620119cbf6e9f3b3a14c3
BLAKE2b-256 f204de9f1ac82fe1316981381f02d2a6596fcaf79b345ca3eff60f7a7d507806

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sembicho_cli-2.1.5-py3-none-any.whl
  • Upload date:
  • Size: 65.0 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.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 d5344e774bf875a1fda54c631800987b4a8addc4f54323df8bec29999fcc5e1c
MD5 aa6274ec52b5d95c5a0554612ab0c651
BLAKE2b-256 088fc204b2cfb9b77a08f81137e98135c3cff46c6550fbfdc805269565592a50

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