Ir al contenido
  1. Blog/

JADI Scanner

··1809 palabras·9 mins·
Autor
Marco Escobar
Data protection, Kubernetes, ciberseguridad e IA. Guías prácticas desde la trinchera: Veeam, Kasten, VMware, Oracle, cloud y lo que sea que esté rompiendo en el homelab esta semana.
Tabla de contenido
JADI Scanner — captura 1

En algo que vengo trabajando desde hace varios meses y que finalmente está tomando forma es Jadi, un escáner de vulnerabilidades diseñado específicamente para analizar backups montados y sistemas de archivos. El nombre no es casualidad, JADI son las iniciales de mis hijos, así que este proyecto tiene un significado especial para mí más allá de lo técnico. En este post les voy a contar de qué se trata, por qué lo construí, cómo funciona por dentro y cuáles son los planes a futuro.

¿Por qué Jadi?
#

Quienes me conocen saben que llevo varios años trabajando con tecnologías de Cloud, Kubernetes, IA, protección de datos, respaldos y seguridad. Y en ese camino, una pregunta que siempre aparece en escenarios de respuesta ante incidentes y análisis forense es: ¿qué software vulnerable tenía ese sistema cuando fue comprometido / Vulnerado?

Existen herramientas excelentes para escaneo de vulnerabilidades como Trivy y Grype y las recomiendo totalmente para ambientes Linux, containers e imágenes. Hacen un trabajo hermoso, pero cuando el escenario involucra sistemas operativos Windows, registry hives, KBs instalados, cadenas de supersedencia de parches de Microsoft, la historia cambia bastante. La cobertura de Windows en estas herramientas es limitada o inexistente y eso es un problema real cuando la mayoría de los entornos empresariales siguen corriendo Windows en sus servidores y estaciones de trabajo.

Además, las herramientas existentes están pensadas para escanear sistemas en ejecución, agentes instalados, containers corriendo, repositorios activos. Pero cuando tienes un backup montado en modo solo lectura, un snapshot de un servidor que ya no existe, o una imagen forense de un disco, la mayoría de las soluciones simplemente no aplican.

Esa combinación de necesidades, escaneo offline de backups + cobertura real de Windows. es lo que me motivó a empezar a trabajar en esta idea hace meses. Ahí es donde entra Jadi. La idea es simple pero poderosa: montar un backup, escanearlo, y obtener un reporte completo de vulnerabilidades conocidas sin necesidad de instalar nada en el sistema original.

¿Qué hace Jadi?
#

El proyecto se encuentra en github.com/mescobarcl/jadi y actualmente está en la versión 0.1.0 con release publicado para Linux x86_64. Es un binario escrito en Rust que corre en tu máquina local o servidor linux y analiza cualquier filesystem montado, de preferencia Microsoft Windows.

12 Scanners de Ecosistemas
#

Jadi detecta software analizando archivos de configuración y manifiestos de múltiples ecosistemas: npm, PyPI, Maven, Gradle, Go, NuGet, Composer (PHP), RubyGems, Cargo (Rust), .NET y archivos JAR. Además hace binary pattern matching para detectar versiones de OpenSSL, Apache, nginx, PHP, MySQL, PostgreSQL, Redis y Node.js directamente desde binarios.

Análisis de Windows Offline
#

Parsea registry hives (SOFTWARE, NTUSER.DAT) sin necesidad de que Windows esté corriendo. Detecta software instalado, KBs/hotfixes, versiones de Windows y .NET Framework. Además resuelve cadenas de supersedencia de parches de Microsoft, algo que muy pocas herramientas hacen correctamente.

5 Fuentes de Vulnerabilidades
#

Correlaciona el software detectado contra NVD, OSV, MSRC, GitHub Security Advisories (GHSA) y CISA KEV. La base de datos de vulnerabilidades se actualiza diariamente de forma automática en el CDN, y al ejecutar jadi update-db se descarga la versión más reciente verificando integridad con SHA256.

Importante: Dado que la base de datos se actualiza todos los días con nuevas vulnerabilidades, es recomendable siempre ejecutar jadi update-db antes de cada escaneo para asegurarte de estar trabajando con la información más reciente. Nuevos CVEs se publican constantemente y un día de diferencia puede significar no detectar una vulnerabilidad crítica.

Inteligencia KEV y Ransomware
#

No solo te dice qué vulnerabilidades tienes, sino cuáles están siendo activamente explotadas según el catálogo de CISA, y cuáles están asociadas a campañas de ransomware conocidas. Esto es clave para priorización en escenarios de respuesta ante incidentes.

SBOM Generation
#

Genera inventarios de software en formatos SPDX 2.3 y CycloneDX 1.5, que es exactamente lo que se necesita para compliance.

7 Formatos de Salida
#

Table (con colores para la terminal), JSON, SARIF (para CI/CD), CSV, Markdown, SPDX y CycloneDX. Además incluye exit codes basados en severidad (0 = limpio, 2 = críticas encontradas), lo que lo hace perfecto para integración en pipelines.

Ejemplo Rápido
#

# Instalar (Linux x86_64)
curl -LO https://github.com/mescobarcl/jadi/releases/latest/download/jadi-linux-x86_64
chmod +x jadi-linux-x86_64 && sudo mv jadi-linux-x86_64 /usr/local/bin/jadi

# Descargar la base de datos de vulnerabilidades
jadi update-db

# Escanear un backup montado
jadi scan /mnt/backup

# Solo vulnerabilidades críticas en KEV asociadas a ransomware
jadi scan /mnt/backup --min-severity critical --kev-only --ransomware-only

# Generar SBOM en formato SPDX
jadi scan /mnt/backup -o spdx -f sbom.spdx.json

La salida en terminal se ve algo así:

JADI Scanner

Arquitectura
#

La arquitectura de Jadi está diseñada en capas bien definidas:

Capa de Scanners: 12 scanners especializados que recorren el filesystem buscando archivos de configuración, manifiestos, lockfiles, registry hives y binarios. Cada scanner genera una lista de software detectado en formato PURL o CPE.

Capa de Matchers: 4 matchers que correlacionan el software detectado con las bases de datos de vulnerabilidades. El PURL Matcher consulta OSV y GHSA, el CPE Matcher consulta NVD, el KB Matcher consulta MSRC (con resolución de supersedencia de KBs), y el KEV Matcher enriquece los resultados con datos de explotación activa de CISA.

Base de Datos: Una base de datos local unificada de ~500MB que contiene todas las vulnerabilidades de las 5 fuentes. Se actualiza diariamente desde el CDN con un simple jadi update-db. La verificación de integridad es automática, checksum SHA256, actualizaciones incrementales, conexiones HTTPS y protección contra respuestas maliciosas.

Capa de Output: Genera reportes en cualquiera de los 7 formatos soportados, con filtros por severidad, KEV, ransomware y reglas de eliminación u omisión configurables con fecha de expiración.

Decisiones Técnicas
#

Algunas decisiones de diseño que vale la pena mencionar:

¿Por qué Rust? Performance y seguridad de memoria. Cuando estás escaneando un filesystem con miles de archivos, parseando lockfiles JSON/YAML/TOML, y haciendo matching paralelo contra cientos de miles de CVEs, necesitas que la herramienta sea rápida. Rust nos da eso sin sacrificar seguridad. Actualmente el codebase tiene alrededor de 80 archivos .rs y más de 525 tests.

¿Por qué SQLite local en lugar de APIs directas? Originalmente el scanner consultaba las APIs de vulnerabilidades directamente, pero esto tenía problemas serios: dependencia de red, rate limits, latencia, y la imposibilidad de usar la herramienta en ambientes air-gapped. Migrar a una base de datos pre-construida y distribuida vía CDN resolvió todo esto de golpe. Ahora puedes descargar la DB una vez, desconectarte de internet, y escanear todo lo que necesites con --offline.

¿Por qué Cloudflare R2 como CDN? Egress gratuito. Cuando distribuyes un archivo de ~500MB a potencialmente muchos usuarios, el costo de egress en S3 o GCS escala rápido. Con R2 el costo de infraestructura es prácticamente cero.

Configuración flexible: Jadi soporta configuración vía TOML para reglas de eliminación u omisión de vulnerabilidades, útil cuando ya conoces ciertos hallazgos y quieres excluirlos del reporte. Las supresiones incluyen fecha de expiración para que no se olviden en el tiempo.

Casos de Uso
#

¿Dónde encaja Jadi en tu flujo de trabajo?

Análisis Forense / Respuesta ante Incidentes: Tienes un backup de un servidor comprometido. Lo montas en modo solo lectura y ejecutas Jadi para identificar qué vulnerabilidades existían al momento del backup. ¿Había Log4Shell? ¿Había un Exchange sin parchar? Respuesta inmediata.

Auditoría de Compliance: Necesitas generar un SBOM de un sistema legacy para cumplir con regulaciones. Montas el backup, generas el inventario en SPDX o CycloneDX, y tienes tu evidencia de compliance.

Evaluación de Riesgo Pre-Restauración: Antes de restaurar un backup en producción, escanéalo. Si tiene vulnerabilidades críticas con exploits activos (KEV), mejor saberlo antes de ponerlo en producción nuevamente o conectado a internet.

Verificación de Backups: Como parte de tu proceso de verificación de backups (que todos deberían tener), agrega un escaneo de vulnerabilidades. No solo verificas que el backup sea válido, sino que el sistema respaldado no era un riesgo.

Opciones de Performance
#

Para backups grandes, Jadi ofrece varias opciones de optimización:

# Aumentar threads de escaneo
jadi scan /mnt/backup --threads 16

# Matching paralelo con pool de conexiones
jadi scan /mnt/backup --pool-size 8 --parallel-match

# Skip carpetas ruidosas de Windows (WinSxS)
jadi scan /mnt/windows-backup --skip-windows-noise

# Excluir carpetas específicas
jadi scan /mnt/backup \
    --exclude-path "node_modules" \
    --exclude-path ".git" \
    --exclude-path "vendor"

# Limitar profundidad de búsqueda
jadi scan /mnt/backup --max-depth 10

Qué Viene
#

El proyecto está en v0.1.0 y hay mucho camino por delante. Algunas de las áreas en las que estoy trabajando:

  • Mejorar las pruebas del código con inyección de dependencias y traits de repositorio
  • Optimización de performance con regex caching y reducción de cloning innecesario
  • Expandir la cobertura de testing, especialmente en los módulos de sincronización
  • Refactoring de algunos módulos
  • Documentación más completa

Integración con vScan
#

Pero lo que más me entusiasma de lo que viene es la integración con vScan. Para quienes no lo conocen, vScan es una herramienta que permite escanear vulnerabilidades directamente desde los backups de Veeam. Hoy en día vScan ya tiene soporte para Trivy y Grype como motores de escaneo, que como mencioné antes son excelentes para ambientes Linux y containers. Próximamente en vScan 2.0.0 se agregará soporte para Jadi, lo que va a permitir cubrir el gap que hoy existe con Windows escanear backups de servidores y estaciones de trabajo Windows con la misma facilidad con la que hoy se escanean containers y Linux.

La integración ya está preparada del lado de Jadi, la salida JSON genera un formato compatible que vScan detecta automáticamente, permitiendo que los resultados se integren de forma nativa en el flujo de trabajo de protección de datos con Veeam. Esto significa que vas a poder escanear tus backups de Veeam en busca de vulnerabilidades como parte de tu proceso de verificación y restauración, ahora también en Windows.

Cuando lance vScan 2.0.0 actualizaré este post con todos los detalles de la integración, incluyendo ejemplos de uso, arquitectura de la solución completa, y casos de uso específicos para ambientes Veeam. Así que estén atentos. O generare otro post con todos los detalles de vScan.

Conclusión
#

Jadi nació de una necesidad real que vi en nuestra industria: la falta de herramientas especializadas para evaluar la postura de seguridad de backups y sistemas offline. Es gratuito, está escrito en Rust para máxima performance, soporta una cantidad considerable de ecosistemas y fuentes de vulnerabilidades y está diseñado para integrarse en flujos de trabajo existentes.

Si trabajas con backups, análisis forense, respuesta ante incidentes, o simplemente quieres saber qué vulnerabilidades tiene ese servidor que respaldaste la semana pasada, dale una oportunidad a Jadi.

El repositorio está disponible en github.com/mescobarcl/jadi. Como siempre, cualquier feedback, reporte de bugs o feature request es bienvenido a través de los issues.

¡Y como sabes, estoy disponible 24xSiempre!

Posts relacionados
#

Relacionados