Automatización de detección de distribuciones Linux por paquetes con API de KUMA
Un analista de SOC se enfrentó al reto de inventariar sistemas operativos en una gran empresa. En lugar de revisar manualmente 18.000 dispositivos, creó un script en Python que extrae datos de software instalado mediante la API de la plataforma KUMA y analiza paquetes para identificar con precisión las distribuciones Linux. La solución usa un sistema de puntuación ponderada que considera paquetes únicos del sistema, gestores de paquetes y sufijos de versión.
Trabajo con la API de KUMA y procesamiento de JSON
KUMA (Kaspersky Unified Monitoring and Analysis Platform) ofrece datos de activos a través de su API, aunque con limitaciones, como la ausencia de filtros directos de activos en la interfaz web. La autenticación se realiza con un token, evitando credenciales hardcodeadas. Aquí va un ejemplo de código para hacer una petición:
token = "my_token"
url = "my_api_url"
api_header={
"Content-Type": "application/json",
"Authorization": f"Bearer {token}"
}
req = request.get(url, headers=api_header)
data = req.json()
La estructura de la respuesta JSON incluye campos para el SO y el software instalado. Para extraer datos anidados como listas de paquetes, se usa una función recursiva:
def recursive_extract(data, result=None):
result = []
if isinstance(data, dict):
for key, value in data.items():
if key == "software":
result.append(value)
recursive_extract(value, result)
return result
Versionado de paquetes en Linux
Entender las versiones de paquetes es clave para el análisis. El versionado semántico estándar sigue MAJOR.MINOR.PATCH, como 2.36.105. Las distros añaden sus sufijos propios:
- Ubuntu: .ubuntu o +ubuntu
- Debian: .deb o +deb
- ALT Linux: .alt o +alt
- Astra Linux: .astra o astra
Un ejemplo complejo: 2.2.6-2+deb10u9+ci1+astra1, donde deb10 indica Debian 10, u9 es la novena actualización y astra señala la adaptación de Astra Linux.
Algoritmo de detección de distribuciones Linux
El algoritmo examina los paquetes instalados para identificar el tipo de SO, la distro específica, la versión y el nivel de confianza. Emplea un sistema de puntuación ponderada:
- 150 puntos: paquetes únicos del sistema (p. ej., ubuntu-release)
- 20 puntos: gestores de paquetes (apt, yum, rpm)
- 15 puntos: sufijos de versión (.ubuntu, .alt)
- 10 puntos: paquetes específicos de la distro
- 5 puntos: indicadores indirectos
Soporta distros como Ubuntu, Debian, ALT Linux, Astra Linux, Fedora y más. La lógica fluye así:
- Escanear paquetes y sumar puntuaciones por distro.
- Totalizar puntuaciones y seleccionar la más alta.
- Desempatar priorizando paquetes del sistema.
- Extraer versión de paquetes del sistema o sufijos.
Niveles de confianza: Alto (≥150 puntos), Medio (20–49 puntos) o Bajo (<20 puntos).
Características clave de la implementación
- Salida flexible: Soporta CSV o JSON, con filtrado opcional por nivel de confianza.
- Manejo de datos incompletos: Funciona aunque falte info del SO (os: null) o el array de software esté vacío.
- Jerarquía de prioridad: Paquetes únicos del sistema tienen mayor peso para mayor precisión.
- Diseño escalable: Fácil de extender añadiendo nuevas distros e indicadores.
Lecciones clave
- Automatizar el inventario de SO vía API de KUMA ahorra horas en miles de dispositivos.
- La puntuación ponderada identifica distros Linux con precisión a partir de datos de paquetes.
- Cubre distros principales, incluidas rusas como ALT Linux y Astra Linux.
- Flexibilidad de salida CSV/JSON se integra sin problemas con otras herramientas.
- Robusta ante datos incompletos, ideal para escenarios reales.
— Editorial Team
Aún no hay comentarios.